:root { background: #eef2ef; color: #18211d; font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; font-synthesis: none; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; } * { box-sizing: border-box; } body { margin: 0; min-width: 320px; min-height: 100vh; } button, input, select { font: inherit; } button, select { cursor: pointer; } button:disabled { cursor: wait; opacity: 0.62; } .app-shell { display: grid; gap: 18px; margin: 0 auto; max-width: 1520px; min-height: 100vh; padding: 24px; } .centered { align-content: center; color: #4f5b55; justify-items: center; } .topbar { align-items: center; display: flex; gap: 18px; justify-content: space-between; } .eyebrow { color: #4e655b; font-size: 0.76rem; font-weight: 850; letter-spacing: 0; margin: 0 0 6px; text-transform: uppercase; } h1, h2, h3, p { margin-top: 0; } h1 { font-size: clamp(2.1rem, 5vw, 4.6rem); letter-spacing: 0; line-height: 0.94; margin-bottom: 0; } h2 { font-size: 1.18rem; letter-spacing: 0; line-height: 1.25; margin-bottom: 6px; } h3 { font-size: 1.02rem; line-height: 1.25; margin-bottom: 6px; } h4 { font-size: 0.92rem; line-height: 1.2; margin: 0; } .primary-action, .detail-head button, .player-actions a { align-items: center; border-radius: 8px; display: inline-flex; font-weight: 800; gap: 8px; min-height: 40px; padding: 0 13px; text-decoration: none; } .primary-action { background: #205f50; border: 1px solid #205f50; color: #ffffff; min-height: 44px; } .notice { align-items: center; background: #fff7ed; border: 1px solid #fed7aa; border-radius: 8px; color: #8a3b12; display: flex; gap: 10px; padding: 12px 14px; } .refresh-notice { align-items: center; background: #eef7f2; border: 1px solid #d3e9dc; border-radius: 8px; color: #23533e; display: flex; gap: 10px; padding: 12px 14px; } .refresh-notice.active { background: #f7faf7; color: #4b5b53; } .summary-grid, .team-metrics, .rating-grid { display: grid; gap: 10px; } .summary-grid { grid-template-columns: repeat(5, minmax(0, 1fr)); } .team-metrics, .rating-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } .stat-tile { background: #ffffff; border: 1px solid #dce5df; border-radius: 8px; display: grid; gap: 6px; min-width: 0; padding: 13px 14px; } .stat-tile span { color: #5b6962; font-size: 0.78rem; font-weight: 750; } .stat-tile strong { color: #17241f; font-size: 1.35rem; line-height: 1.05; overflow-wrap: anywhere; } .stat-tile.good strong { color: #17633f; } .stat-tile.warn strong { color: #a64622; } .workspace { align-items: start; display: grid; gap: 18px; grid-template-columns: minmax(410px, 0.92fr) minmax(0, 1.45fr); } .roster-panel, .detail-panel { background: #ffffff; border: 1px solid #dce5df; border-radius: 8px; min-width: 0; } .roster-panel { max-height: calc(100vh - 190px); overflow: hidden; position: sticky; top: 18px; } .detail-panel { display: grid; gap: 18px; padding: 18px; } .panel-head, .detail-head, .player-head { align-items: start; display: flex; gap: 14px; justify-content: space-between; } .panel-head { border-bottom: 1px solid #e3ebe6; padding: 16px; } .panel-head h2, .distribution summary { align-items: center; display: flex; gap: 8px; } .panel-head p, .detail-head p, .muted, .slot-label { color: #65736c; margin-bottom: 0; } .filters { border-bottom: 1px solid #e3ebe6; display: grid; gap: 10px; grid-template-columns: 1fr; padding: 12px; } .level-segment { border-bottom: 1px solid #e3ebe6; display: grid; gap: 8px; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); padding: 12px 12px 0; } .level-segment button { background: #f8faf8; border: 1px solid #cfd9d3; border-radius: 8px 8px 0 0; color: #495850; font-weight: 850; min-height: 42px; } .level-segment button.active { background: #205f50; border-color: #205f50; color: #ffffff; } .search-field { align-items: center; background: #f8faf8; border: 1px solid #cfd9d3; border-radius: 8px; display: flex; gap: 8px; min-height: 42px; padding: 0 11px; } .search-field input { background: transparent; border: 0; color: #17241f; min-width: 0; outline: 0; width: 100%; } select { background: #ffffff; border: 1px solid #cfd9d3; border-radius: 8px; color: #1f2a25; min-height: 40px; min-width: 0; padding: 0 10px; } .team-list { max-height: calc(100vh - 370px); overflow: auto; padding: 8px; } .team-row { align-items: center; background: transparent; border: 1px solid transparent; border-radius: 8px; color: #1d2924; display: grid; gap: 10px; grid-template-columns: minmax(0, 1fr) max-content; min-height: 64px; padding: 10px; text-align: left; width: 100%; } .team-row:hover, .team-row.selected { background: #f4f8f5; border-color: #c9d8d0; } .team-names { display: grid; gap: 4px; min-width: 0; } .team-names strong, .team-names small { overflow-wrap: anywhere; } .team-player-name.rated { color: #17633f; } .team-player-name.unrated { color: #9a3f17; } .team-player-name.missing, .name-divider { color: #7a847e; } .inline-rating { background: rgba(23, 99, 63, 0.1); border-radius: 999px; display: inline-block; font-size: 0.72rem; font-weight: 850; margin-left: 6px; padding: 2px 6px; vertical-align: 1px; } .team-player-name.unrated .inline-rating, .team-player-name.missing .inline-rating { background: rgba(154, 63, 23, 0.1); } .team-names small { color: #66756d; } .team-state { border-radius: 999px; font-size: 0.76rem; font-weight: 850; padding: 5px 8px; } .team-state.complete { background: #e7f4ed; color: #17633f; } .team-state.incomplete { background: #fff0e6; color: #9a3f17; } .detail-head { border-bottom: 1px solid #e3ebe6; padding-bottom: 16px; } .detail-head button { background: #ffffff; border: 1px solid #cbd8d1; color: #1f2c26; } .player-grid { display: grid; gap: 14px; grid-template-columns: repeat(2, minmax(0, 1fr)); } .player-card { border: 1px solid #dce5df; border-radius: 8px; display: grid; gap: 14px; min-width: 0; padding: 15px; } .player-card.rated { border-color: #a8d8bc; } .player-card.unrated { background: #fffdf9; } .slot-label { font-size: 0.76rem; font-weight: 850; text-transform: uppercase; } .id-pill { background: #e7f4ed; border-radius: 999px; color: #17633f; flex: 0 0 auto; font-size: 0.8rem; font-weight: 850; padding: 6px 9px; } .id-pill.missing { background: #f2ece4; color: #8c431b; } .rating-note { align-items: center; background: #eef7f2; border: 1px solid #d3e9dc; border-radius: 8px; color: #23533e; display: flex; gap: 8px; line-height: 1.35; min-height: 42px; padding: 10px; } .rating-note.unavailable { background: #f7f5ee; border-color: #e7dfcf; color: #715d36; } .match-panel { border: 1px solid #e0e8e2; border-radius: 8px; display: grid; gap: 10px; padding: 12px; } .match-panel.has-matches { background: #f2faf5; border-color: #b9dfc8; } .match-panel-head { align-items: center; color: #27362f; display: flex; gap: 8px; } .match-summary, .compact-text { color: #5f6d66; line-height: 1.4; margin-bottom: 0; } .recent-matches { display: grid; gap: 8px; } .match-row { background: #f7faf7; border: 1px solid #e0e8e2; border-radius: 8px; display: grid; gap: 4px; padding: 10px; } .match-row strong, .match-row span, .match-row small { overflow-wrap: anywhere; } .match-row span { color: #26342d; font-weight: 750; } .match-row small { color: #66756d; } .player-actions { display: grid; gap: 8px; } .player-actions a { justify-content: center; width: 100%; } .player-actions .explorer-action { background: #205f50; border: 1px solid #205f50; color: #ffffff; min-height: 46px; } .player-actions .dupr-action { background: #ffffff; border: 1px solid #cbd8d1; color: #1f2c26; } .empty-state { align-items: start; color: #65736c; display: grid; gap: 8px; padding: 24px; } .empty-state strong { color: #26342d; } .empty-state button { background: #ffffff; border: 1px solid #cbd8d1; border-radius: 8px; color: #1f2c26; font-weight: 800; min-height: 38px; padding: 0 12px; width: fit-content; } .spin { animation: spin 0.9s linear infinite; } @keyframes spin { to { transform: rotate(360deg); } } @media (max-width: 1100px) { .workspace { grid-template-columns: 1fr; } .roster-panel { max-height: none; position: static; } .team-list { max-height: 520px; } } @media (max-width: 760px) { .app-shell { padding: 14px; } .topbar, .detail-head, .player-head { align-items: stretch; flex-direction: column; } .summary-grid, .team-metrics, .player-grid { grid-template-columns: 1fr; } .filters { grid-template-columns: 1fr; } .level-segment { grid-template-columns: repeat(2, minmax(0, 1fr)); } .search-field { grid-column: auto; } .team-row { grid-template-columns: 1fr; } .team-state { justify-self: start; } }