:root{--bg:#0c0c0f;--panel:#17181d;--panel-active:#26272e;--line:#2c2d35;--text:#fff;--muted:#9a9ca8;--fire:#ff5a1f;--heart:#ff2a55;--cadence:#35b6ff;--speed:#d6ff3d;--ok:#3dff8a;--warn:#ffb000;--stop:#ff2a55;--display:"Barlow Condensed", "Arial Narrow", system-ui, sans-serif;--body:"Barlow", system-ui, sans-serif;--cut:polygon(14px 0, 100% 0, 100% calc(100% - 14px), calc(100% - 14px) 100%, 0 100%, 0 14px)}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font-family:var(--body);font-variant-numeric:tabular-nums;-webkit-font-smoothing:antialiased}.app{flex-direction:column;gap:20px;min-height:100%;padding:16px 24px 24px;display:flex;position:relative}.top{justify-content:space-between;align-items:center;gap:16px;display:flex}.brand{font-family:var(--display);letter-spacing:.02em;text-transform:uppercase;font-size:34px;font-style:italic;font-weight:900}.brand:after{content:".";color:var(--fire)}a.brand{color:inherit;text-decoration:none}.help-link{width:52px;height:52px;font-family:var(--display);color:var(--text);background:var(--panel);clip-path:polygon(8px 0,100% 0,calc(100% - 8px) 100%,0 100%);place-items:center;font-size:30px;font-weight:800;text-decoration:none;display:grid}.top-links{align-items:center;gap:10px;display:flex}.top-link{height:52px;font-family:var(--display);letter-spacing:.06em;text-transform:uppercase;color:var(--text);background:var(--panel);clip-path:polygon(8px 0,100% 0,calc(100% - 8px) 100%,0 100%);place-items:center;padding:0 22px;font-size:22px;font-weight:700;text-decoration:none;display:grid}.sessions{margin:0;padding:0;list-style:none}.session{background:var(--panel);clip-path:polygon(10px 0,100% 0,calc(100% - 10px) 100%,0 100%);margin-bottom:8px;padding:18px 20px}.session-date{color:var(--muted);font-size:16px;font-weight:700}.session-stats{flex-wrap:wrap;gap:8px 28px;margin-top:10px;display:flex}.stat{flex-direction:column;gap:4px;display:flex}.stat-value{font-family:var(--display);font-size:30px;font-style:italic;font-weight:800;line-height:1}.stat-label{letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-size:13px;font-weight:700}.stat.power{color:var(--fire)}.stat.cadence{color:var(--cadence)}.stat.speed{color:var(--speed)}.stat.heart{color:var(--heart)}.help-body{flex:1;width:100%;max-width:720px;margin:0 auto}.help-body h1{font-family:var(--display);text-transform:uppercase;margin:0 0 16px;font-size:56px;font-style:italic;font-weight:900}.help-body p{color:var(--muted);font-size:20px;line-height:1.5}.help-body h1+h1,.faq+.action{margin-top:40px}.help-body h1:nth-of-type(2){margin-top:48px}.steps{color:var(--muted);margin:0;padding-left:28px;font-size:20px;line-height:1.5}.steps li{margin-bottom:14px}.steps strong{color:var(--text)}.faq details{background:var(--panel);clip-path:polygon(10px 0,100% 0,calc(100% - 10px) 100%,0 100%);margin-bottom:8px}.faq summary{cursor:pointer;padding:16px 20px;font-size:20px;font-weight:700;list-style:none}.faq summary::-webkit-details-marker{display:none}.faq summary:before{content:"+";color:var(--fire);font-family:var(--display);margin-right:12px;font-weight:800}.faq details[open] summary:before{content:"−"}.faq p{margin:0;padding:0 20px 18px 44px;font-size:18px}a.action{text-align:center;flex:none;width:auto;margin-top:24px;line-height:1.6;text-decoration:none;display:inline-block}.timer{font-family:var(--display);letter-spacing:-.01em;font-size:80px;font-style:italic;font-weight:800;line-height:1}.none{color:var(--muted);vertical-align:middle;font-size:.4em;font-weight:400}.chips{flex-wrap:wrap;justify-content:flex-end;gap:10px;display:flex}.chip{font:inherit;font-family:var(--display);letter-spacing:.06em;text-transform:uppercase;clip-path:polygon(10px 0,100% 0,calc(100% - 10px) 100%,0 100%);cursor:default;border:0;min-height:48px;padding:10px 18px;font-size:20px;font-weight:700}.chip.ok{background:var(--ok);color:var(--bg)}.chip.busy{background:var(--warn);color:var(--bg)}.chip.down{background:var(--stop);color:#fff;cursor:pointer}.chip:disabled{opacity:1}.cards{flex:1;grid-template-columns:repeat(3,1fr);align-content:center;gap:20px;display:grid}.card{border:0;border-top:4px solid var(--line);min-height:260px;clip-path:var(--cut);background:var(--panel);color:var(--text);text-align:left;font:inherit;cursor:pointer;flex-direction:column;justify-content:flex-end;align-items:flex-start;gap:10px;padding:28px;display:flex}.card:active{background:var(--panel-active)}div.card{cursor:default;position:relative}div.card:active{background:var(--panel)}.card-disconnect{font:inherit;font-family:var(--display);letter-spacing:.08em;text-transform:uppercase;border:2px solid var(--line);color:var(--muted);clip-path:polygon(6px 0,100% 0,calc(100% - 6px) 100%,0 100%);cursor:pointer;background:0 0;padding:8px 14px;font-size:16px;font-weight:700;position:absolute;top:16px;right:16px}.card-disconnect:active{background:var(--panel-active)}.card:disabled{cursor:default;opacity:.8}.card.connected{border-top-color:var(--ok)}.card.connecting{border-top-color:var(--warn)}.card.error{border-top-color:var(--stop)}.card-live{gap:22px;margin-bottom:auto;display:flex}.card-live-item{align-items:baseline;gap:6px;display:flex}.card-live-value{font-family:var(--display);color:var(--ok);font-size:44px;font-style:italic;font-weight:800;line-height:1}.card-live-unit{font-family:var(--display);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-size:16px;font-weight:600}.card-title{font-family:var(--display);text-transform:uppercase;font-size:56px;font-style:italic;font-weight:900;line-height:1}.card-state{color:var(--muted);font-size:20px;font-weight:700}.card.connected .card-state{color:var(--ok)}.card.error .card-state{color:var(--stop)}.card-hint{color:var(--muted);opacity:.8;font-size:15px}.save-status{font-family:var(--display);letter-spacing:.06em;text-transform:uppercase;clip-path:polygon(10px 0,100% 0,calc(100% - 10px) 100%,0 100%);background:var(--panel);color:var(--muted);padding:10px 18px;font-size:20px;font-weight:700}.save-status.saved{background:var(--ok);color:var(--bg)}.save-status.error{background:var(--stop);color:#fff}.results{flex:1;grid-template-columns:repeat(4,1fr);align-content:center;gap:20px;display:grid}.result{text-align:center;background:var(--panel);clip-path:var(--cut);border-top:4px solid var(--text);padding:32px 12px}.result.power{border-top-color:var(--fire)}.result.cadence{border-top-color:var(--cadence)}.result.speed{border-top-color:var(--speed)}.result.heart{border-top-color:var(--heart)}.result-value{font-family:var(--display);font-size:clamp(56px,8vw,96px);font-style:italic;font-weight:900;line-height:1}.result-label{font-family:var(--display);letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-top:10px;font-size:20px;font-weight:600}.hero{flex-direction:column;flex:1;justify-content:center;align-items:center;line-height:1;display:flex}.hero-value{font-family:var(--display);letter-spacing:-.02em;font-size:clamp(140px,30vw,300px);font-style:italic;font-weight:900}.hero-unit{font-family:var(--display);letter-spacing:.18em;text-transform:uppercase;color:var(--fire);margin-top:4px;font-size:32px;font-weight:600}.secondary{grid-template-columns:repeat(3,1fr);gap:16px;display:grid}.metric{text-align:center;background:var(--panel);clip-path:var(--cut);border-top:3px solid var(--line);padding:18px 8px}.metric.cadence{border-top-color:var(--cadence)}.metric.heart{border-top-color:var(--heart)}.metric.speed{border-top-color:var(--speed)}.metric-value{font-family:var(--display);font-size:clamp(56px,9vw,84px);font-style:italic;font-weight:800;line-height:1}.metric-label{font-family:var(--display);letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-top:6px;font-size:20px;font-weight:600}.metric.cadence .metric-value{color:var(--cadence)}.metric.heart .metric-value{color:var(--heart)}.metric.speed .metric-value{color:var(--speed)}.resistance{align-items:stretch;gap:20px;display:flex}.resistance-value{flex-direction:column;justify-content:center;align-items:center;min-width:140px;line-height:1;display:flex}.resistance-value span{font-family:var(--display);font-size:64px;font-style:italic;font-weight:800}.resistance-value small{font-family:var(--display);letter-spacing:.14em;text-transform:uppercase;color:var(--muted);margin-top:6px;font-size:18px;font-weight:600}.bump{height:140px;clip-path:var(--cut);background:var(--panel);color:var(--fire);font:inherit;font-family:var(--display);cursor:pointer;-webkit-user-select:none;user-select:none;touch-action:manipulation;border:0;flex:1;font-size:96px;font-weight:600}.bump:active{background:var(--panel-active)}.bump:disabled{opacity:.25;cursor:default}.bar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;min-height:72px;display:flex}.summary{font-family:var(--display);letter-spacing:.04em;text-transform:uppercase;color:var(--muted);gap:20px;font-size:22px;font-weight:600;display:flex}.confirm{align-items:center;gap:12px;margin-left:auto;font-size:20px;display:flex}.action{font:inherit;font-family:var(--display);letter-spacing:.06em;text-transform:uppercase;clip-path:polygon(16px 0,100% 0,calc(100% - 16px) 100%,0 100%);background:var(--text);color:var(--bg);cursor:pointer;border:0;min-height:72px;margin-left:auto;padding:16px 40px;font-size:26px;font-style:italic;font-weight:800}.action.start{background:var(--fire);color:#fff;flex:1;min-height:88px;font-size:34px}.action.stop{background:var(--stop);color:#fff;min-height:56px;padding:12px 28px;font-size:18px}.action.ghost{color:var(--text);border:2px solid var(--muted);background:0 0;margin-left:0}.confirm .action{margin-left:0}.action:disabled{opacity:.35;cursor:default}button:focus-visible{outline-offset:3px;outline:3px solid #fff}@media (prefers-reduced-motion:no-preference){.bump,.action{transition:background .12s}}@media (width<=640px){.app{padding:12px 16px 16px}.cards{grid-template-columns:1fr}.results{grid-template-columns:repeat(2,1fr);gap:12px}.card{min-height:140px}.card-title{font-size:40px}.secondary{gap:10px}.metric-value{font-size:40px}.bump{height:110px;font-size:64px}.timer{font-size:40px}}.cookies{z-index:10;background:var(--panel-active);clip-path:var(--cut);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:20px;padding:18px 22px;display:flex;position:fixed;bottom:16px;left:16px;right:16px;box-shadow:0 8px 30px #00000080}.cookies p{max-width:640px;margin:0;font-size:17px;line-height:1.4}.cookies a{color:var(--fire)}.cookies-actions{gap:10px;display:flex}.cookies .action{flex:none;width:auto;min-height:52px;margin:0;padding:10px 24px;font-size:20px}.footer{color:var(--muted);justify-content:space-between;gap:16px;font-size:14px;display:flex}.footer a{color:var(--muted)}.prose h2{font-family:var(--display);letter-spacing:.06em;text-transform:uppercase;margin:28px 0 8px;font-size:26px;font-weight:700}.prose p{margin:0 0 12px}.consent-toggle{flex-wrap:wrap;align-items:center;gap:12px;margin:8px 0 16px;font-size:18px;display:flex}.consent-toggle .action{flex:none;width:auto;min-height:48px;margin:0;padding:8px 20px;font-size:18px}.workout-pick{background:var(--panel);clip-path:polygon(10px 0,100% 0,calc(100% - 10px) 100%,0 100%);color:var(--text);justify-content:space-between;align-items:center;gap:16px;padding:14px 20px;text-decoration:none;display:flex}.workout-pick:active{background:var(--panel-active)}.workout-pick-current{flex-direction:column;gap:4px;display:flex}.workout-pick-label{font-family:var(--display);letter-spacing:.14em;text-transform:uppercase;color:var(--muted);font-size:16px;font-weight:600}.workout-pick-name{font-family:var(--display);font-size:30px;font-style:italic;font-weight:800;line-height:1}.workout-pick-time{color:var(--fire)}.workout-pick-cta{font-family:var(--display);letter-spacing:.06em;text-transform:uppercase;border:3px solid var(--fire);color:var(--fire);clip-path:polygon(10px 0,100% 0,calc(100% - 10px) 100%,0 100%);white-space:nowrap;padding:12px 24px;font-size:22px;font-style:italic;font-weight:800}.workout-list{margin:0;padding:0;list-style:none}.workout{text-align:left;background:var(--panel);clip-path:polygon(10px 0,100% 0,calc(100% - 10px) 100%,0 100%);width:100%;color:var(--text);font:inherit;cursor:pointer;border:0;margin-bottom:10px;padding:18px 20px 14px;display:block}.workout:active{background:var(--panel-active)}.workout.selected{box-shadow:inset 0 0 0 3px var(--fire)}.workout-head{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.workout-name{font-family:var(--display);font-size:30px;font-style:italic;font-weight:800;line-height:1}.workout-meta{font-family:var(--display);letter-spacing:.06em;text-transform:uppercase;color:var(--fire);white-space:nowrap;font-size:18px;font-weight:700}.workout-desc{color:var(--muted);margin:8px 0 12px;font-size:17px;line-height:1.4}.silhouette{align-items:flex-end;gap:2px;height:44px;display:flex}.silhouette-block{background:var(--cadence);opacity:.85;min-width:2px}.silhouette-block.max{background:var(--fire)}.workout.free{border:2px dashed var(--line);clip-path:none;background:0 0;border-left-width:4px;margin-bottom:4px}.workout.free .workout-meta{color:var(--muted)}.workout-section{font-family:var(--display);letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin:32px 0 10px;font-size:22px;font-weight:700}.workout-empty{color:var(--muted);margin:0 0 12px;font-size:17px}.workout-stats{font-family:var(--display);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);flex-wrap:wrap;gap:8px 22px;margin:0 0 12px;font-size:17px;font-weight:600;display:flex}.workout-stats b{color:var(--text);margin-right:4px;font-size:22px;font-style:italic;font-weight:800}.workout-blocks{color:var(--muted);margin:10px 0 0;font-size:15px;line-height:1.5}.app.ride{grid-template-rows:auto minmax(0,1fr) auto auto auto;height:100dvh;min-height:0;display:grid;overflow:hidden}.app.ride.with-band{grid-template-rows:auto minmax(0,1fr) auto auto auto auto;gap:clamp(8px,1.5vh,20px);padding:clamp(8px,1.5vh,16px) 24px clamp(12px,2vh,24px)}.app.ride .hero{min-height:0}.app.ride .hero-value{font-size:clamp(96px,28vh,300px)}.app.ride .hero-unit{margin-top:0;font-size:clamp(18px,3vh,32px)}.app.ride .metric{padding:clamp(8px,1.5vh,18px) 8px}.app.ride .metric-value{font-size:clamp(36px,8vh,84px)}.app.ride .metric-label{margin-top:4px;font-size:clamp(14px,2vh,20px)}.app.ride .bump{height:clamp(72px,14vh,140px);font-size:clamp(48px,9vh,96px)}.app.ride .resistance-value span{font-size:clamp(36px,6vh,64px)}.app.ride .resistance-value small{font-size:clamp(13px,1.8vh,18px)}.app.ride .bar{min-height:0}.app.ride .timer{font-size:clamp(40px,8vh,80px)}.app.ride .action.stop{min-height:clamp(44px,6vh,56px)}.band{background:var(--panel);border-left:6px solid var(--cadence);clip-path:polygon(10px 0,100% 0,calc(100% - 10px) 100%,0 100%);grid-template-columns:1.4fr 1fr 1fr;align-items:center;gap:6px 16px;padding:clamp(8px,1.5vh,14px) 20px;display:grid}.band.ending{border-left-color:var(--fire);animation:1s ease-in-out infinite band-pulse}@keyframes band-pulse{50%{background:var(--panel-active)}}.band-now{align-items:baseline;gap:16px;display:flex}.band-name{font-family:var(--display);text-transform:uppercase;font-size:clamp(22px,4vh,40px);font-style:italic;font-weight:900;line-height:1}.band-time{font-family:var(--display);color:var(--cadence);font-size:clamp(22px,4vh,40px);font-weight:800;line-height:1}.band-target,.band-next{flex-direction:column;gap:2px;display:flex}.band-label{font-family:var(--display);letter-spacing:.14em;text-transform:uppercase;color:var(--muted);font-size:clamp(12px,1.8vh,16px);font-weight:600}.band-value{font-family:var(--display);font-size:clamp(18px,3vh,28px);font-style:italic;font-weight:800;line-height:1.1}.band-res{color:var(--muted);font-size:14px}@media (width<=640px){.band{grid-template-columns:1fr;gap:6px}.band-next{display:none}}.overlay{z-index:5;pointer-events:none;font-family:var(--display);text-transform:uppercase;background:#0c0c0fd1;flex-direction:column;justify-content:center;align-items:center;font-style:italic;font-weight:900;line-height:1;display:flex;position:absolute;inset:0}.overlay.countdown{color:var(--fire);font-size:clamp(200px,60vh,520px);animation:1s ease-out infinite pop}@keyframes pop{0%{opacity:.6;transform:scale(1.15)}20%{opacity:1;transform:scale(1)}to{opacity:1;transform:scale(1)}}.overlay.announce{gap:16px;animation:.3s ease-out announce-in}.announce-name{color:var(--text);text-align:center;padding:0 24px;font-size:clamp(64px,16vh,160px)}.announce-target{color:var(--cadence);font-size:clamp(32px,7vh,72px)}@keyframes announce-in{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.top-link.sound{font:inherit;cursor:pointer;border:0;padding:0 16px;font-size:22px}.top-link.sound.off{opacity:.55}.chips .top-link.sound{clip-path:polygon(10px 0,100% 0,calc(100% - 10px) 100%,0 100%);height:48px}.progress{grid-column:1/-1;align-items:flex-end;gap:2px;height:clamp(18px,3.5vh,32px);margin-bottom:4px;display:flex;position:relative}.progress-block{background:var(--panel-active);min-width:2px}.progress-block.done{background:var(--cadence);opacity:.45}.progress-block.now{background:var(--cadence)}.progress-block.max.now{background:var(--fire)}.progress-block.max.done{background:var(--fire);opacity:.45}.progress-cursor{background:var(--text);width:3px;position:absolute;top:-4px;bottom:-4px;transform:translate(-50%)}@media (width<=640px){.progress{display:flex}}.unit{letter-spacing:.08em;opacity:.6;margin-left:8px;font-size:.7em;font-weight:600}.metric{position:relative}.metric-state{font-family:var(--display);letter-spacing:.1em;text-transform:uppercase;font-size:clamp(14px,2.2vh,20px);font-weight:800;position:absolute;top:10px;left:0;right:0}.metric.target-in{border-top-color:var(--ok)}.metric.target-in .metric-state{color:var(--ok)}.metric.target-below,.metric.target-above{border-top-color:var(--warn)}.metric.target-below .metric-state,.metric.target-above .metric-state{color:var(--warn);animation:1s ease-in-out infinite nudge}@keyframes nudge{50%{opacity:.45}}.metric.target-max{border-top-color:var(--fire);background:#2a1a12}.metric.target-max .metric-state,.metric.target-max .metric-value{color:var(--fire)}.gauge{background:var(--panel-active);height:6px;margin:10px 12px 0;position:relative}.gauge-range{background:#ffffff59;position:absolute;top:0;bottom:0}.gauge-marker{background:var(--cadence);width:4px;transition:left .3s ease-out;position:absolute;top:-4px;bottom:-4px;transform:translate(-50%)}
