:root{--bg:#0f1115;--panel:#171a21;--panel-border:#2a2e38;--text:#e8eaed;--text-dim:#9aa0ab;--accent:#ffce00;--line-dim:#3a3f4b;--team-band:#191d25;--team-band-sticky:#222630;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif}*{box-sizing:border-box}body{background:var(--bg);color:var(--text);margin:0}#app{flex-direction:column;height:100vh;display:flex;overflow:hidden}.topbar{border-bottom:1px solid var(--panel-border);padding:20px 28px 12px}.topbar-row{align-items:center;gap:20px;margin-bottom:6px;display:flex}.topbar h1{white-space:nowrap;align-items:center;gap:8px;margin:0;font-size:20px;font-weight:600;display:flex}.view-nav{gap:4px;display:flex}.view-btn{background:var(--panel);border:1px solid var(--panel-border);color:var(--text-dim);cursor:pointer;border-radius:6px;align-items:center;gap:6px;padding:4px 14px;font-family:inherit;font-size:14px;font-weight:500;transition:color .15s,border-color .15s;display:flex}.view-btn:hover{color:var(--text);border-color:var(--accent)}.view-btn.active{color:var(--accent);border-color:var(--accent);background:color-mix(in srgb, var(--accent) 10%, var(--panel))}.view-btn[hidden]{display:none}.y-axis-toggle{background:var(--panel);border:1px solid var(--text-dim);color:var(--text);cursor:pointer;white-space:nowrap;z-index:5;border-radius:5px;padding:4px 12px;font-family:inherit;font-size:12px;font-weight:500;transition:color .15s,border-color .15s;position:absolute;top:50%;left:16px;transform:translate(-50%,-50%)rotate(-90deg)}.y-axis-toggle:hover{color:var(--accent);border-color:var(--accent)}.y-axis-toggle[hidden]{display:none}.unit-toggle{background:var(--panel);border:1px solid var(--text-dim);color:var(--text);cursor:pointer;white-space:nowrap;z-index:5;border-radius:5px;padding:4px 12px;font-family:inherit;font-size:12px;font-weight:500;transition:color .15s,border-color .15s;position:absolute;top:8px;right:8px}.unit-toggle:hover{color:var(--accent);border-color:var(--accent)}.unit-toggle[hidden]{display:none}.y-axis-toggle.table-mode{position:absolute;top:8px;left:auto;right:8px;transform:none}.metric-inline{color:inherit;font-size:inherit;font-weight:inherit;cursor:pointer;background:0 0;border:none;padding:0;font-family:inherit}.metric-inline:focus{outline:none}.race-select{background:var(--panel);border:1px solid var(--panel-border);color:var(--text);cursor:pointer;border-radius:5px;padding:2px 8px;font-family:inherit;font-size:18px;font-weight:600}.race-select:hover{border-color:var(--accent)}.race-select:focus{outline:1px solid var(--accent)}.year-select{background:var(--panel);border:1px solid var(--panel-border);color:var(--accent);cursor:pointer;border-radius:5px;padding:2px 8px;font-family:inherit;font-size:18px;font-weight:600}.year-select:hover{border-color:var(--accent)}.year-select:focus{outline:1px solid var(--accent)}.layout{flex:1;min-height:0;display:flex}.sidebar{border-right:1px solid var(--panel-border);flex-direction:column;flex-shrink:0;gap:18px;width:260px;padding:16px;display:flex;overflow-y:auto}.control-block{flex-direction:column;gap:8px;display:flex}.control-label{text-transform:uppercase;letter-spacing:.04em;color:var(--text-dim);font-size:12px}#search{background:var(--panel);border:1px solid var(--panel-border);color:var(--text);border-radius:6px;padding:8px 10px;font-size:13px}#search:focus{outline:1px solid var(--accent)}.button-row{flex-wrap:wrap;gap:6px;display:flex}.button-row button,.table-filter-row button{background:var(--panel);border:1px solid var(--panel-border);color:var(--text-dim);cursor:pointer;border-radius:5px;padding:6px 10px;font-size:12px}.button-row button:hover,.table-filter-row button:hover{color:var(--text);border-color:var(--accent)}.button-row button.active,.table-filter-row button.active{background:var(--accent);color:#1a1a1a;border-color:var(--accent)}.filter-row{flex-wrap:wrap;gap:6px;display:flex}.filter-dropdown{position:relative}.filter-toggle-btn{background:var(--panel);border:1px solid var(--panel-border);color:var(--text-dim);cursor:pointer;border-radius:5px;padding:6px 10px;font-size:12px}.filter-toggle-btn:hover{color:var(--text);border-color:var(--accent)}.filter-toggle-btn.active{background:var(--accent);color:#1a1a1a;border-color:var(--accent)}.filter-panel{z-index:20;background:var(--panel);border:1px solid var(--panel-border);border-radius:6px;flex-direction:column;gap:2px;min-width:200px;max-height:260px;padding:6px;display:flex;position:absolute;top:calc(100% + 4px);left:0;overflow-y:auto;box-shadow:0 6px 16px #0006}.filter-panel[hidden]{display:none}.filter-panel-actions{border-bottom:1px solid var(--panel-border);justify-content:flex-end;margin-bottom:4px;padding:2px 4px 6px;display:flex}.filter-panel-clear{color:var(--accent);cursor:pointer;background:0 0;border:none;padding:2px 4px;font-size:11px}.filter-panel-clear:hover{text-decoration:underline}.filter-panel label{color:var(--text-dim);cursor:pointer;border-radius:4px;align-items:center;gap:6px;padding:3px 4px;font-size:12px;display:flex}.filter-panel label:hover{color:var(--text);background:#ffffff0f}.filter-panel input[type=checkbox]{accent-color:var(--accent)}.legend-block{flex:1;min-height:0}.legend{flex-direction:column;gap:2px;padding-right:4px;display:flex;overflow-y:auto}.legend-item{cursor:pointer;color:var(--text-dim);border-radius:4px;align-items:center;gap:8px;padding:4px 6px;font-size:12px;display:flex}.legend-item:hover{background:var(--panel)}.legend-item.active{color:var(--text)}.legend-swatch{cursor:pointer;border-radius:2px;flex-shrink:0;width:10px;height:10px}.legend-rank{width:22px;color:var(--text-dim);font-variant-numeric:tabular-nums;flex-shrink:0}.legend-name{text-overflow:ellipsis;white-space:nowrap;cursor:pointer;flex:1;overflow:hidden}.legend-name:hover{text-decoration:underline}.nationality-flag{cursor:default;margin-left:6px}.jersey-icon{cursor:default;vertical-align:middle;margin-left:4px}.jersey-years{color:var(--text-dim);vertical-align:middle;margin-left:2px;font-size:13px;font-weight:400}.jersey-stripped-note{color:var(--text-dim);vertical-align:middle;margin-left:6px;font-size:12px;font-style:italic;font-weight:400}.legend-item.highlighted{color:var(--accent);background:#232733}.chart-area{flex:1;min-width:0;padding:16px 20px;position:relative}#chart{width:100%;height:100%}svg text{fill:var(--text-dim);font-size:11px}.axis-label{fill:var(--text-dim);font-size:12px}.grid line{stroke:#4a5160;stroke-opacity:.8;stroke-dasharray:2 3}.grid path{stroke:none}.rider-line{fill:none;stroke-width:1.6px;transition:stroke-opacity .15s,stroke-width .15s}.rider-line.dimmed{stroke-opacity:.08}.rider-line.hidden-line{display:none}.rider-line.highlighted{stroke-width:3.2px}.rider-line.rider-line-bridge{stroke-dasharray:3 3}.rider-dot{transition:opacity .15s}.tooltip{border:1px solid var(--panel-border);pointer-events:none;z-index:10;background:#1c2028;border-radius:6px;padding:8px 10px;font-size:12px;line-height:1.5;position:absolute;box-shadow:0 4px 14px #0006}.tooltip .t-name{color:var(--text);font-weight:600}.tooltip .t-team{color:var(--text-dim)}.overview-summary{align-items:baseline;gap:12px;margin-left:auto;font-size:14px;display:flex}.overview-summary[hidden]{display:none}.overview-summary-item{align-items:baseline;gap:6px;display:flex}.overview-summary-label{color:var(--text-dim);text-transform:uppercase;letter-spacing:.04em;font-size:12px}.overview-summary-value{color:var(--accent);font-size:18px;font-weight:600}.overview-summary-sep{color:var(--text-dim);font-size:16px}#overview-chart,#all-races-chart{width:100%;height:100%;display:none}#overview-chart.visible,#all-races-chart.visible{display:block}#stage-table{width:100%;height:100%;display:none}#stage-table.visible{align-items:stretch;gap:12px;display:flex}.stage-table-wrap{border:1px solid var(--panel-border);border-radius:6px;flex:1;min-width:0;height:100%;position:relative;overflow:auto}.stage-table-controls{border-right:1px solid var(--panel-border);flex-direction:column;flex:none;gap:8px;width:132px;padding-right:12px;display:flex}.table-filter-row{flex-wrap:wrap;gap:6px;display:flex}.table-filter-row button,.table-filter-dropdown .filter-toggle-btn{text-align:center;width:100%}.table-filter-dropdown{position:relative}.table-filter-dropdown .filter-panel{left:0;right:auto}.table-filter-count{color:var(--text-dim);text-align:center;font-variant-numeric:tabular-nums;font-size:11px}.stage-table-empty{color:var(--text-dim);text-align:center;padding:24px 16px;font-size:13px}.stage-table{border-collapse:separate;border-spacing:0;white-space:nowrap;font-size:12px}.stage-table th,.stage-table td{text-align:center;border-right:1px solid var(--panel-border);border-bottom:1px solid var(--panel-border);font-variant-numeric:tabular-nums;padding:5px 10px}.stage-table thead th{background:var(--panel);color:var(--text-dim);z-index:2;cursor:help;font-weight:500;position:sticky;top:0}.stage-table th.col-stage{min-width:46px}.stage-table .col-team{background:var(--panel);z-index:1;text-align:center;vertical-align:middle;width:22px;min-width:22px;max-width:22px;padding:4px 0;position:sticky;left:0}.stage-table .col-team-inner{writing-mode:vertical-rl;color:var(--text-dim);white-space:nowrap;text-overflow:ellipsis;cursor:default;max-height:160px;font-size:11px;display:block;overflow:hidden;transform:rotate(180deg)}.stage-table .col-bib{background:var(--panel);color:var(--text-dim);z-index:1;text-align:right;width:52px;min-width:52px;max-width:52px;position:sticky;left:0}.stage-table.has-teams .col-bib{left:22px}.stage-table .col-rider{background:var(--panel);text-align:left;z-index:1;position:sticky;left:52px}.stage-table.has-teams .col-rider{left:74px}.stage-table.has-teams.no-bib .col-rider{left:22px}.stage-table.no-bib:not(.has-teams) .col-rider{left:0}.stage-table tbody tr.team-band td{background:var(--team-band)}.stage-table tbody tr.team-band .col-team,.stage-table tbody tr.team-band .col-bib,.stage-table tbody tr.team-band .col-rider{background:var(--team-band-sticky)}.stage-table thead .col-bib,.stage-table thead .col-rider,.stage-table thead .col-team{z-index:3}.stage-table-name{cursor:pointer}.stage-table-name:hover{text-decoration:underline}.stage-table-status{color:var(--text-dim);font-size:11px}.stage-table thead .col-stage-cancelled{color:var(--text-dim);cursor:default;text-decoration:line-through}#riders-chart{flex-direction:column;gap:16px;width:100%;height:100%;display:none;overflow:hidden}#riders-chart.visible{display:flex}.riders-controls{flex-wrap:wrap;flex-shrink:0;align-items:center;gap:10px;display:flex}.riders-search-input{background:var(--panel);border:1px solid var(--panel-border);color:var(--text);border-radius:6px;width:220px;padding:7px 12px;font-family:inherit;font-size:14px}.riders-search-input:focus{outline:1px solid var(--accent)}.riders-filter-select{background:var(--panel);border:1px solid var(--panel-border);color:var(--text-dim);cursor:pointer;border-radius:6px;padding:7px 10px;font-family:inherit;font-size:13px}.riders-filter-select:hover{border-color:var(--accent)}.riders-multi-dropdown-btn{background:var(--panel);border:1px solid var(--panel-border);color:var(--text-dim);cursor:pointer;white-space:nowrap;appearance:none;border-radius:6px;padding:7px 10px;font-family:inherit;font-size:13px}.riders-multi-dropdown-btn:hover{border-color:var(--accent)}.riders-multi-dropdown-btn.active{border-color:var(--accent);color:var(--text)}.jersey-filter-group{align-items:stretch;gap:4px;display:flex}.jersey-filter-race-group{flex-direction:column;align-items:center;gap:4px;display:flex}.jersey-filter-race-label{color:var(--text-dim);-webkit-user-select:none;user-select:none;align-items:center;gap:6px;width:100%;font-size:11px;display:flex}.jersey-filter-race-label:before,.jersey-filter-race-label:after{content:"";background:var(--panel-border);flex:1;height:1px}.jersey-filter-race-btns{gap:4px;display:flex}.jersey-filter-sep{flex-direction:column;align-items:center;display:flex}.jersey-filter-sep-spacer{visibility:hidden;margin-bottom:4px;font-size:11px}.jersey-filter-sep-dash{color:var(--text-dim);-webkit-user-select:none;user-select:none;flex:1;align-items:center;font-size:13px;display:flex}.jersey-filter-btn{border:1px solid var(--panel-border);cursor:pointer;background:0 0;border-radius:6px;justify-content:center;align-items:center;padding:4px 6px;line-height:0;display:flex}.jersey-filter-btn:hover{border-color:var(--accent)}.jersey-filter-btn.active{border-color:var(--accent);background:var(--panel);box-shadow:0 0 0 1px var(--accent)}.riders-clear-btn{border:1px solid var(--border);color:var(--text-dim);cursor:pointer;white-space:nowrap;background:0 0;border-radius:4px;padding:6px 12px;font-size:13px}.riders-clear-btn:hover{border-color:var(--accent);color:var(--text)}.riders-count-label{color:var(--text-dim);margin-left:auto;font-size:13px}.riders-grid{flex:1;grid-template-columns:repeat(5,1fr);grid-auto-rows:29px;align-content:start;min-height:0;display:grid;overflow-y:auto}@media (width<=1100px){.riders-grid{grid-template-columns:repeat(4,1fr)}}@media (width<=800px){.riders-grid{grid-template-columns:repeat(3,1fr)}}.rider-name-btn{width:100%;min-width:0;color:var(--text-dim);text-align:left;cursor:pointer;white-space:nowrap;text-overflow:ellipsis;break-inside:avoid;content-visibility:auto;contain-intrinsic-size:auto 29px;background:0 0;border:none;border-radius:4px;padding:4px 8px;font-family:inherit;font-size:13px;line-height:1.6;display:block;overflow:hidden}.rider-name-btn:hover{color:var(--accent);background:var(--panel)}.rider-detail-header{border-bottom:1px solid var(--panel-border);flex-wrap:wrap;flex-shrink:0;align-items:baseline;gap:16px;padding-bottom:12px;display:flex}.rider-back-btn{border:1px solid var(--panel-border);color:var(--text-dim);cursor:pointer;background:0 0;border-radius:5px;flex-shrink:0;padding:4px 10px;font-family:inherit;font-size:13px}.rider-back-btn:hover{color:var(--text);border-color:var(--accent)}.rider-detail-name{color:var(--text);margin:0;font-size:22px;font-weight:600}.rider-detail-meta{color:var(--text-dim);margin-left:auto;font-size:13px}.race-toggle-group{flex-shrink:0;gap:8px;padding:10px 0 4px;display:flex}.race-toggle-btn{border:2px solid var(--race-color,#888);width:30px;height:30px;color:var(--race-color,#888);cursor:pointer;background:0 0;border-radius:50%;padding:0;font-family:inherit;font-size:13px;font-weight:700;line-height:1;transition:opacity .15s,background .15s,color .15s}.race-toggle-btn.active{background:var(--race-color,#888);color:var(--race-text,#fff)}.race-toggle-btn.inactive{opacity:.45}.race-toggle-btn.no-data{opacity:.2;cursor:default}.race-toggle-btn:not(.no-data):hover{opacity:1}.toggle-divider{color:var(--panel-border,#555);-webkit-user-select:none;user-select:none;align-self:center;margin:0 2px;font-size:18px;line-height:30px}.classif-toggle-btn{border:1px solid var(--panel-border,#555);height:28px;color:var(--text-dim);cursor:pointer;white-space:nowrap;background:0 0;border-radius:5px;padding:0 9px;font-family:inherit;font-size:12px;transition:opacity .15s,background .15s,color .15s}.classif-toggle-btn.active{color:var(--text);border-color:var(--text-dim);background:#ffffff1f}.classif-toggle-btn.inactive{opacity:.4}.classif-toggle-btn:hover{opacity:1}.rider-career-chart{flex:1;min-height:0}#chart.hidden,.sidebar.hidden{display:none}.overview-panel-label{fill:var(--text-dim);text-transform:uppercase;letter-spacing:.06em;font-size:11px;font-weight:600}.overview-no-data-label{fill:var(--text-dim);opacity:.7;font-size:13px;font-style:italic}.overview-bar{cursor:pointer;opacity:.85;transition:opacity .1s}.overview-bar:hover{opacity:1}.route-legend{color:var(--text-dim);flex-wrap:wrap;gap:14px;padding:6px 0 2px;font-size:12px;display:flex}.route-legend-item{align-items:center;gap:5px;display:flex}.route-legend-swatch{border-radius:2px;flex-shrink:0;width:12px;height:12px}.history-caveat{max-width:68ch;color:var(--text-dim);margin:2px 0 10px;font-size:12px;line-height:1.45}.history-grid{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px;padding:4px 2px 16px;display:grid}.history-cell{background:var(--panel);border:1px solid var(--panel-border);border-radius:6px;padding:8px 10px 6px}.history-title{color:var(--text);margin-bottom:2px;font-size:12px}.history-svg{width:100%;height:130px;display:block}.history-axis-label{color:var(--text-dim);text-align:right;font-size:10px}.legend-name.is-dq,.legend-rank.is-dq{opacity:.72;text-decoration:line-through;text-decoration-thickness:1px}.rider-dq-mark{opacity:.78;cursor:help;margin-left:.35em;font-size:.95em}.stage-table-adj{vertical-align:super;opacity:.75;cursor:help;font-size:.85em}.t-adj{color:var(--text-dim);white-space:normal;max-width:230px;margin-top:2px;font-size:11px;line-height:1.3}.legend-adj-mark{vertical-align:super;color:var(--text-dim);cursor:help;margin-left:.3em;font-size:.95em;line-height:1}.dq-filter-btn{border:1px solid var(--border);color:var(--text-dim);cursor:pointer;white-space:nowrap;background:0 0;border-radius:4px;padding:6px 12px;font-size:13px}.dq-filter-btn:hover{border-color:var(--accent);color:var(--text)}.dq-filter-btn.active{border-color:var(--accent);color:var(--text);background:color-mix(in srgb, var(--accent) 18%, transparent)}.rider-detail-dq{color:var(--text-dim);vertical-align:middle;white-space:nowrap;cursor:help;margin-left:.6em;font-size:.5em;font-style:italic;font-weight:500}#sheet-toggle,#sheet-backdrop{display:none}@media (width<=767px){.view-nav{flex-wrap:wrap;row-gap:6px}.topbar-row{flex-wrap:wrap;row-gap:8px}.topbar{padding-left:12px;padding-right:12px}body.is-mobile .sidebar{z-index:60;border-right:none;border-top:1px solid var(--panel-border);background:var(--panel,#16181d);width:auto;max-height:78vh;padding-bottom:max(16px, env(safe-area-inset-bottom));border-radius:12px 12px 0 0;transition:transform .18s;position:fixed;bottom:0;left:0;right:0;transform:translateY(100%);box-shadow:0 -8px 28px #00000073}body.is-mobile.sheet-open .sidebar{transform:translateY(0)}body.is-mobile.sheet-open .legend{padding-bottom:64px}body.is-mobile .sidebar.hidden{display:none}#sheet-backdrop{z-index:55;background:#00000080;display:none;position:fixed;inset:0}body.is-mobile.sheet-open #sheet-backdrop{display:block}#sheet-toggle[hidden],#sheet-backdrop[hidden]{display:none!important}body.is-mobile #sheet-toggle:not([hidden]){right:16px;bottom:max(16px, env(safe-area-inset-bottom));z-index:61;border:1px solid var(--panel-border);background:var(--accent,#e8c547);color:#1a1a1a;font:inherit;cursor:pointer;border-radius:24px;padding:12px 22px;font-weight:600;display:block;position:fixed;box-shadow:0 4px 14px #0006}.metric-inline,.race-select,.year-select,.riders-filter-select,.view-btn,.unit-toggle,.button-row button,.table-filter-row button,.filter-toggle-btn,.jersey-filter-btn,.riders-clear-btn,.dq-filter-btn,.riders-multi-dropdown-btn,.rider-back-btn,.race-toggle-btn{min-height:36px}.jersey-filter-btn,.race-toggle-btn,.button-row button,.table-filter-row button{min-width:36px}.y-axis-toggle{min-height:36px;left:20px}.chart-area{-webkit-overflow-scrolling:touch;padding:12px 10px;overflow-x:auto}.riders-grid{grid-template-columns:1fr;grid-auto-rows:36px}.rider-name-btn{contain-intrinsic-size:auto 36px}.rider-detail-name .rider-detail-dq{white-space:normal;margin-top:6px;margin-left:0;font-size:13px;display:block}#riders-chart{-webkit-overflow-scrolling:touch;overflow-x:auto}.riders-controls{flex-wrap:wrap;row-gap:8px}}
