@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:300;font-display:swap;src:url(/fonts/JetBrainsMono-Light.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/fonts/JetBrainsMono-Regular.woff2) format("woff2")}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:700;font-display:swap;src:url(/fonts/JetBrainsMono-Bold.woff2) format("woff2")}*,*:before,*:after{margin:0;padding:0;box-sizing:border-box}:root{--black: #000;--white: #fff;--gray-100: #f5f5f5;--gray-200: #e5e5e5;--gray-300: #d4d4d4;--gray-400: #a3a3a3;--gray-500: #737373;--gray-600: #525252;--gray-700: #404040;--gray-800: #262626;--gray-900: #171717;--accent: #ff3b30;--font: "JetBrains Mono", monospace;--max-width: 1200px;--section-gap: 120px}html{font-size:16px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{font-family:var(--font);font-weight:400;letter-spacing:.05em;color:var(--black);background:var(--white);line-height:1.6;overflow-x:hidden}.container{max-width:var(--max-width);margin:0 auto;padding:0 24px}.site-nav{display:flex;align-items:center;margin-bottom:32px}.site-nav .nav-links{display:flex;gap:24px;flex:1;justify-content:center}.site-nav a{font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.15em;text-decoration:none;color:var(--gray-400);transition:color .2s ease}.site-nav a:hover{color:var(--gray-600)}.site-nav a.active{color:var(--black)}.gender-toggle{display:flex;border:1px solid var(--gray-300);border-radius:4px;overflow:hidden;flex-shrink:0}.gender-toggle button{font-family:var(--font);font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;padding:6px 14px;border:none;cursor:pointer;background:transparent;color:var(--gray-400);transition:background .2s ease,color .2s ease}.gender-toggle button:hover{color:var(--gray-600)}.gender-toggle button.active{background:var(--black);color:var(--white)}header{padding:80px 0 40px;text-align:center}header h1{font-size:3rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;line-height:1.1}header .subtitle{font-size:.85rem;font-weight:300;color:var(--gray-500);margin-top:12px;text-transform:uppercase;letter-spacing:.15em}header .meta{display:flex;justify-content:center;gap:40px;margin-top:32px;font-size:.75rem;color:var(--gray-400);text-transform:uppercase;letter-spacing:.1em}header .meta .number{font-size:1.5rem;font-weight:700;color:var(--black);display:block;margin-bottom:4px}.chart-section{margin-bottom:var(--section-gap);opacity:0;transform:translateY(30px);transition:opacity .8s ease,transform .8s ease}.chart-section.visible{opacity:1;transform:translateY(0)}.chart-section h2{font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.2em;color:var(--gray-400);margin-bottom:8px}.chart-section .section-title{font-size:1.5rem;font-weight:700;margin-bottom:40px;line-height:1.2}footer{padding:80px 0;text-align:center;font-size:.7rem;color:var(--gray-400);text-transform:uppercase;letter-spacing:.15em}.footer-author{margin-top:16px;font-size:.7rem;color:var(--gray-400);text-transform:uppercase;letter-spacing:.15em}.footer-author a{color:var(--gray-500);text-decoration:none;transition:color .2s ease}.footer-author a:hover{color:var(--black)}.footer-socials{display:flex;justify-content:center;gap:16px;margin-top:10px}.footer-socials a{color:var(--gray-400)}.footer-socials a:hover{color:var(--black)}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-track{background:var(--white)}::-webkit-scrollbar-thumb{background:var(--gray-300)}.site-nav a:focus-visible,.gender-toggle button:focus-visible,.rider-select:focus-visible{outline:2px solid var(--black);outline-offset:2px}::selection{background:var(--black);color:var(--white)}.chart-container{width:100%;position:relative}.chart-container canvas{max-width:100%}#calendar-heatmap{height:280px}#race-timeline{height:400px;overflow-x:auto}#race-timeline svg{width:100%;height:100%}#monthly-density{height:360px}#distance-radial{height:480px}#grand-tour-tracker{height:300px}.grand-tour-grid{display:grid;grid-template-columns:1fr;gap:32px}.grand-tour-grid .tour-item h3{font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.15em;color:var(--gray-500);margin-bottom:8px}.grand-tour-grid .tour-item .tour-meta{display:flex;gap:24px;font-size:.65rem;color:var(--gray-400);text-transform:uppercase;letter-spacing:.1em;margin-bottom:16px}.grand-tour-grid .tour-chart{height:120px}#classics-grid{height:240px}#geo-treemap{height:400px}#rider-rankings{height:680px}#team-standings{height:520px}#points-flow{height:420px}#rider-comparison{height:480px}#race-timeline .axis text{font-family:var(--font);font-size:10px;fill:var(--gray-500);letter-spacing:.05em}#race-timeline .axis line,#race-timeline .axis path{stroke:var(--gray-200)}#race-timeline .lane-label{font-family:var(--font);font-size:10px;font-weight:700;fill:var(--gray-400);text-transform:uppercase;letter-spacing:.1em}#race-timeline .race-bar{cursor:pointer;transition:opacity .2s}#race-timeline .race-bar:hover{opacity:.7}#race-timeline .race-label{font-family:var(--font);font-size:8px;fill:var(--white);pointer-events:none}#race-timeline .today-line{stroke:var(--accent);stroke-width:1.5;stroke-dasharray:4 3}.echarts-tooltip{font-family:var(--font)!important;letter-spacing:.05em!important}@media(max-width:768px){#calendar-heatmap{height:200px}#race-timeline{height:350px}#monthly-density{height:300px}#distance-radial{height:380px}#geo-treemap{height:320px}#classics-grid{height:200px}#rider-rankings{height:600px}#team-standings{height:440px}#points-flow{height:340px}#rider-comparison{height:380px}}
