@font-face{font-family:Inter Variable;font-style:normal;font-weight:100 900;font-display:swap;src:url(/pourover-wizard/assets/inter-latin-wght-normal-Dx4kXJAl.woff2)format("woff2-variations")}:root{--font:"Inter Variable", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--text-label:11px;--text-small:13px;--text-body:16px;--text-sub:18px;--text-value:22px;--text-big:34px;--text-display:clamp(30px, 6vw, 48px);--bg:#f6f3ed;--fg:#292e27;--text-muted:#596052;--muted:#697753;--accent:#33452f;--on-accent:#fff;--border:#d9dbcf;--dialog-bg:#f6f3ed;--dialog-fg:#292e27;--secondary-bg:#e4e7da;--secondary-fg:#1f2a1c;--selected-bg:#d9dbcf33;--step-now-bg:#d9dbcf55;--step-next-bg:#d9dbcf22;--plot-bg:#e6e2d755;--danger:#8a3b30;--danger-border:#b65a4d;--danger-fill:#c8614f66;--pace-faster:#8a3f12;--pace-slower:#2c5578;--pace-steady:#4f6a45;--pace-alpha:30%;--cue:#1e9e46;--cue-alpha:40%;--recommendation:#a65e10;--actual:#007b88;--swirl:#8d51b3;--stage:#687251;--scene-bg:#e9e5da;--px-steel:#4e564b;--px-shine:#b9c0b2;--px-ceramic:#fdfaf3;--px-grounds:#8c5a32;--px-coffee:#5b3119;--px-water:#2f9bbd;--px-glass:#8eaeb4;--px-accent:#c0701a;--px-roast:#3a1d0e}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#20251f;--fg:#eeeee5;--text-muted:#b6c1a9;--muted:#b6c1a9;--accent:#c4d0b3;--on-accent:#20251f;--border:#48503f;--dialog-bg:#292e27;--dialog-fg:#f6f3ed;--secondary-bg:#3a4434;--secondary-fg:#eef0e6;--selected-bg:#d9dbcf1a;--step-now-bg:#d9dbcf2e;--step-next-bg:#d9dbcf14;--plot-bg:#ffffff0d;--danger:#e9a497;--danger-border:#b96a5d;--danger-fill:#d8766680;--pace-faster:#f8a066;--pace-slower:#8cc8f2;--pace-steady:#b9d4a4;--pace-alpha:18%;--cue:#c8f53b;--cue-alpha:25%;--recommendation:#e9b665;--actual:#69d6df;--swirl:#cd9ded;--stage:#b9c49e;--scene-bg:#2b3229;--px-steel:#c3cbbb;--px-shine:#6f786b;--px-ceramic:#ece6d8;--px-grounds:#b07a48;--px-coffee:#a0643a;--px-water:#6fcfe3;--px-glass:#7d9ca2;--px-accent:#e9b665;--px-roast:#3f2314}}:root[data-theme=dark]{--bg:#20251f;--fg:#eeeee5;--text-muted:#b6c1a9;--muted:#b6c1a9;--accent:#c4d0b3;--on-accent:#20251f;--border:#48503f;--dialog-bg:#292e27;--dialog-fg:#f6f3ed;--secondary-bg:#3a4434;--secondary-fg:#eef0e6;--selected-bg:#d9dbcf1a;--step-now-bg:#d9dbcf2e;--step-next-bg:#d9dbcf14;--plot-bg:#ffffff0d;--danger:#e9a497;--danger-border:#b96a5d;--danger-fill:#d8766680;--pace-faster:#f8a066;--pace-slower:#8cc8f2;--pace-steady:#b9d4a4;--pace-alpha:18%;--cue:#c8f53b;--cue-alpha:25%;--recommendation:#e9b665;--actual:#69d6df;--swirl:#cd9ded;--stage:#b9c49e;--scene-bg:#2b3229;--px-steel:#c3cbbb;--px-shine:#6f786b;--px-ceramic:#ece6d8;--px-grounds:#b07a48;--px-coffee:#a0643a;--px-water:#6fcfe3;--px-glass:#7d9ca2;--px-accent:#e9b665;--px-roast:#3f2314}:root{font-family:var(--font);font-size:var(--text-body);color:var(--fg);background:var(--bg);font-synthesis:none;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light dark;line-height:1.6}@media (prefers-color-scheme:dark){:root{--lightningcss-light: ;--lightningcss-dark:initial}}:root[data-theme=light]{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}body{padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);margin:0}a{color:inherit;text-underline-offset:.25em}a:focus-visible,.footer-toggle:focus-visible{outline:3px solid var(--muted);outline-offset:5px}.shell{max-width:760px;margin:auto;padding:0 36px}header{text-align:center;flex-direction:column;align-items:center;gap:12px;padding:32px 0 0;display:flex}.brand{font-size:var(--text-value);white-space:nowrap;text-decoration:none}.brand span{font-size:var(--text-small);letter-spacing:0;color:var(--text-muted);font-weight:400;display:block}main{min-height:70vh;padding:20px 0 80px}.eyebrow,.pane-label,.metrics dt,.hero-stats dt,.pour-stats dt{font-size:var(--text-label);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:400;line-height:1.6}h1,h2,.brand{letter-spacing:-.02em;font-weight:600;line-height:1.15}h1{font-size:var(--text-display);margin:0 0 24px}section{border:1px solid var(--border);border-radius:12px;max-width:600px;margin-top:48px;padding:26px}main>section:first-child{margin-top:0}h2{font-size:var(--text-sub);margin:0}section p{color:var(--text-muted)}.button{background:var(--accent);color:var(--on-accent);border-radius:6px;align-items:center;gap:32px;min-height:44px;padding:10px 16px;text-decoration:none;display:inline-flex}footer{border-top:1px solid var(--border);color:var(--text-muted);font-size:var(--text-small);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:16px;padding:24px 0;display:flex}.footer-scales{flex:240px}.footer-links{flex-wrap:wrap;justify-content:flex-end;gap:0 16px;margin-left:auto;display:flex}.footer-scales p,.footer-scales ul{margin:0;padding:0;list-style:none}footer a,.footer-toggle{align-items:center;min-height:44px;display:inline-flex}.footer-toggle{font:inherit;color:inherit;text-underline-offset:.25em;cursor:pointer;background:0 0;border:0;padding:0;text-decoration:underline}.text-button{text-underline-offset:.25em;border:0;min-height:0;padding:0;text-decoration:underline}.skip{color:#292e27;background:#fff;padding:8px;position:absolute;top:-60px}.skip:focus{top:8px}main:focus{outline:none}.visually-hidden{clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.swipes-steps{touch-action:pan-y pinch-zoom}button,input,select{font:inherit}button{cursor:pointer;border:1px solid var(--muted);min-height:44px;color:inherit;background:0 0;border-radius:6px;padding:9px 14px}button:disabled{cursor:default;opacity:.5}button:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid var(--muted);outline-offset:3px}label{gap:6px;margin:18px 0;display:grid}input,select{border:1px solid var(--muted);width:100%;min-height:44px;color:inherit;background:0 0;border-radius:6px;padding:8px 10px}.brew-panel{max-width:680px;margin-top:24px;padding-top:13px}.brew-panel:has(.brew-chart){max-width:900px}.brew-panel h1{margin:24px 0}.timer,.metrics dd,.hero-stats dd,.pour-stats dd,.session-bar .weight,svg text,.brew-chart figcaption,.progress-strip figcaption,.pour-zoom-key{font-variant-numeric:tabular-nums}.brew-chart figcaption,.progress-strip figcaption,.pour-zoom-key{font-size:var(--text-label);color:var(--text-muted)}.timer{font-size:var(--text-big);margin:28px 0;line-height:1}.controls{flex-wrap:wrap;gap:12px;margin:18px 0;display:flex}.metrics{flex-wrap:wrap;gap:20px;display:flex}.metrics dd{font-size:var(--text-value);margin:0}figure{margin:24px 0}svg{width:100%;display:block}svg text{fill:currentColor;font-size:10px}figcaption,.source{font-size:var(--text-small)}.cancel,.hold{-webkit-user-select:none;user-select:none;touch-action:none;background:linear-gradient(to top, var(--hold-fill) calc(var(--hold,0) * 100%), transparent 0)}.cancel,.clear-history{--hold-fill:var(--danger-fill);color:var(--danger);border-color:var(--danger-border)}.disconnect{--hold-fill:#69775366}.active-session main{padding:16px 0 32px}.active-session header{padding:16px 0 0}.active-session .brew-panel{margin-top:0;padding:18px}.active-session .brew-panel h1,.active-session .timer{margin:14px 0}.active-session .metrics{margin:12px 0}.active-session figure{margin:14px 0}.active-session .session-bar{border-top:1px solid var(--border);padding:16px 0 32px}.brew-summary,.brew-cancelled{text-align:center}.brew-panel h1.summary-title,.active-session .brew-panel h1.summary-title{margin:0 0 12px}.brew-summary .metrics{justify-content:space-evenly;gap:16px 32px}.brew-summary .brew-chart figcaption{justify-content:center}.restart{margin:12px auto 0;display:flex}.brew-summary .restart{justify-content:center;width:100%}.brew-summary .step-caption{margin:0 0 12px}.brew-summary .step-panes{text-align:left}.brew-summary .preview-nav{margin:12px 0}.brew-history-link{justify-content:center;width:100%;margin-top:10px}.history-list{gap:10px;margin:18px 0;padding:0;list-style:none;display:grid}.history-list li{align-items:stretch;gap:8px;display:flex}.history-row{text-align:left;border-color:var(--border);border-radius:10px;flex:1;gap:2px;min-width:0;padding:12px 14px;display:grid}.history-name{font-weight:600}.history-when,.history-meta{font-size:var(--text-small);color:var(--text-muted);font-variant-numeric:tabular-nums}.history-delete{font-size:var(--text-small);flex:none;padding:6px 12px}.history-actions{flex-direction:column;align-items:stretch}.history-actions .restart{justify-content:center;margin:0}.brew-chart svg{overflow:visible}.chart-surface{fill:#e6e2d755}.chart-step{fill:#a65e1010;transition:x .35s,width .35s}.chart-grid{stroke:currentColor;stroke-width:.5px;opacity:.18}.brew-chart text{font-size:7px}.chart-stages{stroke:var(--stage);stroke-width:1px;opacity:.65}.chart-stages .chart-stage-swirl{stroke:var(--swirl)}.chart-recommendation{stroke:var(--recommendation)}.chart-actual{stroke:var(--actual)}.chart-now{stroke:var(--recommendation);stroke-width:.5px;stroke-dasharray:2 5;opacity:.45;transition:x1 .1s linear,x2 .1s linear}.chart-marker{transition:cx .1s linear,cy .1s linear}.chart-marker.chart-recommendation{fill:var(--recommendation)}.chart-marker.chart-actual{fill:var(--actual)}.chart-swirl rect{fill:var(--swirl);opacity:.12}.chart-swirl line{stroke:var(--swirl);stroke-width:.75px;stroke-dasharray:3 3}.brew-chart figcaption{flex-wrap:wrap;gap:6px 16px;display:flex}.chart-key{align-items:center;gap:6px;display:inline-flex}.chart-key:before{content:"";border-top:.75px solid var(--actual);width:22px}.recommendation-key:before{border-top:.5px dashed var(--recommendation)}.swirl-key:before{border-top:.75px dashed var(--swirl)}.disconnect-dialog,.scale-help{background:var(--dialog-bg);max-width:min(420px,100vw - 32px);color:var(--dialog-fg);border:1px solid #68725155;border-radius:16px;padding:28px;box-shadow:0 20px 60px #0003}.disconnect-dialog h2,.scale-help h2{font-size:var(--text-value);margin-top:0}.scale-help{text-align:left;font-size:var(--text-body);white-space:normal}.scale-help ul{gap:10px;padding-left:1.2em;display:grid}.scale-help form button{justify-content:center;width:100%}.disconnect-dialog::backdrop,.scale-help::backdrop{background:#20251fcc}.offline-status{color:var(--text-muted);font-size:var(--text-small);margin:1rem 0}.brew-top{justify-content:space-between;align-items:baseline;gap:12px;display:flex}.brew-top .eyebrow{margin:0}.brew-top .timer,.active-session .brew-top .timer{font-size:var(--text-value);margin:0}.brew-panel .step-title,.active-session .brew-panel .step-title{margin:4px 0 10px}@keyframes step-enter{0%{opacity:.6;transform:translate(12px)}to{opacity:1;transform:translate(0)}}.step-panes{grid-template-columns:3fr 2fr;gap:12px;margin:8px 0 16px;padding:0;list-style:none;animation:.35s both step-enter;display:grid}.step-panes li{border-radius:12px;min-width:0;padding:12px}.step-now{isolation:isolate;background:var(--step-now-bg);transition:background-color .3s,box-shadow .3s;position:relative}.step-now[data-pace=faster]{background:color-mix(in srgb, var(--pace-faster) var(--pace-alpha), transparent);box-shadow:inset 0 0 0 3px var(--pace-faster)}.step-now[data-pace=slower]{background:color-mix(in srgb, var(--pace-slower) var(--pace-alpha), transparent);box-shadow:inset 0 0 0 3px var(--pace-slower)}.step-next{background:var(--step-next-bg);color:var(--text-muted)}.step-next .action-scene{filter:grayscale(.6);opacity:.7;width:72px;height:72px}.pane-label{font-variant-numeric:tabular-nums;display:block}.next-title{margin:4px 0 10px}.step-hint{font-size:var(--text-small);color:var(--muted);margin:10px 0 0;line-height:1.4}.is-preview .step-panes li{min-height:352px}.go-to-start,.get-ready{border:0;justify-content:center;width:100%;margin-top:12px;font-weight:500}.cue{z-index:-1;border-radius:inherit;pointer-events:none;position:absolute;inset:0}.cue-count{background:color-mix(in srgb, var(--cue) var(--cue-alpha), transparent);box-shadow:inset 0 0 0 3px var(--cue);animation:.9s ease-out both cue-fade}.cue-go{box-shadow:inset 0 0 0 4px var(--cue);animation:.33s step-end both cue-blink}.cue-done{box-shadow:inset 0 0 0 4px var(--cue);animation:.9s ease-out both cue-hold}@keyframes cue-hold{50%{opacity:1}to{opacity:0}}@keyframes cue-fade{to{opacity:0}}@keyframes cue-blink{0%,33%,67%{opacity:1}21%,55%,88%,to{opacity:0}}.hero-stats{flex-direction:column;gap:10px;margin:24px 0 0;display:flex}.hero-stats div,.pour-stats div{gap:10px;display:grid}.hero-stats dt,.pour-stats dt{line-height:1.4}.hero-stats dd{font-size:var(--text-value);margin:0;line-height:1.1}.hero-stats .hero-number{font-size:var(--text-big);line-height:1}.pour-stats{grid-template-columns:1fr 1fr;gap:10px 12px;margin:10px 0 0;display:grid}.pour-stats .actual{text-align:right}.pour-stats .pace{text-align:center;grid-column:1/-1}.pour-stats dd{font-size:var(--text-value);white-space:nowrap;margin:0;line-height:1.1}.pour-stats .pace dd{font-weight:600}.pace-faster dd{color:var(--pace-faster)}.pace-slower dd{color:var(--pace-slower)}.pace-steady dd{color:var(--pace-steady)}.scale-setup .controls{margin:10px 0}.note,.preview-caption{font-size:var(--text-small)}.start-row{gap:12px;margin:8px 0 4px;display:flex}.start-row .button{border:0;border-radius:12px;flex:1;justify-content:center;font-weight:500}.start-row .auto-start{font-size:var(--text-body);text-align:center;background:var(--secondary-bg);color:var(--secondary-fg);line-height:1.25}.done{width:100%;min-height:56px;font-size:var(--text-sub);border:0;border-radius:12px;justify-content:center;margin-top:8px;font-weight:600}.ready-hint{align-items:center;gap:16px;margin:14px 0;display:flex}.ready-hint p{margin:0 0 8px}.ready-hint ol{margin:0 0 8px;padding-left:1.2em}.ready-hint li{margin:2px 0}.recipe-preview{border-top:1px solid var(--border);margin-top:20px;padding-top:12px}.recipe-preview .preview-caption{color:var(--text-muted);margin:0}.preview-nav{margin:8px 0}.preview-nav button{font-size:var(--text-small);flex:1}.home-head{justify-content:space-between;align-items:center;gap:16px;display:flex}.home-head .action-scene,.ready-hint .action-scene{width:64px;height:64px}.recipes{border:0;gap:10px;min-width:0;margin:18px 0;padding:0;display:grid}.recipes legend{margin-bottom:8px;padding:0}.recipe-card{border:1px solid var(--border);cursor:pointer;border-radius:10px;grid-template-columns:auto 1fr;grid-template-areas:"radio name""radio author""radio meta";align-items:start;gap:2px 12px;min-height:44px;margin:0;padding:12px 14px;display:grid;position:relative}.recipe-card.is-selected{border-color:var(--muted);background:var(--selected-bg)}.recipe-card:has(input:focus-visible){outline:3px solid var(--muted);outline-offset:3px}.recipe-card input{width:20px;height:20px;min-height:0;accent-color:var(--accent);grid-area:radio;margin:2px 0 0;padding:0}.recipe-card input:focus-visible{outline:none}.recipe-name{grid-area:name;font-weight:600}.recipe-author{font-size:var(--text-small);color:var(--text-muted);grid-area:author}.recipe-meta{grid-area:meta}.recipe-meta,.dose-note{font-size:var(--text-small);color:var(--text-muted);font-variant-numeric:tabular-nums}.progress-strip{margin:12px 0}.progress-plot,.pour-zoom-plot{position:relative}.progress-plot svg,.pour-zoom-plot svg{background:var(--plot-bg);border-radius:8px}.progress-plot svg{height:67px}.strip-shape{fill:var(--recommendation);opacity:.16}.strip-done{fill:var(--recommendation);opacity:.5}.strip-step{fill:currentColor;opacity:.07}.strip-step.is-zoomed{fill:var(--recommendation);opacity:.18}.strip-swirl{fill:var(--swirl);opacity:.2}.strip-boundary{stroke:currentColor;stroke-width:1px;opacity:.22}.strip-now{stroke:var(--recommendation);stroke-width:1.5px}.strip-marker,.zoom-dot{width:12px;height:12px;box-shadow:0 0 0 2px var(--bg);border-radius:50%;position:absolute;transform:translate(-50%,-50%)}.strip-marker{background:var(--recommendation);transition:left .1s linear,top .1s linear}.progress-strip figcaption{justify-content:space-between;margin-top:3px;display:flex}.pour-zoom{margin-top:8px}.pour-zoom-plot svg{height:144px}.zoom-target{stroke:currentColor;stroke-width:1px;opacity:.2}.zoom-now{stroke:var(--recommendation);stroke-width:1px;opacity:.45}.zoom-expected{stroke:var(--recommendation);stroke-width:2px;stroke-dasharray:6 5}.zoom-actual{stroke:var(--actual);stroke-width:3px;stroke-linejoin:round;stroke-linecap:round}.zoom-dot{background:var(--actual)}.zoom-dot.is-clipped{opacity:.45}.pour-zoom-key{justify-content:space-between;gap:8px;display:flex}.zoom-key-expected,.zoom-key-actual{align-items:center;gap:5px;display:inline-flex}.zoom-key-expected:before,.zoom-key-actual:before{content:"";border-top:2px dashed var(--recommendation);width:16px}.zoom-key-actual:before{border-top:3px solid var(--actual)}.action-scene{background:var(--scene-bg);border-radius:12px;flex:none;width:96px;height:96px;overflow:hidden}.action-scene svg{width:100%;height:100%;overflow:hidden}.px-steel{fill:var(--px-steel)}.px-shine{fill:var(--px-shine)}.px-ceramic{fill:var(--px-ceramic)}.px-grounds{fill:var(--px-grounds)}.px-coffee{fill:var(--px-coffee)}.px-water{fill:var(--px-water)}.px-glass{fill:var(--px-glass)}.px-accent{fill:var(--px-accent)}.px-roast{fill:var(--px-roast)}.scene-reel{animation:scene-reel var(--scene-duration,1.6s) steps(var(--frames), end) infinite}@keyframes scene-reel{to{transform:translateX(calc(var(--frames) * -32px))}}.session-bar{flex-wrap:wrap;justify-content:center;align-items:flex-start;gap:8px;display:flex}.session-bar button{font-size:var(--text-small);white-space:nowrap;padding:6px 12px}.connect-row{grid-auto-columns:1fr;grid-auto-flow:column;gap:8px;display:grid}.bluetooth-icon{vertical-align:-.2em;fill:none;stroke:currentColor;stroke-width:2px;stroke-linecap:round;stroke-linejoin:round;width:1.1em;height:1.1em;display:inline}.session-bar .weight{justify-content:center;min-width:15em}.session-bar .weight:disabled{opacity:1}.weight-control{flex-direction:column;align-items:center;gap:2px;display:flex}.weight-caption{font-size:var(--text-label);color:var(--text-muted)}.scan-status button{min-height:36px;font-size:var(--text-small);padding:4px 10px}.candidates{gap:6px;margin:8px 0;padding:0;list-style:none;display:grid}.candidates button{font-variant-numeric:tabular-nums;justify-content:space-between;width:100%}@media (width<=600px){.shell{padding:0 22px}.shell.active-session{padding:0 12px 200px}header{gap:10px;padding:24px 0 0}main{padding:12px 0 56px}section{margin-top:32px;padding:20px}footer{gap:24px}.active-session header{flex-wrap:wrap;row-gap:10px}.active-session .brand{font-size:var(--text-sub)}.active-session .brand span{display:none}.active-session .brew-panel{padding:12px}.active-session .session-bar{flex-direction:column;align-items:stretch;gap:6px}.active-session .session-bar button{width:100%}.active-session .session-bar .weight{min-width:0}.step-title{font-size:26px}.hero-stats .hero-number{font-size:30px}.pour-stats{gap:10px}.pour-stats dd{font-size:var(--text-sub)}}@media (width>=601px){.step-now .action-scene{width:128px;height:128px}.step-next .action-scene{width:96px;height:96px}.is-preview .step-panes li{min-height:400px}}@media (prefers-reduced-motion:reduce){.chart-step,.chart-now,.chart-marker,.strip-marker,.step-now{transition:none}.step-panes,.scene-reel{animation:none}.cue-go{animation:.6s ease-out both cue-fade}}
