:root{--bg: #f4f5f7;--panel: #ffffff;--ink: #1c1917;--dim: #726b66;--accent: #2563eb;--accent-ink: #1d4ed8;--good: #16a34a;--bad: #d42020;--line: rgba(28, 25, 23, .17);--dim-2: #a8a29e;--muted: #d6d3d1;--surface-2: #fafaf9;--panel-2: #fdfdfc;--amber-tint: #fdf6ec;--amber-chip: #f8e8cd;--warn-tint: #fffaf1;--teal-chip-bg: #e2f2f0;--teal-tint: #eefaf8;--good-tint: #f0fdf4;--bad-tint: #fef2f2;--accent-hover: #1d4ed8;--inverse-bg: #1c1917;--inverse-ink: #ffffff;--shimmer-a: #efedeb;--shimmer-b: #faf9f8;--chart-grid: rgba(28, 25, 23, .07);--chart-tick: #a8a29e;color-scheme:light;--shadow: 0 1px 2px rgba(28, 25, 23, .05), 0 6px 20px rgba(28, 25, 23, .07);--shadow-lift: 0 2px 4px rgba(28, 25, 23, .06), 0 12px 32px rgba(28, 25, 23, .12);--mono: ui-monospace, "SF Mono", Menlo, monospace;--ambient-a: rgba(37, 99, 235, .06);--ambient-b: rgba(13, 148, 136, .07);--card-bg: rgba(255, 255, 255, .55);--glass-strong: rgba(255, 255, 255, .68);--card-border: rgba(255, 255, 255, .65);--card-highlight: inset 0 1px 0 rgba(255, 255, 255, .9);--sheen: rgba(255, 255, 255, .3);--scrim: rgba(28, 25, 23, .35);--glass-blur: 22px;--glass-sat: 1.8;--inset-bg: rgba(255, 255, 255, .5);--field-bg: #fafaf9;--field-border: var(--line);--font: -apple-system, BlinkMacSystemFont, "Segoe UI", Inter, sans-serif;--r-sm: 8px;--r-md: 10px;--r-lg: 12px;--r-xl: 16px;--r-pill: 999px;--live-chart-h: clamp(260px, 100svh - 480px, 420px);--btn-h: 34px;--tap-h: 44px;--accent-tint: #e9f0fd;--move-accent: #d97706;--move-ink: #92400e;--teal: #0d9488;--teal-ink: #0a7d72;--series-grind: #d97706;--series-shot: #0d9488;--series-dew: #8b5cf6;--chip-blue: #2563eb;--chip-amber: #d97706;--chip-slate: #64748b;--chip-green: #16a34a;--log-tx: #7dd3fc;--log-err: #fca5a5;--accent-solid: #2563eb;--accent-solid-hover: #1d4ed8;--scroll-hint: rgba(37, 99, 235, .2);--focus-ring: 0 0 0 3px rgba(37, 99, 235, .15);--hover-glow: 0 1px 6px rgba(37, 99, 235, .2);--fab-glow: 0 6px 24px rgba(37, 99, 235, .35)}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--bg: #131110;--panel: #1e1b19;--ink: #d6d2cd;--dim: #a8a29e;--dim-2: #8a8580;--accent-ink: #93c5fd;--good: #4ade80;--bad: #f87171;--line: rgba(255, 255, 255, .12);--muted: #57534e;--surface-2: #272320;--panel-2: #232020;--amber-tint: #302410;--amber-chip: #453312;--warn-tint: #2b2113;--teal-chip-bg: #12312e;--teal-tint: #102b28;--good-tint: #14291b;--bad-tint: #321b1b;--accent-hover: #60a5fa;--inverse-bg: #47423d;--shimmer-a: #272320;--shimmer-b: #322e2a;--chart-grid: rgba(255, 255, 255, .08);--chart-tick: #8a8580;--shadow: 0 1px 2px rgba(0, 0, 0, .3), 0 6px 20px rgba(0, 0, 0, .35);--shadow-lift: 0 2px 4px rgba(0, 0, 0, .35), 0 12px 32px rgba(0, 0, 0, .5);color-scheme:dark;--ambient-a: rgba(59, 130, 246, .12);--ambient-b: rgba(13, 148, 136, .1);--card-bg: rgba(46, 40, 36, .45);--glass-strong: rgba(38, 33, 29, .62);--card-border: rgba(255, 255, 255, .14);--card-highlight: inset 0 1px 0 rgba(255, 255, 255, .12);--sheen: rgba(255, 255, 255, .05);--scrim: rgba(0, 0, 0, .5);--inset-bg: rgba(255, 255, 255, .045);--field-bg: rgba(255, 255, 255, .08);--field-border: rgba(255, 255, 255, .22);--accent: #3b82f6;--accent-tint: rgba(59, 130, 246, .14);--move-accent: #f59e0b;--move-ink: #fbbf24;--teal: #14b8a6;--teal-ink: #2dd4bf;--accent-solid: #2563eb;--accent-solid-hover: #1d4ed8;--scroll-hint: rgba(96, 165, 250, .24);--focus-ring: 0 0 0 3px rgba(96, 165, 250, .22);--hover-glow: 0 1px 6px rgba(96, 165, 250, .25);--fab-glow: 0 6px 24px rgba(59, 130, 246, .4)}}:root[data-theme=dark]{--bg: #131110;--panel: #1e1b19;--ink: #d6d2cd;--dim: #a8a29e;--dim-2: #8a8580;--accent-ink: #93c5fd;--good: #4ade80;--bad: #f87171;--line: rgba(255, 255, 255, .12);--muted: #57534e;--surface-2: #272320;--panel-2: #232020;--amber-tint: #302410;--amber-chip: #453312;--warn-tint: #2b2113;--teal-chip-bg: #12312e;--teal-tint: #102b28;--good-tint: #14291b;--bad-tint: #321b1b;--accent-hover: #60a5fa;--inverse-bg: #47423d;--shimmer-a: #272320;--shimmer-b: #322e2a;--chart-grid: rgba(255, 255, 255, .08);--chart-tick: #8a8580;--shadow: 0 1px 2px rgba(0, 0, 0, .3), 0 6px 20px rgba(0, 0, 0, .35);--shadow-lift: 0 2px 4px rgba(0, 0, 0, .35), 0 12px 32px rgba(0, 0, 0, .5);color-scheme:dark;--ambient-a: rgba(59, 130, 246, .12);--ambient-b: rgba(13, 148, 136, .1);--card-bg: rgba(46, 40, 36, .45);--glass-strong: rgba(38, 33, 29, .62);--card-border: rgba(255, 255, 255, .14);--card-highlight: inset 0 1px 0 rgba(255, 255, 255, .12);--sheen: rgba(255, 255, 255, .05);--scrim: rgba(0, 0, 0, .5);--inset-bg: rgba(255, 255, 255, .045);--field-bg: rgba(255, 255, 255, .08);--field-border: rgba(255, 255, 255, .22);--accent: #3b82f6;--accent-tint: rgba(59, 130, 246, .14);--move-accent: #f59e0b;--move-ink: #fbbf24;--teal: #14b8a6;--teal-ink: #2dd4bf;--accent-solid: #2563eb;--accent-solid-hover: #1d4ed8;--scroll-hint: rgba(96, 165, 250, .24);--focus-ring: 0 0 0 3px rgba(96, 165, 250, .22);--hover-glow: 0 1px 6px rgba(96, 165, 250, .25);--fab-glow: 0 6px 24px rgba(59, 130, 246, .4)}*{box-sizing:border-box}body{margin:0;font-family:var(--font);background:var(--bg);min-height:100dvh;color:var(--ink)}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;z-index:-1;pointer-events:none;background:radial-gradient(1100px 700px at 8% -10%,var(--ambient-a),transparent 60%),radial-gradient(900px 600px at 105% 20%,var(--ambient-b),transparent 55%)}.bento,.modal,.select-menu,.pop{background-color:var(--glass-bg, var(--card-bg));background-image:linear-gradient(180deg,var(--sheen),transparent var(--glass-sheen-stop, 45%));-webkit-backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-sat));backdrop-filter:blur(var(--glass-blur)) saturate(var(--glass-sat));border:1px solid var(--card-border)}.app{max-width:960px;margin:0 auto;padding:20px 16px 40px}.head-row{display:flex;align-items:baseline;justify-content:space-between}h1{display:flex;align-items:center;gap:8px;line-height:1;font-size:13px;font-weight:600;letter-spacing:.08em;color:var(--dim);margin:4px 2px 16px}.h1-dot{width:8px;height:8px;border-radius:50%;position:relative;background:var(--muted);flex-shrink:0;top:-.5px}.h1-dot:before{content:"";position:absolute;top:-9px;right:-9px;bottom:-9px;left:-9px}.h1-dot.on{background:var(--good);box-shadow:0 0 7px var(--good)}.h1-dot.err{background:var(--bad);box-shadow:0 0 7px var(--bad)}.h1-dot.alert{background:var(--bad);box-shadow:0 0 7px var(--bad);animation:alarm-pulse 1.6s ease-in-out infinite}@keyframes alarm-pulse{50%{opacity:.35}}.h1-dot:focus-visible{outline:none;box-shadow:var(--focus-ring)}.pop{--glass-bg: var(--glass-strong);--glass-blur: 28px;position:absolute;top:calc(100% + 10px);z-index:46;display:flex;flex-direction:column;gap:8px;padding:12px 14px;border-radius:var(--r-md);box-shadow:var(--shadow-lift),var(--card-highlight);opacity:0;transform:translateY(-3px) scale(.98);pointer-events:none;transition:opacity .14s,transform .14s}@media(prefers-reduced-motion:reduce){.pop{transition:none}}.status-pop{left:-10px;min-width:130px}.h1-dot:hover .status-pop,.h1-dot:focus .status-pop{opacity:1;transform:none}.pop-row{display:flex;align-items:center;gap:9px;line-height:1;font-size:12.5px;font-weight:500;color:var(--ink);letter-spacing:normal;text-transform:none;white-space:nowrap}.pop-dot{width:7px;height:7px;border-radius:50%;background:var(--muted);flex-shrink:0}.pop-detail{margin-left:auto;padding-left:14px;color:var(--dim);font-weight:500;display:inline-flex;align-items:center;gap:6px;font-variant-numeric:tabular-nums}.pop-batt{display:inline-flex;align-items:center;gap:3px}.pop-batt svg{display:block}.pop-batt.low{color:var(--bad)}.pop-dot.on{background:var(--good);box-shadow:0 0 6px var(--good)}.pop-dot.err{background:var(--bad);box-shadow:0 0 6px var(--bad)}.auto-inline{display:flex;align-items:center;gap:8px;flex-shrink:0}.auto-label{font-size:12px;font-weight:500;color:var(--dim)}@media(prefers-reduced-motion:reduce){.h1-dot.alert{animation:none;opacity:1}}.tip:after{content:attr(data-tip);position:absolute;left:50%;top:calc(100% + 8px);transform:translate(-50%) scale(.96);background:var(--inverse-bg);color:var(--inverse-ink);font-size:11px;font-weight:500;letter-spacing:normal;text-transform:none;padding:5px 9px;border-radius:var(--r-sm);white-space:nowrap;opacity:0;pointer-events:none;z-index:45;transition:opacity .12s,transform .12s}.tip:hover:after,.tip:focus-visible:after{opacity:1;transform:translate(-50%) scale(1)}.head-btns{display:flex;align-items:center;gap:8px}.weather-chip{font-size:12px;font-weight:500;color:var(--dim);font-variant-numeric:tabular-nums;white-space:nowrap;position:relative}.weather-chip:focus-visible{outline:none;box-shadow:var(--focus-ring);border-radius:var(--r-sm)}.weather-pop{right:-4px;gap:7px;min-width:168px}.weather-chip:hover .weather-pop,.weather-chip:focus .weather-pop{opacity:1;transform:none}.weather-pop-row{display:flex;align-items:baseline;justify-content:space-between;gap:16px;font-size:12.5px;line-height:1;white-space:nowrap}.weather-pop-label{color:var(--dim);font-weight:500}.weather-pop-value{color:var(--ink);font-weight:500}.settings-btn{padding:6px 11px;font-size:15px;line-height:1;height:28px}.tab-row{display:flex;gap:8px}.tab-row .nav-item{padding:7px 12px;font-size:12px}.bento-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}.bento{border-radius:var(--r-xl);box-shadow:var(--shadow),var(--card-highlight);padding:16px 18px;min-width:0}.bento.wide{grid-column:1 / -1}.live-bento{position:relative}.live-bento:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;box-shadow:0 0 30px 3px #0d948880;opacity:var(--pull-glow, 0);transition:opacity .3s ease;pointer-events:none}.live-bento.pulse{animation:pull-hit .7s cubic-bezier(.16,1,.3,1)}.live-bento.pulse:after{animation:pull-hit-glow .7s ease}@keyframes pull-hit{30%{transform:scale(1.015)}}@keyframes pull-hit-glow{30%{opacity:1;box-shadow:0 0 46px 9px #0d9488b3}}@media(prefers-reduced-motion:reduce){.live-bento.pulse,.live-bento.pulse:after{animation:none}}input[type=number]{-moz-appearance:textfield;-webkit-appearance:textfield;appearance:textfield}input[type=number]::-webkit-outer-spin-button,input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}button{font:inherit;font-size:13px;font-weight:500;background:var(--panel);color:var(--ink);border:1px solid var(--line);border-radius:var(--r-md);padding:8px 14px;cursor:pointer;transition:border-color .12s,box-shadow .12s}button:hover{border-color:var(--accent);box-shadow:var(--hover-glow)}button:disabled{opacity:.4;cursor:default;pointer-events:none}*{scrollbar-width:thin;scrollbar-color:var(--line) transparent}*::-webkit-scrollbar{width:7px;height:7px}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background:var(--line);border-radius:var(--r-pill)}button.primary{background:var(--accent-solid);color:var(--inverse-ink);border-color:var(--accent-solid);font-weight:600}button.primary:hover{background:var(--accent-solid-hover)}button.danger{border-color:var(--bad);color:var(--bad)}.status{color:var(--dim);font-size:12px}.status.connected{color:var(--good);font-weight:600}.status.error{color:var(--bad)}.dot-pill{display:inline-flex;align-items:center;gap:6px;font-size:10px;font-weight:600;text-transform:uppercase;letter-spacing:.1em;color:var(--dim)}.dot-pill .dot{width:8px;height:8px;border-radius:50%;background:var(--muted)}.dot-pill.on .dot{background:var(--good)}.dot-pill.err .dot{background:var(--bad)}.dot-pill.busy .dot{background:var(--accent);animation:dot-breathe 1.2s ease-in-out infinite}@keyframes dot-breathe{50%{opacity:.35}}@media(prefers-reduced-motion:reduce){.dot-pill.busy .dot{animation:none}}.readout .label{font-size:10px;text-transform:uppercase;letter-spacing:.12em;color:var(--dim);font-weight:600}.readout .value{font-family:var(--mono);font-size:32px;font-variant-numeric:tabular-nums;line-height:1.25;margin-top:2px}.readout .value small{font-size:13px;color:var(--dim)}.bento.has-menu{position:relative}.bento.has-menu:hover{border-color:var(--accent)}.bento.has-menu.menu-open{z-index:47}.tile-tap{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;background:none;border:0;padding:0;border-radius:inherit;box-shadow:none;cursor:pointer}.tile-tap:hover{border-color:transparent;box-shadow:none}.tile-pop{left:12px;top:calc(100% - 6px);gap:6px;padding:8px}.tile-pop.open{opacity:1;transform:none;pointer-events:auto}.tile-item{white-space:nowrap;text-align:left}@media(pointer:coarse){.tile-pop{min-width:calc(100% - 24px)}.tile-item{min-height:var(--tap-h);padding:8px 16px;text-align:center}}.chart-wrap{position:relative;width:100%}.dose-inline{color:var(--teal-ink);font-variant-numeric:tabular-nums;white-space:nowrap}.readout .label .spin{display:inline-block;vertical-align:-1px;margin-left:6px;width:9px;height:9px;border-width:1.5px}.name-btn{background:none;border:none;box-shadow:none;padding:0;display:inline-flex;flex-direction:column;align-items:flex-start;gap:1px;font-size:14.5px;font-weight:650;letter-spacing:-.01em;color:var(--ink);cursor:pointer;text-align:left}.name-btn:hover{border:none;box-shadow:none;color:var(--accent)}.name-btn:disabled{opacity:1;cursor:default}.bento.grinder-card{display:block;text-align:left;font:inherit;padding:16px 18px;cursor:pointer;transition:border-color .12s,box-shadow .12s}button.grinder-card:hover{border-color:var(--move-accent);box-shadow:var(--shadow),var(--card-highlight)}button.grinder-card:hover .value{color:var(--move-ink)}.grinder-card .label{font-size:10px;text-transform:uppercase;letter-spacing:.12em;color:var(--dim);font-weight:600}.advice-chip{display:inline-block;vertical-align:4px;margin-left:8px;font-size:13px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--move-ink);background:var(--amber-chip);border-radius:var(--r-pill);padding:2px 8px;animation:chip-in .3s cubic-bezier(.2,.8,.2,1)}@keyframes chip-in{0%{opacity:0;transform:scale(.6)}to{opacity:1;transform:none}}@media(prefers-reduced-motion:reduce){.advice-chip{animation:none}}.adjust-btn{padding:5px 11px;font-size:12px;min-height:var(--btn-h);display:inline-flex;align-items:center;justify-content:center}.tag{font-size:9.5px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--good);background:var(--good-tint);border:1px solid var(--good);border-radius:var(--r-pill);padding:2px 8px}.grinder-sub{font-size:12px;color:var(--dim)}.spacer{flex:1}.modal.narrow{max-width:460px}.stepper{display:flex;align-items:center;justify-content:center;gap:20px;padding:16px 0 8px}.step-btn{width:54px;height:54px;border-radius:50%;padding:0;font-size:24px;line-height:1;font-family:var(--mono);flex-shrink:0}.step-value{text-align:center}.step-value input{width:130px;text-align:center;border:none;background:none;outline:none;font-family:var(--mono);font-size:36px;font-variant-numeric:tabular-nums;color:var(--move-ink);-moz-appearance:textfield;-webkit-appearance:textfield;appearance:textfield}.step-value input::-webkit-outer-spin-button,.step-value input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.step-sub{text-align:center;font-size:10px;color:var(--dim);text-transform:uppercase;letter-spacing:.1em;font-weight:600;min-height:13px}.save-move{width:100%;margin-top:10px;padding:12px 0;font-size:14px}.shimmer{background:linear-gradient(100deg,var(--shimmer-a) 40%,var(--shimmer-b) 50%,var(--shimmer-a) 60%);background-size:200% 100%;animation:shimmer 1.3s linear infinite;border-radius:var(--r-md)}@keyframes shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.sk-item{height:52px;flex-shrink:0}.sk-chart{height:190px}.sk-stat{height:40px}.sk-modal-title{height:14px;width:90px}.split-body.settings{grid-template-columns:160px 1fr}.settings-nav{display:flex;flex-direction:column;gap:6px;overflow-y:auto;padding-right:4px;border-right:1px solid var(--line)}.nav-item{display:flex;align-items:center;gap:9px;text-align:left;padding:8px 10px;font-weight:600;font-size:12.5px;border:1px solid transparent;background:transparent;border-radius:var(--r-md);box-shadow:none}.nav-item:hover{border-color:var(--line);box-shadow:none}.nav-item.selected{border-color:var(--accent);background:var(--accent-tint)}.nav-chip{width:24px;height:24px;border-radius:7px;flex-shrink:0;display:grid;place-items:center;font-size:12.5px;color:var(--inverse-ink);box-shadow:inset 0 1px #ffffff40}.nav-chip.blue{background:var(--chip-blue)}.nav-chip.amber{background:var(--chip-amber)}.nav-chip.teal{background:var(--teal)}.nav-chip.slate{background:var(--chip-slate)}.nav-chip.green{background:var(--chip-green)}.settings-detail{overflow-y:auto;min-width:0;padding-right:8px}.grinder-editor{border:1px solid var(--line);border-radius:var(--r-lg);padding:12px 14px;margin-bottom:12px}.equip-card{background:var(--inset-bg);border:1px solid var(--line);border-radius:var(--r-lg);padding:12px 14px;margin-bottom:12px}.spin{width:13px;height:13px;border-radius:50%;flex-shrink:0;border:2px solid var(--line);border-top-color:var(--accent);animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media(prefers-reduced-motion:reduce){.spin{animation-duration:2.4s}}.switch{position:relative;width:40px;height:24px;padding:0;flex-shrink:0;border-radius:var(--r-pill);background:var(--field-bg);border:1px solid var(--field-border);transition:background .18s,border-color .18s}.switch:before{content:"";position:absolute;top:-10px;right:-10px;bottom:-10px;left:-10px}.switch .knob{position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:var(--inverse-ink);box-shadow:0 1px 3px #0000004d;transition:transform .18s cubic-bezier(.2,.8,.2,1)}.switch.on{background:var(--accent-solid);border-color:var(--accent-solid)}.switch.on .knob{transform:translate(16px)}.switch:hover{border-color:var(--field-border);box-shadow:none}.switch.on:hover{background:var(--accent-solid-hover);border-color:var(--accent-solid-hover)}@media(prefers-reduced-motion:reduce){.switch,.switch .knob{transition:none}}.set-row{display:flex;align-items:center;gap:10px;min-height:44px;padding:5px 0}.set-row+.set-row{border-top:1px solid var(--line)}.set-row-label{font-size:13px;font-weight:550}.set-row-sub{font-size:11.5px;color:var(--dim);margin-top:1px}.row-saved{font-size:12px;font-weight:600;color:var(--accent);animation:saved-fade 1.6s ease forwards}@keyframes saved-fade{0%,55%{opacity:1}to{opacity:0}}.row-input{width:88px;text-align:right;font:inherit;font-size:13px;color:var(--ink);background:var(--field-bg);border:1px solid var(--field-border);border-radius:var(--r-sm);padding:7px 9px;font-variant-numeric:tabular-nums}.row-input:focus{outline:none;border-color:var(--accent);box-shadow:var(--focus-ring)}.row-input.grow{flex:1;min-width:140px}.icon-btn{display:inline-flex;align-items:center;justify-content:center;padding:8px 10px;line-height:1;min-height:var(--btn-h)}.icon-btn svg{display:block}.equip-head{display:flex;align-items:center;gap:8px;width:100%;font-size:15px;font-weight:650;letter-spacing:-.01em;color:var(--ink);padding-bottom:10px;border-bottom:1px solid var(--line)}button.equip-head{background:transparent;border:none;border-bottom:1px solid var(--line);border-radius:0;padding:0 0 10px;text-align:left;box-shadow:none;font:inherit;font-size:15px;font-weight:650}button.equip-head:hover{box-shadow:none;border-color:var(--line)}.equip-head.closed{border-bottom:none;padding-bottom:0}.shot-card .equip-head{margin-bottom:12px}.shot-head{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:8px}.head-side{display:flex;align-items:center;gap:6px}.head-side.right{justify-content:flex-end}.shot-title{text-align:center}.shot-count{font-size:11px;font-weight:600;color:var(--dim);margin-left:8px;font-variant-numeric:tabular-nums}.shot-bean{display:block;font-size:11.5px;font-weight:550;color:var(--dim);margin-top:1px}.head-confirm{display:flex;align-items:center;justify-content:center;gap:8px;font-size:12.5px;font-weight:500;color:var(--dim)}.detail-nav{padding:3px 10px;font-size:13px;line-height:1.2;border-radius:var(--r-sm)}.shot-head .head-del{padding:4px 8px;min-height:0}.shot-head .head-del svg{width:13px;height:13px}.shot-head .head-confirm{white-space:nowrap;gap:6px}.shot-head .head-confirm button{min-height:0;padding:5px 9px}button.equip-head.closed:hover{border-color:transparent}.equip-card .grinder-editor{border:none;border-radius:0;margin:0;padding:12px 0 10px;border-bottom:1px solid var(--line)}.equip-card .grinder-editor:last-child{border-bottom:none;padding-bottom:2px}.card-title{margin-bottom:10px;font-size:13px}.title-row{margin-bottom:10px}.row>.card-title{margin:0}.card-body{margin-top:10px}.card-title b{color:var(--ink)}.card-add{margin-top:10px}.bento.empty{color:var(--dim);font-size:13px}.save-strip{display:flex;align-items:center;gap:10px;margin-top:12px;padding-top:12px;border-top:1px solid var(--line);overflow:hidden;animation:strip-in .4s cubic-bezier(.2,.8,.2,1)}@keyframes strip-in{0%{max-height:0;margin-top:0;padding-top:0;opacity:0}55%{opacity:.3}to{max-height:150px;margin-top:12px;padding-top:12px;opacity:1}}.save-strip.leaving{animation:strip-out .35s cubic-bezier(.4,0,.6,1) forwards}@keyframes strip-out{0%{max-height:150px;margin-top:12px;padding-top:12px;opacity:1}45%{opacity:.3}to{max-height:0;margin-top:0;padding-top:0;opacity:0}}.strip-input{align-self:stretch;flex-shrink:0;padding:0 10px;font:inherit;font-size:13px;font-weight:500;color:var(--ink);font-variant-numeric:tabular-nums;background:var(--field-bg);border:1px solid var(--field-border);border-radius:var(--r-md)}.strip-input:focus{outline:none;border-color:var(--accent);box-shadow:var(--focus-ring)}.strip-blocked{color:var(--bad);font-size:12px;font-weight:550;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.strip-dose{display:flex;align-items:center;gap:6px;align-self:stretch;flex-shrink:0;font-size:12px;font-weight:500;color:var(--dim);white-space:nowrap}.strip-dose .strip-input{width:58px;text-align:right}@media(prefers-reduced-motion:reduce){.save-strip,.save-strip.leaving{animation:none}}button.busy{position:relative;color:transparent}button.busy:disabled{opacity:1}button.busy .spin{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto;border-color:#ffffff59;border-top-color:var(--inverse-ink)}.pending-banner{display:flex;align-items:center;gap:10px;text-align:left;border:1px dashed var(--move-accent);background:var(--warn-tint);font-size:13px;font-weight:500;box-shadow:var(--shadow)}button.pending-banner:hover{border-color:var(--move-accent);box-shadow:var(--shadow-lift)}.pending-banner .banner-icon{width:26px;height:26px;border-radius:var(--r-sm);flex-shrink:0;display:grid;place-items:center;font-size:13px;font-weight:700;background:var(--amber-chip);color:var(--move-ink)}.pending-banner .banner-text b{color:var(--move-ink);font-variant-numeric:tabular-nums}.pending-banner .banner-cta{font-size:12px;font-weight:600;color:var(--move-ink);flex-shrink:0}.newbag-banner{border-style:solid;border-color:var(--teal);background:var(--teal-tint)}.newbag-banner .banner-icon{background:var(--teal-chip-bg);color:var(--teal-ink)}.newbag-banner .banner-text b{color:inherit}.banner-dismiss{padding:4px 10px;font-size:11px;color:var(--dim);flex-shrink:0}.bag-row{margin-top:8px;font-size:12.5px}.bag-info{font-variant-numeric:tabular-nums}.select{position:relative}.select-trigger{display:flex;align-items:center;gap:8px;width:100%;text-align:left;font-size:13px;font-weight:500;color:var(--ink);background:var(--field-bg);border:1px solid var(--field-border);border-radius:var(--r-md);padding:10px 11px}.select-trigger.placeholder .select-value{color:var(--dim)}.select-trigger:focus-visible{outline:none;border-color:var(--accent);box-shadow:var(--focus-ring)}.select-value{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select-caret{color:var(--dim);font-size:10px;flex-shrink:0}.select-menu{--glass-bg: var(--glass-strong);--glass-blur: 28px;position:absolute;top:calc(100% + 6px);left:0;right:0;z-index:30;border-radius:var(--r-lg);box-shadow:var(--shadow-lift),var(--card-highlight);padding:5px;display:flex;flex-direction:column;gap:2px;max-height:260px;overflow-y:auto}.select-option{display:flex;align-items:baseline;gap:8px;width:100%;text-align:left;background:transparent;border:1px solid transparent;border-radius:var(--r-sm);padding:9px 10px;font-size:13px;box-shadow:none}.select-option:hover,.select-option.hi{background:var(--accent-tint);box-shadow:none;border-color:transparent}.select-option.selected .select-option-label{color:var(--accent)}.select-option-label{font-weight:600}.select-option-sub{font-size:11.5px;color:var(--dim)}.select.inline{width:200px}.fields .select-trigger{padding:7px 9px;border-radius:var(--r-sm)}.hopper-roaster{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.1em;color:var(--move-ink)}.hopper-name{font-size:20px;font-weight:650;letter-spacing:-.01em}.hopper-title-line{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-top:1px}.hopper-meta{font-size:12px;color:var(--dim);font-variant-numeric:tabular-nums}.hopper-prompt{font-size:12.5px;color:var(--dim)}.bean-row{padding:9px 0;border-top:1px solid var(--line)}.bean-row:first-of-type{border-top:none;padding-top:0}.bean-name{font-size:14.5px;font-weight:650;letter-spacing:-.01em}.bag-log-name{font-weight:600}.bag-log-roaster{font-size:11.5px;color:var(--dim);margin-left:6px}.user-row{flex-wrap:nowrap}.user-row .bag-info{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.user-row .select.inline,.invite-row .select.inline{width:104px}.user-row .select-trigger,.invite-row .select-trigger{padding:7px 9px;border-radius:var(--r-sm)}.user-row .select-trigger,.invite-row .select-trigger,.invite-row .row-input{min-height:var(--btn-h)}.users-head{margin-top:14px;padding-top:10px;border-top:1px solid var(--line);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--dim)}.equip-head+.users-head{margin-top:10px;padding-top:0;border-top:none}.invite-row{margin-top:8px}.bean-static{font-size:13px;color:var(--ink);background:var(--field-bg);border:1px solid var(--field-border);border-radius:var(--r-sm);padding:7px 9px}.fields{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:12px 0}.fields label{display:flex;flex-direction:column;gap:4px;font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:var(--dim);font-weight:600}.fields label.wide{grid-column:1 / -1}.fields label.actions{justify-content:flex-end}.fields label.actions .row{flex-wrap:nowrap;justify-content:flex-end}.fields.tight{margin:10px 0 0}.fields.flush{margin-bottom:0}.fields input,.fields textarea,.fields select{font:inherit;font-size:13px;color:var(--ink);background:var(--field-bg);border:1px solid var(--field-border);border-radius:var(--r-sm);padding:7px 9px;width:100%;min-width:0}.fields input:focus,.fields textarea:focus,.fields select:focus{outline:none;border-color:var(--accent);box-shadow:var(--focus-ring)}.history-cards{display:flex;flex-direction:column;gap:6px}.recent-more{display:none}.notes{color:var(--dim);margin-top:8px;white-space:pre-wrap;font-size:12.5px}.login-wrap{min-height:100vh;display:grid;place-items:center;padding:20px}.login-card{width:100%;max-width:360px;display:flex;flex-direction:column;gap:12px}.login-forgot{align-self:center}.login-card h1{margin:0 0 4px}.login-card .notes{margin:0}.login-label{display:flex;flex-direction:column;gap:4px;font-size:10px;text-transform:uppercase;letter-spacing:.08em;color:var(--dim);font-weight:600}.login-card input{font:inherit;font-size:14px;color:var(--ink);padding:9px 11px;background:var(--field-bg);border:1px solid var(--field-border);border-radius:var(--r-sm)}.login-card input:focus{outline:none;border-color:var(--accent);box-shadow:var(--focus-ring)}.toast{position:fixed;bottom:24px;left:50%;transform:translate(-50%);background:var(--inverse-bg);color:var(--inverse-ink);font-weight:500;padding:10px 18px;border-radius:var(--r-md);font-size:13px;z-index:60;box-shadow:var(--shadow-lift)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--scrim);-webkit-backdrop-filter:blur(7px) saturate(.9);backdrop-filter:blur(7px) saturate(.9);display:flex;align-items:center;justify-content:center;z-index:50;padding:20px}.modal-backdrop>.spin{width:26px;height:26px;border-width:3px;border-color:#ffffff40;border-top-color:var(--inverse-ink)}.modal{--glass-bg: var(--glass-strong);--glass-blur: 36px;--glass-sheen-stop: 35%;border-radius:var(--r-xl);box-shadow:var(--shadow-lift),var(--card-highlight);width:100%;max-width:clamp(880px,60vw,1280px);max-height:82vh;padding:18px 20px;display:flex;flex-direction:column}.modal.split{height:min(82vh,clamp(600px,66vh,1000px))}.modal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;flex-shrink:0}.modal-head b{font-size:14px}.split-body{display:grid;grid-template-columns:240px 1fr;gap:16px;min-height:0;flex:1}.adj-chip{align-self:center;font-size:10.5px;font-weight:600;color:var(--move-ink);background:var(--amber-tint);border-radius:var(--r-pill);padding:2px 10px;font-variant-numeric:tabular-nums}.adj-chip.pending{border:1px dashed var(--move-accent)}.empty-note{color:var(--dim);font-size:12.5px;padding:24px 0;text-align:center}.tl-item{display:flex;align-items:center;gap:9px;text-align:left;padding:8px 10px;border:1px solid transparent;border-radius:var(--r-md);background:var(--surface-2);width:100%}.tl-item.move{background:var(--amber-tint)}.tl-item.enter{overflow:hidden;animation:shot-enter .5s cubic-bezier(.2,.8,.2,1)}@keyframes shot-enter{0%{max-height:0;padding-top:0;padding-bottom:0;margin-bottom:-6px;opacity:0}40%{opacity:.15}to{max-height:64px;margin-bottom:0;opacity:1}}@media(prefers-reduced-motion:reduce){.tl-item.enter{animation:none}}.tl-item.move.pending{border:1px dashed var(--move-accent)}button.tl-item.shot:hover{border-color:var(--line);box-shadow:none}button.tl-item.shot.selected{border-color:var(--teal);background:var(--teal-tint)}.tl-icon{width:26px;height:26px;border-radius:var(--r-sm);flex-shrink:0;display:grid;place-items:center;font-size:13px}.tl-item.shot .tl-icon{background:var(--teal-chip-bg);color:var(--teal-ink)}.tl-item.move .tl-icon{background:var(--amber-chip);color:var(--move-ink);font-weight:700}.tl-main{display:flex;flex-direction:column;gap:1px;min-width:0}.chart-panel{border:1px solid var(--line);border-radius:var(--r-lg);padding:10px 12px 8px;background:var(--panel-2)}.chart-panel+.chart-panel{margin-top:10px}.chart-panel-head{display:flex;align-items:center;gap:7px;margin-bottom:8px}.chart-panel-head b{font-size:12px}.chart-panel-head .meta{color:var(--dim);font-size:11px;font-variant-numeric:tabular-nums}.swatch{width:8px;height:8px;border-radius:3px;flex-shrink:0}.swatch.shot{background:var(--series-shot)}.swatch.grind{background:var(--series-grind)}.swatch.dew{background:var(--series-dew)}.panel-count{font-size:11px;color:var(--dim)}.grind-list{display:flex;flex-direction:column;margin-top:2px}.grind-row{display:flex;align-items:baseline;gap:10px;padding:6px 2px;border-top:1px solid var(--line);font-size:12.5px;font-variant-numeric:tabular-nums}.grind-row:first-child{border-top:none}.grind-when{color:var(--dim);width:104px;flex-shrink:0;white-space:nowrap}.grind-move{font-weight:600;color:var(--move-ink);width:92px;flex-shrink:0}.grind-src{color:var(--dim);font-size:11px;text-transform:capitalize;width:60px;flex-shrink:0}.grind-pos{color:var(--ink);font-weight:500;white-space:nowrap}.shot-item-when{font-weight:600;font-size:12.5px;white-space:nowrap}.shot-item-sub{font-size:11.5px;color:var(--dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.shot-metrics{display:flex;align-items:baseline;flex-shrink:0}.shot-metrics .metric{min-width:56px;text-align:right;font-family:var(--mono);font-size:13px;font-variant-numeric:tabular-nums}.shot-metrics .metric small{font-size:10px;color:var(--dim)}.shot-metrics .ratio{min-width:48px;font-size:11.5px;color:var(--dim)}.shot-detail{overflow-y:auto;min-width:0;font-size:13px;transition:opacity .15s;flex:1;min-height:0;padding-right:8px}.shot-detail.dimmed{opacity:.55}.modal-close{padding:3px 10px;font-size:17px;line-height:1;border-radius:var(--r-sm);color:var(--dim)}.view-seg{display:flex;gap:4px;padding:4px;flex-shrink:0;background:var(--surface-2);border-radius:var(--r-lg);margin-bottom:12px;max-width:300px}.view-seg button{flex:1;padding:6px 18px;font-size:12.5px;font-weight:600;border:1px solid transparent;border-radius:9px;background:transparent;color:var(--dim);box-shadow:none}.view-seg button.on{background:var(--panel);color:var(--ink);border-color:var(--line);box-shadow:0 1px 3px #0000000f}.view-seg.in-head{margin-bottom:0;max-width:none;padding:0;gap:18px;background:none}.view-seg.in-head button{flex:0 0 auto;padding:0;font-size:14px;border:none;border-radius:0;background:none;box-shadow:none;color:var(--dim)}.view-seg.in-head button.on{background:none;border:none;box-shadow:none;color:var(--ink)}.fade-above{-webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 26px);mask-image:linear-gradient(to bottom,transparent 0,#000 26px)}.fade-below{-webkit-mask-image:linear-gradient(to bottom,#000 calc(100% - 26px),transparent 100%);mask-image:linear-gradient(to bottom,#000 calc(100% - 26px),transparent 100%)}.fade-above.fade-below{-webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 26px,#000 calc(100% - 26px),transparent 100%);mask-image:linear-gradient(to bottom,transparent 0,#000 26px,#000 calc(100% - 26px),transparent 100%)}.fade-left{box-shadow:inset 34px 0 30px -14px var(--scroll-hint);-webkit-mask-image:linear-gradient(to right,transparent 0,#000 30px);mask-image:linear-gradient(to right,transparent 0,#000 30px)}.fade-right{box-shadow:inset -34px 0 30px -14px var(--scroll-hint);-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 30px),transparent 100%);mask-image:linear-gradient(to right,#000 calc(100% - 30px),transparent 100%)}.fade-left.fade-right{box-shadow:inset 34px 0 30px -14px var(--scroll-hint),inset -34px 0 30px -14px var(--scroll-hint);-webkit-mask-image:linear-gradient(to right,transparent 0,#000 30px,#000 calc(100% - 30px),transparent 100%);mask-image:linear-gradient(to right,transparent 0,#000 30px,#000 calc(100% - 30px),transparent 100%)}.pager-view{flex:1;min-height:0;overflow:hidden}.pager-track{display:flex;height:100%;will-change:transform}.pager-track.animating{transition:transform .28s cubic-bezier(.2,.8,.2,1)}@media(prefers-reduced-motion:reduce){.pager-track.animating{transition:none}}.pager-panel{flex:0 0 100%;min-width:0;overflow-y:auto;font-size:13px;padding:0 8px 0 1px;display:flex;flex-direction:column}.pager-panel>.shot-card{flex:1 0 auto;display:flex;flex-direction:column;margin-bottom:0}.pager-panel .shot-card .chart-wrap{flex:1 0 auto}.pager-panel>.sk-chart{flex:1 0 auto}.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:14px}.stat-grid.trend-headline{grid-template-columns:repeat(3,1fr);margin-top:0;margin-bottom:10px}.stat-label{font-size:10px;text-transform:uppercase;letter-spacing:.1em;color:var(--dim);font-weight:600}.stat-unit{text-transform:none;letter-spacing:0;opacity:.7}.stat-value{font-family:var(--mono);font-size:16px;font-variant-numeric:tabular-nums;margin-top:1px}.stat-flag{font-size:11px;margin-left:5px;font-family:var(--font)}.stat-flag.ok{color:var(--dim)}.stat-flag.warn{color:var(--move-ink)}.stat-flag.bad{color:var(--bad)}.event-note-row{margin:10px 0}.event-row{gap:8px;align-items:baseline;font-family:var(--mono);font-size:12px}.event-time{opacity:.6;white-space:nowrap}.event-detail{overflow-wrap:anywhere}details summary{font-size:12px;color:var(--dim);cursor:pointer}.log{background:var(--inverse-bg);color:var(--dim-2);border-radius:var(--r-md);padding:10px 12px;margin-top:8px;font-family:var(--mono);font-size:11px;line-height:1.5;max-height:220px;overflow-y:auto;white-space:pre-wrap;word-break:break-all}.log .tx{color:var(--log-tx)}.log .err{color:var(--log-err)}@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))){.bento,.modal,.select-menu,.pop{background:var(--panel)}}@media(prefers-reduced-transparency:reduce){.bento,.modal,.select-menu,.pop{background:var(--panel);-webkit-backdrop-filter:none;backdrop-filter:none}}@media(max-width:640px){.app{padding:14px 10px calc(32px + env(safe-area-inset-bottom))}.fields input,.fields textarea,.fields select,.row-input,.bag-date,.login-card input{font-size:16px}.adjust-btn{padding:8px 13px}.bento.grinder-card{padding:13px 14px}.modal-close{padding:7px 13px}.icon-btn{padding:10px 12px}.select-trigger{padding:12px}.select-option{padding:11px 10px}.select.inline{width:min(200px,58vw)}.head-row{align-items:center;margin-bottom:12px}h1{font-size:11px;margin:0 2px}.bento-grid{grid-template-columns:repeat(2,1fr);gap:10px}.bento{padding:13px 14px;border-radius:14px}.readout .value{font-size:26px}.fields{grid-template-columns:repeat(2,1fr)}.modal-backdrop{padding:10px}.modal{max-height:96vh;padding:14px}.modal.split{height:min(860px,94vh);height:92svh}.modal-head{flex-wrap:wrap;row-gap:8px}.tab-row{overflow-x:auto;max-width:100%}.tab-row .nav-item{white-space:nowrap}.split-body{grid-template-columns:1fr;grid-template-rows:auto 1fr}.view-seg{max-width:none}.view-seg button{padding:7px 0}.detail-nav{display:none}.history-cards .tl-item{padding:7px 9px}.recent-card .title-row,.recent-card .second{display:none}.recent-card .history-cards{flex-direction:row;align-items:stretch;gap:8px}.recent-card .history-cards .tl-item{flex:1;min-width:0}.recent-more{display:inline-flex;align-items:center;flex-shrink:0}.recent-card .shot-metrics .ratio{display:none}.recent-card .shot-metrics .metric{min-width:48px}.recent-card .shot-item-when{overflow:hidden;text-overflow:ellipsis}:root{--live-chart-h: clamp(260px, 100svh - 370px, 420px)}.stat-grid{grid-template-columns:repeat(2,1fr);gap:8px}.stat{text-align:center;padding:8px 6px}.chart-panel{padding:8px 9px 6px}.split-body.settings{grid-template-columns:1fr}.settings-nav{flex-direction:row;overflow-x:auto;overflow-y:hidden;border-right:none;border-bottom:1px solid var(--line);padding:0 0 8px}.settings-nav .nav-item{white-space:nowrap;flex-shrink:0}.save-strip button{flex:1;padding:11px 14px}.strip-input{flex:1;font-size:16px}.strip-blocked{color:var(--bad);font-size:12px;font-weight:550;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.strip-dose{flex:1}.toast{bottom:calc(24px + env(safe-area-inset-bottom))}.modal-backdrop{padding-bottom:calc(10px + env(safe-area-inset-bottom))}}.gallery{max-width:1080px;margin:0 auto;padding:24px 20px 80px}.gallery>.head-row{margin-bottom:24px}.gallery h1{margin:0}.gallery-section{margin-bottom:34px}.gallery-section-title{font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--dim);margin-bottom:12px}.gallery-row{display:flex;flex-wrap:wrap;gap:14px;align-items:flex-start}.gallery-stack{width:100%;display:grid;gap:12px}.gallery-note{color:var(--dim);font-size:13px}.gallery-inline{display:inline-flex;gap:8px;align-items:center;font-size:13px}.gallery-inline.dim{color:var(--dim)}.gallery-controls{display:flex;gap:18px;align-items:center;flex-wrap:wrap}.gallery-control{min-width:240px}.gallery-w-sm{max-width:240px}.gallery-w-md{max-width:320px}.gallery-w-lg{max-width:380px;width:100%}.gallery-w-xl{max-width:440px;width:100%}.gallery-w-stat{max-width:420px}.gallery-w-list{max-width:360px;width:100%}
