:root{--ink:#2b2118;--ink-soft:#6b5a48;--card:#fff8eedb;--card-edge:#785a3c2e;--accent:#e0703a;--accent-ink:#fff;--teal:#2a9d8f;--radius:16px;--tap:48px;color:var(--ink);font-family:ui-rounded,SF Pro Rounded,Nunito,system-ui,-apple-system,Segoe UI,sans-serif}*{box-sizing:border-box}html,body{background:#f6d9b0;height:100%;margin:0;overflow:hidden}#scene{width:100vw;height:100vh;display:block;position:fixed;inset:0}.hidden{display:none!important}.hud-top{top:max(12px, env(safe-area-inset-top));border-radius:var(--radius);background:var(--card);border:1px solid var(--card-edge);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);gap:6px;max-width:calc(100vw - 24px);padding:8px 10px;display:flex;position:fixed;left:50%;overflow-x:auto;transform:translate(-50%)}.metric{grid-template-columns:auto auto;align-items:baseline;column-gap:3px;min-width:84px;padding:2px 12px;display:grid}.metric span{font-variant-numeric:tabular-nums;font-size:30px;font-weight:800;line-height:1.05}.metric small{color:var(--ink-soft);font-size:13px;font-weight:600}.metric label{text-transform:uppercase;letter-spacing:.08em;color:var(--ink-soft);grid-column:1/-1;font-size:11px;font-weight:700}.metric--hero span{color:var(--accent);font-size:42px}.metric+.metric{border-left:1px solid var(--card-edge)}.profile{left:50%;bottom:max(12px, env(safe-area-inset-bottom));background:var(--card);border:1px solid var(--card-edge);border-radius:12px;width:min(600px,100vw - 24px);height:80px;position:fixed;transform:translate(-50%)}.panel{border-radius:var(--radius);background:var(--card);border:1px solid var(--card-edge);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);padding:12px;position:fixed}.panel--controls{left:max(12px, env(safe-area-inset-left));gap:12px;width:280px;max-height:calc(100vh - 300px);display:grid;top:96px;overflow:auto}.panel__body{gap:12px;display:grid}.panel__body[hidden]{display:none}.panel-toggle{margin-left:auto}.panel--log{right:max(12px, env(safe-area-inset-right));bottom:max(12px, env(safe-area-inset-bottom));width:320px;max-height:40vh;font-size:12px;overflow:auto}.panel--log summary{cursor:pointer;align-items:center;gap:6px;min-height:28px;font-weight:700;display:flex}.log-actions{margin-top:6px}.testing-links{margin:0}.testing-links a{color:#4a5590;font-weight:700}.panel--log ol{color:var(--ink-soft);margin:8px 0 0;padding-left:18px;font-family:ui-monospace,Consolas,monospace}.tag{color:var(--teal);background:#2a9d8f26;border-radius:6px;padding:2px 6px;font-size:11px;font-weight:600}.row{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.group{gap:8px;display:grid}.group__label{text-transform:uppercase;letter-spacing:.06em;color:var(--ink-soft);font-size:12px;font-weight:700}.btn{min-height:var(--tap);border:1px solid var(--card-edge);color:var(--ink);font:inherit;cursor:pointer;background:#fff;border-radius:12px;flex:1;padding:0 14px;font-weight:700}.btn:hover{background:#fff6ec}.btn:focus-visible,.seg__btn:focus-visible{outline:3px solid var(--teal);outline-offset:2px}.btn--primary{background:var(--accent);color:var(--accent-ink);border-color:#0000}.btn--primary:hover{background:#cc6230}.btn--small{border-radius:9px;flex:none;min-height:32px;padding:0 10px;font-size:12px}.btn--square{flex:0 0 var(--tap);padding:0;font-size:22px}.seg{background:#785a3c1a;border-radius:12px;padding:3px;display:flex}.seg__btn{min-height:42px;font:inherit;color:var(--ink-soft);cursor:pointer;background:0 0;border:0;border-radius:9px;flex:1;font-weight:700}.seg__btn.is-on{color:var(--ink);background:#fff;box-shadow:0 1px 3px #0000001f}.seg--small .seg__btn{min-height:36px;font-size:13px}.stepper{align-items:center;gap:8px;display:flex}.stepper output{text-align:center;font-variant-numeric:tabular-nums;flex:1;font-size:26px;font-weight:800}.slider{gap:4px;font-size:13px;font-weight:600;display:grid}.slider input{width:100%;height:32px;accent-color:var(--accent)}.field{align-items:center;gap:8px;font-size:13px;font-weight:600;display:flex}.field span{flex:1}.field input{border:1px solid var(--card-edge);width:72px;min-height:40px;font:inherit;border-radius:10px;padding:0 8px;font-weight:700}.hint{color:var(--ink-soft);font-size:11px}.status-row{font-weight:700}.dot{background:#b9aa98;border-radius:50%;width:12px;height:12px}.dot[data-status=connected]{background:#3bb273}.dot[data-status=connecting],.dot[data-status=reconnecting]{background:#e9b33c;animation:1s infinite alternate pulse}@keyframes pulse{to{opacity:.35}}.error{color:#8a2b16;background:#fff1ee;border:1px solid #e7a090;border-radius:12px;max-width:min(560px,100vw - 24px);padding:10px 14px;font-weight:600;position:fixed;top:110px;left:50%;transform:translate(-50%)}.grain{pointer-events:none;opacity:0;mix-blend-mode:soft-light;background:radial-gradient(at 50% 45%,#0000 55%,#2a184052 100%),url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0.5 0 0 0 0 0.45 0 0 0 0 0.4 0 0 0 0.55 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");transition:opacity .2s;position:fixed;inset:0}.grain.is-on{opacity:1}.ck-corner{color:#fff8ec;text-shadow:0 1px 6px #2a184099;font-variant-numeric:tabular-nums;font-weight:800;position:fixed}.ck-corner--tl{top:max(16px, env(safe-area-inset-top));left:max(18px, env(safe-area-inset-left));font-size:28px;line-height:1.1}.ck-dim{opacity:.85;font-size:16px;font-weight:700}.ck-grade{top:max(16px, env(safe-area-inset-top));background:var(--grade-bg,#7da34a);color:#fff;font-variant-numeric:tabular-nums;border-radius:999px;align-items:center;gap:8px;padding:8px 16px;font-size:26px;font-weight:800;display:flex;position:fixed;left:50%;transform:translate(-50%);box-shadow:0 4px 14px #2a18404d}.ck-grade svg{fill:#ffffffe6;width:26px;height:26px;transform:scaleY(var(--grade-tilt,1))}.ck-gauge{left:max(18px, env(safe-area-inset-left));bottom:max(18px, env(safe-area-inset-bottom));width:168px;height:168px;position:fixed}.ck-gauge svg{width:100%;height:100%;transform:rotate(135deg)}.ck-gauge__track,.ck-gauge__fill{fill:none;stroke-width:11px;stroke-linecap:round;stroke-dasharray:235.6 314.2}.ck-gauge__track{stroke:#2a204073}.ck-gauge__fill{stroke:var(--zone,#f8cb7c);transition:stroke-dasharray .3s,stroke .6s}.ck-gauge__value{text-align:center;color:#fff8ec;text-shadow:0 1px 6px #2a184099;place-content:center;display:grid;position:absolute;inset:0}.ck-gauge__value span{font-variant-numeric:tabular-nums;font-size:46px;font-weight:800;line-height:1}.ck-gauge__value small{text-transform:uppercase;letter-spacing:.1em;opacity:.85;font-size:12px;font-weight:700}.ck-gauge__zone{text-align:center;color:var(--zone,#f8cb7c);text-transform:uppercase;letter-spacing:.08em;text-shadow:0 1px 4px #2a1840b3;font-size:12px;font-weight:800;position:absolute;bottom:2px;left:0;right:0}.ck-side{left:200px;bottom:max(30px, env(safe-area-inset-bottom));color:#fff8ec;text-shadow:0 1px 6px #2a184099;font-variant-numeric:tabular-nums;gap:4px;display:grid;position:fixed}.ck-side span{font-size:28px;font-weight:800}.ck-side small{opacity:.85;margin-left:4px;font-size:13px;font-weight:700}.ride-profile{left:50%;top:calc(max(16px, env(safe-area-inset-top)) + 64px);background:#2a20404d;border-radius:12px;width:min(480px,100vw - 480px);height:60px;position:fixed;transform:translate(-50%)}.pacers{top:max(16px, env(safe-area-inset-top));right:max(18px, env(safe-area-inset-right));-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:#fff8ec;font-variant-numeric:tabular-nums;background:#2a204080;border-radius:14px;gap:4px;margin:0;padding:8px 12px;font-weight:700;list-style:none;display:grid;position:fixed}.pacers li{justify-content:space-between;gap:12px;font-size:15px;display:flex}.pacers li b{text-align:right;min-width:64px}.pacers li .is-ahead{color:#f8cb7c}.home{color:#fff8ec;text-align:center;z-index:4;background:linear-gradient(#2a204026,#2a20408c);flex-direction:column;justify-content:space-between;align-items:center;padding:max(7vh,24px) 24px max(6vh,24px);display:flex;position:fixed;inset:0}.home[hidden]{display:none}.home__title{letter-spacing:-.01em;text-shadow:0 3px 18px #2a18408c;margin:0;font-size:clamp(44px,7vw,84px);font-weight:800}.home__tag{opacity:.92;text-shadow:0 1px 8px #2a184099;margin:6px 0 0;font-size:clamp(16px,2vw,20px);font-weight:600}.home__modes{grid-template-columns:repeat(3,minmax(0,220px));gap:14px;margin:0;padding:0;list-style:none;display:grid}.mode{text-align:left;width:100%;min-height:150px;color:var(--ink);font:inherit;cursor:pointer;background:#fff8ece6;border:1px solid #fff8ec59;border-radius:20px;align-content:start;gap:6px;padding:18px 18px 16px;transition:transform .15s,box-shadow .15s;display:grid;box-shadow:0 8px 24px #2a18404d}.mode:not(:disabled):hover{transform:translateY(-2px);box-shadow:0 12px 30px #2a184066}.mode:focus-visible{outline-offset:3px;outline:3px solid #f8cb7c}.mode__name{font-size:28px;font-weight:800}.mode__desc{color:var(--ink-soft);font-size:14px;font-weight:600;line-height:1.35}.mode__badge{color:#4a5590;background:#5d6aa626;border-radius:999px;justify-self:start;margin-top:auto;padding:3px 9px;font-size:12px;font-weight:800}.mode:disabled{cursor:not-allowed;box-shadow:none;background:#fff8ec8c}.mode:disabled .mode__name{color:var(--ink-soft)}.mode[data-pick=ride]{background:#fff8ec;border-color:#f8cb7c}.mode[data-pick=ride] .mode__name{color:var(--accent)}.home__settings{top:max(16px, env(safe-area-inset-top));right:max(18px, env(safe-area-inset-right));gap:8px;display:flex;position:absolute}.account__tabs{margin:4px 0 10px}.account__lede{margin:0 0 12px!important}.account__form{gap:12px;display:grid}.account__field{gap:4px;font-size:14px;font-weight:700;display:grid}.account__field[hidden]{display:none}.account__field input{border:1px solid var(--card-edge);min-height:44px;font:inherit;background:#fff;border-radius:10px;padding:0 12px;font-weight:600}.account__field input[aria-invalid=true]{border-color:#b2361c}.account__field small.hint{font-weight:600}.account__error{color:#8a2b16;font-weight:700}.account__error:empty{display:none}.ride-bar__online{padding:0 8px;font-size:14px;font-weight:700}.ride-bar__online[hidden]{display:none}.ride-bar{right:max(18px, env(safe-area-inset-right));bottom:max(18px, env(safe-area-inset-bottom));-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:#fff8ec;background:#2a204080;border-radius:16px;align-items:center;gap:8px;padding:8px;display:flex;position:fixed}.ride-bar__status{align-items:center;gap:8px;padding:0 8px;font-size:14px;font-weight:700;display:flex}.ride-bar .btn--small{min-height:40px;padding:0 14px;font-size:14px}.resist{left:50%;bottom:max(18px, env(safe-area-inset-bottom));-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:#fff8ec;background:#2a204080;border-radius:18px;justify-items:center;gap:8px;padding:8px;display:grid;position:fixed;transform:translate(-50%)}.resist__seg{background:#fff8ec2e;width:220px}.resist__seg .seg__btn{color:#fff8ec;min-height:48px;font-size:17px}.resist__seg .seg__btn.is-on{color:var(--ink);background:#fff8ec}.resist__erg{align-items:center;gap:10px;display:flex}.resist__erg[hidden]{display:none}.resist__erg .btn--square{flex:0 0 56px;min-height:56px;font-size:26px}.resist__erg output{text-align:center;font-variant-numeric:tabular-nums;min-width:96px;font-size:30px;font-weight:800}.resist__note{text-align:center;opacity:.9;max-width:240px;margin:0;font-size:12px;font-weight:600}.dialog{width:min(440px,100vw - 32px);color:var(--ink);background:#fff8ec;border:0;border-radius:22px;padding:24px;box-shadow:0 20px 60px #2a184073}.dialog::backdrop{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#2a204073}.dialog h2{margin:0 0 8px;font-size:26px}.dialog p{color:var(--ink-soft);margin:0 0 16px;font-weight:600;line-height:1.45}.dialog .btn--big{width:100%;min-height:56px;font-size:18px}.dialog__status{min-height:1.4em;color:#8a2b16!important;margin:10px 0 6px!important}.dialog__status:empty{min-height:0;margin:0!important}.dialog__small{font-size:13px}.dialog__group{gap:8px;margin:16px 0;display:grid}.dialog__trainer{flex:1;font-weight:700}.dialog__actions{justify-content:flex-end;gap:8px;margin-top:8px;display:flex}.dialog__actions .btn{flex:none;min-width:104px}.dialog .field small{font-weight:600;display:block}.link{font:inherit;color:#4a5590;cursor:pointer;background:0 0;border:0;padding:0;font-weight:700;text-decoration:underline}.link:disabled{color:var(--ink-soft);cursor:not-allowed}.workout{left:50%;bottom:max(18px, env(safe-area-inset-bottom));-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);color:#fff8ec;background:#2a20409e;border-radius:18px;gap:8px;width:min(460px,100vw - 420px);min-width:300px;padding:12px 14px;display:grid;position:fixed;transform:translate(-50%)}.workout[hidden]{display:none}.workout__now{justify-content:space-between;align-items:flex-end;gap:12px;display:flex}.workout__label{text-transform:uppercase;letter-spacing:.06em;opacity:.9;font-size:15px;font-weight:800;display:block}.workout__left{font-variant-numeric:tabular-nums;font-size:30px;font-weight:800;line-height:1.1;display:block}.workout__target{text-align:right}.workout__target span{font-variant-numeric:tabular-nums;color:#f8cb7c;font-size:40px;font-weight:800;line-height:1}.workout__target small{text-transform:uppercase;letter-spacing:.08em;opacity:.85;font-size:12px;font-weight:700;display:block}.workout__chart{background:#fff8ec14;border-radius:8px;width:100%;height:56px}.workout__foot{align-items:center;gap:10px;display:flex}.workout__next{opacity:.9;flex:1;font-size:13px;font-weight:700}.workout__intensity{align-items:center;gap:6px;display:flex}.workout__intensity .btn--square{flex:0 0 44px;min-height:44px;font-size:22px}.workout__intensity output{text-align:center;font-variant-numeric:tabular-nums;min-width:52px;font-weight:800}.workout .btn--small{min-height:44px}body.is-training .resist{display:none}.workout__cue{color:#f8cb7c;font-size:13px;font-weight:700;display:block}.workout__cue:empty{display:none}.dialog--wide{width:min(620px,100vw - 32px);max-height:calc(100vh - 40px)}.plan-bar{grid-template-columns:1fr auto auto;gap:8px;margin:0 0 12px;display:grid}.plan-search,.plan-select{border:1px solid var(--card-edge);min-height:44px;font:inherit;color:var(--ink);background:#fff;border-radius:12px;padding:0 12px;font-size:15px;font-weight:600}.plan-search{min-width:0}.plan-results{gap:14px;margin:4px 0 8px;display:grid}.plan-group__title{color:var(--ink-soft);margin:0 0 8px;font-size:13px;font-weight:800}.plan-results .plan-list{gap:8px;margin:0}.plan-empty{text-align:center;color:var(--ink-soft);padding:18px;font-weight:600}.plan__based{color:#6b5a90;grid-column:1/-1;font-size:12px;font-weight:700}.plan-list{gap:10px;margin:0 0 8px;padding:0;list-style:none;display:grid}.plan{text-align:left;border:1px solid var(--card-edge);width:100%;font:inherit;color:var(--ink);cursor:pointer;background:#fff;border-radius:16px;grid-template-columns:1fr auto;gap:4px 12px;padding:12px 14px;display:grid}.plan:hover{border-color:#f2876a}.plan:focus-visible{outline:3px solid var(--teal);outline-offset:2px}.plan__name{font-size:18px;font-weight:800}.plan__time{color:var(--ink-soft);font-variant-numeric:tabular-nums;font-weight:800}.plan__summary{color:var(--ink-soft);-webkit-line-clamp:2;-webkit-box-orient:vertical;grid-column:1/-1;font-size:14px;font-weight:600;display:-webkit-box;overflow:hidden}.plan canvas{background:#2a20400f;border-radius:6px;grid-column:1/-1;width:100%;height:30px}body.is-home .ck-corner,body.is-home .ck-grade,body.is-home .ck-gauge,body.is-home .ck-side,body.is-home .ride-profile,body.is-home .pacers,body.is-home .panel,body.is-home .ride-bar,body.is-home .resist,body.is-home .workout{display:none}@media (max-width:520px){.plan-bar{grid-template-columns:1fr 1fr}.plan-search{grid-column:1/-1}}@media (max-width:900px){.home__modes{grid-template-columns:1fr;width:min(360px,100%)}.mode{min-height:0}.ck-side{left:170px}.ck-gauge{width:140px;height:140px}.ride-profile{display:none}.resist{left:auto;right:max(18px, env(safe-area-inset-right));bottom:84px;transform:none}.pacers{top:calc(max(16px, env(safe-area-inset-top)) + 64px)}.metric{min-width:64px;padding:2px 8px}.metric span{font-size:22px}.metric--hero span{font-size:30px}.metric--wkg{display:none}.panel--controls{width:240px;max-height:calc(100vh - 290px)}.panel--log{display:none}}@media (prefers-reduced-motion:reduce){.dot{animation:none!important}}
