┌─ SCSS ─────────────────────────────────────────────────────────────────────┐
│ @use "./core/tokens" as *; │
│ @use "./core/mixins" as mixins; │
│ │
│ /* │
│ * Shared component styles for WoW Sim Stats │
│ * Better organized SCSS with variables and mixins │
│ */ │
│ │
│ .card-container { │
│ @include mixins.card(); │
│ } │
│ │
│ .card-compact { │
│ @include mixins.card($spacing-lg, $radius-md); │
│ } │
│ │
│ .chart-bars { │
│ display: flex; │
│ flex-direction: column; │
│ gap: 8px; │
│ } │
│ │
│ .chart-item { │
│ display: grid; │
│ grid-template-columns: 40px 1fr; │
│ align-items: center; │
│ gap: 15px; │
│ padding: $spacing-sm 0; │
│ } │
│ │
│ .chart-item-comparison { │
│ grid-template-columns: auto 1fr; │
│ │
│ .chart-labels { │
│ width: auto; │
│ min-width: 120px; │
│ justify-content: flex-start; │
│ gap: 8px; │
│ } │
│ } │
│ │
│ .chart-labels { │
│ display: flex; │
│ align-items: center; │
│ justify-content: center; │
│ width: 40px; │
│ height: 40px; │
│ } │
│ │
│ .chart-rank { │
│ font-size: $font-size-sm; │
│ color: var(--text-muted); │
│ font-weight: $font-weight-semibold; │
│ min-width: 30px; │
│ } │
│ │
│ .chart-label { │
│ font-weight: $font-weight-semibold; │
│ color: var(--text-primary); │
│ white-space: nowrap; │
│ overflow: hidden; │
│ text-overflow: ellipsis; │
│ } │
│ │
│ .chart-bar-container { │
│ display: flex; │
│ align-items: center; │
│ flex: 1; │
│ gap: 10px; │
│ min-width: 0; │
│ } │
│ │
│ .chart-bar-track { │
│ flex: 1; │
│ height: 20px; │
│ background-color: rgba(255, 255, 255, 0.1); │
│ border-radius: 3px; │
│ position: relative; │
│ min-width: 0; │
│ } │
│ │
│ .chart-bar { │
│ height: 100%; │
│ border-radius: 3px; │
│ min-width: 2px; │
│ transition: width 0.3s ease; │
│ } │
│ │
│ .chart-value { │
│ font-weight: $font-weight-semibold; │
│ color: var(--text-primary); │
│ font-size: $font-size-base; │
│ width: 90px; │
│ text-align: right; │
│ flex-shrink: 0; │
│ } │
│ │
│ .chart-item-header { │
│ cursor: pointer; │
│ padding: 8px 12px; │
│ border-radius: 6px; │
│ transition: background-color 0.2s ease; │
│ } │
│ │
│ .chart-item-header:hover { │
│ background: rgba(255, 255, 255, 0.05); │
│ } │
│ │
│ .chart-expand-icon { │
│ margin-left: 8px; │
│ font-size: 0.8em; │
│ color: var(--text-muted); │
│ transition: transform 0.2s ease; │
│ user-select: none; │
│ } │
│ │
│ .chart-item-expanded .chart-expand-icon { │
│ transform: rotate(90deg); │
│ } │
│ │
│ .chart-item-wrapper { │
│ border-radius: 6px; │
│ } │
│ │
│ .chart-dropdown { │
│ grid-column: 1 / -1; │
│ margin-top: 12px; │
│ padding: 16px; │
│ background-color: var(--bg-selection); │
│ border-radius: 6px; │
│ border: 1px solid rgba(255, 255, 255, 0.1); │
│ display: none; │
│ } │
│ │
│ .chart-item-expanded .chart-dropdown { │
│ display: block; │
│ animation: dropdown-expand 0.2s ease-out; │
│ } │
│ │
│ @keyframes dropdown-expand { │
│ from { │
│ opacity: 0; │
│ transform: translateY(-8px); │
│ } │
│ │
│ to { │
│ opacity: 1; │
│ transform: translateY(0); │
│ } │
│ } │
│ │
│ .trinket-icon { │
│ width: 20px; │
│ height: 20px; │
│ border-radius: 3px; │
│ margin-right: 8px; │
│ vertical-align: middle; │
│ border: 1px solid rgba(255, 255, 255, 0.2); │
│ } │
│ │
│ .trinket-ilvl { │
│ font-weight: $font-weight-semibold; │
│ color: var(--text-primary); │
│ vertical-align: middle; │
│ } │
│ │
│ .loadout-section { │
│ margin-bottom: 20px; │
│ } │
│ │
│ .loadout-title { │
│ color: var(--highlight-color); │
│ font-size: $font-size-md; │
│ font-weight: $font-weight-semibold; │
│ margin-bottom: 8px; │
│ display: flex; │
│ align-items: center; │
│ gap: 8px; │
│ } │
│ │
│ .loadout-grid { │
│ @include mixins.responsive-grid(200px, $spacing-lg); │
│ } │
│ │
│ .loadout-item { │
│ @include mixins.flex-column(6px); │
│ padding: 10px; │
│ background-color: rgba(255, 255, 255, 0.03); │
│ border: 1px solid rgba(255, 255, 255, 0.08); │
│ border-radius: 6px; │
│ } │
│ │
│ .loadout-label { │
│ font-size: $font-size-sm; │
│ color: var(--text-muted); │
│ font-weight: $font-weight-medium; │
│ text-transform: uppercase; │
│ letter-spacing: 0.5px; │
│ } │
│ │
│ .loadout-value { │
│ font-size: $font-size-base; │
│ color: var(--text-primary); │
│ font-weight: $font-weight-medium; │
│ } │
│ │
│ .equipment-grid { │
│ @include mixins.responsive-grid(220px, $spacing-lg); │
│ } │
│ │
│ .equipment-item-header, │
│ .consumable-item-header { │
│ display: flex; │
│ align-items: center; │
│ gap: 8px; │
│ } │
│ │
│ .equipment-icon, │
│ .consumable-icon { │
│ width: 24px; │
│ height: 24px; │
│ border-radius: 3px; │
│ margin-right: 8px; │
│ vertical-align: middle; │
│ border: 1px solid rgba(255, 255, 255, 0.2); │
│ } │
│ │
│ .equipment-slot-name { │
│ font-weight: $font-weight-semibold; │
│ color: var(--text-secondary); │
│ } │
│ │
│ .equipment-item-link { │
│ color: var(--text-primary); │
│ text-decoration: none; │
│ } │
│ │
│ .item-tooltip-details { │
│ margin-top: 6px; │
│ } │
│ │
│ .equipment-detail { │
│ font-size: $font-size-base; │
│ color: var(--text-secondary); │
│ } │
│ │
│ .talents-list, │
│ .glyphs-list { │
│ @include mixins.flex-column(4px); │
│ } │
│ │
│ .loadout-item .talents-list, │
│ .loadout-item .glyphs-list { │
│ padding: 6px; │
│ background-color: rgba(255, 255, 255, 0.02); │
│ border: 1px solid rgba(255, 255, 255, 0.05); │
│ border-radius: 4px; │
│ } │
│ │
│ .talent-line, │
│ .glyph-line { │
│ display: flex; │
│ align-items: center; │
│ gap: 6px; │
│ } │
│ │
│ .talent-icon-inline, │
│ .glyph-icon-inline { │
│ width: 16px; │
│ height: 16px; │
│ border-radius: 2px; │
│ flex-shrink: 0; │
│ } │
│ │
│ .talent-name, │
│ .glyph-name { │
│ color: #fff; │
│ font-weight: bold; │
│ font-size: 14px; │
│ text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.8); │
│ } │
│ │
│ .talent-link, │
│ .glyph-link { │
│ color: #fff; │
│ font-weight: bold; │
│ font-size: 14px; │
│ text-decoration: none; │
│ text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.8); │
│ } │
│ │
│ .talent-link:hover, │
│ .glyph-link:hover { │
│ text-decoration: underline; │
│ } │
│ │
│ /* Loadout buttons */ │
│ .loadout-button { │
│ display: inline-block; │
│ padding: 6px 12px; │
│ background-color: var(--bg-primary); │
│ border: 1px solid rgba(255, 255, 255, 0.2); │
│ border-radius: 4px; │
│ color: var(--text-primary); │
│ text-decoration: none; │
│ font-size: $font-size-sm; │
│ font-weight: $font-weight-semibold; │
│ transition: all 0.2s ease; │
│ cursor: pointer; │
│ } │
│ │
│ .loadout-button:hover { │
│ background-color: rgba(255, 255, 255, 0.1); │
│ border-color: var(--highlight-color); │
│ } │
│ │
│ .wowsim-button { │
│ background-color: var(--bg-primary); │
│ border-color: var(--border-color); │
│ color: var(--text-primary); │
│ margin-bottom: 12px; │
│ display: inline-block; │
│ text-align: center; │
│ font-weight: bold; │
│ } │
│ │
│ .wowsim-button:hover { │
│ background-color: var(--bg-selection); │
│ border-color: var(--highlight-color); │
│ color: var(--highlight-color); │
│ } │
│ │
│ .form-group { │
│ @include mixins.flex-column(); │
│ } │
│ │
│ .form-label { │
│ font-size: $font-size-base; │
│ color: var(--text-muted); │
│ font-weight: $font-weight-medium; │
│ text-transform: uppercase; │
│ letter-spacing: 0.5px; │
│ } │
│ │
│ .form-select { │
│ @include mixins.form-control(); │
│ min-width: 120px; │
│ } │
│ │
│ .info-grid { │
│ @include mixins.responsive-grid(); │
│ │
│ &-compact { │
│ @include mixins.responsive-grid(150px, 10px); │
│ } │
│ } │
│ │
│ .info-item { │
│ @include mixins.flex-column(4px); │
│ │
│ &-wide { │
│ grid-column: 1 / -1; │
│ } │
│ } │
│ │
│ .info-label { │
│ font-size: $font-size-sm; │
│ color: var(--text-muted); │
│ font-weight: $font-weight-medium; │
│ text-transform: uppercase; │
│ letter-spacing: 0.5px; │
│ } │
│ │
│ .info-value { │
│ font-size: $font-size-md; │
│ color: var(--text-primary); │
│ font-weight: $font-weight-semibold; │
│ │
│ &-wrap { │
│ white-space: normal; │
│ word-wrap: break-word; │
│ line-height: 1.4; │
│ } │
│ } │
│ │
│ .flex { │
│ display: flex; │
│ │
│ &-grid { │
│ gap: $spacing-xl; │
│ flex-wrap: wrap; │
│ } │
│ │
│ &-center { │
│ align-items: center; │
│ justify-content: center; │
│ } │
│ │
│ &-between { │
│ align-items: center; │
│ justify-content: space-between; │
│ } │
│ │
│ &-column { │
│ flex-direction: column; │
│ │
│ &-center { │
│ align-items: center; │
│ } │
│ } │
│ } │
│ │
│ .section-title { │
│ color: var(--highlight-color); │
│ margin: 0 0 $spacing-lg 0; │
│ font-size: $font-size-xl; │
│ font-weight: $font-weight-semibold; │
│ │
│ &-large { │
│ margin: 0 0 $spacing-xl 0; │
│ font-size: $font-size-2xl; │
│ } │
│ } │
│ │
│ .page-title { │
│ color: var(--highlight-color); │
│ margin: 0 0 10px 0; │
│ font-size: $font-size-3xl; │
│ font-weight: $font-weight-bold; │
│ } │
│ │
│ @keyframes dots { │
│ 0%, │
│ 20% { │
│ content: ""; │
│ } │
│ │
│ 40% { │
│ content: "."; │
│ } │
│ │
│ 60% { │
│ content: ".."; │
│ } │
│ │
│ 80%, │
│ 100% { │
│ content: "..."; │
│ } │
│ } │
│ │
│ .hidden { │
│ display: none; │
│ } │
│ │
│ .visually-hidden { │
│ position: absolute; │
│ width: 1px; │
│ height: 1px; │
│ padding: 0; │
│ margin: -1px; │
│ overflow: hidden; │
│ clip: rect(0, 0, 0, 0); │
│ white-space: nowrap; │
│ border: 0; │
│ } │
│ │
│ .text { │
│ &-center { │
│ text-align: center; │
│ } │
│ │
│ &-muted { │
│ color: var(--text-muted); │
│ } │
│ │
│ &-primary { │
│ color: var(--text-primary); │
│ } │
│ │
│ &-highlight { │
│ color: var(--highlight-color); │
│ } │
│ } │
│ │
│ .leaderboard-table { │
│ display: table; │
│ width: 100%; │
│ } │
│ │
│ .leaderboard-table-row { │
│ display: table-row !important; │
│ transition: background-color 0.2s ease; │
│ cursor: default; │
│ /* default for dungeon rows; anchors still show pointer */ │
│ } │
│ │
│ // Hide mobile elements on desktop │
│ .mobile-team-container, │
│ .mobile-player-info, │
│ .mobile-card-header, │
│ .mobile-date { │
│ display: none; │
│ } │
│ │
│ .leaderboard-table-row.expandable-row { │
│ cursor: pointer; │
│ } │
│ │
│ .leaderboard-cell { │
│ display: table-cell; │
│ padding: 15px 10px; │
│ vertical-align: middle; │
│ border-bottom: 1px solid var(--border-color); │
│ │
│ &--rank { │
│ width: 80px; │
│ text-align: center; │
│ font-size: $font-size-xl; │
│ font-weight: bold; │
│ color: #d8a657; │
│ } │
│ │
│ &--time { │
│ width: 120px; │
│ text-align: right; │
│ font-family: "Courier New", monospace; │
│ font-weight: bold; │
│ color: #ffffff; │
│ } │
│ │
│ &--content { │
│ width: 100%; │
│ color: var(--text-primary); │
│ } │
│ │
│ &--meta { │
│ text-align: right; │
│ color: var(--text-secondary); │
│ font-size: $font-size-base; │
│ white-space: nowrap; │
│ } │
│ │
│ &--spec-icon { │
│ width: 40px; │
│ text-align: center; │
│ } │
│ } │
│ │
│ .leaderboard-table-row:hover .leaderboard-cell { │
│ background-color: var(--bg-hover); │
│ } │
│ │
│ .leaderboard-table-row:last-child .leaderboard-cell { │
│ border-bottom: none; │
│ } │
│ │
│ .player-expand-controls { │
│ display: flex; │
│ align-items: center; │
│ gap: $spacing-sm; │
│ } │
│ │
│ .expand-icon { │
│ font-size: $font-size-sm; │
│ color: var(--text-secondary); │
│ transition: │
│ transform 0.2s ease, │
│ color 0.2s ease; │
│ } │
│ │
│ .leaderboard-table-row:hover .expand-icon { │
│ color: var(--highlight-color); │
│ } │
│ │
│ .player-best-runs { │
│ background-color: rgba(0, 0, 0, 0.1); │
│ } │
│ │
│ .empty-state { │
│ text-align: center; │
│ padding: 40px 20px; │
│ color: var(--text-muted); │
│ background-color: var(--bg-secondary); │
│ border-radius: $radius-lg; │
│ border: 1px solid var(--border-color); │
│ │
│ p { │
│ margin: $spacing-sm 0; │
│ } │
│ } │
│ │
│ @media (max-width: 1024px) { │
│ .leaderboard-table { │
│ display: flex; │
│ flex-direction: column; │
│ gap: 12px; │
│ } │
│ │
│ .leaderboard-table-row { │
│ display: block !important; │
│ background-color: rgba(255, 255, 255, 0.03); │
│ border: 1px solid #4a4a4a; │
│ border-radius: 8px; │
│ padding: 16px; │
│ transition: background-color 0.2s ease; │
│ │
│ &:hover { │
│ background-color: rgba(255, 215, 0, 0.08); │
│ } │
│ │
│ &.expandable-row { │
│ cursor: pointer; │
│ } │
│ } │
│ │
│ .leaderboard-cell { │
│ display: block; │
│ padding: 0; │
│ border-bottom: none; │
│ │
│ // hide original table cells on mobile │
│ &--rank, │
│ &--time, │
│ &--content, │
│ &--meta, │
│ &--spec-icon { │
│ display: none; │
│ } │
│ } │
│ │
│ .mobile-card-header { │
│ display: flex; │
│ justify-content: space-between; │
│ align-items: center; │
│ margin-bottom: 8px; │
│ } │
│ │
│ .mobile-time { │
│ font-family: "Courier New", monospace; │
│ font-weight: bold; │
│ font-size: 1.1em; │
│ color: #ffffff; │
│ font-variant-numeric: tabular-nums; │
│ } │
│ │
│ .mobile-rank { │
│ font-size: 1.2em; │
│ font-weight: bold; │
│ color: #d8a657; │
│ } │
│ │
│ .mobile-date { │
│ font-size: 0.85em; │
│ color: var(--text-secondary); │
│ margin-bottom: 12px; │
│ padding-bottom: 8px; │
│ border-bottom: 1px solid #3a3a3a; │
│ } │
│ │
│ // show mobile elements on mobile │
│ .mobile-team-container, │
│ .mobile-player-info, │
│ .mobile-card-header, │
│ .mobile-date { │
│ display: block; │
│ } │
│ │
│ .mobile-card-header { │
│ display: flex !important; │
│ } │
│ │
│ // team members container for mobile │
│ .mobile-team-container { │
│ display: flex !important; │
│ flex-direction: column; │
│ gap: 8px; │
│ } │
│ │
│ .mobile-team-members { │
│ display: flex; │
│ flex-wrap: wrap; │
│ gap: 8px; │
│ } │
│ │
│ .mobile-team-member { │
│ display: flex; │
│ align-items: center; │
│ gap: 6px; │
│ background-color: rgba(0, 0, 0, 0.3); │
│ padding: 6px 10px; │
│ border-radius: 6px; │
│ font-size: 0.9em; │
│ } │
│ │
│ .mobile-run-meta { │
│ margin-top: 8px; │
│ padding-top: 8px; │
│ border-top: 1px solid #3a3a3a; │
│ font-size: 0.85em; │
│ color: var(--text-secondary); │
│ } │
│ │
│ // player leaderboard mobile cards (use pseudo-elements) │
│ .player-leaderboard-container .leaderboard-table-row { │
│ position: relative; │
│ │
│ &::before { │
│ content: attr(data-rank); │
│ position: absolute; │
│ top: 16px; │
│ right: 16px; │
│ font-size: 1.2em; │
│ font-weight: bold; │
│ color: #d8a657; │
│ } │
│ │
│ &::after { │
│ content: attr(data-time); │
│ display: block; │
│ font-family: "Courier New", monospace; │
│ font-weight: bold; │
│ font-size: 1.1em; │
│ color: #ffffff; │
│ margin-bottom: 8px; │
│ padding-bottom: 8px; │
│ border-bottom: 1px solid #3a3a3a; │
│ } │
│ } │
│ │
│ .mobile-player-info { │
│ display: flex; │
│ align-items: center; │
│ gap: 12px; │
│ margin-bottom: 8px; │
│ } │
│ │
│ .mobile-player-spec { │
│ display: flex; │
│ align-items: center; │
│ gap: 8px; │
│ } │
│ │
│ .mobile-player-name { │
│ font-weight: 600; │
│ font-size: 1.1em; │
│ } │
│ │
│ .mobile-player-realm { │
│ font-size: 0.85em; │
│ color: var(--text-secondary); │
│ margin-top: 4px; │
│ } │
│ } │
│ │
│ // mobile form improvements │
│ @media (max-width: 480px) { │
│ .form-select { │
│ padding: 12px 14px; │
│ font-size: 1em; │
│ min-height: 44px; // iOS minimum touch target │
│ } │
│ │
│ .form-label { │
│ font-size: 0.85em; │
│ } │
│ │
│ .form-group { │
│ gap: 6px; │
│ } │
│ } │
│ │
│ @media (max-width: 768px) { │
│ .flex-grid { │
│ flex-direction: column; │
│ gap: $spacing-lg; │
│ } │
│ │
│ .info-grid { │
│ grid-template-columns: 1fr; │
│ gap: $spacing-md; │
│ } │
│ │
│ .card-container, │
│ .card-compact { │
│ padding: $spacing-lg; │
│ margin-bottom: $spacing-xl; │
│ } │
│ │
│ .section-title { │
│ font-size: $font-size-lg; │
│ } │
│ │
│ .page-title { │
│ font-size: 2em; │
│ } │
│ │
│ .form-select { │
│ padding: 11px 13px; │
│ min-height: 42px; │
│ } │
│ │
│ // further mobile optimizations for very small screens │
│ .mobile-team-members { │
│ gap: 6px; │
│ } │
│ │
│ .mobile-team-member { │
│ padding: 4px 8px; │
│ font-size: 0.85em; │
│ } │
│ │
│ .leaderboard-table-row { │
│ padding: 12px; │
│ } │
│ } │
│ │
│ .leaderboard-nav { │
│ margin-bottom: 30px; │
│ } │
│ │
│ .nav-tabs { │
│ display: flex; │
│ gap: 2px; │
│ background-color: var(--bg-primary); │
│ border-radius: 8px; │
│ padding: 4px; │
│ border: 1px solid var(--border-color); │
│ } │
│ │
│ .nav-tab { │
│ flex: 1; │
│ padding: 12px 20px; │
│ background: none; │
│ border: none; │
│ color: var(--text-secondary); │
│ font-weight: 500; │
│ border-radius: 6px; │
│ cursor: pointer; │
│ transition: all 0.2s ease; │
│ text-align: center; │
│ } │
│ │
│ .nav-tab:hover { │
│ color: var(--text-primary); │
│ background-color: rgba(255, 255, 255, 0.06); │
│ } │
│ │
│ .nav-tab.active { │
│ background-color: var(--highlight-color); │
│ color: #000; │
│ font-weight: 600; │
│ } │
└────────────────────────────────────────────────────────────────────────────────────┘
┌─ SCSS ───────────────────────────────┐
│ @use "./core/tokens" as *; │
│ @use "./core/mixins" as mixins; │
│ │
│ /* │
│ * Shared component styles for WoW Sim Stats │
│ * Better organized SCSS with variables and │
│ mixins │
│ */ │
│ │
│ .card-container { │
│ @include mixins.card(); │
│ } │
│ │
│ .card-compact { │
│ @include mixins.card($spacing-lg, $radius- │
│ md); │
│ } │
│ │
│ .chart-bars { │
│ display: flex; │
│ flex-direction: column; │
│ gap: 8px; │
│ } │
│ │
│ .chart-item { │
│ display: grid; │
│ grid-template-columns: 40px 1fr; │
│ align-items: center; │
│ gap: 15px; │
│ padding: $spacing-sm 0; │
│ } │
│ │
│ .chart-item-comparison { │
│ grid-template-columns: auto 1fr; │
│ │
│ .chart-labels { │
│ width: auto; │
│ min-width: 120px; │
│ justify-content: flex-start; │
│ gap: 8px; │
│ } │
│ } │
│ │
│ .chart-labels { │
│ display: flex; │
│ align-items: center; │
│ justify-content: center; │
│ width: 40px; │
│ height: 40px; │
│ } │
│ │
│ .chart-rank { │
│ font-size: $font-size-sm; │
│ color: var(--text-muted); │
│ font-weight: $font-weight-semibold; │
│ min-width: 30px; │
│ } │
│ │
│ .chart-label { │
│ font-weight: $font-weight-semibold; │
│ color: var(--text-primary); │
│ white-space: nowrap; │
│ overflow: hidden; │
│ text-overflow: ellipsis; │
│ } │
│ │
│ .chart-bar-container { │
│ display: flex; │
│ align-items: center; │
│ flex: 1; │
│ gap: 10px; │
│ min-width: 0; │
│ } │
│ │
│ .chart-bar-track { │
│ flex: 1; │
│ height: 20px; │
│ background-color: rgba(255, 255, 255, 0.1) │
│ ; │
│ border-radius: 3px; │
│ position: relative; │
│ min-width: 0; │
│ } │
│ │
│ .chart-bar { │
│ height: 100%; │
│ border-radius: 3px; │
│ min-width: 2px; │
│ transition: width 0.3s ease; │
│ } │
│ │
│ .chart-value { │
│ font-weight: $font-weight-semibold; │
│ color: var(--text-primary); │
│ font-size: $font-size-base; │
│ width: 90px; │
│ text-align: right; │
│ flex-shrink: 0; │
│ } │
│ │
│ .chart-item-header { │
│ cursor: pointer; │
│ padding: 8px 12px; │
│ border-radius: 6px; │
│ transition: background-color 0.2s ease; │
│ } │
│ │
│ .chart-item-header:hover { │
│ background: rgba(255, 255, 255, 0.05); │
│ } │
│ │
│ .chart-expand-icon { │
│ margin-left: 8px; │
│ font-size: 0.8em; │
│ color: var(--text-muted); │
│ transition: transform 0.2s ease; │
│ user-select: none; │
│ } │
│ │
│ .chart-item-expanded .chart-expand-icon { │
│ transform: rotate(90deg); │
│ } │
│ │
│ .chart-item-wrapper { │
│ border-radius: 6px; │
│ } │
│ │
│ .chart-dropdown { │
│ grid-column: 1 / -1; │
│ margin-top: 12px; │
│ padding: 16px; │
│ background-color: var(--bg-selection); │
│ border-radius: 6px; │
│ border: 1px solid rgba(255, 255, 255, 0.1) │
│ ; │
│ display: none; │
│ } │
│ │
│ .chart-item-expanded .chart-dropdown { │
│ display: block; │
│ animation: dropdown-expand 0.2s ease-out; │
│ } │
│ │
│ @keyframes dropdown-expand { │
│ from { │
│ opacity: 0; │
│ transform: translateY(-8px); │
│ } │
│ │
│ to { │
│ opacity: 1; │
│ transform: translateY(0); │
│ } │
│ } │
│ │
│ .trinket-icon { │
│ width: 20px; │
│ height: 20px; │
│ border-radius: 3px; │
│ margin-right: 8px; │
│ vertical-align: middle; │
│ border: 1px solid rgba(255, 255, 255, 0.2) │
│ ; │
│ } │
│ │
│ .trinket-ilvl { │
│ font-weight: $font-weight-semibold; │
│ color: var(--text-primary); │
│ vertical-align: middle; │
│ } │
│ │
│ .loadout-section { │
│ margin-bottom: 20px; │
│ } │
│ │
│ .loadout-title { │
│ color: var(--highlight-color); │
│ font-size: $font-size-md; │
│ font-weight: $font-weight-semibold; │
│ margin-bottom: 8px; │
│ display: flex; │
│ align-items: center; │
│ gap: 8px; │
│ } │
│ │
│ .loadout-grid { │
│ @include mixins.responsive-grid(200px, $sp │
│ acing-lg); │
│ } │
│ │
│ .loadout-item { │
│ @include mixins.flex-column(6px); │
│ padding: 10px; │
│ background-color: rgba(255, 255, 255, 0.03 │
│ ); │
│ border: 1px solid rgba(255, 255, 255, 0.08 │
│ ); │
│ border-radius: 6px; │
│ } │
│ │
│ .loadout-label { │
│ font-size: $font-size-sm; │
│ color: var(--text-muted); │
│ font-weight: $font-weight-medium; │
│ text-transform: uppercase; │
│ letter-spacing: 0.5px; │
│ } │
│ │
│ .loadout-value { │
│ font-size: $font-size-base; │
│ color: var(--text-primary); │
│ font-weight: $font-weight-medium; │
│ } │
│ │
│ .equipment-grid { │
│ @include mixins.responsive-grid(220px, $sp │
│ acing-lg); │
│ } │
│ │
│ .equipment-item-header, │
│ .consumable-item-header { │
│ display: flex; │
│ align-items: center; │
│ gap: 8px; │
│ } │
│ │
│ .equipment-icon, │
│ .consumable-icon { │
│ width: 24px; │
│ height: 24px; │
│ border-radius: 3px; │
│ margin-right: 8px; │
│ vertical-align: middle; │
│ border: 1px solid rgba(255, 255, 255, 0.2) │
│ ; │
│ } │
│ │
│ .equipment-slot-name { │
│ font-weight: $font-weight-semibold; │
│ color: var(--text-secondary); │
│ } │
│ │
│ .equipment-item-link { │
│ color: var(--text-primary); │
│ text-decoration: none; │
│ } │
│ │
│ .item-tooltip-details { │
│ margin-top: 6px; │
│ } │
│ │
│ .equipment-detail { │
│ font-size: $font-size-base; │
│ color: var(--text-secondary); │
│ } │
│ │
│ .talents-list, │
│ .glyphs-list { │
│ @include mixins.flex-column(4px); │
│ } │
│ │
│ .loadout-item .talents-list, │
│ .loadout-item .glyphs-list { │
│ padding: 6px; │
│ background-color: rgba(255, 255, 255, 0.02 │
│ ); │
│ border: 1px solid rgba(255, 255, 255, 0.05 │
│ ); │
│ border-radius: 4px; │
│ } │
│ │
│ .talent-line, │
│ .glyph-line { │
│ display: flex; │
│ align-items: center; │
│ gap: 6px; │
│ } │
│ │
│ .talent-icon-inline, │
│ .glyph-icon-inline { │
│ width: 16px; │
│ height: 16px; │
│ border-radius: 2px; │
│ flex-shrink: 0; │
│ } │
│ │
│ .talent-name, │
│ .glyph-name { │
│ color: #fff; │
│ font-weight: bold; │
│ font-size: 14px; │
│ text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.8 │
│ ); │
│ } │
│ │
│ .talent-link, │
│ .glyph-link { │
│ color: #fff; │
│ font-weight: bold; │
│ font-size: 14px; │
│ text-decoration: none; │
│ text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.8 │
│ ); │
│ } │
│ │
│ .talent-link:hover, │
│ .glyph-link:hover { │
│ text-decoration: underline; │
│ } │
│ │
│ /* Loadout buttons */ │
│ .loadout-button { │
│ display: inline-block; │
│ padding: 6px 12px; │
│ background-color: var(--bg-primary); │
│ border: 1px solid rgba(255, 255, 255, 0.2) │
│ ; │
│ border-radius: 4px; │
│ color: var(--text-primary); │
│ text-decoration: none; │
│ font-size: $font-size-sm; │
│ font-weight: $font-weight-semibold; │
│ transition: all 0.2s ease; │
│ cursor: pointer; │
│ } │
│ │
│ .loadout-button:hover { │
│ background-color: rgba(255, 255, 255, 0.1) │
│ ; │
│ border-color: var(--highlight-color); │
│ } │
│ │
│ .wowsim-button { │
│ background-color: var(--bg-primary); │
│ border-color: var(--border-color); │
│ color: var(--text-primary); │
│ margin-bottom: 12px; │
│ display: inline-block; │
│ text-align: center; │
│ font-weight: bold; │
│ } │
│ │
│ .wowsim-button:hover { │
│ background-color: var(--bg-selection); │
│ border-color: var(--highlight-color); │
│ color: var(--highlight-color); │
│ } │
│ │
│ .form-group { │
│ @include mixins.flex-column(); │
│ } │
│ │
│ .form-label { │
│ font-size: $font-size-base; │
│ color: var(--text-muted); │
│ font-weight: $font-weight-medium; │
│ text-transform: uppercase; │
│ letter-spacing: 0.5px; │
│ } │
│ │
│ .form-select { │
│ @include mixins.form-control(); │
│ min-width: 120px; │
│ } │
│ │
│ .info-grid { │
│ @include mixins.responsive-grid(); │
│ │
│ &-compact { │
│ @include mixins.responsive-grid(150px, 1 │
│ 0px); │
│ } │
│ } │
│ │
│ .info-item { │
│ @include mixins.flex-column(4px); │
│ │
│ &-wide { │
│ grid-column: 1 / -1; │
│ } │
│ } │
│ │
│ .info-label { │
│ font-size: $font-size-sm; │
│ color: var(--text-muted); │
│ font-weight: $font-weight-medium; │
│ text-transform: uppercase; │
│ letter-spacing: 0.5px; │
│ } │
│ │
│ .info-value { │
│ font-size: $font-size-md; │
│ color: var(--text-primary); │
│ font-weight: $font-weight-semibold; │
│ │
│ &-wrap { │
│ white-space: normal; │
│ word-wrap: break-word; │
│ line-height: 1.4; │
│ } │
│ } │
│ │
│ .flex { │
│ display: flex; │
│ │
│ &-grid { │
│ gap: $spacing-xl; │
│ flex-wrap: wrap; │
│ } │
│ │
│ &-center { │
│ align-items: center; │
│ justify-content: center; │
│ } │
│ │
│ &-between { │
│ align-items: center; │
│ justify-content: space-between; │
│ } │
│ │
│ &-column { │
│ flex-direction: column; │
│ │
│ &-center { │
│ align-items: center; │
│ } │
│ } │
│ } │
│ │
│ .section-title { │
│ color: var(--highlight-color); │
│ margin: 0 0 $spacing-lg 0; │
│ font-size: $font-size-xl; │
│ font-weight: $font-weight-semibold; │
│ │
│ &-large { │
│ margin: 0 0 $spacing-xl 0; │
│ font-size: $font-size-2xl; │
│ } │
│ } │
│ │
│ .page-title { │
│ color: var(--highlight-color); │
│ margin: 0 0 10px 0; │
│ font-size: $font-size-3xl; │
│ font-weight: $font-weight-bold; │
│ } │
│ │
│ @keyframes dots { │
│ 0%, │
│ 20% { │
│ content: ""; │
│ } │
│ │
│ 40% { │
│ content: "."; │
│ } │
│ │
│ 60% { │
│ content: ".."; │
│ } │
│ │
│ 80%, │
│ 100% { │
│ content: "..."; │
│ } │
│ } │
│ │
│ .hidden { │
│ display: none; │
│ } │
│ │
│ .visually-hidden { │
│ position: absolute; │
│ width: 1px; │
│ height: 1px; │
│ padding: 0; │
│ margin: -1px; │
│ overflow: hidden; │
│ clip: rect(0, 0, 0, 0); │
│ white-space: nowrap; │
│ border: 0; │
│ } │
│ │
│ .text { │
│ &-center { │
│ text-align: center; │
│ } │
│ │
│ &-muted { │
│ color: var(--text-muted); │
│ } │
│ │
│ &-primary { │
│ color: var(--text-primary); │
│ } │
│ │
│ &-highlight { │
│ color: var(--highlight-color); │
│ } │
│ } │
│ │
│ .leaderboard-table { │
│ display: table; │
│ width: 100%; │
│ } │
│ │
│ .leaderboard-table-row { │
│ display: table-row !important; │
│ transition: background-color 0.2s ease; │
│ cursor: default; │
│ /* default for dungeon rows; anchors still │
│ show pointer */ │
│ } │
│ │
│ // Hide mobile elements on desktop │
│ .mobile-team-container, │
│ .mobile-player-info, │
│ .mobile-card-header, │
│ .mobile-date { │
│ display: none; │
│ } │
│ │
│ .leaderboard-table-row.expandable-row { │
│ cursor: pointer; │
│ } │
│ │
│ .leaderboard-cell { │
│ display: table-cell; │
│ padding: 15px 10px; │
│ vertical-align: middle; │
│ border-bottom: 1px solid var(--border-colo │
│ r); │
│ │
│ &--rank { │
│ width: 80px; │
│ text-align: center; │
│ font-size: $font-size-xl; │
│ font-weight: bold; │
│ color: #d8a657; │
│ } │
│ │
│ &--time { │
│ width: 120px; │
│ text-align: right; │
│ font-family: "Courier New", monospace; │
│ font-weight: bold; │
│ color: #ffffff; │
│ } │
│ │
│ &--content { │
│ width: 100%; │
│ color: var(--text-primary); │
│ } │
│ │
│ &--meta { │
│ text-align: right; │
│ color: var(--text-secondary); │
│ font-size: $font-size-base; │
│ white-space: nowrap; │
│ } │
│ │
│ &--spec-icon { │
│ width: 40px; │
│ text-align: center; │
│ } │
│ } │
│ │
│ .leaderboard-table-row:hover .leaderboard-ce │
│ ll { │
│ background-color: var(--bg-hover); │
│ } │
│ │
│ .leaderboard-table-row:last-child .leaderboa │
│ rd-cell { │
│ border-bottom: none; │
│ } │
│ │
│ .player-expand-controls { │
│ display: flex; │
│ align-items: center; │
│ gap: $spacing-sm; │
│ } │
│ │
│ .expand-icon { │
│ font-size: $font-size-sm; │
│ color: var(--text-secondary); │
│ transition: │
│ transform 0.2s ease, │
│ color 0.2s ease; │
│ } │
│ │
│ .leaderboard-table-row:hover .expand-icon { │
│ color: var(--highlight-color); │
│ } │
│ │
│ .player-best-runs { │
│ background-color: rgba(0, 0, 0, 0.1); │
│ } │
│ │
│ .empty-state { │
│ text-align: center; │
│ padding: 40px 20px; │
│ color: var(--text-muted); │
│ background-color: var(--bg-secondary); │
│ border-radius: $radius-lg; │
│ border: 1px solid var(--border-color); │
│ │
│ p { │
│ margin: $spacing-sm 0; │
│ } │
│ } │
│ │
│ @media (max-width: 1024px) { │
│ .leaderboard-table { │
│ display: flex; │
│ flex-direction: column; │
│ gap: 12px; │
│ } │
│ │
│ .leaderboard-table-row { │
│ display: block !important; │
│ background-color: rgba(255, 255, 255, 0. │
│ 03); │
│ border: 1px solid #4a4a4a; │
│ border-radius: 8px; │
│ padding: 16px; │
│ transition: background-color 0.2s ease; │
│ │
│ &:hover { │
│ background-color: rgba(255, 215, 0, 0. │
│ 08); │
│ } │
│ │
│ &.expandable-row { │
│ cursor: pointer; │
│ } │
│ } │
│ │
│ .leaderboard-cell { │
│ display: block; │
│ padding: 0; │
│ border-bottom: none; │
│ │
│ // hide original table cells on mobile │
│ &--rank, │
│ &--time, │
│ &--content, │
│ &--meta, │
│ &--spec-icon { │
│ display: none; │
│ } │
│ } │
│ │
│ .mobile-card-header { │
│ display: flex; │
│ justify-content: space-between; │
│ align-items: center; │
│ margin-bottom: 8px; │
│ } │
│ │
│ .mobile-time { │
│ font-family: "Courier New", monospace; │
│ font-weight: bold; │
│ font-size: 1.1em; │
│ color: #ffffff; │
│ font-variant-numeric: tabular-nums; │
│ } │
│ │
│ .mobile-rank { │
│ font-size: 1.2em; │
│ font-weight: bold; │
│ color: #d8a657; │
│ } │
│ │
│ .mobile-date { │
│ font-size: 0.85em; │
│ color: var(--text-secondary); │
│ margin-bottom: 12px; │
│ padding-bottom: 8px; │
│ border-bottom: 1px solid #3a3a3a; │
│ } │
│ │
│ // show mobile elements on mobile │
│ .mobile-team-container, │
│ .mobile-player-info, │
│ .mobile-card-header, │
│ .mobile-date { │
│ display: block; │
│ } │
│ │
│ .mobile-card-header { │
│ display: flex !important; │
│ } │
│ │
│ // team members container for mobile │
│ .mobile-team-container { │
│ display: flex !important; │
│ flex-direction: column; │
│ gap: 8px; │
│ } │
│ │
│ .mobile-team-members { │
│ display: flex; │
│ flex-wrap: wrap; │
│ gap: 8px; │
│ } │
│ │
│ .mobile-team-member { │
│ display: flex; │
│ align-items: center; │
│ gap: 6px; │
│ background-color: rgba(0, 0, 0, 0.3); │
│ padding: 6px 10px; │
│ border-radius: 6px; │
│ font-size: 0.9em; │
│ } │
│ │
│ .mobile-run-meta { │
│ margin-top: 8px; │
│ padding-top: 8px; │
│ border-top: 1px solid #3a3a3a; │
│ font-size: 0.85em; │
│ color: var(--text-secondary); │
│ } │
│ │
│ // player leaderboard mobile cards (use ps │
│ eudo-elements) │
│ .player-leaderboard-container .leaderboard │
│ -table-row { │
│ position: relative; │
│ │
│ &::before { │
│ content: attr(data-rank); │
│ position: absolute; │
│ top: 16px; │
│ right: 16px; │
│ font-size: 1.2em; │
│ font-weight: bold; │
│ color: #d8a657; │
│ } │
│ │
│ &::after { │
│ content: attr(data-time); │
│ display: block; │
│ font-family: "Courier New", monospace; │
│ font-weight: bold; │
│ font-size: 1.1em; │
│ color: #ffffff; │
│ margin-bottom: 8px; │
│ padding-bottom: 8px; │
│ border-bottom: 1px solid #3a3a3a; │
│ } │
│ } │
│ │
│ .mobile-player-info { │
│ display: flex; │
│ align-items: center; │
│ gap: 12px; │
│ margin-bottom: 8px; │
│ } │
│ │
│ .mobile-player-spec { │
│ display: flex; │
│ align-items: center; │
│ gap: 8px; │
│ } │
│ │
│ .mobile-player-name { │
│ font-weight: 600; │
│ font-size: 1.1em; │
│ } │
│ │
│ .mobile-player-realm { │
│ font-size: 0.85em; │
│ color: var(--text-secondary); │
│ margin-top: 4px; │
│ } │
│ } │
│ │
│ // mobile form improvements │
│ @media (max-width: 480px) { │
│ .form-select { │
│ padding: 12px 14px; │
│ font-size: 1em; │
│ min-height: 44px; // iOS minimum touch t │
│ arget │
│ } │
│ │
│ .form-label { │
│ font-size: 0.85em; │
│ } │
│ │
│ .form-group { │
│ gap: 6px; │
│ } │
│ } │
│ │
│ @media (max-width: 768px) { │
│ .flex-grid { │
│ flex-direction: column; │
│ gap: $spacing-lg; │
│ } │
│ │
│ .info-grid { │
│ grid-template-columns: 1fr; │
│ gap: $spacing-md; │
│ } │
│ │
│ .card-container, │
│ .card-compact { │
│ padding: $spacing-lg; │
│ margin-bottom: $spacing-xl; │
│ } │
│ │
│ .section-title { │
│ font-size: $font-size-lg; │
│ } │
│ │
│ .page-title { │
│ font-size: 2em; │
│ } │
│ │
│ .form-select { │
│ padding: 11px 13px; │
│ min-height: 42px; │
│ } │
│ │
│ // further mobile optimizations for very s │
│ mall screens │
│ .mobile-team-members { │
│ gap: 6px; │
│ } │
│ │
│ .mobile-team-member { │
│ padding: 4px 8px; │
│ font-size: 0.85em; │
│ } │
│ │
│ .leaderboard-table-row { │
│ padding: 12px; │
│ } │
│ } │
│ │
│ .leaderboard-nav { │
│ margin-bottom: 30px; │
│ } │
│ │
│ .nav-tabs { │
│ display: flex; │
│ gap: 2px; │
│ background-color: var(--bg-primary); │
│ border-radius: 8px; │
│ padding: 4px; │
│ border: 1px solid var(--border-color); │
│ } │
│ │
│ .nav-tab { │
│ flex: 1; │
│ padding: 12px 20px; │
│ background: none; │
│ border: none; │
│ color: var(--text-secondary); │
│ font-weight: 500; │
│ border-radius: 6px; │
│ cursor: pointer; │
│ transition: all 0.2s ease; │
│ text-align: center; │
│ } │
│ │
│ .nav-tab:hover { │
│ color: var(--text-primary); │
│ background-color: rgba(255, 255, 255, 0.06 │
│ ); │
│ } │
│ │
│ .nav-tab.active { │
│ background-color: var(--highlight-color); │
│ color: #000; │
│ font-weight: 600; │
│ } │
└──────────────────────────────────────────────┘