:root{color-scheme:dark;--bg:#080f1d;--panel:#101b2c;--card:#16253a;--border:#2a3e55;--text:#edf5ff;--muted:#a4b5c9;--accent:#4ce0cb;--green:#69e5aa;--red:#ff9396;--keyboard-offset:0px;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;font-synthesis:none}
*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);-webkit-tap-highlight-color:transparent}button,input{font:inherit}button,summary{touch-action:manipulation}button{cursor:pointer}button:focus-visible,summary:focus-visible{outline:3px solid var(--accent);outline-offset:4px}.app{max-width:1060px;margin:auto;padding:calc(24px + env(safe-area-inset-top,0px)) max(16px,env(safe-area-inset-right,0px)) calc(20px + env(safe-area-inset-bottom,0px)) max(16px,env(safe-area-inset-left,0px))}.header{display:flex;align-items:center;gap:12px;padding:4px 0 20px}.brand-icon{background:#123a42;width:44px;height:44px;border-radius:13px;padding:5px;flex-shrink:0}.brand-icon svg{fill:none;stroke:var(--accent);stroke-width:2.3}h1{font-size:clamp(1.25rem,4.7vw,1.8rem);letter-spacing:-.04em;margin:0 0 4px}.header p{margin:0;font-size:.75rem;letter-spacing:.1em;color:var(--muted)}.connection{margin-left:auto;text-align:right;font-size:.75rem;max-width:88px;color:var(--muted);line-height:1.4}.connection.ready{color:var(--accent)}.workspace{border:1px solid #203048;background:var(--panel);border-radius:22px;box-shadow:0 8px 0 #050b1570;overflow:hidden}.reference{display:grid;grid-template-columns:1fr 112px;gap:12px;align-items:center;padding:18px 18px 14px;border-bottom:1px solid #25364b}.eyebrow{display:block;font-size:.75rem;color:var(--accent);font-weight:650;letter-spacing:.06em;margin-bottom:6px}.reference label{display:block;font-weight:650;font-size:1.25rem}.reference p{margin:5px 0 0;color:var(--muted);font-size:.875rem}.wall-input{border:1px solid var(--border);border-radius:13px;background:#0b1626;padding:4px;transition:border-color .15s,box-shadow .15s}.wall-input:focus-within{border-color:var(--accent);box-shadow:0 0 0 2px #4ce0cb24}.wall-input input{height:52px;width:100%;background:transparent;border:0;color:var(--text);text-align:center;font-size:1.75rem;font-weight:650;outline:none}.wall-input input::placeholder{color:#657b96;font-weight:400}.measurement{min-width:0;padding:14px 8px 12px}.section-label{display:flex;justify-content:space-between;font-size:.75rem;color:var(--muted);padding:0 8px;letter-spacing:.04em}.board{position:relative;aspect-ratio:1;margin:12px auto 0;width:100%;max-width:560px}.dial{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.halo{fill:#112a37;stroke:#16394a;stroke-width:1}.result-ring{fill:#0d192a;stroke:#31556b;stroke-width:1.4;transition:stroke .2s}.segment{fill:none;stroke:#264257;stroke-width:2.5;transition:stroke .2s}.segment.active{stroke:#80b7d7}.segment.filled{stroke:var(--accent)}.tick{stroke:#3e5c70;stroke-width:1.1}.spec{position:absolute;transform:translate(-50%,-50%);width:21%;height:64px;background:var(--card);border:1px solid var(--border);border-radius:12px;box-shadow:0 3px 0 #091321;display:flex;flex-direction:column;justify-content:center;padding:5px 3px;transition:border-color .15s,box-shadow .15s}.spec:focus-within{border-color:var(--accent);box-shadow:0 0 0 2px #4ce0cb24,0 3px 0 #091321}.spec label{text-align:center;font-size:.75rem;font-weight:650;color:var(--muted);line-height:1.3}.spec input{width:100%;min-width:0;border:0;background:transparent;color:var(--text);text-align:center;font-size:1.375rem;font-weight:650;line-height:1.3;height:32px;outline:none;border-radius:4px;font-variant-numeric:tabular-nums}.spec input::placeholder{color:#637b96}.spec:has([aria-invalid=true]),.wall-input:has([aria-invalid=true]){border-color:var(--red)}.results{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:43%;text-align:center;pointer-events:none}.results span{display:block;color:var(--muted);font-size:.8125rem;font-weight:600;line-height:1.3}.results output{display:block;font-size:clamp(1.375rem,7vw,2.5rem);font-weight:720;line-height:1.18;margin-top:4px;letter-spacing:-.025em;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}#weight{color:var(--accent)}.results output.long{font-size:1rem}.result-divider{height:1px;background:#243b51;width:78%;margin:9px auto}.status{text-align:center;min-height:22px;margin:6px 8px 0;color:var(--muted);font-size:.875rem;line-height:1.5}.measurement.good .result-ring{stroke:var(--green)}.measurement.bad .result-ring{stroke:var(--red)}.measurement.good #weight,.measurement.good .status{color:var(--green)}.measurement.bad #weight,.measurement.bad .status{color:var(--red)}.action-space{margin-top:16px;min-height:52px}.actions{display:grid;grid-template-columns:.8fr 1fr 1.45fr;gap:8px}.actions button{border:1px solid var(--border);border-radius:13px;min-height:52px;padding:10px 12px;font-weight:650;font-size:1rem}.clear{background:transparent;color:var(--muted)}.next{background:var(--card);color:var(--text)}.actions .calculate{background:var(--accent);border-color:var(--accent);color:#092d32}.actions button:active{transform:translateY(1px);filter:brightness(.9)}.keyboard-open .actions{position:fixed;left:0;right:0;bottom:var(--keyboard-offset);padding:10px 12px;background:#080f1df5;border-top:1px solid var(--border);z-index:10;box-shadow:0 -5px 18px #0004}.keyboard-open .action-space{height:72px}footer{font-size:.875rem;color:var(--muted);line-height:1.55}footer>p{margin:14px 0}details{border-top:1px solid #203048;padding-top:12px}summary{cursor:pointer;color:#b9c9dc;min-height:32px}details p{margin:12px 0}::selection{background:#265569;color:white}[hidden]{display:none!important}
@media(min-width:760px){.app{padding:calc(30px + env(safe-area-inset-top,0px)) max(28px,env(safe-area-inset-right,0px)) calc(30px + env(safe-area-inset-bottom,0px)) max(28px,env(safe-area-inset-left,0px))}.header{padding-bottom:26px}.connection{max-width:none}.workspace{display:grid;grid-template-columns:270px 1fr;padding:22px}.reference{display:flex;flex-direction:column;align-items:stretch;justify-content:center;border-bottom:0;border-right:1px solid #25364b;padding:22px 26px 22px 4px;gap:20px}.reference label{font-size:1.6rem}.reference p{font-size:1rem}.wall-input input{height:60px;font-size:2rem}.measurement{padding:0 0 0 22px}.spec{height:76px}.spec label{font-size:.875rem}.spec input{height:38px;font-size:1.6rem}.results span{font-size:.875rem}.result-divider{margin:14px auto}.actions{max-width:460px;margin-left:auto}.status{font-size:1rem}.keyboard-open .actions{max-width:none;margin:0}.results output.long{font-size:1.3rem}}
@media(max-width:350px){.app{padding-left:10px;padding-right:10px}.reference{padding:14px 12px}.header{gap:8px}.brand-icon{width:36px;height:36px}.connection{max-width:65px}.spec{height:58px;border-radius:10px}.spec input{font-size:1.125rem;height:28px}.results span{font-size:.75rem}.results output{font-size:1.375rem}.result-divider{margin:6px auto}.actions button{padding:10px 8px}.measurement{padding-left:4px;padding-right:4px}}
@media(prefers-reduced-motion:reduce){*{transition:none!important;scroll-behavior:auto!important}}

/* Keep small iPhones clear of the camera and home indicator in either orientation. */
@media(max-width:350px){.app{padding-left:max(10px,env(safe-area-inset-left,0px));padding-right:max(10px,env(safe-area-inset-right,0px))}}
/* The app owns the refresh gesture so an accidental short pull never reloads. */
html,body{overscroll-behavior-y:none}
.app{position:relative}
/* Transform only during a refresh; the editing toolbar lives outside this surface. */
.pulling .app,.pull-settling .app,.refreshing .app{transform:translate3d(0,var(--pull-distance,0px),0);will-change:transform}
.pull-settling .app,.refreshing .app{transition:transform 240ms cubic-bezier(.22,1,.36,1)}
.pull-refresh{position:fixed;top:calc(env(safe-area-inset-top,0px) + 8px);left:50%;transform:translate(-50%,-8px);opacity:0;z-index:20;padding:9px 16px;border:1px solid var(--border);border-radius:20px;background:var(--panel);color:var(--accent);font-size:.875rem;white-space:nowrap;pointer-events:none;transition:opacity 160ms ease,transform 160ms ease}
.pulling .pull-refresh,.refreshing .pull-refresh{opacity:1;transform:translate(-50%,0)}
.keyboard-open .actions{position:fixed;top:0;bottom:auto;left:0;right:auto;width:var(--toolbar-width,100%);max-width:none;margin:0;transform:translate3d(var(--toolbar-left,0px),var(--toolbar-top,0px),0);padding:10px max(12px,env(safe-area-inset-right,0px)) 10px max(12px,env(safe-area-inset-left,0px));background:var(--bg);z-index:30;box-shadow:0 -5px 18px #0004}
.keyboard-open .action-space{min-height:74px}
html{scroll-padding-bottom:90px}
@media(prefers-reduced-motion:reduce){.pull-settling .app,.refreshing .app,.pull-refresh{transition:none}}
