:root{--lightningcss-light: ;--lightningcss-dark:initial;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--font-body:Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, monospace;--color-background:#111414;--color-surface:#1a201e;--color-surface-inset:#181d1b;--color-surface-raised:#242c26;--color-surface-hover:#283126;--color-text:#f0f2ec;--color-text-secondary:#c1cea8;--color-text-muted:#929d9a;--color-text-on-accent:#172018;--color-border:#303735;--color-border-strong:#475141;--color-border-selected:#8d9c62;--color-accent:#d3f477;--color-spice-mild:#d3f477;--color-spice-spicy:#f7b880;--color-spice-hot:#f49c89;--color-chart-power:var(--color-accent);--color-chart-heart-rate:#f4a3b4;--color-accent-subtle:#d3f47709;--color-accent-halo:#d3f47710;--color-status-idle:#727d76;--color-status-halo:#ffffff06;--color-warning:#f7b880;--color-warning-text:#f1cd9f;--color-warning-surface:#30281e;--color-warning-border:#695137;--color-danger-text:#ffd3bd;--color-danger-surface:#32231f;--color-danger-border:#765046;--color-danger-action:#422d26;--color-success-surface:#20291e;--color-success-border:#72845b;--color-ride-glow:#29322290;--color-profile-steady:#819f543d;--color-profile-steady-border:#a1c96a55;--color-profile-easy:#79957440;--color-profile-easy-border:#8aa57b50;--color-profile-hard:#ba936050;--color-profile-hard-border:#edb27670;--color-profile-current:#bce77d85;--color-profile-marker:#e1ebd6;--color-shimmer:#f0f2ec18;--text-tiny:8px;--text-micro:9px;--text-label:10px;--text-caption:11px;--text-small:12px;--text-body:14px;--text-brand:18px;--text-heading:26px;--text-metric:28px;--text-power:104px;--text-target:62px;--weight-regular:400;--weight-medium:500;--weight-semibold:600;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-7:28px;--space-8:32px;--space-9:36px;--space-10:40px;--space-12:48px;--radius-small:4px;--radius-control:6px;--radius-panel:10px;--radius-pill:999px;--control-height:44px;--focus-width:2px;--focus-offset:4px;--opacity-disabled:.36;--opacity-completed:.4;--motion-fast:.14s;--motion-standard:.22s;--motion-live:3s;--motion-interval:5s;--ease-standard:cubic-bezier(.2, .7, .3, 1);--color-power-below:#81b9dc;--color-power-pocket:#d3f477;--color-power-above:#f7b880;--color-guidance-background:#101713}button,input,select{font:inherit}.icon-button{color:var(--color-text);border:1px solid var(--color-border);border-radius:var(--radius-control);background:0 0;width:36px;height:36px;font-size:24px}.connection-dot{background:var(--color-status-idle);width:8px;height:8px;box-shadow:0 0 0 5px var(--color-status-halo);border-radius:50%;flex-shrink:0}.connection-dot.connected{background:var(--color-accent);box-shadow:0 0 0 5px var(--color-accent-halo)}.button{border-radius:var(--radius-control);padding:var(--space-3) var(--space-5);font-size:var(--text-small);font-weight:var(--weight-semibold);min-height:var(--control-height);white-space:nowrap;transition:background var(--motion-fast) var(--ease-standard), filter var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), border-color var(--motion-fast) var(--ease-standard);border:1px solid #0000}.button:hover:not(:disabled){filter:brightness(1.12)}.button.primary{background:var(--color-accent);color:var(--color-text-on-accent)}.button.primary span{margin-left:var(--space-4)}.button.subtle{background:var(--color-surface-raised);border-color:var(--color-border);color:var(--color-text)}.text-button{color:var(--color-text-secondary);font-size:var(--text-small);padding:var(--space-3) 0;text-underline-offset:4px;background:0 0;border:0;text-decoration:underline}.demo-badge{font:var(--text-micro) var(--font-mono);color:var(--color-warning);letter-spacing:.5px}.notice{background:var(--color-warning-surface);border:1px solid var(--color-warning-border);border-radius:var(--radius-control);padding:var(--space-4) var(--space-5);margin-bottom:var(--space-5);color:var(--color-warning-text);font-size:13px;line-height:1.6}.error-notice{background:var(--color-danger-surface);border-color:var(--color-danger-border);color:var(--color-danger-text)}.state-pill{font:var(--text-micro) var(--font-mono);letter-spacing:1px;border:1px solid var(--color-border-strong);border-radius:var(--radius-pill);padding:var(--space-1) var(--space-3);color:var(--color-text-secondary)}.state-pill.live{color:var(--color-accent);border-color:var(--color-border-strong);animation:live-pulse var(--motion-live) ease-in-out infinite}.main-metrics{padding-bottom:var(--space-7);grid-template-columns:1.4fr 1fr;align-items:center;display:grid}.metric-label{color:var(--color-text-muted);font-size:var(--text-micro);font-family:var(--font-mono);letter-spacing:1.2px;margin-bottom:var(--space-2);display:block}.power-metric strong{font-size:var(--text-power);font-weight:var(--weight-medium);letter-spacing:-6px;line-height:1.1}.unit{color:var(--color-text-secondary);margin-left:var(--space-3);font-size:24px;font-weight:var(--weight-regular);letter-spacing:0}.metric-caption{color:var(--color-text-muted);font-size:var(--text-caption)}.target-metric{border-left:1px solid var(--color-border-strong);padding-left:var(--space-8)}.target-metric strong{font-size:var(--text-target);letter-spacing:-3px;line-height:1.25;font-weight:var(--weight-medium);color:var(--color-accent)}.target-controls{align-items:center;gap:var(--space-4);margin-top:var(--space-2);display:flex}.square-button{border:1px solid var(--color-border-strong);background:var(--color-surface-hover);width:34px;height:34px;color:var(--color-text-secondary);border-radius:var(--radius-small);flex-shrink:0;font-size:19px}.target-controls span{font:var(--text-label) var(--font-mono);color:var(--color-text-muted);white-space:nowrap;flex-shrink:0}.secondary-metrics{padding:var(--space-6) 0;border-top:1px solid var(--color-border);border-bottom:1px solid var(--color-border);gap:var(--space-3);grid-template-columns:1fr 1.2fr 1fr;display:grid}.secondary-metrics strong{font-size:var(--text-metric);font-weight:var(--weight-medium);letter-spacing:-1.2px}.secondary-metrics small{font-size:var(--text-caption);color:var(--color-text-muted);margin-left:var(--space-2)}.secondary-metrics #next-step{margin:var(--space-2) 0 0;display:block}fieldset{border:0;margin:0;padding:0}.workout-option{align-items:center;gap:var(--space-3);padding:var(--space-4) var(--space-4);margin-bottom:var(--space-2);border:1px solid var(--color-border);border-radius:var(--radius-control);cursor:pointer;transition:background var(--motion-standard) var(--ease-standard), border-color var(--motion-standard) var(--ease-standard);display:flex;position:relative}.workout-option:has(input:checked){border-color:var(--color-border-selected);background:var(--color-accent-subtle)}.workout-option:has(input:focus-visible){outline:var(--focus-width) solid var(--color-accent);outline-offset:2px}.workout-option:has(input:disabled){cursor:default}.workout-option input{opacity:0;width:1px;height:1px;position:absolute}.option-icon{font-size:var(--text-heading);text-align:center;width:25px;color:var(--color-text-secondary)}.workout-option strong{font-size:13px;font-weight:var(--weight-medium);display:block}.workout-option small{font-size:var(--text-label);color:var(--color-text-muted);margin-top:var(--space-2);display:block}.radio-mark{border:1px solid var(--color-border-strong);border-radius:50%;flex-shrink:0;width:12px;height:12px;margin-left:auto}.workout-option:has(input:checked) .radio-mark{background:var(--color-accent);border:3px solid var(--color-border-strong);box-shadow:0 0 0 1px var(--color-accent)}select,.watts-input{border:1px solid var(--color-border);border-radius:var(--radius-small);background:var(--color-surface-raised);color:var(--color-text);min-height:36px}select{padding:var(--space-2) var(--space-3);font-size:var(--text-small);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}.watts-input{padding-right:var(--space-3);align-items:center;display:flex}.watts-input input{width:70px;min-width:0;color:inherit;padding:var(--space-2) var(--space-3);background:0 0;border:0;font-size:13px}.watts-input span{font-size:var(--text-caption);color:var(--color-text-muted)}.muted{color:var(--color-text-muted)}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.icon-button,.square-button,.text-button{transition:background var(--motion-fast) var(--ease-standard), transform var(--motion-fast) var(--ease-standard), color var(--motion-fast) var(--ease-standard)}.button:active:not(:disabled),.icon-button:active:not(:disabled),.square-button:active:not(:disabled),.text-button:active:not(:disabled){transform:translateY(1px)}@media (hover:hover){.icon-button:hover:not(:disabled),.square-button:hover:not(:disabled){background:var(--color-surface-hover);border-color:var(--color-border-selected)}.text-button:hover:not(:disabled){color:var(--color-accent)}.workout-option:hover:not(:has(input:disabled)){background:var(--color-accent-subtle);border-color:var(--color-border-selected)}}@keyframes live-pulse{0%,to{box-shadow:0 0 0 0 var(--color-accent-halo)}50%{box-shadow:0 0 0 4px var(--color-accent-halo)}}.stop-button{background:var(--color-danger-action);border-color:var(--color-danger-border);color:var(--color-danger-text)}:root{font-family:var(--font-body);color:var(--color-text);background:var(--color-background);font-synthesis:none;font-variant-numeric:tabular-nums}*{box-sizing:border-box}body{min-width:320px;margin:0}h1,h2,p{margin:0}a{color:inherit}button{cursor:pointer;touch-action:manipulation}button:disabled,input:disabled{opacity:var(--opacity-disabled);cursor:not-allowed}[hidden]{display:none!important}button:focus-visible,a:focus-visible,input:focus-visible,summary:focus-visible,pre:focus-visible{outline:var(--focus-width) solid var(--color-accent);outline-offset:var(--focus-offset)}.lab-shell{width:min(1280px,100% - 64px);margin:auto}.lab-header{justify-content:space-between;align-items:center;gap:var(--space-8);padding:var(--space-8) 0;display:flex}.back-link{margin-bottom:var(--space-5);color:var(--color-text-secondary);font-size:var(--text-small);text-underline-offset:4px;display:inline-block}.eyebrow{color:var(--color-text-muted);font:var(--text-label) var(--font-mono);letter-spacing:1.2px;margin-bottom:var(--space-2)}h1{font-size:clamp(36px,5vw,56px);font-weight:var(--weight-medium);letter-spacing:-2.5px;line-height:1.1}h1 span{color:var(--color-accent)}h2{font-size:23px;font-weight:var(--weight-medium);letter-spacing:-.7px}.lede{color:var(--color-text-muted);font-size:var(--text-body);margin-top:var(--space-3);line-height:1.6}.connection-card{align-items:center;gap:var(--space-4);padding:var(--space-5);border:1px solid var(--color-border);border-radius:var(--radius-panel);background:var(--color-surface-inset);min-width:230px;display:flex}.connection-card strong{font-weight:var(--weight-medium);display:block}#device-name{max-width:220px;margin-top:var(--space-2);color:var(--color-text-muted);font-size:var(--text-small);overflow-wrap:anywhere;display:block}.panel{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-panel);min-width:0;padding:var(--space-6)}.connect-panel{justify-content:space-between;align-items:center;gap:var(--space-6);margin-bottom:var(--space-5);display:flex}.connect-panel p{margin-top:var(--space-2);max-width:540px;color:var(--color-text-muted);font-size:var(--text-small);line-height:1.7}.demo-badge{margin-top:var(--space-3);display:inline-block}.button-row{align-items:center;gap:var(--space-2);flex-wrap:wrap;display:flex}.button{min-height:44px}.notice{margin-bottom:var(--space-5)}.metrics{gap:var(--space-3);grid-template-columns:repeat(4,minmax(0,1fr));display:grid}.metric-card{min-width:0;min-height:116px;padding:var(--space-5);border:1px solid var(--color-border);border-radius:var(--radius-panel);background:var(--color-surface);flex-direction:column;justify-content:space-between;display:flex}.metric-card.power{border-color:var(--color-border-selected);background:linear-gradient(120deg, var(--color-accent-subtle), var(--color-surface))}.metric-card strong{font-size:clamp(28px,3.5vw,42px);font-weight:var(--weight-medium);letter-spacing:-1.6px;overflow-wrap:anywhere}.metric-card small{font-size:var(--text-small);color:var(--color-text-muted);letter-spacing:0;white-space:nowrap}.metrics.stale .metric-card strong{color:var(--color-text-muted)}.telemetry-meta{align-items:center;gap:var(--space-3);margin:var(--space-4) 0 var(--space-6);color:var(--color-text-muted);font-size:var(--text-caption);line-height:1.6;display:flex}.telemetry-meta .state-pill{flex-shrink:0}.dashboard-grid{gap:var(--space-5);margin-bottom:var(--space-5);grid-template-columns:minmax(0,1.2fr) minmax(350px,1fr);display:grid}.lower-grid{gap:var(--space-5);grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);display:grid}.full-width{grid-column:1/-1}.section-heading{justify-content:space-between;align-items:flex-start;gap:var(--space-4);margin-bottom:var(--space-5);display:flex}.chart-legend{max-width:160px;color:var(--color-text-muted);font:var(--text-caption)/1.6 var(--font-mono)}.chart-panel canvas{width:100%;height:240px;display:block}.chart-keys{gap:var(--space-5);font:var(--text-small) var(--font-mono);margin:var(--space-3) 0 var(--space-6);color:var(--color-accent);display:flex}.chart-keys span:last-child{color:var(--color-warning)}details{border-top:1px solid var(--color-border);padding-top:var(--space-4)}summary{cursor:pointer;min-height:44px;padding:var(--space-3) 0;font-size:var(--text-small);color:var(--color-text-secondary)}.command-hint{color:var(--color-text-muted);font-size:var(--text-small);margin-bottom:var(--space-4);line-height:1.7}.sequence-controls{margin-bottom:var(--space-5)}.simulator-test{padding:var(--space-4);margin-bottom:var(--space-5);border:1px solid var(--color-border-selected);border-radius:var(--radius-control);background:var(--color-accent-subtle)}.simulator-test p,.control-note{color:var(--color-text-muted);font-size:var(--text-caption);margin-top:var(--space-3);line-height:1.7}.control-form{gap:var(--space-3);border-top:1px solid var(--color-border);padding:var(--space-4) 0;grid-template-columns:1fr;display:grid}.control-form label{font-size:var(--text-body);font-weight:var(--weight-medium)}.control-form label small{margin-top:var(--space-1);color:var(--color-text-muted);font-size:var(--text-caption);font-weight:var(--weight-regular);display:block}.field-action{gap:var(--space-3);grid-template-columns:minmax(0,1fr) 116px;display:grid}.input-with-unit{border:1px solid var(--color-border-strong);border-radius:var(--radius-control);background:var(--color-surface-inset);align-items:center;min-width:0;display:flex}.input-with-unit:focus-within{border-color:var(--color-accent)}.input-with-unit input{width:100%;min-width:0;min-height:44px;padding:var(--space-3);color:var(--color-text);border-radius:var(--radius-control);background:0 0;border:0}.input-with-unit span{color:var(--color-text-muted);padding-right:var(--space-3);font-size:var(--text-small)}.capabilities{gap:var(--space-2);flex-wrap:wrap;display:flex}.capability{border:1px solid var(--color-border);border-radius:var(--radius-control);background:var(--color-surface-inset);padding:var(--space-2);color:var(--color-text-muted);font-size:var(--text-caption)}.capability.supported{color:var(--color-text-secondary);border-color:var(--color-border-selected)}.data-list{gap:var(--space-3);margin:var(--space-5) 0 0;display:grid}.data-list>div{justify-content:space-between;gap:var(--space-4);font-size:var(--text-caption);line-height:1.6;display:flex}.data-list dt{color:var(--color-text-muted)}.data-list dd{text-align:right;overflow-wrap:anywhere;font-family:var(--font-mono);margin:0}.state-grid{gap:var(--space-2);margin:0 0 var(--space-4);grid-template-columns:repeat(4,minmax(0,1fr));display:grid}.state-grid>div{padding:var(--space-3);background:var(--color-surface-inset);border:1px solid var(--color-border);border-radius:var(--radius-control)}.state-grid dt{font-size:var(--text-label);color:var(--color-text-muted)}.state-grid dd{font:var(--text-caption) var(--font-mono);color:var(--color-text-secondary);margin:var(--space-2) 0 0;overflow-wrap:anywhere}.snapshot{height:250px;padding:var(--space-4);border:1px solid var(--color-border);border-radius:var(--radius-control);background:var(--color-surface-inset);color:var(--color-text-secondary);font:var(--text-caption)/1.65 var(--font-mono);margin:0;overflow:auto}.history-note,#packet-empty{color:var(--color-text-muted);font-size:var(--text-caption);line-height:1.6}.log,.packet-log{max-height:280px;font:var(--text-caption)/1.7 var(--font-mono);margin:0;padding:0;list-style:none;overflow:auto}.log li,.packet-log li{padding:var(--space-2) 0;border-bottom:1px solid var(--color-border);overflow-wrap:anywhere}.log .error{color:var(--color-danger-text)}.packet-log li{justify-content:space-between;gap:var(--space-5);display:flex}.packet-log code{color:var(--color-accent);font:inherit;overflow-wrap:anywhere}footer{justify-content:space-between;gap:var(--space-5);margin-top:var(--space-8);padding:var(--space-6) 0;border-top:1px solid var(--color-border);color:var(--color-text-muted);font:var(--text-label) var(--font-mono);display:flex}footer a{text-underline-offset:4px;align-items:center;min-height:44px;display:inline-flex}footer>span{align-self:center}@media (width<=1000px){.lab-shell{width:calc(100% - 40px)}.connect-panel{flex-direction:column;align-items:flex-start}.dashboard-grid,.lower-grid{grid-template-columns:1fr}.control-form{grid-template-columns:1fr 1.3fr;align-items:center}.chart-panel canvas{height:260px}}@media (width<=600px){.lab-shell{width:calc(100% - 28px)}.lab-header{align-items:stretch;gap:var(--space-5);padding:var(--space-5) 0;flex-direction:column}.connection-card{min-width:0}.metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.metric-card{padding:var(--space-4);min-height:106px}.panel{padding:var(--space-5)}.section-heading{flex-wrap:wrap}.section-heading .button-row{width:100%}.button-row .button{flex:1}.connect-panel .button-row{width:100%}.connect-panel .button-row .button{flex-basis:40%}.telemetry-meta{align-items:flex-start}.control-form{grid-template-columns:1fr}.state-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.packet-log li{gap:var(--space-1);flex-direction:column}.data-list>div{gap:var(--space-3)}.data-list dd{max-width:60%}footer>span{display:none}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.trace-tools{gap:var(--space-4);flex-wrap:wrap;align-items:end;display:flex}.trace-tools label{gap:var(--space-2);flex:260px;display:grid}.trace-tools select,.trace-tools input{width:100%;padding:var(--space-3);color:var(--color-text);background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-control);font:inherit}#command-events{max-height:16rem;overflow:auto}#decoded-status{white-space:pre-wrap;overflow-wrap:anywhere}#spindown-support{color:var(--color-text-muted);margin-top:var(--space-1);display:block}.encoding-field{align-items:center;gap:var(--space-3);color:var(--color-text-muted);font-size:var(--text-small);margin-bottom:var(--space-5);flex-wrap:wrap;display:flex}.encoding-field select,.qualification-panel input:not([type=checkbox]),.qualification-panel textarea{min-width:0;max-width:100%;min-height:44px;padding:var(--space-3);color:var(--color-text);background:var(--color-surface-inset);border:1px solid var(--color-border-strong);border-radius:var(--radius-control);font:inherit}.qualification-panel textarea{resize:vertical;width:100%}.qualification-panel :is(input,textarea):focus-visible,.encoding-field select:focus-visible{outline:var(--focus-width) solid var(--color-accent);outline-offset:var(--focus-offset)}.qualification-heading{justify-content:space-between;align-items:center;gap:var(--space-4);display:flex}.qualification-heading .eyebrow{display:block}.qualification-heading strong{font-size:var(--text-heading);font-weight:var(--weight-medium);color:var(--color-text)}.qualification-heading:after{content:"+";color:var(--color-accent);font-size:24px}.qualification-panel[open]>.qualification-heading:after{content:"−"}.progress-badge{font:var(--text-caption) var(--font-mono);color:var(--color-text-muted);white-space:nowrap;margin-left:auto}.progress-badge.complete,.qualification-panel .pass{color:var(--color-accent)}.qualification-panel .fail{color:var(--color-danger-text)}.qualification-intro,.qualification-panel p,.qualification-blockers{color:var(--color-text-muted);font-size:var(--text-small);line-height:1.65}.qualification-intro{margin:var(--space-4) 0}.safety-acknowledgement,.qualification-pass{align-items:flex-start;gap:var(--space-3);line-height:1.6;font-size:var(--text-small);display:flex}.safety-acknowledgement{padding:var(--space-4);background:var(--color-accent-subtle);border-radius:var(--radius-control);margin:var(--space-5) 0}.safety-acknowledgement input,.qualification-pass input{width:20px;height:20px;accent-color:var(--color-accent);flex-shrink:0}.qualification-metadata{gap:var(--space-4);grid-template-columns:repeat(3,minmax(0,1fr));display:grid}.qualification-metadata label,.qualification-evidence>label:not(.qualification-pass),.qualification-general-notes{gap:var(--space-2);font-size:var(--text-small);display:grid}.qualification-counters{gap:var(--space-3);margin:var(--space-5) 0;grid-template-columns:repeat(6,minmax(0,1fr));display:grid}.qualification-counters>div{padding:var(--space-3);background:var(--color-surface-inset);border-radius:var(--radius-control)}.qualification-counters dt{font-size:var(--text-caption);color:var(--color-text-muted)}.qualification-counters dd{margin:var(--space-2) 0 0;font:var(--text-small) var(--font-mono)}.qualification-checks{margin:var(--space-5) 0;padding:0;list-style:none}.qualification-check{gap:var(--space-6);padding:var(--space-5) 0;border-top:1px solid var(--color-border);grid-template-columns:1.2fr 1fr;display:grid}.qualification-check h3{margin:0 0 var(--space-3);font-size:var(--text-body);font-weight:var(--weight-medium)}.qualification-check .qualification-expected{margin-top:var(--space-2);color:var(--color-text-secondary)}.qualification-evidence{gap:var(--space-3);display:grid}.qualification-footer{justify-content:space-between;align-items:flex-start;gap:var(--space-5);margin-top:var(--space-5);display:flex}.qualification-footer .button-row{flex-shrink:0}@media (width<=800px){.qualification-metadata,.qualification-counters{grid-template-columns:repeat(2,minmax(0,1fr))}.qualification-check{gap:var(--space-4);grid-template-columns:1fr}.qualification-footer{flex-direction:column}}
