:root{--bg:#f7f3ed;--bg-panel:#f0ebe3;--ink:#1c1a17;--ink-muted:#7a726a;--ink-faint:#b8afa5;--accent:#b85c38;--accent-hover:#9e4d2e;--accent-tint:#f5ece7;--border:#e2d9ce;--radius:14px;--font-display:"Cormorant Garamond", Georgia, serif;--font-ui:"Jost", system-ui, sans-serif;--font-mono:"JetBrains Mono", "Fira Mono", monospace}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-text-size-adjust:100%}body{overscroll-behavior:none;background:var(--bg);width:100%;color:var(--ink);font-family:var(--font-ui);font-weight:300;position:fixed;overflow:hidden}.app{flex-direction:column;max-width:540px;margin:0 auto;padding:0 24px;display:flex;position:fixed;top:0;left:0;right:0;overflow:hidden}.slm-status{z-index:10;justify-content:center;align-items:center;width:26px;height:26px;display:flex;position:fixed;top:14px;right:18px}.slm-icon{display:none}.slm-status[data-state=loading] .slm-icon-loading{color:var(--ink-faint);animation:1.2s linear infinite slm-spin;display:block}.slm-status[data-state=ready] .slm-icon-ready{color:#4a7c59;display:block}.slm-status[data-state=failed] .slm-icon-failed{color:var(--accent);opacity:.5;display:block}@keyframes slm-spin{to{transform:rotate(360deg)}}.source-badge{justify-content:center;min-height:18px;margin-top:8px;display:flex}.source-det{color:var(--ink-faint)}.source-det.source-low{color:var(--accent);opacity:.7}.source-slm{color:#4a7c59}.stage{overscroll-behavior:contain;flex-direction:column;flex:1;justify-content:center;align-items:center;min-height:0;padding:32px 0 16px;display:flex;overflow-y:auto}.state-empty{text-align:center}.prompt-hint{font-family:var(--font-display);color:var(--ink-faint);margin-bottom:14px;font-size:1.9rem;font-style:italic;font-weight:300;line-height:1.3}.prompt-example{color:var(--ink-faint);letter-spacing:.02em;font-size:.8rem;font-weight:400}.prompt-example em{color:var(--ink-muted);border-bottom:1px solid var(--border);font-style:normal}.example-chip{font:inherit;font-size:inherit;color:var(--ink-muted);border:none;border-bottom:1px solid var(--border);cursor:pointer;background:0 0;padding:0;transition:color .15s,border-color .15s;display:inline}.example-chip:hover{color:var(--accent);border-color:var(--accent)}.state-result{text-align:center}.gram-display{justify-content:center;align-items:flex-end;gap:4px;margin-bottom:16px;line-height:1;display:flex}.gram-number{font-family:var(--font-display);color:var(--ink);letter-spacing:-.02em;will-change:opacity, transform;font-size:clamp(72px,18vw,110px);font-weight:300;transition:opacity .12s,transform .12s}.gram-number.flash{opacity:0;transform:translateY(-6px)}.gram-unit{font-family:var(--font-display);color:var(--accent);letter-spacing:-.01em;padding-bottom:.12em;font-size:clamp(36px,9vw,54px);font-weight:300}.ingredient-resolved{font-family:var(--font-display);color:var(--ink);letter-spacing:.01em;margin-bottom:8px;font-size:1.45rem;font-weight:400}.parse-tokens{flex-wrap:wrap;justify-content:center;gap:6px;display:flex}.token-chip{background:var(--accent-tint);letter-spacing:.03em;color:var(--accent);border-radius:999px;align-items:center;gap:4px;padding:3px 10px;font-size:.72rem;font-weight:400;display:inline-flex}.token-chip .token-label{color:var(--ink-faint);font-weight:300}.state-error{text-align:center}.error-message{font-family:var(--font-display);color:var(--ink-muted);font-size:1.6rem;font-style:italic;font-weight:300;line-height:1.4}.error-message em{color:var(--accent);font-style:normal}.debug-panel{border-top:1px solid var(--border);flex-shrink:0;margin-bottom:8px}.debug-panel[open]{overscroll-behavior:contain;max-height:60vh;overflow:hidden auto}.debug-panel[open] .chevron{transform:rotate(180deg)}.chevron{flex-shrink:0;transition:transform .2s}.debug-toggle{cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--ink-muted);background:var(--bg);z-index:1;align-items:center;gap:6px;margin:0 -24px;padding:12px 24px;list-style:none;display:flex;position:sticky;top:0}.debug-toggle::-webkit-details-marker{display:none}.debug-toggle-label{letter-spacing:.04em;text-transform:uppercase;flex:1;font-size:.73rem;font-weight:400}.debug-body{padding-bottom:16px}.debug-section{margin-bottom:16px}.debug-section+.debug-section{border-top:1px solid var(--border);padding-top:12px}.debug-section-header{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-muted);align-items:center;gap:6px;margin-bottom:8px;font-size:.68rem;font-weight:500;display:flex}.debug-slm{font-size:.82rem}.debug-slm-idle{color:var(--ink-faint);font-style:italic}.debug-slm-loading{color:var(--ink-muted)}.debug-slm-error{color:var(--accent)}.slm-result{flex-direction:column;gap:3px;display:flex}.slm-ingredient{font-family:var(--font-display);color:var(--ink);font-size:1rem}.slm-detail{font-family:var(--font-mono);color:var(--ink-muted);font-size:.73rem}.debug-grid{grid-template-columns:auto 1fr;gap:4px 16px;margin-bottom:14px;font-size:.79rem;display:grid}.debug-grid dt{color:var(--ink-faint);white-space:nowrap;padding:2px 0;font-weight:400}.debug-grid dd{color:var(--ink);font-weight:300;font-family:var(--font-mono);text-overflow:ellipsis;white-space:nowrap;padding:2px 0;font-size:.75rem;overflow:hidden}.debug-source{background:var(--bg-panel);border-left:3px solid var(--accent);border-radius:8px;margin-bottom:12px;padding:10px 12px}.debug-source p{color:var(--ink-muted);margin-bottom:4px;font-size:.78rem;font-weight:300}.debug-source a{color:var(--ink);border-bottom:1px solid var(--accent);padding-bottom:1px;font-size:.85rem;text-decoration:none}.debug-source a:hover{color:var(--accent)}.debug-candidates{flex-direction:column;gap:6px;display:flex}.candidate-row{align-items:center;gap:10px;font-size:.75rem;display:flex}.candidate-name{color:var(--ink);white-space:nowrap;text-overflow:ellipsis;flex:1;font-weight:300;overflow:hidden}.candidate-bar-wrap{background:var(--border);border-radius:2px;flex-shrink:0;width:80px;height:4px;overflow:hidden}.candidate-bar{background:var(--accent);border-radius:2px;height:100%;transition:width .3s}.candidate-score{font-family:var(--font-mono);color:var(--ink-faint);text-align:right;flex-shrink:0;width:30px;font-size:.68rem}.candidate-grams{font-family:var(--font-mono);color:var(--accent);flex-shrink:0;margin-right:6px;font-size:.72rem;font-weight:500}.input-bar{padding:12px 0 max(16px, env(safe-area-inset-bottom));background:linear-gradient(to bottom, transparent, var(--bg) 30%);flex-shrink:0}.input-wrap{border:1.5px solid var(--border);background:#fff;border-radius:999px;align-items:center;gap:8px;padding:4px 4px 4px 20px;transition:border-color .15s;display:flex}.input-wrap:focus-within{border-color:var(--ink-muted)}.ingredient-input{font-family:var(--font-ui);color:var(--ink);background:0 0;border:none;outline:none;flex:1;min-width:0;padding:8px 0;font-size:1rem;font-weight:300;line-height:1}.ingredient-input::placeholder{color:var(--ink-faint)}.mic-btn{background:var(--bg-panel);width:40px;height:40px;color:var(--ink-muted);cursor:pointer;border:none;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;transition:background .2s,color .2s,transform .15s;display:flex;position:relative}.mic-btn:hover{background:var(--accent-tint);color:var(--accent)}.mic-btn:active{transform:scale(.93)}.mic-btn.listening{background:var(--accent);color:#fff;animation:1.4s ease-in-out infinite mic-pulse}@keyframes mic-pulse{0%,to{box-shadow:0 0 #b85c3866}50%{box-shadow:0 0 0 10px #b85c3800}}.mic-btn .mic-idle{display:block}.mic-btn .mic-stop,.mic-btn.listening .mic-idle{display:none}.mic-btn.listening .mic-stop{display:block}@media (width>=540px){.app{padding:0 36px}}body.keyboard-open .stage{padding-top:4px;padding-bottom:4px}body.keyboard-open .prompt-hint{font-size:1.2rem}body.keyboard-open .gram-number{font-size:clamp(48px,14vw,72px)}body.keyboard-open .ingredient-resolved{font-size:1.1rem}body.keyboard-open .debug-panel[open]{max-height:40vh}
