:root{--brand:#0f766e;--brand-ink:#fff;--link:#0f766e;--bg:#fff;--surface:#f4f6f6;--ink:#111827;--muted:#4b5563;--border:#d1d5db;--danger:#b91c1c;--notice-bg:#ecfdf5;--error-bg:#fef2f2;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial;--bg:#0b1211;--link:#2dd4bf;--surface:#16201f;--ink:#f3f4f6;--muted:#a7b0ae;--border:#2b3836;--danger:#f87171;--notice-bg:#0f2a24;--error-bg:#2a1414}}*{box-sizing:border-box}html,body{background:var(--bg);color:var(--ink);margin:0;font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;font-size:17px;line-height:1.5}.screen{max-width:32rem;padding:max(24px, env(safe-area-inset-top)) 16px 32px;flex-direction:column;gap:16px;margin:0 auto;display:flex}p{margin:0}h1,h2{margin:0;line-height:1.2}h1{font-size:1.75rem}h2{font-size:1.15rem}.muted{color:var(--muted)}.card{background:var(--surface);border:1px solid var(--border);border-radius:12px;flex-direction:column;gap:12px;padding:16px;display:flex}button,.button{border:1px solid var(--border);background:var(--bg);min-height:44px;color:var(--ink);font:inherit;cursor:pointer;border-radius:10px;justify-content:center;align-items:center;gap:10px;padding:10px 16px;font-weight:600;text-decoration:none;display:inline-flex}button:disabled,.button[aria-disabled=true]{opacity:.5;cursor:not-allowed}.button-primary{background:var(--brand);border-color:var(--brand);color:var(--brand-ink)}.google-button{color:#1f1f1f;background:#fff;border:1px solid #747775;font-family:Roboto,system-ui,sans-serif;font-weight:500}.strava-button{color:#fff;background:#fc5200;border-color:#fc5200}.powered-by-strava{color:#fc5200;margin:0;font-size:.8rem;font-weight:700}.welcome{background:var(--hero-color);scroll-behavior:smooth;position:fixed;inset:0;overflow-y:auto}@media (prefers-reduced-motion:reduce){.welcome{scroll-behavior:auto}}.welcome-first{flex-direction:column;justify-content:flex-end;min-height:100%;display:flex;position:relative}.welcome-hero img{object-fit:cover;opacity:0;width:100%;height:100%;transition:opacity .4s ease-out;position:fixed;inset:0}@media (prefers-reduced-motion:reduce){.welcome-hero img{transition:none}}.welcome-hero img[data-state=shown]{opacity:1}.welcome-tint{background:#00000026;position:fixed;inset:0}.welcome-panel{width:100%;max-width:none;padding:48px max(16px, calc((100% - 32rem) / 2 + 16px)) max(32px, env(safe-area-inset-bottom));background:linear-gradient(to bottom, transparent 0, rgb(0 0 0/var(--text-panel-alpha)) 48px);color:#fff;margin:0;position:relative}.welcome-panel .muted{color:rgb(255 255 255/var(--text-secondary-alpha))}.welcome-panel .notice,.welcome-panel .error{color:var(--ink)}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.home{position:fixed;inset:0;overflow:hidden}.home-map{background:var(--surface);position:absolute;inset:0}.home-wind-canvas{pointer-events:none;position:absolute;top:0;left:0}.home-wind{flex-direction:row;font-weight:600}.home-top{top:max(12px, env(safe-area-inset-top));left:max(12px, env(safe-area-inset-left));z-index:1002;align-items:center;gap:8px;display:flex;position:absolute}.home-settings{border:3px solid var(--bg);border-radius:50%;min-height:0;padding:0;box-shadow:0 1px 4px #00000059}.home-settings .avatar{width:48px;height:48px}.home-badge{background:var(--bg);align-self:center}.home-bottom{left:max(12px, env(safe-area-inset-left));right:72px;bottom:calc(28px + env(safe-area-inset-bottom));z-index:1000;flex-direction:column;align-items:flex-start;gap:8px;max-width:28rem;display:flex;position:absolute}.home-panel{background:var(--bg);color:var(--ink);border-radius:12px;flex-direction:column;gap:10px;margin:0;padding:12px;display:flex;box-shadow:0 1px 6px #0000004d}.home-panel-button{box-shadow:0 1px 6px #0000004d}.home-centre{right:max(12px, env(safe-area-inset-right));bottom:calc(28px + env(safe-area-inset-bottom));z-index:1000;border-radius:50%;width:48px;height:48px;padding:0;position:absolute;box-shadow:0 1px 6px #0000004d}@media (width<=420px){.home-bottom,.home-centre{bottom:calc(44px + env(safe-area-inset-bottom))}}.home-centre.is-following{color:var(--brand)}.home-options{z-index:1000;flex-direction:column;align-items:flex-end;gap:8px;display:flex;position:absolute;top:118px;right:10px}.home-options-button{border-radius:10px;width:46px;height:46px;padding:0;box-shadow:0 1px 6px #0000004d}.home-options-menu{background:var(--bg);border-radius:12px;padding:6px;box-shadow:0 1px 6px #0000004d}.home-options-menu button{white-space:nowrap;border:none}.home .leaflet-bar a,.area-picker .leaflet-bar a{background:var(--bg);width:44px;height:44px;color:var(--ink);line-height:44px}.home .leaflet-control-attribution,.area-picker .leaflet-control-attribution{color:#1f2937;background:#ffffffd9}.home .leaflet-control-attribution a,.area-picker .leaflet-control-attribution a{color:#1f2937}.button-danger{color:var(--danger);border-color:var(--danger)}.area-picker{border:1px solid var(--border);border-radius:10px;height:240px;min-height:200px;overflow:hidden}.area-picker:focus-visible{outline:3px solid var(--brand);outline-offset:2px}.notice,.error{border-radius:10px;padding:10px 12px}.notice{background:var(--notice-bg)}.error{background:var(--error-bg)}.badge{border:1px solid var(--border);color:var(--muted);border-radius:999px;align-self:flex-start;padding:2px 10px;font-size:.8rem;font-weight:600}.avatar{object-fit:cover;background:var(--brand);width:56px;height:56px;color:var(--brand-ink);border-radius:50%;justify-content:center;align-items:center;font-size:1.25rem;font-weight:700;display:inline-flex}.row{align-items:center;gap:12px;display:flex}a{color:var(--link)}.rides-button{background:var(--bg);min-height:44px;color:var(--ink);white-space:nowrap;border-radius:999px;padding:8px 16px;font-weight:600;box-shadow:0 1px 6px #0000004d}.rides-panel{top:calc(max(12px, env(safe-area-inset-top)) + 60px);left:max(16px, env(safe-area-inset-left));right:max(16px, env(safe-area-inset-right));z-index:1001;overscroll-behavior:contain;background:var(--bg);height:75dvh;color:var(--ink);border-radius:12px;flex-direction:column;gap:12px;padding:0 12px 12px;display:flex;position:fixed;overflow-y:auto;box-shadow:0 1px 6px #0000004d}@media (width>=720px){.rides-panel{left:max(12px, env(safe-area-inset-left));right:auto;bottom:max(12px, env(safe-area-inset-bottom));width:440px;height:auto}.home:has(.rides-panel) .home-bottom{left:calc(max(12px, env(safe-area-inset-left)) + 452px)}}.rides-heading{z-index:1;background:var(--bg);justify-content:space-between;align-items:center;gap:8px;margin:0 -12px;padding:4px 4px 4px 12px;display:flex;position:sticky;top:0}.rides-heading h2{margin:0;font-size:1.15rem}.rides-hide{width:44px;height:44px;color:inherit;background:0 0;border:0;border-radius:50%;place-items:center;padding:0;display:grid}.rides-hide svg{stroke:currentColor;stroke-width:2.25px;stroke-linecap:round}.rides-list{flex-direction:column;gap:12px;margin:0;padding:0;list-style:none;display:flex}.ride-card{border:1px solid var(--border);border-radius:12px;flex-direction:column;gap:10px;padding:12px;display:flex;position:relative}.ride-card.is-selected{border-color:var(--brand);box-shadow:inset 0 0 0 1px var(--brand)}.ride-card:focus-within{outline:2px solid var(--link);outline-offset:2px}.ride-select{min-height:44px;color:var(--ink);text-align:left;background:0 0;border:none;flex-direction:column;align-items:flex-start;gap:2px;padding:0;display:flex}.ride-select:focus-visible{outline:none}.ride-select:after{content:"";z-index:1;border-radius:12px;position:absolute;inset:0}.ride-name{overflow-wrap:anywhere;font-size:1.05rem;font-weight:700}.ride-when{color:var(--muted);font-size:.9rem}.ride-stats{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:0;display:grid}.ride-stat{flex-direction:column;display:flex}.ride-stat dt{color:var(--muted);font-size:.8rem}.ride-stat dd{margin:0;font-size:1.1rem;font-weight:600}.ride-picture{aspect-ratio:320/120;background:var(--surface);border-radius:8px;width:100%;height:auto;display:block;position:relative;overflow:hidden}.ride-picture-tile{pointer-events:none;-webkit-user-select:none;user-select:none;max-width:none;position:absolute}.ride-picture svg{width:100%;height:100%;position:absolute;inset:0}.ride-picture-route-edge{fill:none;stroke:#fff;stroke-width:6px;stroke-linecap:round;stroke-linejoin:round}.ride-picture-missing{color:var(--muted);justify-content:center;align-items:center;font-size:.9rem;display:flex}.ride-picture-route{fill:none;stroke:#c2410c;stroke-width:3px;stroke-linecap:round;stroke-linejoin:round}.ride-picture-start{fill:#15803d;stroke:var(--bg);stroke-width:2px}.ride-picture-finish{fill:var(--ink);stroke:var(--bg);stroke-width:2px}.ride-wind{font-weight:600}.rides-filters{flex-direction:column;gap:10px;display:flex}.rides-wind{border:0;flex-wrap:wrap;align-items:center;gap:8px;margin:0;padding:0;display:flex}.rides-wind legend{float:left;margin-right:4px;font-weight:600}.rides-chip{display:inline-flex;position:relative}.rides-chip input{opacity:0;cursor:pointer;margin:0;position:absolute;inset:0}.rides-chip span{border:1px solid var(--border);border-radius:999px;align-items:center;min-height:44px;padding:0 14px;display:inline-flex}.rides-chip input:checked+span{background:var(--ink);color:var(--bg);border-color:var(--ink);font-weight:600}.rides-chip input:focus-visible+span{outline:3px solid var(--link);outline-offset:2px}.rides-filter{flex-wrap:wrap;align-items:center;gap:8px;font-weight:600;display:flex}.rides-filter select,.rides-filter input{min-height:44px;font:inherit;font-weight:400}.rides-range{white-space:nowrap;align-items:center;gap:6px;display:inline-flex}.rides-distance input{width:4.5em}.rides-summary p{margin:0}.rides-empty{flex-direction:column;align-items:flex-start;gap:8px;display:flex}.rides-status{color:var(--muted)}.rides-connect{flex-direction:column;align-items:flex-start;gap:10px;display:flex}.rides-clear,.rides-more{align-self:flex-start}.home-route{stroke:#c2410c;stroke-linecap:round;stroke-linejoin:round}.home-route-tail,.home-route-cross,.home-route-head,.home-route-edge{stroke-linecap:round;stroke-linejoin:round}.home-route-tail{stroke:#15803d}.home-route-cross{stroke:#eab308}.home-route-edge{stroke:#422006}.home-route-head{stroke:#b91c1c}.home-route-arrow svg{fill:#1f2937;stroke:#fff;stroke-width:1.5px;stroke-linejoin:round;display:block}.route-swatch{vertical-align:middle;border-radius:3px;width:14px;height:6px;margin:0 4px 2px 2px;display:inline-block}.route-swatch-tail{background:#15803d}.route-swatch-cross{background:#eab308;box-shadow:0 0 0 1px #422006}.route-swatch-head{background:#b91c1c}.rain-open-button{white-space:nowrap;min-width:44px;min-height:44px}.rain-analysis{top:calc(max(12px, env(safe-area-inset-top)) + 60px);left:max(16px, env(safe-area-inset-left));right:max(16px, env(safe-area-inset-right));bottom:max(12px, env(safe-area-inset-bottom));z-index:1002;overscroll-behavior:contain;background:var(--bg);color:var(--ink);border-radius:12px;flex-direction:column;gap:10px;padding:0 12px 12px;display:flex;position:fixed;overflow-y:auto;box-shadow:0 1px 6px #0000004d}@media (width>=720px){.rain-analysis{left:auto;right:max(64px, env(safe-area-inset-right));width:420px}}.rain-analysis-heading{z-index:1;background:var(--bg);justify-content:space-between;align-items:center;gap:8px;margin:0 -12px;padding:4px 4px 4px 12px;display:flex;position:sticky;top:0}.rain-analysis-heading h2{margin:0;font-size:1.15rem}.rain-settings{flex-wrap:wrap;gap:12px;display:flex}.rain-setting{flex-direction:column;gap:4px;font-weight:600;display:flex}.rain-setting input,.rain-setting select{width:9rem;min-height:44px;font:inherit;font-weight:400}.rain-summary{margin:0;font-size:1.05rem;font-weight:600}.rain-note,.rain-credit{margin:0}.rain-credit{font-size:.8rem}.rain-key{flex-wrap:wrap;gap:4px 14px;margin:0;padding:0;font-size:.875rem;list-style:none;display:flex}.rain-swatch{vertical-align:-2px;margin-right:4px}.rain-snaps{flex-direction:column;gap:12px;margin:0;padding:0;list-style:none;display:flex}.rain-snap{border:1px solid #d1d5db;border-radius:10px;grid-template-columns:1fr auto;gap:4px 8px;padding:10px;display:grid}.rain-snap-head{font-variant-numeric:tabular-nums;margin:0;font-weight:600}.rain-source{grid-column:1/-1;margin:0;font-size:.875rem}.rain-snap-map{background:#e5e7eb;border-radius:6px;grid-column:1/-1;width:100%;display:block}.rain-verdict{align-items:center;gap:4px;margin:0;font-weight:700;display:inline-flex}.rain-verdict[data-verdict=wet]{color:#08519c}.rain-verdict[data-verdict=dry]{color:#92400e}.rain-verdict[data-verdict=none]{color:#4b5563}.rain-icon-drop{fill:#4292c6;stroke:#08519c;stroke-width:1.2px}.rain-icon-sun{fill:#facc15;stroke:#b45309;stroke-width:1.5px;stroke-linecap:round}.rain-icon-unknown{fill:none;stroke:currentColor;stroke-width:1.6px;stroke-linecap:round}.home-actions{flex-wrap:wrap;gap:8px;display:flex}.rides-departure{padding:0 0 4px}.cyclist{background:linear-gradient(#f4f6f6,#e5e7eb);border-radius:10px;width:100%;height:auto;max-height:70vh;display:block}.cyclist-label{fill:#111827;font-size:12.5px;font-weight:600}.cyclist-sublabel{fill:#4b5563;font-size:10.5px}.cyclist-leader{fill:none;stroke:#6b7280;stroke-width:1px}.cyclist-dot{fill:#111827;stroke:#fff;stroke-width:1.5px}.wear p{margin:0}.wear-status{color:var(--muted)}.wear-forecast{flex-direction:column;gap:2px;display:flex}.wear-adjustments{font-variant-numeric:tabular-nums;margin:-4px 0 0;font-size:.85rem}.wear-band{font-weight:600}.wear-kit{gap:4px;margin:0;display:grid}.wear-kit-row{grid-template-columns:4.5em 1fr;gap:8px;display:grid}.wear-kit-row dt{color:var(--muted)}.wear-kit-row dd{margin:0}.wear-tips{flex-direction:column;gap:4px;margin:0;padding-left:1.2em;display:flex}.ride-bar{background:var(--brand);min-width:0;max-width:calc(100vw - 150px);color:var(--brand-ink);border-radius:14px;align-items:stretch;display:flex;overflow:hidden;box-shadow:0 1px 6px #0000004d}.ride-bar button{min-height:48px;color:inherit;box-shadow:none;background:0 0;border:0;border-radius:0}.ride-bar-back{text-align:left;align-items:center;gap:6px;min-width:0;padding:6px 4px 6px 10px;display:flex}.ride-bar-chevron path,.ride-bar-clear path{fill:none;stroke:currentColor;stroke-width:2.2px;stroke-linecap:round;stroke-linejoin:round}.ride-bar-text{flex-direction:column;min-width:0;line-height:1.2;display:flex}.ride-bar-name{white-space:nowrap;text-overflow:ellipsis;font-weight:700;overflow:hidden}.ride-bar-kicker{letter-spacing:.04em;text-transform:uppercase;vertical-align:1px;background:#ffffff38;border-radius:6px;margin-right:2px;padding:1px 6px;font-size:.72rem;font-weight:700}.ride-bar-meta{opacity:.9;white-space:nowrap;text-overflow:ellipsis;font-size:.85rem;overflow:hidden}.ride-bar-clear{flex:none;place-items:center;width:44px;padding:0;display:grid;border-left:1px solid #ffffff40!important}.ride-bar button:focus-visible{outline:2px solid var(--brand-ink);outline-offset:-4px}.home-action{background:var(--bg);min-height:44px;color:var(--brand);white-space:nowrap;border-radius:999px;align-items:center;gap:6px;padding:8px 14px;font-weight:600;display:inline-flex;box-shadow:0 1px 6px #0000004d}.home-action svg{fill:currentColor;stroke:currentColor;stroke-width:1.6px}.home-action svg path{fill:none}.home-route-key{gap:0;padding:8px 12px}.home-route-key summary{cursor:pointer;flex-wrap:wrap;align-items:center;gap:4px 12px;list-style:none;display:flex}.home-route-key summary::-webkit-details-marker{display:none}.home-route-key summary:after{content:"ⓘ";color:var(--muted)}.route-key-item{white-space:nowrap;align-items:center;gap:4px;display:inline-flex}.home-route-key p{color:var(--muted);margin:8px 0 0;font-size:.9rem}.home-grade-down-steep{stroke:#256abf}.home-grade-down{stroke:#86b6ef}.home-grade-flat{stroke:#9e9d97}.home-grade-up{stroke:#f19a82}.home-grade-up-hard{stroke:#e34948}.home-grade-up-steep{stroke:#9e1c1c}.home-grade,.home-grade-casing{fill:none;stroke-linecap:round;stroke-linejoin:round}.home-grade-casing{stroke:#fff}.home-route-marker{fill:#fff;stroke:var(--ink)}.route-card{gap:8px;width:min(100%,26rem);padding:10px 12px}.route-card .home-route-key{padding:0}.route-mode{border:1px solid var(--border);background:var(--surface);border-radius:999px;align-self:flex-start;margin:0;padding:2px;display:inline-flex}.route-mode-option{position:relative}.route-mode-option input{opacity:0;cursor:pointer;margin:0;position:absolute;inset:0}.route-mode-option span{min-height:32px;color:var(--muted);border-radius:999px;padding:6px 14px;font-size:.9rem;font-weight:600;display:block}.route-mode-option input:checked+span{background:var(--bg);color:var(--ink);box-shadow:0 1px 3px #0003}.route-mode-option input:focus-visible+span{outline:2px solid var(--brand);outline-offset:1px}.route-card-note{margin:0}.elevation{flex-direction:column;gap:4px;display:flex}.elevation-readout{color:var(--muted);font-variant-numeric:tabular-nums;margin:0;font-size:.9rem}.elevation-readout strong{color:var(--ink)}.elevation-chart{touch-action:none;cursor:crosshair;width:100%;height:auto;display:block}.elevation-plot:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:4px}.elevation-grid{stroke:var(--border);stroke-width:1px}.elevation-axis{fill:var(--muted);font-variant-numeric:tabular-nums;font-size:10px}.elevation-area{fill:var(--ink);fill-opacity:.07}.elevation-line{fill:none;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}.elevation-cursor line{stroke:var(--ink);stroke-width:1px}.elevation-cursor circle{fill:#fff;stroke:var(--ink);stroke-width:2px}.elevation-key{color:var(--muted);flex-wrap:wrap;gap:2px 10px;margin:0;padding:0;font-size:.78rem;list-style:none;display:flex}.elevation-key li{align-items:center;gap:4px;display:inline-flex}.elevation-key line{stroke-width:3px;stroke-linecap:round}@media (prefers-color-scheme:dark){.elevation .home-grade-down-steep{stroke:#6da7ec}.elevation .home-grade-down{stroke:#2a5f9e}.elevation .home-grade-flat{stroke:#6f6e69}.elevation .home-grade-up{stroke:#a8473f}.elevation .home-grade-up-hard{stroke:#e2635c}.elevation .home-grade-up-steep{stroke:#f3a596}.elevation-cursor circle{fill:var(--bg)}}.home-when-slot{top:calc(max(12px, env(safe-area-inset-top)) + 64px);left:max(12px, env(safe-area-inset-left));right:calc(max(12px, env(safe-area-inset-right)) + 60px);z-index:1000;pointer-events:none;display:flex;position:absolute}.home-when-slot>*{pointer-events:auto}.home:has(.rides-panel) .home-when-slot{display:none}.home-when{background:var(--bg);min-height:40px;color:var(--ink);border-radius:999px;align-items:center;gap:6px;padding:6px 12px;font-weight:500;display:inline-flex;box-shadow:0 1px 6px #0000004d}.home-when svg{fill:none;stroke:currentColor;stroke-width:1.6px;stroke-linecap:round}.home-when-caret{color:var(--muted)}.when-panel{background:var(--bg);width:100%;max-width:44rem;color:var(--ink);border-radius:14px;flex-direction:column;gap:6px;padding:8px 10px 10px;display:flex;box-shadow:0 1px 6px #0000004d}.when-head{justify-content:space-between;align-items:center;gap:8px;display:flex}.when-done{border-radius:999px;min-height:32px;padding:4px 12px;font-weight:600}.when-strip{overscroll-behavior-x:contain;scroll-snap-type:x proximity;align-items:stretch;gap:6px;padding-bottom:4px;display:flex;overflow-x:auto}.when-day{border-left:2px solid var(--border);color:var(--muted);text-transform:uppercase;letter-spacing:.04em;align-self:center;padding:0 2px 0 6px;font-size:.75rem;font-weight:700}.when-chip{border:1px solid var(--border);background:var(--surface);scroll-snap-align:center;cursor:pointer;border-radius:10px;flex-direction:column;flex:none;align-items:center;gap:2px;min-width:58px;padding:6px 8px;display:flex;position:relative}.when-chip input{opacity:0;cursor:pointer;margin:0;position:absolute;inset:0}.when-chip.is-checked{background:var(--brand);border-color:var(--brand);color:var(--brand-ink)}.when-chip:has(input:focus-visible){outline:2px solid var(--brand);outline-offset:2px}.when-time{font-variant-numeric:tabular-nums;font-weight:700}.when-weather{font-variant-numeric:tabular-nums;gap:6px;font-size:.78rem;display:flex}.when-wind{align-items:center;gap:2px;display:inline-flex}.when-wind-arrow{fill:currentColor}.ride-match{flex-direction:column;gap:3px;margin:0 0 6px;display:flex}.ride-match-bar{background:var(--border);border-radius:4px;gap:2px;height:8px;display:flex;overflow:hidden}.ride-match-bar span{height:100%;display:block}.ride-match-tail{background:#15803d}.ride-match-cross{background:#eab308}.ride-match-head{background:#b91c1c}.ride-match-words,.ride-match-other{color:var(--muted);font-variant-numeric:tabular-nums;margin:0;font-size:.82rem}.rides-more{border-radius:999px;align-self:center;min-height:44px;margin:4px 0 8px;padding:8px 18px;font-weight:600}.home-welcome h2{margin:0;font-size:1.15rem}.home-welcome p{margin:0}.home:has(.rides-panel) .home-welcome{display:none}html{-webkit-text-size-adjust:100%}body{overscroll-behavior:none;-webkit-tap-highlight-color:transparent}button,a,label,summary,select{-webkit-tap-highlight-color:transparent;touch-action:manipulation}button{-webkit-user-select:none;user-select:none;transition:transform .12s ease-out}button:active:not(:disabled):not(.ride-select){transform:scale(.97)}.ride-card{transition:transform .12s ease-out}.ride-card:has(.ride-select:active){transform:scale(.985)}@media (width<=719.98px){.sheet{width:auto;padding-bottom:calc(12px + env(safe-area-inset-bottom));border-radius:20px 20px 0 0;transition:transform .22s cubic-bezier(.2,.8,.2,1);animation:.28s cubic-bezier(.2,.8,.2,1) sheet-in;inset:auto 0 0;box-shadow:0 -6px 28px #00000047}.rides-panel.sheet{height:86dvh}.rain-analysis.sheet{max-height:90dvh}.sheet.is-dragging{transition:none}.sheet-handle{touch-action:none;cursor:grab;border-radius:20px 20px 0 0;padding-top:20px;position:sticky}.sheet-handle:before{content:"";background:var(--border);border-radius:3px;width:40px;height:5px;margin-left:-20px;position:absolute;top:7px;left:50%}}@keyframes sheet-in{0%{transform:translateY(100%)}to{transform:none}}@media (prefers-reduced-motion:reduce){.sheet,button{transition:none;animation:none}button:active:not(:disabled){transform:none}.ride-card:has(.ride-select:active){transform:none}}.home-bottom:has(.sheet){z-index:1003}@media (width<=719.98px){.rain-analysis.sheet{max-height:calc(100dvh - max(12px, env(safe-area-inset-top)) - 72px)}}.home-location-note{font-size:.9rem}.rides-near{flex-direction:column;gap:8px;display:flex}.rides-near-help{background:var(--notice-bg);border-radius:10px;flex-direction:column;gap:8px;margin:0;padding:10px 12px;display:flex}.rides-near-help p{margin:0}.home-grade-mark{pointer-events:none;background:0 0;border:0}.home-grade-mark svg path{stroke:#fff;stroke-width:1.6px;stroke-linejoin:round}.home-grade-mark .home-grade-up path{fill:#f19a82}.home-grade-mark .home-grade-up-hard path{fill:#e34948}.home-grade-mark .home-grade-up-steep path{fill:#9e1c1c}.home-grade-mark .home-grade-down path{fill:#86b6ef}.home-grade-mark .home-grade-down-steep path{fill:#256abf}.elevation-key-marks{flex-basis:100%}.elevation-key .mark-up{color:#e34948}.elevation-key .mark-down{color:#256abf}.home-actions{flex-wrap:nowrap}.home-action{min-height:44px;padding:6px 14px}.route-card-top{align-items:center;gap:8px;min-width:0;display:flex}.route-card-summary{min-width:0;color:var(--muted);white-space:nowrap;text-overflow:ellipsis;flex:1;font-size:.9rem;overflow:hidden}.route-card-fold{width:44px;min-height:44px;color:var(--muted);box-shadow:none;background:0 0;border:0;border-radius:50%;flex:none;place-items:center;margin-left:auto;padding:0;display:grid}.route-card-fold svg path{fill:none;stroke:currentColor;stroke-width:2.2px;stroke-linecap:round;stroke-linejoin:round}.ride-kind{background:var(--brand);color:var(--brand-ink);letter-spacing:.04em;text-transform:uppercase;vertical-align:2px;border-radius:6px;margin-right:6px;padding:1px 7px;font-size:.72rem;font-weight:700;display:inline-block}.ride-delete{z-index:2;border:1px solid var(--border);background:var(--bg);min-height:36px;color:var(--danger);box-shadow:none;border-radius:999px;align-self:flex-end;padding:4px 12px;font-size:.85rem;position:relative}.routes-actions{flex-wrap:wrap;gap:8px;display:flex}.routes-actions .button-primary,.routes-actions label.button-like{min-height:44px}.routes-actions label.button-like{border:1px solid var(--border);background:var(--bg);cursor:pointer;border-radius:999px;align-items:center;padding:8px 16px;font-weight:600;display:inline-flex}.routes-actions label.button-like:focus-within{outline:2px solid var(--brand);outline-offset:2px}.rides-strava-optional{color:var(--muted);margin:0;font-size:.9rem}.home.is-building .home-top,.home.is-building .home-bottom,.home.is-building .home-when-slot,.home.is-building .home-centre,.home.is-building .home-options{display:none}.home-map.is-building{cursor:crosshair}.builder-top{top:max(12px, env(safe-area-inset-top));left:max(12px, env(safe-area-inset-left));right:calc(max(12px, env(safe-area-inset-right)) + 56px);z-index:1002;background:var(--bg);border-radius:14px;align-items:center;gap:8px;padding:6px;display:flex;position:absolute;box-shadow:0 1px 6px #0000004d}.builder-title{text-align:center;flex:1;margin:0;font-size:1.05rem}.builder-cancel,.builder-save{border-radius:10px;min-height:44px;padding:6px 14px}.builder-cancel{box-shadow:none;background:0 0;border:0}.builder-sheet{left:max(12px, env(safe-area-inset-left));right:max(12px, env(safe-area-inset-right));bottom:calc(28px + env(safe-area-inset-bottom));z-index:1002;background:var(--bg);max-width:30rem;color:var(--ink);border-radius:14px;flex-direction:column;gap:10px;padding:12px;display:flex;position:absolute;box-shadow:0 1px 6px #0000004d}.builder-stats{font-variant-numeric:tabular-nums;margin:0;font-size:1.05rem}.builder-note{background:var(--notice-bg);border-radius:8px;margin:0;padding:8px 10px;font-size:.9rem}.builder-tools{grid-template-columns:repeat(4,1fr);gap:6px;display:grid}.builder-tools button{border-radius:10px;min-height:44px;padding:4px;font-size:.9rem}.builder-options{justify-content:space-between;align-items:center;gap:8px;display:flex}.builder-snap{align-items:center;gap:8px;min-height:44px;font-weight:600;display:inline-flex}.builder-snap input{width:20px;height:20px}.builder-name{align-items:center;gap:8px;display:flex}.builder-name input{flex:1;min-width:0}.builder-line-casing{stroke:#fff;stroke-linecap:round;stroke-linejoin:round;fill:none}.builder-line{stroke:#0f766e;stroke-linecap:round;stroke-linejoin:round;fill:none}.builder-line.is-pending{stroke-dasharray:8 8;opacity:.7}.builder-point{background:0 0;border:0}.builder-point span{color:#fff;background:#0f766e;border:3px solid #fff;border-radius:50%;place-items:center;width:28px;height:28px;font-size:12px;font-weight:700;display:grid;box-shadow:0 1px 4px #00000059}.builder-point-start span{background:#15803d}.builder-point-end span{background:#1f2937}.rides-source{border:1px solid var(--border);background:var(--surface);border-radius:12px;grid-template-columns:1fr 1fr;gap:2px;margin:0;padding:3px;display:grid}.rides-source-option{position:relative}.rides-source-option input{opacity:0;cursor:pointer;margin:0;position:absolute;inset:0}.rides-source-option>span{text-align:center;min-height:40px;color:var(--muted);border-radius:9px;padding:8px;font-weight:600;display:block}.rides-source-option input:checked+span{background:var(--bg);color:var(--ink);box-shadow:0 1px 3px #0000002e}.rides-source-option input:focus-visible+span{outline:2px solid var(--brand);outline-offset:1px}.rides-source-count{color:var(--muted);font-variant-numeric:tabular-nums;font-weight:500}.rides-when-where{flex-wrap:wrap;gap:8px 16px;display:flex}.rides-when-where .rides-filter{gap:6px}.ride-kind-mine{background:var(--brand);color:var(--brand-ink)}.ride-kind-strava{color:#fff;background:#fc4c02}.ride-card-strava{border-left:4px solid #fc4c02}.ride-card-mine{border-left:4px solid var(--brand)}.ride-card{gap:8px;padding:10px 12px}.ride-stats{color:var(--muted);font-variant-numeric:tabular-nums;flex-wrap:wrap;gap:0;margin:0;font-size:.92rem;display:flex}.ride-stat{display:inline}.ride-stat dt{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.ride-stat dd{font-size:inherit;color:var(--ink);margin:0;font-weight:600;display:inline}.ride-stat+.ride-stat:before{content:"·";color:var(--muted);margin:0 7px}.ride-stat:nth-child(2) dd:before{content:"↑ "}.ride-title{display:block}.rides-heading{gap:4px}.rides-heading h2{flex:1}.rides-add{position:relative}.rides-add-button{background:var(--brand);width:40px;height:40px;min-height:40px;color:var(--brand-ink);box-shadow:none;border:0;border-radius:50%;place-items:center;padding:0;display:grid}.rides-add-button svg path{stroke:currentColor;stroke-width:2.4px;stroke-linecap:round}.rides-add-menu{z-index:5;background:var(--bg);border-radius:12px;flex-direction:column;min-width:13rem;padding:6px;display:flex;position:absolute;top:calc(100% + 6px);right:0;box-shadow:0 4px 18px #00000038}.rides-add-menu>button,.rides-add-file{min-height:44px;color:var(--ink);text-align:left;box-shadow:none;cursor:pointer;background:0 0;border:0;border-radius:8px;align-items:center;padding:8px 12px;font-weight:500;display:flex}.rides-add-menu>button:hover,.rides-add-file:hover,.rides-add-file:focus-within{background:var(--surface)}.rides-add-menu>button,.rides-add-file{justify-content:flex-start}.ride-menu{z-index:2;position:absolute;top:6px;right:6px}.ride-menu-button{width:40px;height:40px;min-height:40px;color:var(--muted);box-shadow:none;background:0 0;border:0;border-radius:50%;place-items:center;padding:0;display:grid}.ride-menu-button svg{fill:currentColor}.ride-menu-button[aria-expanded=true],.ride-menu-button:hover{background:var(--surface)}.ride-menu-list{background:var(--bg);border-radius:12px;flex-direction:column;min-width:12rem;padding:6px;display:flex;position:absolute;top:calc(100% + 4px);right:0;box-shadow:0 4px 18px #00000038}.ride-menu-list button{min-height:44px;color:var(--ink);text-align:left;box-shadow:none;background:0 0;border:0;border-radius:8px;justify-content:flex-start;padding:8px 12px;font-weight:500;display:flex}.ride-menu-list button:hover{background:var(--surface)}.ride-menu-list button.is-danger{color:var(--danger)}.builder-title-button{min-width:0;min-height:44px;color:var(--ink);box-shadow:none;background:0 0;border:0;border-radius:10px;flex:1;justify-content:center;align-items:center;gap:6px;padding:4px 8px;font-size:1.05rem;font-weight:700;display:inline-flex}.builder-title-button:hover{background:var(--surface)}.builder-title-name{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.builder-title-button svg{color:var(--muted);flex:none}.builder-title-button svg path{fill:none;stroke:currentColor;stroke-width:1.6px;stroke-linejoin:round}.builder-title-input{flex:1;min-width:0;min-height:40px;padding:4px 10px;font-size:1.05rem;font-weight:600}.ride-tools{z-index:2;align-items:center;gap:2px;display:flex;position:absolute;top:6px;right:6px}.ride-tools .ride-menu{position:relative;top:auto;right:auto}.ride-card .ride-select{padding-right:84px}.ride-garmin{width:40px;height:40px;min-height:40px;color:var(--ink);box-shadow:none;background:0 0;border:0;border-radius:50%;place-items:center;padding:0;display:grid}.ride-garmin:hover{background:var(--surface)}.ride-garmin .edge-body{fill:#1f2937}.ride-garmin .edge-screen{fill:#e0f2fe}.ride-garmin .edge-route{fill:none;stroke:#007cc3;stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round}.ride-garmin .edge-buttons{stroke:#9ca3af;stroke-width:1.4px;stroke-linecap:round}.garmin-button{color:#fff;background:#007cc3;border-color:#007cc3}.home-toast{top:calc(max(12px, env(safe-area-inset-top)) + 64px);z-index:1200;color:#fff;background:#1f2937;border-radius:12px;width:max-content;max-width:min(92vw,30rem);margin:0;padding:10px 16px;font-weight:500;animation:.22s ease-out toast-in;position:fixed;left:50%;transform:translate(-50%);box-shadow:0 6px 22px #0000004d}@keyframes toast-in{0%{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%)}}@media (prefers-reduced-motion:reduce){.home-toast{animation:none}}.home-install{align-self:stretch}.home-install-head{align-items:center;gap:12px;display:flex}.home-install-head img{border-radius:10px;flex:none}.home-install h2{margin:0;font-size:1.05rem}.home-install p{margin:0}.home-install-head p{color:var(--muted,#4b5563);font-size:.92rem}.install-steps{flex-direction:column;gap:4px;margin:0;padding-left:1.4rem;display:flex}.button-link{box-shadow:none;color:var(--muted,#4b5563);background:0 0;border:none;text-decoration:underline}.home-action-primary{background:var(--brand);border-color:var(--brand);color:var(--brand-ink);font-weight:600}.home-action-primary svg{stroke:currentColor;stroke-width:2.2px;stroke-linecap:round}.home-action-temperature{border-left:1px solid var(--border);font-variant-numeric:tabular-nums;margin-left:2px;padding-left:8px;font-weight:700}.rides-pills{flex-wrap:wrap;gap:8px;display:flex}.rides-pill{border:1px solid var(--border);background:var(--surface);min-height:40px;color:var(--ink);font:inherit;border-radius:999px;align-items:center;gap:6px;padding:0 12px;font-weight:500;display:inline-flex;position:relative}.rides-pill select{field-sizing:content;appearance:none;min-height:38px;color:inherit;font:inherit;cursor:pointer;background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%234b5563' stroke-width='1.6'/%3E%3C/svg%3E") 100% no-repeat;border:0;padding:0 18px 0 0}.rides-pill-icon{fill:none;stroke:var(--brand);stroke-width:1.6px;stroke-linecap:round;stroke-linejoin:round;flex:none}.rides-pill-button{cursor:pointer}.rides-pill-button.is-set{border-color:var(--brand);color:var(--brand)}.rides-pill-button[aria-expanded=true]{border-color:var(--ink)}.rides-distance{font-weight:400}.rides-wind{border:1px solid var(--border);background:var(--surface);border-radius:12px;grid-auto-columns:1fr;grid-auto-flow:column;gap:2px;padding:3px;display:grid}.rides-wind .rides-chip{display:block}.rides-wind .rides-chip span{width:100%;min-height:36px;color:var(--muted);border:0;border-radius:9px;justify-content:center;padding:0 6px;font-weight:600}.rides-wind .rides-chip input:checked+span{background:var(--bg);color:var(--ink);border-color:#0000;box-shadow:0 1px 3px #0000002e}.rides-summary{color:var(--muted);margin:0;font-size:.92rem}.ride-match-title{align-items:baseline;gap:8px;margin:0;display:flex}.ride-match-half{letter-spacing:.02em;text-transform:uppercase;color:var(--muted);font-size:.82rem;font-weight:600}.ride-wind-tailwind{color:#15803d}.ride-wind-headwind{color:#b91c1c}.ride-wind-crosswind{color:#a16207}.ride-gust{color:#a16207;margin:0;font-size:.82rem;font-weight:600}.ride-gust-strong{color:#b91c1c}.rides-caption{letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:0 0 -4px 2px;font-size:.75rem;font-weight:700}.welcome-email{flex-direction:column;align-items:stretch;gap:6px;margin-top:10px;display:flex}.welcome-email-button{color:#fff;background:#ffffff1f;border:1px solid #ffffff8c;font-weight:600}.welcome-link{box-shadow:none;color:#fff;background:0 0;border:none;padding:8px;font-weight:400}.welcome-link b{text-underline-offset:3px;text-decoration:underline}.welcome-first{height:100%;min-height:0}.tour{flex-direction:column;flex:1;min-height:0;display:flex;position:relative}.tour-track{scroll-snap-type:x mandatory;overscroll-behavior-x:contain;scrollbar-width:none;-webkit-overflow-scrolling:touch;flex:1;min-height:0;display:flex;overflow:auto hidden}.tour-track::-webkit-scrollbar{display:none}.tour-track:focus-visible{outline-offset:-4px;outline:2px solid #fff}.tour-slide{scroll-snap-align:start;scroll-snap-stop:always;padding:max(16px, env(safe-area-inset-top)) 20px 8px;box-sizing:border-box;flex-direction:column;flex:0 0 100%;justify-content:flex-end;align-items:center;gap:14px;min-height:0;display:flex}.tour-slide:not(.tour-slide-intro){-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:linear-gradient(#080c118c,#080c11d1)}.tour-phone{flex:auto;justify-content:center;min-height:0;display:flex}.tour-phone img{aspect-ratio:600/1304;object-fit:contain;background:#1f2937;border:5px solid #1f2937;border-radius:22px;width:auto;height:100%;max-height:480px;box-shadow:0 0 0 1px #ffffff1f,0 24px 50px -18px #000c}.tour-text{text-align:center;color:#fff;flex:none;max-width:26rem}.tour-text h2{color:#fff;text-wrap:balance;margin:4px 0;font-size:1.25rem;line-height:1.2}.tour-text p{color:#ffffffd1;margin:0;font-size:.92rem;line-height:1.4}.tour-tag{letter-spacing:.08em;text-transform:uppercase;color:#5eead4;font-size:.72rem;font-weight:700}.tour-lede{text-align:center;color:#fff;text-shadow:0 1px 12px #0009;max-width:24rem;margin:0;font-size:1.05rem;line-height:1.45}.tour-hint{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);color:#fff;min-height:40px;box-shadow:none;background:#0000004d;border:1px solid #ffffff59;border-radius:999px;align-items:center;gap:6px;padding:8px 16px;font-size:.92rem;font-weight:500;display:inline-flex}.tour-hint svg,.tour-hint path{fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round}@media (prefers-reduced-motion:no-preference){.tour-hint svg{animation:1.6s ease-in-out infinite tour-nudge}}@keyframes tour-nudge{0%,to{transform:translate(0)}50%{transform:translate(4px)}}.tour-dots{justify-content:center;gap:2px;padding:6px 0 0;display:flex}.tour-dot{width:32px;min-width:0;height:24px;min-height:0;box-shadow:none;background:0 0;border:none;padding:0;position:relative}.tour-dot:after{content:"";background:#fff6;border-radius:999px;width:8px;height:8px;transition:width .2s,background-color .2s;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.tour-dot[aria-current=true]:after{background:#fff;width:20px}.welcome-brand{align-items:center;gap:12px;display:flex}.welcome-brand h1{margin:0}.welcome-brand img{border-radius:12px}.auth-backdrop{z-index:50;background:#00000073;justify-content:center;align-items:flex-end;display:flex;position:fixed;inset:0}.auth-sheet{background:var(--bg);width:100%;max-width:28rem;max-height:92%;color:var(--ink);padding:20px 20px max(24px, env(safe-area-inset-bottom));border-radius:20px 20px 0 0;overflow-y:auto;box-shadow:0 -10px 40px #0000004d}@media (width>=640px){.auth-backdrop{align-items:center}.auth-sheet{border-radius:20px}}.auth-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:8px;display:flex}.auth-head h2{margin:0;font-size:1.35rem}.auth-sheet form{flex-direction:column;gap:14px;display:flex}.auth-field{flex-direction:column;gap:6px;display:flex}.auth-field label{font-size:.92rem;font-weight:600}.auth-field input{font:inherit;border:1px solid var(--border);background:var(--bg);color:var(--ink);box-sizing:border-box;border-radius:12px;width:100%;padding:12px 14px;font-size:1rem}.auth-field input:focus-visible{outline:2px solid var(--brand);outline-offset:1px;border-color:var(--brand)}.auth-password{position:relative}.auth-password input{padding-right:72px}.auth-show{min-height:0;box-shadow:none;color:var(--link);background:0 0;border:none;padding:6px 10px;font-size:.9rem;font-weight:600;position:absolute;top:50%;right:6px;transform:translateY(-50%)}.auth-hint{color:var(--muted);margin:0;font-size:.85rem}.auth-links{flex-wrap:wrap;justify-content:space-between;gap:4px;display:flex}.auth-links .button-link{color:var(--link);padding:6px 0}.moved-banner{z-index:100;left:8px;right:8px;top:max(8px, env(safe-area-inset-top));color:#fff;background:#0f766e;border-radius:14px;flex-wrap:wrap;align-items:center;gap:8px 12px;padding:10px 14px;font-size:.92rem;display:flex;position:fixed;box-shadow:0 8px 24px #00000040}.moved-banner a{color:#fff;text-underline-offset:3px;font-weight:700;text-decoration:underline}.attire-photo{position:relative}.cyclist.cyclist-photo{background:#e0e0dd}.cyclist-photo image{transition:opacity .25s ease-out}.cyclist-photo[data-state=loading] image{opacity:0}@media (prefers-reduced-motion:reduce){.cyclist-photo image{transition:none}}.attire-photo-switch{position:absolute;bottom:8px;right:8px}.attire-ask>.cyclist{opacity:.35}.attire-ask-card{background:var(--bg);color:var(--ink);text-align:center;border-radius:16px;flex-direction:column;align-items:center;gap:10px;padding:16px 18px;display:flex;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 10px 30px #0f172a33}.attire-ask-card p{margin:0;font-weight:700}.attire-ask-card .rides-wind{min-width:220px}.rider-switch{background:#e5e7eb;border:none;border-radius:999px;gap:4px;margin:0;padding:4px;display:inline-flex}.rider-switch label{position:relative}.rider-switch input{opacity:0;cursor:pointer;margin:0;position:absolute;inset:0}.rider-switch span{color:#374151;text-align:center;border-radius:999px;min-width:64px;padding:8px 14px;font-weight:600;display:block}.rider-switch input:checked+span{color:#fff;background:#0f766e}.rider-switch input:focus-visible+span{outline-offset:2px;outline:2px solid #0f766e}.rider-switch-compact{background:#ffffffe6;box-shadow:0 2px 8px #0f172a26}.rider-switch-compact span{min-width:0;padding:4px 10px;font-size:.8rem}.settings-subhead{margin:12px 0 6px;font-weight:600}.auth-field input.auth-code{letter-spacing:.3em;text-align:center;font-variant-numeric:tabular-nums;font-size:1.6rem}
