:root{--page-bg: #f4f7fb;--surface-1: #ffffff;--surface-2: #eef2f8;--surface-glass: rgba(255, 255, 255, .65);--glass-blur: 18px;--text-primary: #0f172a;--text-secondary: #364151;--text-muted: #4b5563;--gridline: #e2e8f0;--baseline: #cbd5e1;--border-glass: rgba(15, 23, 42, .08);--series-1: #2563eb;--series-2: #d97706;--accent: #0067ff;--accent-strong: #0052cc;--accent-soft: rgba(0, 103, 255, .08);--accent-glow: 0 8px 24px rgba(0, 103, 255, .18);--success: #16a34a;--danger: #dc2626;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 18px;--font-display: "Roboto", system-ui, sans-serif;--font-sans: "Roboto", system-ui, sans-serif;--terrain-cailloux: #a1724b;--terrain-herbe: #4f9d4f;--terrain-sentier: #c9a227;--terrain-piste: #7a5fc4;--terrain-route: #52514e;--slope-0-5: #5fae5f;--slope-5-10: #d4a72c;--slope-10-20: #e07b39;--slope-20-plus: #c0392b;--sidebar-bg: #0a1930;--sidebar-bg-elevated: #10264a;--sidebar-text: rgba(255, 255, 255, .92);--sidebar-text-muted: rgba(255, 255, 255, .56);--sidebar-active-bg: rgba(0, 103, 255, .22);--sidebar-border: rgba(255, 255, 255, .08)}@font-face{font-family:Roboto;src:url(/fonts/roboto-400.woff2) format("woff2");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Roboto;src:url(/fonts/roboto-500.woff2) format("woff2");font-weight:500;font-style:normal;font-display:swap}@font-face{font-family:Roboto;src:url(/fonts/roboto-700.woff2) format("woff2");font-weight:700;font-style:normal;font-display:swap}body{font-family:var(--font-sans);background:var(--page-bg);margin:0;color:var(--text-primary)}.app{max-width:900px;margin:0 auto;padding:2rem 1rem}.app-boot-placeholder{text-align:center;padding:3rem 1rem}.app-hero{position:relative;overflow:hidden;border-radius:var(--radius-lg)}.app-hero:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background-image:linear-gradient(180deg,rgba(244,247,251,.75) 0%,var(--page-bg) 90%),url(/hero.webp);background-size:cover;background-position:center 30%;opacity:.5;pointer-events:none}.app-header{position:relative;display:flex;align-items:center;gap:.75rem}.app-header h1{margin:0;font-family:var(--font-display);font-weight:700;font-size:clamp(2.2rem,6vw,4rem);line-height:1.05;background:linear-gradient(135deg,var(--text-primary),var(--accent));background-clip:text;-webkit-background-clip:text;color:transparent}.app-header__logo{width:56px;height:38px;flex-shrink:0;background-image:url(/logo.webp);background-repeat:no-repeat;background-size:80px auto;background-position:center top}.app-header__ridge{position:relative;height:2px;margin:.75rem 0 1.5rem;background:linear-gradient(90deg,var(--accent) 0%,transparent 70%);opacity:.7}button,a.button--primary{font:inherit;background:var(--surface-2);border:1px solid var(--gridline);border-radius:var(--radius-sm);padding:.5rem .9rem;color:var(--text-primary);cursor:pointer;text-decoration:none;display:inline-block;transition:background .15s ease,border-color .15s ease,box-shadow .15s ease}button:hover:not(:disabled),a.button--primary:hover{border-color:var(--accent)}button:disabled{opacity:.6;cursor:not-allowed}.button--primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}.button--primary:hover:not(:disabled){background:var(--accent-strong);border-color:var(--accent-strong);box-shadow:var(--accent-glow)}.button--danger{background:var(--surface-1);border-color:var(--danger);color:var(--danger)}.button--danger:hover:not(:disabled){background:var(--danger);border-color:var(--danger);color:#fff}.icon-button{display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;padding:0;background:var(--surface-2);border:1px solid var(--gridline);color:var(--text-secondary)}.icon-button:hover:not(:disabled){border-color:var(--accent);color:var(--text-primary)}.icon-button--danger{background:var(--surface-1);border-color:var(--danger);color:var(--danger)}.icon-button--danger:hover:not(:disabled){background:var(--danger);border-color:var(--danger);color:#fff}.icon-button--primary{background:var(--accent);border-color:var(--accent);color:#fff}.icon-button--primary:hover:not(:disabled){background:var(--accent-strong);border-color:var(--accent-strong);box-shadow:var(--accent-glow)}input[type=text],input[type=date],input[type=time],input[type=number],input[type=email],input[type=password],select,textarea{font:inherit;background:var(--surface-1);border:1px solid var(--gridline);border-radius:var(--radius-sm);padding:.45rem .6rem;color:var(--text-primary)}input[type=text]:focus,input[type=date]:focus,input[type=time]:focus,input[type=number]:focus,input[type=email]:focus,input[type=password]:focus,select:focus,textarea:focus{border-color:var(--accent)}input[type=radio],input[type=checkbox]{accent-color:var(--accent)}fieldset{border:1px solid var(--gridline);border-radius:var(--radius-md)}h2{font-family:var(--font-display);font-weight:700;font-size:1.5rem;color:var(--text-primary);margin:0 0 1rem}h3{font-family:var(--font-display);font-weight:600;font-size:1.1rem;color:var(--text-primary);margin:1.5rem 0 .75rem}h4{font-family:var(--font-display);font-weight:600;font-size:.95rem;color:var(--text-secondary);margin:.75rem 0 .4rem}.upload-zone-wrapper{margin-bottom:2rem}.upload-zone{border:2px dashed var(--gridline);border-radius:var(--radius-md);padding:2rem;text-align:center;cursor:pointer;background:var(--surface-1);color:var(--text-secondary)}.upload-zone--dragging{border-color:var(--accent);background:var(--accent-soft)}.upload-result{margin-top:1rem}.upload-progress__bar{height:6px;margin-top:.5rem;background:var(--gridline);border-radius:var(--radius-sm);overflow:hidden}.upload-progress__fill{height:100%;background:var(--accent);transition:width .2s ease}.refresh-samples-button{margin-top:.75rem}.upload-result__success{color:var(--success)}.upload-result__errors{color:var(--danger)}.import-job{padding:1rem 0;border-bottom:1px solid var(--gridline)}.import-job:last-child{border-bottom:none}.import-job__header{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.import-job__filename{min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.import-job__status{display:inline-flex;align-items:center;padding:.2rem .6rem;border-radius:999px;border:1px solid;font-size:.8rem;font-weight:500;flex-shrink:0}.import-job__status--pending,.import-job__status--running{border-color:var(--accent);color:var(--accent)}.import-job__status--done{border-color:var(--success);color:var(--success)}.import-job__status--failed{border-color:var(--danger);color:var(--danger)}.table-card{background:var(--surface-1);border:1px solid var(--border-glass);border-radius:var(--radius-lg);overflow-x:auto}@supports (backdrop-filter: blur(1px)){.table-card{background:var(--surface-glass);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur))}}.activity-table{width:100%;border-collapse:collapse;background:transparent}.activity-table th,.activity-table td{text-align:left;padding:.5rem .55rem;border-bottom:1px solid var(--gridline)}.activity-table__sortable{cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.activity-table__sortable:hover{color:var(--accent)}.activity-table__sort-arrow{margin-left:.3rem;font-size:.7rem;color:var(--accent)}.activity-table__num{font-variant-numeric:tabular-nums}.activity-table__badge{display:inline-flex;align-items:center;gap:.35rem;padding:.2rem .6rem;border-radius:999px;border:1px solid var(--gridline);color:var(--text-secondary);font-size:.8rem;cursor:pointer}.activity-table__badge:has(input:checked){border-color:var(--accent);color:var(--text-primary);box-shadow:var(--accent-glow)}.activity-table__badge input{cursor:pointer}.profile-section{margin-top:2rem}.profile-summary{font-size:1.05rem;color:var(--text-secondary)}.viz-root{background:var(--surface-1);border:1px solid var(--border-glass);border-radius:var(--radius-lg);padding:.5rem}.profile-charts-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:1rem;margin:1rem 0}.course-route-map{padding:0;overflow:hidden}.course-route-map__canvas{height:360px;width:100%}.map-marker{display:flex;align-items:center;justify-content:center;width:28px;height:28px;border-radius:50%;border:2px solid var(--surface-1);box-shadow:0 1px 4px #0f172a40}.map-marker svg{width:16px;height:16px}.map-marker--aid-station{color:var(--accent);background:var(--accent-soft)}.map-marker--peak{color:var(--text-primary);background:var(--surface-2)}.map-marker--hover{width:14px;height:14px;border-radius:50%;background:var(--accent);border:2px solid var(--surface-1);box-shadow:0 0 0 4px var(--accent-soft),0 1px 4px #0f172a4d}.progression-chart{padding:1rem 1rem .5rem;margin:1rem 0}.progression-chart__headline{margin-bottom:.5rem}.progression-chart__value{font-family:var(--font-display);font-size:2.2rem;font-weight:700;color:var(--text-primary);font-variant-numeric:tabular-nums}.progression-chart__label{font-size:.85rem;color:var(--text-muted)}.weekly-chart{display:flex;gap:1rem;align-items:flex-start}.weekly-chart__tabs{display:flex;flex-direction:column;gap:.4rem;flex-shrink:0}.weekly-chart__tab{background:var(--surface-2);border:1px solid var(--gridline);border-radius:var(--radius-sm);padding:.5rem .9rem;font-size:.85rem;font-weight:600;color:var(--text-secondary);cursor:pointer}.weekly-chart__tab--active{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.weekly-chart__panels{display:flex;flex-direction:column;gap:.75rem;flex:1;min-width:0}.weekly-chart__panels .progression-chart{margin:0}@media (max-width: 720px){.weekly-chart{flex-direction:column;align-items:stretch}.weekly-chart__tabs{flex-direction:row}}.viz-root__toolbar{display:flex;justify-content:flex-end;gap:.5rem;padding:.4rem .4rem 0}.icon-toggle{display:inline-flex;align-items:center;justify-content:center;padding:.35rem;color:var(--text-secondary)}.icon-toggle[aria-pressed=true]{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}@supports (backdrop-filter: blur(1px)){.viz-root{background:var(--surface-glass);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur))}}.chart-cap-label{fill:var(--text-secondary);font-size:12px;font-variant-numeric:tabular-nums}.chart-tooltip{background:var(--surface-1);border:1px solid var(--border-glass);border-radius:var(--radius-sm);padding:.5rem .75rem;font-size:.85rem;color:var(--text-primary);box-shadow:0 4px 16px #0f172a1f}@supports (backdrop-filter: blur(1px)){.chart-tooltip{background:var(--surface-glass);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur))}}.chart-tooltip__title{font-weight:600;margin-bottom:.25rem}.chart-tooltip__muted{color:var(--text-muted)}.terrain-summary{display:flex;flex-wrap:wrap;gap:.25rem 1rem;align-items:center;margin:.5rem 0 1rem;color:var(--text-secondary);font-size:.9rem}.terrain-summary__item{display:inline-flex;align-items:center;gap:.4rem}.terrain-summary__swatch{width:10px;height:10px;border-radius:50%;display:inline-block;flex-shrink:0}.terrain-breakdown__bar{display:flex;gap:2px;height:20px;width:100%}.terrain-breakdown__segment{position:relative;min-width:2px}.terrain-breakdown__tooltip{position:absolute;bottom:calc(100% + .5rem);left:50%;transform:translate(-50%);white-space:nowrap;z-index:1;pointer-events:none}.difficulty-badge{display:inline-flex;align-items:center;gap:.35rem;padding:.2rem .6rem;border-radius:999px;border:1px solid;font-size:.8rem;font-weight:500;cursor:default}.difficulty-badge__dot{width:8px;height:8px;border-radius:50%;display:inline-block;flex-shrink:0}.difficulty-badge-row{display:flex;align-items:center;flex-wrap:wrap;gap:.5rem}.difficulty-badge--muted{border-color:var(--gridline);color:var(--text-muted)}.difficulty-badge__explain{color:var(--text-muted);font-size:.85rem}.activity-table__row{cursor:pointer;border-left:2px solid transparent;transition:background .15s ease,border-color .15s ease}.activity-table__row:hover{background:var(--surface-2);border-left-color:var(--accent)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0f172a73;display:flex;align-items:center;justify-content:center;padding:1rem;z-index:10}@supports (backdrop-filter: blur(1px)){.modal-overlay{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}}.modal-card{background:var(--surface-1);color:var(--text-primary);border:1px solid var(--border-glass);border-radius:var(--radius-lg);box-shadow:0 16px 40px #0f172a2e;padding:1.5rem;max-width:640px;width:100%;max-height:90vh;overflow-y:auto}.modal-card--wide{max-width:860px}@supports (backdrop-filter: blur(1px)){.modal-card{background:var(--surface-glass);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur))}}.modal-header{display:flex;justify-content:space-between;align-items:center}.modal-header--minimal{justify-content:flex-end;margin-bottom:.5rem}.modal-header h2{margin:0;font-family:var(--font-display);font-weight:500;font-size:1.4rem}.modal-close{background:none;border:none;font-size:1.5rem;line-height:1;cursor:pointer;color:var(--text-secondary)}.auth-modal__form{display:flex;flex-direction:column;gap:.75rem;margin:1rem 0}.auth-modal__form label{display:flex;flex-direction:column;gap:.25rem}.auth-modal__form label.auth-modal__consent{flex-direction:row;align-items:flex-start;gap:.5rem;font-size:.9rem}.auth-modal__form .auth-modal__consent input{width:auto;margin-top:.2rem}.auth-modal__form input,.auth-modal__form select,.auth-modal__form textarea{width:100%}.duration-hm-fields{display:flex;align-items:center;gap:.4rem}.duration-hm-fields input{width:4.5rem}.duration-hm-fields span{color:var(--text-muted)}.bug-report-page{max-width:560px;margin:0 auto}.bug-report-page h3{text-align:center}.bug-report-form{max-width:480px;margin:0 auto}.bug-report-form textarea{resize:vertical}.bug-report-modal__description{white-space:pre-wrap;margin-top:1rem}.auth-modal__switch{background:none;border:none;padding:0;color:var(--accent);text-decoration:underline;cursor:pointer;font:inherit}.bento-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:.75rem;margin:1rem 0}.bento-tile{background:var(--surface-2);border:1px solid var(--border-glass);border-radius:var(--radius-lg);padding:1rem;transition:box-shadow .15s ease,border-color .15s ease}.bento-tile:hover{border-color:var(--accent);box-shadow:var(--accent-glow)}.bento-tile__value{font-family:var(--font-display);font-size:1.6rem;font-weight:700;color:var(--text-primary)}.bento-tile__label{margin-top:.25rem;font-size:.8rem;color:var(--text-muted)}.stats-card{background:var(--surface-1);border:1px solid var(--border-glass);border-radius:var(--radius-lg);padding:1.25rem}@supports (backdrop-filter: blur(1px)){.stats-card{background:var(--surface-glass);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur))}}.stats-card__header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.5rem}.stats-card__title{margin:0}.stats-card__period{width:auto;font-size:.85rem;padding:.3rem .5rem}.stats-card__list{margin:0}.stats-card__row{display:flex;align-items:baseline;justify-content:space-between;padding:.55rem 0;border-bottom:1px solid var(--gridline)}.stats-card__row:last-child{border-bottom:none}.stats-card__row dt{color:var(--text-secondary);font-size:.9rem}.stats-card__row dd{margin:0;font-family:var(--font-display);font-weight:700;color:var(--text-primary);font-variant-numeric:tabular-nums}.metric-help{position:relative;display:inline-block;margin-left:.35rem;text-align:left}.metric-help__button{width:1.25rem;height:1.25rem;padding:0;border-radius:50%;background:var(--accent-soft);border:1px solid var(--accent);color:var(--accent);font-size:.7rem;font-weight:700;line-height:1;cursor:pointer}.metric-help__bubble{position:absolute;z-index:20;top:calc(100% + .4rem);left:0;width:17rem;max-width:80vw;display:flex;flex-direction:column;gap:.35rem;padding:.6rem .75rem;background:var(--surface-1);border:1px solid var(--border-glass);border-radius:var(--radius-sm);box-shadow:0 4px 16px #0f172a1f;font-size:.85rem;font-weight:400;color:var(--text-secondary)}.metric-help__bubble strong{color:var(--text-primary)}.metric-help__detail{color:var(--text-muted)}.section-header{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:.75rem}.section-header h2,.section-header h3{margin:0}.section-header__actions{display:flex;align-items:center;gap:.5rem}.activity-detail-grid{display:grid;grid-template-columns:auto 1fr;gap:.25rem 1rem;margin:1rem 0}.activity-detail-grid dt{color:var(--text-muted)}.activity-detail-grid dd{margin:0;font-variant-numeric:tabular-nums}.slope-table{width:100%;border-collapse:collapse;margin-top:.75rem}.slope-table th,.slope-table td{text-align:left;padding:.4rem .6rem;border-bottom:1px solid var(--gridline);font-variant-numeric:tabular-nums}.aid-stations-editor{display:flex;flex-direction:column;gap:.35rem}.aid-station-row{display:flex;align-items:center;gap:.4rem;padding:.3rem .5rem;background:var(--surface-1);border:1px solid var(--border-glass);border-radius:var(--radius-md)}.aid-station-row input[type=number]{width:4rem}.aid-station-row__name{flex:1;min-width:0}.aid-station-row__cutoff{display:flex;align-items:center;gap:.3rem;margin-left:auto;color:var(--text-muted);font-size:.85rem}.format-tabs{display:flex;gap:.25rem;margin:1rem 0;border-bottom:1px solid var(--gridline)}.format-tab{padding:.5rem .9rem;background:none;border:none;border-bottom:2px solid transparent;color:var(--text-secondary);border-radius:0}.format-tab--active{color:var(--text-primary);border-bottom-color:var(--accent)}.aid-summary{display:flex;flex-wrap:wrap;gap:.4rem}.aid-summary__chip{display:inline-flex;align-items:center;gap:.35rem;padding:.25rem .6rem;background:var(--surface-1);border:1px solid var(--border-glass);border-radius:999px;font-size:.8rem;color:var(--text-secondary)}.aid-summary__chip-icon{display:flex;align-items:center;color:var(--accent)}.aid-station-row__icon{display:flex;align-items:center;justify-content:center;width:28px;height:28px;flex-shrink:0;border-radius:var(--radius-sm);color:var(--accent);background:var(--accent-soft)}.aid-station-row__unit{color:var(--text-muted)}.aid-station-row__kind{display:flex;gap:.15rem}.aid-stations-editor__actions{display:flex;gap:.5rem;margin-top:.5rem}.simulate-actions,.simulation-result{margin-top:1rem}.simulate-save{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;margin:.75rem 0}.simulate-save input{flex:1 1 16rem}.simulate-mode{display:flex;flex-wrap:wrap;gap:1.5rem;border:none;padding:0;margin:1rem 0 0;color:var(--text-secondary)}.simulate-mode legend{padding:0;font-weight:600;color:var(--text-primary)}.simulate-mode label{display:inline-flex;align-items:center;gap:.35rem}.simulate-target-time{display:flex;align-items:center;gap:.5rem;margin:.75rem 0}.slope-table__total td{font-weight:600;border-top:1px solid var(--gridline)}.simulation-history-panel__new-button{margin-bottom:1rem}.simulation-history-row{cursor:pointer}.simulation-history-row:hover{background:var(--surface-2)}.search-bar{position:relative;width:100%;margin-bottom:.75rem}.search-bar__icon{position:absolute;top:50%;left:1rem;transform:translateY(-50%);width:18px;height:18px;color:var(--text-muted);pointer-events:none}.race-courses-panel__toolbar{display:flex;align-items:center;gap:.75rem;margin-bottom:.75rem}.race-courses-panel__toolbar .search-bar{flex:1;margin-bottom:0}.simulation-course-picker__search{width:100%;padding:.7rem 1rem .7rem 2.75rem;border-radius:999px;border:1px solid var(--gridline);box-shadow:0 4px 16px #0f172a14;transition:box-shadow .15s ease,border-color .15s ease}.simulation-course-picker__search:focus{border-color:var(--accent);box-shadow:var(--accent-glow)}.simulation-course-picker__list{display:flex;flex-direction:column;gap:.25rem;margin:0 0 .75rem;padding:0;list-style:none}.simulation-course-picker__item{width:100%;text-align:left}.simulation-course-picker__formats{display:flex;flex-direction:column;gap:.25rem;margin:.25rem 0 .75rem 1.25rem;padding:0;list-style:none}.simulation-course-picker__formats button{width:100%;text-align:left}.segment-table-details{margin-top:1rem}.segment-table-details summary{cursor:pointer;color:var(--text-secondary);margin-bottom:.5rem}.app-shell{display:flex;min-height:100vh;background:var(--page-bg)}.app-shell__sidebar{width:220px;flex-shrink:0;display:flex;flex-direction:column;background:var(--sidebar-bg);color:var(--sidebar-text);padding:1.25rem .75rem}.app-shell__brand{display:flex;align-items:center;gap:.5rem;padding:0 .5rem;margin-bottom:1.5rem;font-family:var(--font-display);font-weight:700;font-size:1.1rem}.app-shell__brand--link{text-decoration:none;background:none;border:0;color:inherit;cursor:pointer;text-align:left}.app-shell__brand-logo{width:28px;height:28px;flex-shrink:0;background-image:url(/logo.webp);background-repeat:no-repeat;background-size:contain;background-position:center}.app-shell__nav-panel{display:flex;flex-direction:column;flex:1;min-height:0}.app-shell__nav-toggle{display:none;align-items:center;justify-content:center;background:none;border:none;color:var(--sidebar-text);cursor:pointer;padding:.4rem}.app-shell__nav{display:flex;flex-direction:column;gap:.2rem;flex:1}.app-shell__nav-item{text-decoration:none;display:flex;align-items:center;gap:.65rem;background:none;border:none;border-left:3px solid transparent;border-radius:0 var(--radius-md) var(--radius-md) 0;padding:.6rem .75rem .6rem calc(.75rem - 3px);font:inherit;font-size:.9rem;text-align:left;cursor:pointer;color:var(--sidebar-text-muted)}.app-shell__nav-item:hover{background:var(--sidebar-bg-elevated);color:var(--sidebar-text)}.app-shell__nav-item--active{background:var(--sidebar-active-bg);border-left-color:var(--accent);color:var(--sidebar-text)}.app-shell__logout{display:flex;align-items:center;gap:.65rem;background:none;border:none;border-radius:var(--radius-md);padding:.6rem .75rem;font:inherit;font-size:.9rem;text-align:left;cursor:pointer;color:var(--sidebar-text-muted)}.app-shell__logout:hover{background:var(--sidebar-bg-elevated);color:var(--sidebar-text)}.app-shell__main{flex:1;min-width:0}.app-shell__header{display:flex;align-items:center;justify-content:flex-end;gap:1rem;padding:calc(.85rem + env(safe-area-inset-top)) 2rem .85rem;background:var(--surface-1);border-bottom:1px solid var(--gridline)}.app-shell__header-actions{display:flex;align-items:center;gap:1rem}.app-shell__notification,.app-shell__notification-menu{position:relative}.app-shell__notification-badge{position:absolute;top:-4px;right:-4px;background:var(--accent);color:#fff;border-radius:999px;font-size:.65rem;line-height:1;padding:2px 5px;font-weight:700}.app-shell__notification-dropdown{min-width:260px}.app-shell__profile-dropdown-empty{padding:.5rem .6rem;color:var(--text-muted);font-size:.9rem}.app-shell__profile{display:flex;align-items:center;gap:.5rem;color:var(--text-secondary);font-size:.9rem}.app-shell__avatar{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--accent-soft);color:var(--accent);font-family:var(--font-display);font-weight:700;font-size:.8rem;flex-shrink:0}.app-shell__profile{background:none;border:none;font:inherit;cursor:pointer}.app-shell__profile:hover{color:var(--text-primary)}.app-shell__profile-menu{position:relative}.app-shell__profile-dropdown{position:absolute;top:calc(100% + .5rem);right:0;display:flex;flex-direction:column;min-width:180px;background:var(--surface-1);border:1px solid var(--border-glass);border-radius:var(--radius-md);box-shadow:0 16px 40px #0f172a2e;padding:.35rem;z-index:10}.app-shell__profile-dropdown-item{display:flex;align-items:center;gap:.6rem;background:none;border:none;border-radius:var(--radius-sm);padding:.5rem .6rem;color:var(--text-secondary);font:inherit;text-align:left;cursor:pointer}.app-shell__profile-dropdown-item:hover{background:var(--surface-2);color:var(--text-primary)}.account-card{display:flex;align-items:flex-start;gap:1.5rem;padding:1.5rem}.account-card__avatar{width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--accent-soft);color:var(--accent);font-family:var(--font-display);font-weight:700;font-size:1.4rem;flex-shrink:0}.account-card__form{max-width:320px;flex:1}.account-card__form-actions{display:flex;gap:.5rem}.android-auth-screen{min-height:100vh;min-height:100dvh;display:flex;flex-direction:column;align-items:center;padding:calc(3rem + env(safe-area-inset-top)) 1.5rem calc(2rem + env(safe-area-inset-bottom));background:var(--sidebar-bg)}.android-auth-screen__brand{display:flex;flex-direction:column;align-items:center;gap:.75rem;margin-bottom:2rem;color:var(--sidebar-text)}.android-auth-screen__brand .app-shell__brand-logo{width:96px;height:96px;background-size:contain;background-position:center}.android-auth-screen__legal{display:flex;flex-wrap:wrap;justify-content:center;gap:.5rem 1.25rem;margin-top:2.5rem}.android-auth-screen__legal .app-footer__link{color:var(--sidebar-text-muted);font-size:.8rem}.account-settings-links{padding:1.5rem;display:flex;flex-direction:column;gap:.75rem;align-items:flex-start}.account-card__danger-zone{margin-top:1.5rem;padding:1.5rem;display:flex;flex-direction:column;gap:.75rem;align-items:flex-start}.account-card__danger-zone h4{margin:0}.app-shell__content{max-width:1100px;margin:0 auto;padding:1.5rem 2rem 3rem}.app-shell__section-view--animate{animation:app-shell-section-fade-in .18s ease-out}@keyframes app-shell-section-fade-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion: reduce){.app-shell__section-view--animate{animation:none}}.app-shell__bottom-tabbar{position:fixed;left:0;right:0;bottom:0;display:flex;background:var(--sidebar-bg);border-top:1px solid var(--sidebar-border);padding:.4rem .25rem calc(.4rem + env(safe-area-inset-bottom));z-index:30}.app-shell__bottom-tabbar-item{flex:1;display:flex;flex-direction:column;align-items:center;gap:.2rem;background:none;border:none;color:var(--sidebar-text-muted);font-size:.68rem;padding:.25rem 0;cursor:pointer}.app-shell__bottom-tabbar-item--active{color:var(--accent)}.app-shell--native .app-shell__content{padding-bottom:calc(4.5rem + env(safe-area-inset-bottom))}.dashboard-grid{display:flex;flex-direction:column;gap:1.25rem}.public-nav{display:flex;align-items:center;justify-content:space-between;gap:1rem;max-width:1200px;margin:0 auto;padding:1.25rem 1.5rem;position:relative}.public-nav__brand{display:flex;align-items:center;gap:.5rem;font-family:var(--font-display);font-weight:700;font-size:1.1rem;color:var(--text-primary)}.public-nav__brand--button{background:none;border:none;padding:0;cursor:pointer}.public-nav__toggle{display:none;align-items:center;justify-content:center;background:none;border:none;color:var(--text-primary);cursor:pointer;padding:.4rem}.public-nav__links{display:flex;align-items:center;gap:1.75rem}.public-nav__links button:not(.button--primary){background:none;border:none;padding:0;font:inherit;font-size:.92rem;color:var(--text-secondary);cursor:pointer}.public-nav__links button:not(.button--primary):hover{color:var(--text-primary);text-decoration:underline}.public-nav__links a{color:var(--text-secondary);text-decoration:none;font-size:.92rem}.public-nav__links a:hover{color:var(--text-primary);text-decoration:underline}.public-banner{position:relative;overflow:hidden;padding:4.5rem 1.5rem 6rem;text-align:center;color:#fff}.public-banner:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;background-image:linear-gradient(180deg,#0a19308c,#0a1930e0),url(/hero.webp);background-size:cover;background-position:center 40%}.public-banner h1{margin:0 0 1rem;font-family:var(--font-display);font-weight:700;font-size:clamp(2.1rem,6vw,3.4rem);letter-spacing:.02em}.public-banner p{max-width:56ch;margin:0 auto 1.75rem;font-size:1.1rem;color:#ffffffe0}.public-home__body{max-width:900px;margin:0 auto;padding:3rem 1rem 1rem}.indicator-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:1rem;margin:1.5rem 0 3rem}.indicator-card{text-align:center}.indicator-card__value{font-family:var(--font-display);font-weight:700;font-size:1.8rem;color:var(--accent)}.indicator-card__label{margin-top:.25rem;color:var(--text-muted);font-size:.85rem}.feature-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1rem;margin-top:2.5rem}.feature-card{background:var(--surface-1);border:1px solid var(--border-glass);border-radius:var(--radius-lg);padding:1.25rem}@supports (backdrop-filter: blur(1px)){.feature-card{background:var(--surface-glass);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur))}}.feature-card svg{width:24px;height:24px;color:var(--accent);margin-bottom:.5rem}.feature-card h3{margin:0 0 .4rem;font-family:var(--font-display);font-size:1rem}.feature-card p{margin:0;color:var(--text-secondary);font-size:.88rem}.guide-page .feature-card h4{margin:0 0 .5rem;font-family:var(--font-display);font-size:1rem}.guide-page .feature-card ol{margin:0;padding-left:1.1rem;color:var(--text-secondary);font-size:.88rem;line-height:1.5}.guide-page .feature-card li{margin-bottom:.3rem}.guide-page .feature-card li:last-child{margin-bottom:0}.guide-shortcut{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap}.guide-shortcut p{margin:.2rem 0 0;color:var(--text-secondary);font-size:.9rem}.guide-shortcut button{display:flex;align-items:center;gap:.5rem;flex-shrink:0}.guide-shortcut__actions{display:flex;flex-wrap:wrap;gap:.5rem}.guide-shortcut button svg{width:16px;height:16px;margin:0;color:inherit}.app-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.75rem;max-width:1200px;margin:3rem auto 0;padding:1.25rem 1.5rem;border-top:1px solid var(--gridline);color:var(--text-muted);font-size:.82rem}.app-footer__legal{display:flex;flex-wrap:wrap;gap:1.25rem}.app-footer__link{background:none;border:none;padding:0;font:inherit;font-size:inherit;color:var(--text-muted);cursor:pointer;text-decoration:none}.app-footer__link:hover:not(:disabled){color:var(--accent)}.app-footer__link:disabled{cursor:default}.app-footer__link--inline{display:inline;color:var(--accent);text-decoration:underline}@media (max-width: 720px){.app-shell{flex-direction:column}.app-shell__sidebar{width:auto;flex-direction:row;align-items:center;position:relative}.app-shell__brand{margin-bottom:0}.app-shell__nav-toggle{display:inline-flex;margin-left:auto}.app-shell__nav-panel{display:none;position:absolute;top:100%;left:0;right:0;flex:none;background:var(--sidebar-bg);border-top:1px solid var(--sidebar-border);padding:.5rem .75rem .75rem;z-index:20;box-shadow:0 12px 24px #0f172a2e}.app-shell__nav-panel--open{display:flex}.app-shell__nav{flex:none}.app-shell__header{padding:calc(.75rem + env(safe-area-inset-top)) 1rem .75rem}.app-shell__content{padding:1rem 1rem 2rem}.format-tabs{flex-wrap:wrap}.account-card{flex-direction:column}.app-footer{flex-direction:column;align-items:flex-start}.app-footer__legal{flex-direction:column;gap:.6rem}.public-nav__toggle{display:inline-flex}.public-nav__links{display:none;position:absolute;top:100%;left:0;right:0;flex-direction:column;align-items:flex-start;gap:.4rem;background:var(--surface-1);border:1px solid var(--border-glass);border-radius:0 0 var(--radius-md) var(--radius-md);padding:.75rem 1.5rem 1rem;z-index:20;box-shadow:0 12px 24px #0f172a1f}.public-nav__links--open{display:flex}}@media (max-width: 480px){.road-book-overlay{padding:1rem}.activity-calendar{padding:.6rem}.activity-calendar__day{min-height:2.4rem;padding:.2rem}.activity-calendar__event{padding:.05rem .25rem}.activity-table th:nth-child(6),.activity-table th:nth-child(7),.activity-table td:nth-child(6),.activity-table td:nth-child(7){display:none}.slope-table--legs th:nth-child(4),.slope-table--legs th:nth-child(5),.slope-table--legs th:nth-child(8),.slope-table--legs th:nth-child(11),.slope-table--legs td:nth-child(4),.slope-table--legs td:nth-child(5),.slope-table--legs td:nth-child(8),.slope-table--legs td:nth-child(11){display:none}.slope-table--roadbook th:nth-child(7),.slope-table--roadbook td:nth-child(7){display:none}}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){*{animation-duration:.001ms!important;transition-duration:.001ms!important}}.course-import-zone{margin-bottom:1.5rem}.course-import-zone__kind{display:flex;gap:1.5rem;border:none;padding:0;margin:0 0 .75rem;color:var(--text-secondary)}.course-import-zone__kind legend{padding:0;font-weight:600;color:var(--text-primary)}.upload-zone--disabled{cursor:not-allowed;opacity:.6}.course-picker{margin-bottom:1rem}.course-list-panel td{vertical-align:top}.course-list-panel input[type=text]{width:100%}.course-list-panel__row{cursor:pointer;border-left:2px solid transparent;transition:background .15s ease,border-color .15s ease}.course-list-panel__row:hover{background:var(--surface-2);border-left-color:var(--accent)}.race-event-picker,.race-edition-picker{margin-bottom:.5rem}.race-create-inline{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;margin:.5rem 0 1rem}.activity-rename-input{flex:1 1 28rem}.race-grid__month{margin-top:1.5rem}.race-grid__month:first-child{margin-top:1rem}.race-grid__month-title{text-transform:capitalize}.race-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.75rem}.race-card{display:flex;flex-direction:column;align-items:flex-start;gap:.4rem;background:var(--surface-1);border:1px solid var(--border-glass);border-radius:var(--radius-lg);padding:1rem;text-align:left;cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease,transform .15s ease}.race-card:hover{border-color:var(--accent);box-shadow:var(--accent-glow);transform:translateY(-2px)}.race-card__avatar{width:44px;height:44px;border-radius:var(--radius-md);background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center;font-family:var(--font-display);font-weight:700;font-size:1rem}.race-card__name{font-weight:600;color:var(--text-primary)}.race-card__place{font-size:.85rem;color:var(--text-secondary)}.race-card__objectif-footer{font-size:.85rem;color:var(--accent-strong);font-weight:600}.inner-tabs{display:flex;gap:.4rem;margin:.75rem 0}.inner-tabs__tab{background:var(--surface-2);border:1px solid var(--gridline);border-radius:var(--radius-sm);padding:.5rem .9rem;font-size:.85rem;font-weight:600;color:var(--text-secondary);cursor:pointer}.inner-tabs__tab--active{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.objectifs-followup-banner{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1rem}.objectifs-followup-banner__item{background:var(--accent-soft);border:1px solid var(--accent);border-radius:var(--radius-md);padding:.65rem .9rem;color:var(--text-primary);font-size:.9rem;text-align:left;cursor:pointer}.objectifs-followup-banner__item:hover{box-shadow:var(--accent-glow)}.race-detail__header{display:flex;align-items:center;flex-wrap:wrap;gap:.75rem;margin-bottom:.75rem}.race-detail__header h2{margin:0}.race-detail__meta{display:flex;flex-wrap:wrap;align-items:center;gap:1.25rem;color:var(--text-secondary);margin-bottom:1rem}.race-detail__meta-item{display:inline-flex;align-items:center;gap:.4rem;color:inherit;text-decoration:none}a.race-detail__meta-item:hover{color:var(--accent)}.race-detail__meta-item svg{flex-shrink:0;color:var(--text-muted)}.race-detail__years{margin-bottom:1rem}.race-detail__edition-meta{display:flex;align-items:center;gap:.75rem;color:var(--text-secondary);margin-bottom:1rem}.race-detail__format-actions{display:flex;flex-wrap:wrap;gap:.75rem;margin:1rem 0}.add-format-upload{display:flex;flex-direction:column;gap:.5rem;background:var(--surface-1);border:1px solid var(--border-glass);border-radius:var(--radius-md);padding:.75rem;margin-top:.4rem}.add-format-upload label{display:flex;flex-direction:column;gap:.2rem;font-size:.85rem;color:var(--text-secondary)}.race-detail__body{display:flex;gap:1.5rem;align-items:flex-start}.race-detail__formats{flex:0 0 200px;display:flex;flex-direction:column;gap:.4rem}.race-detail__format-item{display:flex;flex-direction:column;align-items:flex-start;gap:.1rem;background:var(--surface-1);border:1px solid var(--border-glass);border-radius:var(--radius-md);padding:.6rem .8rem}.race-detail__format-item--active{border-color:var(--accent);background:var(--accent-soft)}.race-detail__format-name{font-weight:600;color:var(--text-primary)}.race-detail__format-meta{font-size:.8rem;color:var(--text-muted)}.race-detail__main{flex:1 1 auto;min-width:0}@media (max-width: 640px){.race-detail__body{flex-direction:column}.race-detail__formats{flex:none;flex-direction:row;flex-wrap:wrap;width:100%}}.static-page__intro{color:var(--text-secondary);margin:0 0 1.5rem;max-width:640px}.static-page .feature-card{margin-bottom:1rem;max-width:none}.static-page .feature-card h3{margin:0 0 .6rem}.concept-page .feature-card h3{text-align:center;font-size:1.3rem}.feature-card__heading{display:flex;align-items:flex-end;gap:.6rem;margin:0 0 .6rem}.feature-card__heading h3{margin:0;font-size:1.3rem;line-height:1;text-transform:uppercase}.feature-card__icon{width:32px;height:32px;flex-shrink:0}.static-page .feature-card p,.static-page .feature-card ul,.static-page .feature-card ol{margin:0 0 .75rem;color:var(--text-secondary);font-size:.92rem;line-height:1.6}.static-page .feature-card p:last-child,.static-page .feature-card ul:last-child,.static-page .feature-card ol:last-child{margin-bottom:0}.static-page .feature-card li{margin-bottom:.3rem}.static-page__table{width:100%;border-collapse:collapse;font-size:.88rem}.static-page__table th,.static-page__table td{text-align:left;padding:.5rem .75rem .5rem 0;border-bottom:1px solid var(--gridline);color:var(--text-secondary)}.static-page__table th{color:var(--text-muted);font-weight:600}.roadmap-grid{display:grid;grid-template-columns:1fr;gap:1rem}.roadmap-phase__header{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.roadmap-phase__header h3{margin:0}.roadmap-status{flex-shrink:0;padding:.2rem .6rem;border-radius:999px;font-size:.75rem;font-weight:600;white-space:nowrap}.roadmap-status--fait{background:color-mix(in srgb,var(--success) 18%,transparent);color:var(--success)}.roadmap-status--en_cours{background:var(--accent-soft);color:var(--accent)}.roadmap-status--a_venir{background:var(--surface-2);color:var(--text-muted)}.changelog-list{display:grid;grid-template-columns:1fr;gap:1rem;margin-top:1.5rem}.changelog-groups{display:flex;flex-direction:column;gap:1.25rem;margin-top:1.5rem}.changelog-group__date{display:inline-block;color:var(--text-secondary);font-size:1rem;font-weight:700;text-transform:capitalize;padding:.25rem .7rem;border:1px solid var(--border-glass);border-radius:999px;margin-bottom:.9rem}.changelog-entry{margin-top:.9rem}.changelog-entry:first-of-type{margin-top:0}.changelog-entry__row{display:flex;align-items:center;gap:.6rem;margin-bottom:.3rem}.changelog-entry h4{margin:0;font-family:var(--font-display);font-size:.95rem}.changelog-badge{flex-shrink:0;display:inline-block;padding:.2rem .6rem;border-radius:999px;font-size:.75rem;font-weight:600;white-space:nowrap}.changelog-badge--fix{background:color-mix(in srgb,var(--success) 18%,transparent);color:var(--success)}.changelog-badge--evolution{background:var(--accent-soft);color:var(--accent)}.road-book-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;overflow-y:auto;background:var(--page-bg);padding:2rem}.cookie-banner{position:fixed;left:1rem;right:1rem;bottom:1rem;z-index:50;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:1rem;max-width:760px;margin:0 auto;padding:1rem 1.25rem;background:var(--surface-1);border:1px solid var(--border-glass);border-radius:var(--radius-lg);box-shadow:0 10px 30px #0f172a26}@supports (backdrop-filter: blur(1px)){.cookie-banner{background:var(--surface-glass);-webkit-backdrop-filter:blur(var(--glass-blur));backdrop-filter:blur(var(--glass-blur))}}.cookie-banner p{margin:0;flex:1 1 320px;font-size:.85rem;color:var(--text-secondary)}.cookie-banner__actions{display:flex;gap:.5rem;flex:0 0 auto}.activity-calendar{margin:1rem 0 1.5rem;padding:1rem;background:var(--surface-1);border:1px solid var(--border-glass);border-radius:var(--radius-lg)}.activity-calendar__header{display:flex;align-items:center;justify-content:center;gap:1rem;margin-bottom:.75rem}.activity-calendar__header h4{margin:0;min-width:10rem;text-align:center;text-transform:capitalize}.activity-calendar__header button{padding:.25rem .6rem}.activity-calendar__weekdays,.activity-calendar__week{display:grid;grid-template-columns:repeat(7,1fr);gap:1px}.activity-calendar__weekdays{margin-bottom:1px;color:var(--text-muted);font-size:.8rem;font-weight:600;text-align:center}.activity-calendar__day{min-height:4.5rem;padding:.3rem;background:var(--surface-1);border:1px solid var(--gridline);display:flex;flex-direction:column;gap:.15rem;overflow:hidden}.activity-calendar__day--outside{background:var(--surface-2);color:var(--text-muted)}.activity-calendar__day--today .activity-calendar__day-number{display:inline-flex;align-items:center;justify-content:center;width:1.4rem;height:1.4rem;background:var(--accent);color:#fff;border-radius:999px}.activity-calendar__day-number{font-size:.8rem;font-variant-numeric:tabular-nums}.activity-calendar__event{width:100%;padding:.1rem .4rem;background:var(--accent-soft);color:var(--accent);border:none;border-radius:var(--radius-sm);font-size:.72rem;text-align:left;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (max-width: 720px){.activity-calendar__day{min-height:3rem}.activity-calendar__event{font-size:.65rem}}.course-request-callout{display:flex;margin-bottom:1rem;align-items:center;gap:1rem;margin-top:1.5rem;padding:1rem 1.25rem;background:var(--accent-soft);border:1px dashed var(--accent);border-radius:var(--radius-lg)}.course-request-callout__icon{flex:none;width:44px;height:44px;border-radius:50%;background:var(--accent);color:#fff;display:flex;align-items:center;justify-content:center}.course-request-callout__icon svg{width:22px;height:22px}.course-request-callout__text{flex:1;display:flex;flex-direction:column;gap:.15rem;color:var(--text-secondary)}.course-request-callout__text strong{color:var(--text-primary)}@media (max-width: 480px){.course-request-callout{flex-direction:column;align-items:flex-start}}h2+.course-request-callout{margin-top:0}.badge-tile__icon{display:inline-flex;align-items:center;justify-content:center;width:2.5rem;height:2.5rem;border-radius:50%;background:var(--accent-soft);color:var(--accent)}.badge-tile__icon svg{width:1.4rem;height:1.4rem}.badge-tile__label{margin-top:.6rem;font-family:var(--font-display);font-weight:700;color:var(--text-primary)}.badge-tile__description{margin:.25rem 0 0;font-size:.8rem;color:var(--text-secondary)}.badge-tile__status{margin-top:.5rem;font-size:.75rem;color:var(--text-muted)}.badge-tile--locked .badge-tile__icon{background:var(--surface-1);color:var(--text-muted)}.badge-tile--locked .badge-tile__label,.badge-tile--locked .badge-tile__description{color:var(--text-muted)}.replay__stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(7rem,1fr));gap:.5rem 1rem;margin-bottom:.5rem}.replay__label{display:block;font-size:.75rem;color:var(--text-muted)}.replay__value{display:block;font-family:var(--font-display);font-size:1.15rem;font-variant-numeric:tabular-nums}.replay__status{margin:0 0 .5rem;color:var(--text-secondary)}.replay__chart{position:relative}.replay__cursor{position:absolute;top:0;bottom:0;width:0;pointer-events:none}.replay__cursor-line{position:absolute;left:-1px;width:2px;background:var(--accent);opacity:.6}.replay__cursor-dot{position:absolute;left:-7px;width:14px;height:14px;margin-top:-7px;border-radius:50%;background:var(--accent);border:2px solid #ffffff;box-shadow:0 0 0 2px var(--accent)}.replay__controls{display:flex;flex-wrap:wrap;align-items:center;gap:.75rem;margin-top:.75rem}.replay__controls input[type=range]{flex:1 1 12rem}.replay3d__stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(6rem,1fr));gap:.5rem 1rem;margin-bottom:.5rem}.replay3d__map{width:100%;height:min(45vh,420px);border-radius:var(--radius-lg);overflow:hidden}.replay3d__options{display:flex;flex-wrap:wrap;gap:.75rem 1.5rem;margin-top:.75rem;font-size:.85rem;color:var(--text-secondary)}.replay3d__options label{display:flex;align-items:center;gap:.5rem}.replay3d__zoom{display:flex;align-items:center;gap:.4rem}.activity-table__row--selected{background:var(--accent-soft);border-left-color:var(--accent)}.race-result-legend{display:flex;flex-wrap:wrap;gap:.5rem 1.25rem;margin:.5rem 0;font-size:.85rem;color:var(--text-secondary)}.race-result-legend__swatch{display:inline-block;width:10px;height:10px;margin-right:.4rem;border-radius:50%;background:var(--series-1);opacity:.6}.race-result-legend__swatch--line{width:16px;height:2px;border-radius:1px;background:var(--text-primary);opacity:1;vertical-align:middle}.race-result-gap--ok{color:var(--success)}.race-result-gap--warn{color:var(--danger);font-weight:500}.race-result-detail .activity-table th,.race-result-detail .activity-table td{white-space:nowrap}.admin-costs__form{display:flex;flex-wrap:wrap;gap:.5rem;margin:.75rem 0 1.5rem}.admin-costs__form input[type=number]{width:9rem}.replay3d__rotate-hint{display:none;margin:0;font-size:.75rem;color:var(--text-muted)}.replay3d--compact.modal-card{position:fixed;top:0;right:0;bottom:0;left:0;max-width:none;max-height:none;width:100%;height:100%;border-radius:0;padding:0;overflow:hidden;background:var(--surface-1);-webkit-backdrop-filter:none;backdrop-filter:none}.replay3d--compact .replay3d__map{position:absolute;top:0;right:0;bottom:0;left:0;height:auto;border-radius:0}.replay3d--compact .modal-header{position:absolute;top:max(.4rem,env(safe-area-inset-top));right:max(.5rem,env(safe-area-inset-right));z-index:3;margin:0}.replay3d--compact .modal-header h2{display:none}.replay3d--compact .replay3d__hud,.replay3d--compact .replay3d__dock{position:absolute;z-index:2;background:var(--surface-glass);border:1px solid var(--border-glass);border-radius:var(--radius-lg);padding:.35rem .6rem}.replay3d--compact .replay3d__hud{top:max(.4rem,env(safe-area-inset-top));left:max(.5rem,env(safe-area-inset-left));right:calc(max(.5rem,env(safe-area-inset-right)) + 3rem);display:flex;flex-direction:column;gap:.1rem}.replay3d--compact .replay3d__stats{display:flex;flex-wrap:wrap;gap:.1rem .9rem;margin:0}.replay3d--compact .replay__label{font-size:.65rem}.replay3d--compact .replay__value{font-size:.85rem}.replay3d--compact .replay__status{margin:0;font-size:.75rem}.replay3d--compact .replay3d__dock{left:max(.5rem,env(safe-area-inset-left));right:max(.5rem,env(safe-area-inset-right));bottom:max(.4rem,env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:.3rem}.replay3d--compact .replay3d__options{order:0;margin:0;gap:.3rem 1rem}.replay3d--compact .replay__chart{order:1}.replay3d--compact .replay__controls{order:2;margin:0;gap:.4rem}.replay3d--compact .replay__controls button,.replay3d--compact .replay__controls select{padding:.3rem .6rem;font-size:.85rem}@media (orientation: portrait){.replay3d--compact .replay3d__rotate-hint{display:block}}.modal-overlay--immersive{z-index:1000;padding:0;background:var(--surface-1);-webkit-backdrop-filter:none;backdrop-filter:none}.replay3d--compact .modal-header{flex:0 0 auto}.replay3d--compact .replay3d__close{width:2.5rem;height:2.5rem;font-size:1.6rem;line-height:1}.admin-livetrail__form{display:flex;flex-wrap:wrap;gap:.5rem;margin:.75rem 0 1rem}.admin-livetrail__form input[type=number]{width:12rem}.admin-livetrail__form textarea{flex:1 1 24rem;min-width:12rem;font-family:inherit;font-size:inherit}.import-job__status--cancelled{border-color:var(--gridline);color:var(--text-muted)}.format-series__block{margin:1.25rem 0}.format-series__card{padding:.75rem 1rem;margin-bottom:.75rem}.format-series__card .admin-livetrail__form{margin:.25rem 0 .5rem}.format-series__card .admin-livetrail__form input[type=text]{flex:1 1 18rem;min-width:12rem}.home-hero{position:relative;overflow:hidden;isolation:isolate;color:#fff;background:var(--sidebar-bg)}.home-hero:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:-1;background-image:linear-gradient(90deg,#0a1930f0,#0a1930c7,#0a193026 80%),url(/hero.webp);background-size:cover;background-position:right bottom}.home-hero__inner{max-width:1100px;margin:0 auto;padding:5rem 1.5rem 6.5rem;display:grid;gap:1.5rem}.home-hero h1{margin:0;max-width:16ch;font-family:var(--font-display);font-weight:900;font-size:clamp(2.2rem,5.4vw,3.9rem);line-height:1.08;letter-spacing:-.015em}.home-hero p{margin:0;max-width:46ch;font-size:clamp(1.05rem,1.8vw,1.25rem);color:#ffffffe0}.home-hero__cta{display:flex;flex-wrap:wrap;gap:.75rem}.home-hero__ghost{padding:.7rem 1.4rem;border-radius:var(--radius-md);border:1px solid rgba(255,255,255,.45);background:#ffffff1a;color:#fff;font:inherit;cursor:pointer}.home-hero__ghost:hover{background:#fff3}.home-body{max-width:1100px;margin:0 auto;padding:0 1.5rem 1rem}.home-body .indicator-grid{margin-top:-2.5rem;position:relative}.home-section{padding-top:3.5rem}.home-section h2{margin:.4rem 0 .6rem;font-family:var(--font-display);font-size:clamp(1.5rem,3vw,2.1rem);line-height:1.15}.home-kicker{font-size:.8rem;letter-spacing:.12em;text-transform:uppercase;font-weight:700;color:var(--accent)}.home-section__lead{margin:0 0 1.25rem;max-width:62ch;color:var(--text-muted)}#courses .home-section__lead{max-width:none}.home-note{margin:.9rem 0 0;font-size:.82rem;color:var(--text-muted)}.home-count{display:inline-flex;align-items:baseline;gap:.5rem;margin-bottom:1.25rem;padding:.5rem 1rem;border-radius:999px;background:var(--accent-soft);color:var(--accent-strong)}.home-count b{font-size:1.4rem}.home-count span{font-size:.9rem}.home-races{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:1rem}.home-race{display:grid;gap:.25rem}.home-steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:1rem;margin:0;padding:0;list-style:none;counter-reset:step}.home-steps li{counter-increment:step}.home-steps li:before{content:counter(step);display:grid;place-items:center;width:34px;height:34px;margin-bottom:.75rem;border-radius:50%;background:var(--accent-soft);color:var(--accent);font-weight:700}.home-sample__top{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin-bottom:.75rem}.home-sample__top h3{margin:0}.home-sample__scroll{overflow-x:auto;margin-bottom:1rem}.home-badge{padding:.2rem .6rem;border-radius:999px;background:var(--accent-soft);color:var(--accent);font-size:.72rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.home-faq{display:grid;gap:.6rem}.home-faq details{background:var(--surface-1);border:1px solid var(--border-glass);border-radius:var(--radius-md)}.home-faq summary{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:1rem 1.25rem;font-weight:500;color:var(--text-primary);cursor:pointer;list-style:none}.home-faq summary::-webkit-details-marker{display:none}.home-faq summary:after{content:"+";color:var(--accent);font-size:1.4rem;line-height:1;transition:transform .2s}.home-faq details[open] summary:after{transform:rotate(45deg)}.home-faq p{margin:0;padding:0 1.25rem 1.1rem;color:var(--text-muted)}.home-final{margin-top:4rem;padding:4.5rem 1.5rem;text-align:center;color:#fff;background:linear-gradient(135deg,var(--sidebar-bg),var(--sidebar-bg-elevated));display:grid;gap:1rem;justify-items:center}.home-final h2{margin:0;color:#fff;font-family:var(--font-display);font-size:clamp(1.6rem,3.6vw,2.4rem)}.home-final p{margin:0;max-width:50ch;color:#ffffffd6}.public-banner--compact{padding:3rem 1.5rem 3.5rem}.public-banner--compact p{margin-bottom:0}.static-page--toc{max-width:1100px;display:grid;grid-template-columns:250px minmax(0,1fr);gap:2rem;align-items:start}.static-page__content{min-width:0}.static-page .feature-card{scroll-margin-top:5rem}.static-toc{position:sticky;top:5rem}.static-toc__label{padding-left:.75rem;margin-bottom:.5rem;font-size:.75rem;letter-spacing:.12em;text-transform:uppercase;font-weight:700;color:var(--text-muted)}.static-toc ul{display:grid;gap:2px;margin:0;padding:0;list-style:none}.static-toc a{display:block;padding:.5rem .75rem;border-radius:var(--radius-md);color:var(--text-secondary);font-size:.9rem;line-height:1.35;text-decoration:none}.static-toc a:hover{background:var(--surface-2)}.static-toc a[aria-current=true]{background:var(--accent-soft);color:var(--accent-strong);font-weight:500}.roadmap-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:.75rem;margin-bottom:1rem}.roadmap-stat b{display:block;font-size:2rem;line-height:1.1;color:var(--text-primary)}.roadmap-stat span{color:var(--text-muted);font-size:.88rem}.roadmap-filters{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:1rem}.roadmap-chip{padding:.55rem 1rem;border-radius:999px;border:1px solid var(--gridline);background:var(--surface-1);color:var(--text-secondary);font:inherit;font-size:.9rem;cursor:pointer}.roadmap-chip[aria-pressed=true]{background:var(--sidebar-bg);border-color:var(--sidebar-bg);color:#fff}@media (min-width: 900px){.roadmap-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width: 900px){.static-page--toc{grid-template-columns:minmax(0,1fr);gap:1rem}.static-toc{position:static}.static-toc ul{display:flex;flex-wrap:wrap;gap:.4rem}.static-toc a{background:var(--surface-1);border:1px solid var(--gridline)}.static-toc__label{padding-left:0}}@media (max-width: 720px){.home-hero__inner{padding:3.5rem 1.25rem 5rem}.home-hero:before{background-image:linear-gradient(0deg,#0a1930e6,#0a19308c),url(/hero.webp);background-position:78% bottom}.roadmap-stats{grid-template-columns:minmax(0,1fr)}}.home-how-viz{position:relative;overflow:hidden;margin-bottom:1rem;border-radius:var(--radius-lg);background:linear-gradient(135deg,var(--sidebar-bg),var(--sidebar-bg-elevated));aspect-ratio:1100 / 250;min-height:160px}.home-how-viz svg{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%}.feature-card .home-sample__profile{display:block;width:100%;height:170px;margin:0 0 1rem}.home-sample__body{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:1.5rem;align-items:center}@media (max-width: 900px){.home-sample__body{grid-template-columns:minmax(0,1fr)}}@media (max-width: 720px){.home-how-viz{aspect-ratio:5 / 2;min-height:0;max-width:100%}}.race-past-results .muted{color:var(--text-muted);font-size:.85rem}.error{color:var(--danger)}.usage-bars{display:grid;gap:8px;max-width:560px}.usage-bars__row{display:grid;grid-template-columns:160px 1fr 40px;align-items:center;gap:10px;font-size:13px}.usage-bars__label{color:var(--text-secondary)}.usage-bars__track{height:10px;background:var(--surface-2);border-radius:4px;overflow:hidden}.usage-bars__fill{display:block;height:100%;background:var(--series-1);border-radius:4px}.usage-bars__value{text-align:right;font-variant-numeric:tabular-nums}.home-race--link{text-align:left;cursor:pointer;font:inherit;color:inherit}.home-race--link:hover{box-shadow:0 0 0 2px var(--accent-glow)}.home-race__meta{color:var(--text-muted);font-size:.85rem}.home-race__cta{margin-top:.75rem;justify-self:start;padding:.25rem .7rem;border-radius:999px;background:var(--accent-soft);color:var(--accent-strong);font-size:.78rem;font-weight:600}.public-sim{display:grid;gap:1rem}.public-sim__courses{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:.75rem}.public-sim__course{display:grid;gap:.15rem;padding:.75rem 1rem;border:1px solid var(--gridline);border-radius:var(--radius-md);background:var(--surface-2);color:var(--text-secondary);font:inherit;text-align:left;cursor:pointer}.public-sim__course strong{color:var(--text-primary)}.public-sim__course-meta{color:var(--text-muted);font-size:.85rem}.public-sim__course--active{border-color:var(--accent);background:var(--accent-soft)}.public-sim__tabs{display:flex;gap:.5rem;margin-bottom:1rem}.public-sim__tab{padding:.4rem .9rem;border:1px solid var(--gridline);border-radius:999px;background:var(--surface-2);color:var(--text-secondary);font:inherit;cursor:pointer}.public-sim__tab--active{border-color:var(--accent);background:var(--accent-soft);color:var(--accent-strong);font-weight:600}.public-sim__form{display:flex;flex-wrap:wrap;align-items:flex-end;gap:1rem}.public-sim__form label,.public-sim__ref label{display:grid;gap:.25rem;color:var(--text-secondary);font-size:.9rem}.public-sim__ref{display:flex;flex-wrap:wrap;gap:1rem}.public-sim__total{display:flex;align-items:baseline;gap:.75rem;margin:0 0 .5rem}.public-sim__total strong{font-family:var(--font-display);font-size:2.2rem;color:var(--text-primary)}.public-sim__total span{color:var(--text-muted)}.public-sim__signup{margin:.75rem 0;padding:.75rem 1rem;border-left:4px solid var(--accent);border-radius:6px;background:var(--accent-soft);color:var(--accent-strong);font-weight:600}.public-sim__actions{display:flex;flex-wrap:wrap;gap:.75rem;margin:1rem 0}.public-sim__results{margin-top:1.5rem;padding-top:1rem;border-top:1px solid var(--gridline)}.public-sim__results h4{margin:0 0 .75rem}.public-sim__index-input{display:grid;gap:.25rem;max-width:14rem;margin-bottom:.75rem;color:var(--text-secondary);font-size:.9rem}
