:root{--accent: #3f6b45;--accent-l: #8fb18a;--ink: #1c231d;--ink-fg: #e9ede6;--app-bg: #edf0ea;--card: #f6f8f3;--border: #d5dbcf;--hot: #c15a3c;--flavor-acid: #c06a42;--flavor-sweet: #b68b2f;--flavor-bitter: #6e5140;--text-strong: #2a322a;--text-body: #4a524a;--text-secondary: #6f776d;--text-muted: #9aa295;--text-disabled: #b7c1b1;--surface-track: #e0e5db;--surface-divider: #eef1ec;--surface-panel-soft: #fbfcfa;--surface-warn-soft: #fbf3ee;--font-sans: "Noto Sans SC", system-ui, sans-serif;--font-mono: "JetBrains Mono", monospace;--ls-brand: .22em;--ls-label: .12em;--ls-cta: .12em;--ls-meta: .05em;--radius: 0px;--border-hairline: 1px solid var(--border);--border-strong: 1px solid var(--ink);--border-dashed: 1px dashed var(--text-disabled);--border-active-top: 2px solid var(--accent);--space-screen-x: 20px;--space-card-pad: 14px 15px;--space-gap-tight: 6px;--space-gap: 8px;--space-gap-md: 12px;--space-section: 20px;--control-h: 48px;--control-h-compact: 36px;--input-h: 46px;--cta-h-mobile: 52px;--motion-fast: .12s;--motion-base: .16s;--motion-ease: cubic-bezier(.2, 0, 0, 1);--state-primary-hover: #35593a;--state-primary-pressed: #2f5334;--state-ink-hover: #2a322a;--z-nav: 100;--z-sticky: 200;--z-overlay: 900;--z-dialog: 1000;--overlay-scrim: rgba(28, 35, 29, .5);--shadow-phone: 0 30px 70px -20px rgba(28, 35, 29, .5), 0 8px 24px rgba(28, 35, 29, .18);--shadow-toast: 0 8px 24px rgba(28, 35, 29, .3)}*{box-sizing:border-box;-webkit-font-smoothing:antialiased}html,body,#root{margin:0;min-height:100%;background:var(--app-bg);color:var(--ink);font-family:var(--font-sans)}body{min-width:320px}button,input,textarea{font:inherit}button,a{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}button:disabled{opacity:1;cursor:not-allowed}.app-shell{width:100%;max-width:540px;min-height:100dvh;margin:0 auto;background:var(--app-bg);position:relative;display:flex;flex-direction:column;box-shadow:0 0 50px #1c231d14}.desktop-nav{display:none}.page-scroll{flex:1;padding-bottom:90px}.app-shell:has(.sticky-actions) .page-scroll{padding-bottom:92px}.masthead{background:var(--ink);color:var(--ink-fg);padding:calc(24px + env(safe-area-inset-top)) 20px 16px}.header-row{display:flex;align-items:center;justify-content:space-between}.brand,.header-meta,.settings-link{font-family:var(--font-mono);font-size:11px;letter-spacing:.15em;color:var(--accent-l)}.settings-link{border:1px solid rgba(255,255,255,.22);padding:5px 9px;letter-spacing:.06em}.title-row{align-items:baseline;margin-top:8px}.masthead h1{font-size:27px;letter-spacing:.02em;margin:0}.header-meta{font-size:12px;letter-spacing:.03em}.bottom-nav{position:fixed;z-index:10;bottom:0;width:100%;max-width:540px;height:70px;padding-bottom:env(safe-area-inset-bottom);display:flex;background:var(--card);border-top:1px solid var(--border)}.bottom-nav a{flex:1;display:grid;place-items:center;border-top:2px solid transparent;font:11px var(--font-mono);letter-spacing:.1em;color:var(--text-muted)}.bottom-nav a.active{border-top-color:var(--accent);color:var(--ink)}.content{padding:20px}.cards{padding-top:6px}.bean-card,.journal-card{display:block;background:var(--card);border:1px solid var(--border);margin-top:14px;padding:15px}.card-link{display:block}.card-meta{display:flex;justify-content:space-between;gap:10px;font:10px var(--font-mono);letter-spacing:.04em;color:var(--text-muted)}.bean-card h2,.journal-card h2{font-size:20px;margin:9px 0 0}.best{font:9px var(--font-mono);letter-spacing:.08em;background:var(--accent);color:#fff;padding:2px 6px;margin-left:8px;vertical-align:middle}.origin{font:11px var(--font-mono);color:var(--text-secondary);margin:4px 0}.tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:11px}.tags span{font:11px var(--font-mono);color:var(--accent);border:1px solid #b7c8b2;padding:2px 8px}.primary,.dark,.ghost,.danger,.dashed{border:0;display:block;min-height:var(--control-h);text-align:center;cursor:pointer;padding:14px;font:12px var(--font-mono);letter-spacing:.1em}.primary{background:var(--accent);color:#fff}.primary.small{min-height:var(--control-h-compact);margin-top:13px;padding:10px}.dark{background:var(--ink);color:var(--ink-fg)}.ghost{background:transparent;border:1px solid var(--border);color:var(--text-secondary)}.danger{background:transparent;border:1px solid var(--hot);color:var(--hot)}.dashed{border:1px dashed var(--text-disabled);color:var(--text-secondary);margin-top:14px}.primary:disabled,.dark:disabled,.danger.solid:disabled{background:var(--text-disabled);color:var(--text-muted)}.ghost:disabled,.danger:disabled,.dashed:disabled{border-color:var(--text-disabled);color:var(--text-muted)}.full{width:100%;margin-top:16px}.detail{padding-top:calc(24px + env(safe-area-inset-top))}.top-actions{display:flex;justify-content:space-between}.back,.edit{font:12px var(--font-mono);letter-spacing:.08em;color:var(--text-secondary)}.detail>.overline,.detail-hero .overline{font:11px var(--font-mono);letter-spacing:.06em;color:var(--text-muted);margin:18px 0 0}.detail>h1,.detail-hero h1,.form>h1{font-size:30px;margin:7px 0 18px}.mini-specs{display:grid;grid-template-columns:repeat(3,1fr);border:1px solid var(--border);margin-top:18px}.mini-specs span{padding:11px;text-align:center;font:13px var(--font-mono);border-right:1px solid var(--border)}.mini-specs span:last-child{border:0}.mini-specs small{display:block;font-size:9px;color:var(--text-muted);margin-bottom:5px}.optimal{background:var(--ink);color:var(--ink-fg);display:flex;flex-direction:column;gap:6px;margin-top:18px;padding:15px}.optimal small{font:10px var(--font-mono);letter-spacing:.1em;color:var(--accent-l)}.optimal span{font:11px var(--font-mono);color:var(--text-disabled)}.best-cup .dim-bar>span,.best-cup .dim-bar>strong,.best-cup p{color:var(--ink-fg)}.best-cup .dim-bar>i{background:#ffffff29}.inline-actions{display:flex;gap:8px;margin-top:10px}.inline-actions>*{flex:1;padding:10px}.ai-panel{border:1px solid var(--ink);margin-top:18px;padding:14px}.ai-panel h3{font:12px var(--font-mono);letter-spacing:.08em;margin:0}.pills{display:flex;gap:7px;margin-top:13px}.pills.wrap{flex-wrap:wrap}.pills button,.choice button{flex:1;background:transparent;border:1px solid var(--border);padding:9px;color:var(--text-secondary);cursor:pointer;font:12px var(--font-mono)}.pills button.selected,.choice button.selected{border-color:var(--accent);background:var(--accent);color:#fff}.suggestion{border-top:1px solid var(--border);margin-top:15px;padding-top:15px}.suggestion>strong{font:13px var(--font-mono);color:var(--accent)}.suggestion p{font-size:13px;line-height:1.8;color:var(--text-body)}.suggestion>small{font:10px var(--font-mono);color:var(--text-muted)}.warning{border:1px solid #e7cfc2;background:var(--surface-warn-soft);color:var(--hot);padding:10px;font:11px var(--font-mono);line-height:1.6}.section-label{font:11px var(--font-mono);letter-spacing:.1em;color:var(--text-muted);margin:26px 0 10px;padding-bottom:8px;border-bottom:1px solid var(--border)}.log-row{display:block;border:1px solid var(--border);background:var(--card);padding:13px;margin-top:10px}.log-row>span{display:flex;justify-content:space-between;font-size:14px}.log-row small{font:10px var(--font-mono);color:var(--text-muted)}.dim-bars{display:flex;flex-direction:column;gap:8px;margin-top:11px}.dim-bar{display:flex;align-items:center;gap:9px}.dim-bar>span{width:52px;font:11px var(--font-mono);color:var(--text-secondary)}.dim-bar>i{flex:1;height:7px;background:var(--surface-track);font-style:normal}.dim-bar>i>b{display:block;height:100%;background:var(--accent)}.dim-bar>i>b.hot{background:var(--hot)}.dim-bar>strong{width:14px;font:12px var(--font-mono)}.hot-text{color:var(--hot)}.spec-grid{display:grid;grid-template-columns:repeat(3,1fr);border:1px solid var(--border);margin-top:11px}.spec-grid>div{padding:10px;border-right:1px solid var(--border);border-bottom:1px solid var(--border)}.spec-grid small{display:block;font:9px var(--font-mono);color:var(--text-muted)}.spec-grid strong{display:block;font:13px var(--font-mono);margin-top:3px}.steps{border:1px solid var(--border);background:var(--card);margin-top:10px}.step{display:flex;gap:10px;align-items:baseline;padding:9px 11px;border-top:1px solid var(--surface-divider);font:11px var(--font-mono)}.step:first-child{border-top:0}.step b{color:var(--accent)}.step span{width:42px;color:var(--text-secondary)}.step strong{flex:1}.step em{color:var(--text-muted);font-style:normal}.journal-card>div:first-child{display:flex;justify-content:space-between;align-items:baseline}.journal-card h2{margin:0}.journal-card>div:first-child>span{font:11px var(--font-mono);color:var(--text-muted)}.journal-card>p{font:11px var(--font-mono);color:var(--text-secondary)}.journal-card>p b{background:var(--accent);color:#fff;padding:2px 7px;margin-right:7px;font-size:9px}.note{background:var(--card);border:1px solid var(--border);padding:13px;line-height:1.8;color:var(--text-body)}.analysis{border:1px solid var(--ink);margin-top:12px}.analysis h4{margin:0;background:var(--ink);color:var(--accent-l);padding:9px 14px;font:11px var(--font-mono);letter-spacing:.08em}.analysis>*:not(h4){margin-left:14px;margin-right:14px}.change{display:flex;align-items:baseline;flex-wrap:wrap;gap:10px;margin-top:17px;font-family:var(--font-mono)}.change span{color:var(--text-secondary)}.change del{font-size:19px;color:var(--text-muted)}.change strong{font-size:23px;color:var(--accent)}.analysis>small{display:block;margin-top:15px;font:10px var(--font-mono);color:var(--text-muted);letter-spacing:.08em}.analysis p{line-height:1.8}.analysis-impact{margin-top:14px;padding:12px;background:var(--app-bg);border-left:2px solid var(--accent)}.analysis-impact>small{display:block;color:var(--text-muted);font:9px var(--font-mono);letter-spacing:.06em}.experiment-impact-preview{display:grid;grid-template-columns:repeat(3,1fr);gap:7px;margin-top:9px}.experiment-impact-preview>div{min-width:0;border:1px solid var(--border);background:var(--card);padding:7px;font-family:var(--font-mono)}.experiment-impact-preview span,.experiment-impact-preview small{display:block;color:var(--text-muted);font-size:9px}.experiment-impact-preview b{display:block;margin:3px 0;color:var(--text-secondary);font-size:12px}.experiment-impact-preview .up b{color:var(--accent)}.experiment-impact-preview .down b{color:var(--hot)}.analysis-model-limit{margin-top:14px;padding:10px 12px;border-left:2px solid var(--hot);background:var(--app-bg);color:var(--text-secondary);font:10px/1.7 var(--font-mono)}.analysis em{display:block;color:var(--accent);font:12px var(--font-mono);line-height:1.7}.analysis details{border-top:1px solid var(--border);padding:12px 0;font:12px var(--font-mono);line-height:1.9;color:var(--text-body)}.analysis summary{cursor:pointer}.analysis footer{border-top:1px solid var(--border);padding:9px 0;font:10px var(--font-mono);color:var(--text-muted)}.form{padding-top:calc(24px + env(safe-area-inset-top));padding-bottom:35px}.field{display:block;margin-top:17px}.field>span{display:block;font:10px var(--font-mono);letter-spacing:.1em;color:var(--text-muted);margin-bottom:7px}.field input,.field textarea{width:100%;background:var(--card);border:1px solid var(--border);padding:11px 12px;color:var(--ink);outline:none;border-radius:0}.field input{min-height:var(--input-h)}.field textarea{min-height:80px;resize:vertical}.field input:focus,.field textarea:focus{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.choice{display:flex;gap:7px}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:0 10px}.step-input{display:grid;grid-template-columns:70px 1fr 1fr 30px;gap:6px;margin-top:7px}.step-input input{min-width:0;padding:8px}.step-input button{border:1px solid var(--hot);background:none;color:var(--hot)}.sticky-actions{position:fixed;bottom:0;width:100%;max-width:540px;padding:12px 20px calc(20px + env(safe-area-inset-bottom));background:var(--app-bg);border-top:1px solid var(--border);z-index:10}.sticky-actions .full,.sticky-actions .primary{margin:0}.progress{display:flex;gap:8px}.progress span{flex:1;border-top:2px solid var(--border);padding-top:7px;font:10px var(--font-mono);color:var(--text-muted)}.progress span.active{border-color:var(--accent);color:var(--accent)}.selected-sample{background:var(--card);border:1px solid var(--border);padding:13px;font-weight:700}.selected-sample small{font:11px var(--font-mono);color:var(--text-secondary);margin-left:8px}.slider{display:block;padding:13px 0;border-bottom:1px solid var(--border)}.slider-head,.slider-description{display:flex;justify-content:space-between;align-items:center;gap:12px}.slider-head b,.slider-head strong{font:13px var(--font-mono)}.slider-head strong{color:var(--accent)}.slider-description p{flex:1;margin:7px 0 0;color:var(--text-secondary);font-size:12px;line-height:1.6}.slider-description button{flex:0 0 auto;width:22px;height:22px;margin-top:7px;border:1px solid var(--border);background:var(--card);color:var(--accent);cursor:pointer;font:700 11px var(--font-mono);border-radius:50%}.slider-control{position:relative;width:100%;height:28px;margin-top:10px}.slider-control input{-moz-appearance:none;appearance:none;-webkit-appearance:none;position:relative;z-index:2;width:100%;height:28px;margin:0;background:transparent;cursor:pointer}.slider-control input::-webkit-slider-runnable-track{height:7px;border:1px solid #99a395;background:linear-gradient(to right,var(--accent) 0 var(--slider-progress),var(--surface-track) var(--slider-progress) 100%)}.slider-control input::-moz-range-track{height:7px;border:1px solid #99a395;background:linear-gradient(to right,var(--accent) 0 var(--slider-progress),var(--surface-track) var(--slider-progress) 100%)}.slider-control input::-webkit-slider-thumb{-moz-appearance:none;appearance:none;-webkit-appearance:none;width:20px;height:20px;margin-top:-7px;border:2px solid var(--app-bg);background:var(--accent);border-radius:50%;box-shadow:0 0 0 1px var(--accent)}.slider-control input::-moz-range-thumb{width:16px;height:16px;border:2px solid var(--app-bg);background:var(--accent);border-radius:50%;box-shadow:0 0 0 1px var(--accent)}.slider-ticks{position:absolute;z-index:1;top:0;right:9px;bottom:0;left:9px;display:grid;grid-template-columns:repeat(5,1fr);align-items:center;pointer-events:none}.slider-ticks i{justify-self:center;width:2px;height:11px;background:#879284}.slider-ticks i:first-child{justify-self:start}.slider-ticks i:last-child{justify-self:end}.slider-scale{position:relative;height:20px;color:var(--text-muted);font:10px var(--font-mono)}.slider-scale span,.slider-scale strong{position:absolute;top:0;white-space:nowrap}.slider-scale .scale-min{left:0}.slider-scale .scale-max{right:0}.slider-scale strong{color:var(--accent);font-weight:700;transform:translate(-50%)}.advanced-dims{margin-top:18px;border:1px solid var(--border);padding:0 13px}.advanced-dims summary{cursor:pointer;padding:13px 0;font:11px var(--font-mono);color:var(--text-secondary)}.ratio-readout{margin:14px 0 0;padding:10px 12px;border:1px solid var(--accent);color:var(--accent);font:12px var(--font-mono)}.recipe-row em{color:var(--hot);font:9px var(--font-mono);font-style:normal}.dialog-backdrop{position:fixed;z-index:var(--z-overlay);top:0;right:0;bottom:0;left:0;display:grid;place-items:center;padding:20px;background:var(--overlay-scrim)}.app-dialog{position:relative;z-index:var(--z-dialog);width:min(480px,100%);max-height:min(720px,calc(100dvh - 40px));overflow:auto;border:1px solid var(--ink);background:var(--app-bg);box-shadow:none}.app-dialog>header{position:relative;padding:17px 52px 15px 18px;background:var(--ink);color:var(--ink-fg)}.app-dialog>header p{margin:0 0 5px;color:var(--accent-l);font:9px var(--font-mono);letter-spacing:.1em}.app-dialog>header h2{margin:0;font-size:20px}.app-dialog>header button{position:absolute;top:13px;right:13px;width:30px;height:30px;border:1px solid rgba(255,255,255,.3);background:transparent;color:var(--ink-fg);cursor:pointer;font-size:21px;line-height:1}.dialog-body{padding:18px;color:var(--text-body);line-height:1.8}.dialog-body>p{margin:0}.app-dialog>footer{display:flex;justify-content:flex-end;gap:8px;padding:12px 18px 18px;border-top:1px solid var(--border)}.app-dialog>footer button{min-width:110px;min-height:var(--control-h-compact);margin:0;padding:11px 14px}.danger.solid{background:var(--hot);color:#fff}.dimension-levels{display:grid;gap:8px;margin:18px 0 0;padding:0;list-style:none}.dimension-levels li{display:grid;grid-template-columns:28px 1fr;gap:10px;align-items:start;padding:10px;border:1px solid var(--border);background:var(--card)}.dimension-levels li>b{display:grid;place-items:center;width:26px;height:26px;background:var(--accent);color:#fff;font:12px var(--font-mono)}.dimension-levels li span{font-size:12px;line-height:1.6}.dimension-levels li strong{display:block;color:var(--ink);font-size:13px}.recipe-row{display:block;border-bottom:1px solid var(--border);padding:14px 0}.recipe-row>span{display:flex;align-items:center;gap:8px}.recipe-row>span strong{font-size:17px}.recipe-row>span b{font:9px var(--font-mono);background:var(--accent);color:#fff;padding:2px 6px}.recipe-row>p{font:11px var(--font-mono);color:var(--text-secondary)}.recipe-row .steps{font-size:10px}.status{border:1px solid var(--border);background:var(--card);padding:11px 13px;font:12px var(--font-mono);color:var(--text-secondary)}.status.ready{border-color:var(--accent);color:var(--accent);background:#eef4ec}.muted,.hint{color:var(--text-secondary);font:11px var(--font-mono);line-height:1.7}.hint{display:block;margin-top:5px}.security-note{background:var(--surface-warn-soft);border:1px solid #e7cfc2;color:var(--text-body);padding:11px;font-size:12px;line-height:1.7}.error{color:var(--hot);font:12px var(--font-mono);line-height:1.7}.success{color:var(--accent);font:12px var(--font-mono)}.loading-box{border:1px solid var(--border);padding:18px;color:var(--accent);font:13px var(--font-mono)}.empty{text-align:center;padding:80px 20px;color:var(--text-muted);font:12px var(--font-mono)}.brew-stage{display:none}.brew-stage.mobile-active{display:block}.desktop-save{display:none}:where(a,button,input,textarea):focus-visible{outline:2px solid var(--accent);outline-offset:2px}:where(.bean-card,.journal-card,.recipe-row,.log-row,.primary,.dark,.ghost,.dashed,.settings-link){transition:border-color var(--motion-base) var(--motion-ease),background-color var(--motion-base) var(--motion-ease),color var(--motion-base) var(--motion-ease)}@media(hover:hover){.bean-card:hover,.journal-card:hover{border-color:var(--ink)}.recipe-row:hover,.log-row:hover{border-color:var(--accent);background:#fff}.primary:not(:disabled):hover{background:var(--state-primary-hover)}.dark:not(:disabled):hover{background:var(--state-ink-hover)}.ghost:not(:disabled):hover,.dashed:not(:disabled):hover{border-color:var(--accent);color:var(--accent)}.settings-link:hover{border-color:var(--accent-l);background:#ffffff0f}}.primary:not(:disabled):active{background:var(--state-primary-pressed)}.dark:not(:disabled):active{background:var(--text-strong)}.ghost:not(:disabled):active{border-color:var(--ink);color:var(--ink)}.dashed:not(:disabled):active{border-color:var(--accent);color:var(--accent)}@media(max-width:799px){.primary.full,.sticky-actions .primary{min-height:var(--cta-h-mobile)}}@media(min-width:800px){body{padding:0}.app-shell{max-width:none;min-height:100dvh;display:grid;grid-template-columns:210px minmax(0,1fr);box-shadow:none}.page-scroll{grid-column:2;padding-bottom:0;min-width:0}.bottom-nav{display:none}.desktop-nav{display:flex;grid-column:1;grid-row:1;position:sticky;top:0;height:100dvh;flex-direction:column;background:var(--ink);color:var(--ink-fg);padding:34px 18px 22px;border-right:1px solid #111812}.desktop-brand{padding:0 10px 30px;border-bottom:1px solid rgba(255,255,255,.12)}.desktop-brand span{display:block;font:700 18px var(--font-mono);letter-spacing:.16em;color:var(--accent-l)}.desktop-brand small{display:block;margin-top:7px;font-size:12px;letter-spacing:.12em;color:var(--ink-fg)}.desktop-nav nav{display:flex;flex-direction:column;gap:5px;margin-top:24px}.desktop-nav nav a,.desktop-settings{display:flex;align-items:center;gap:12px;padding:13px 10px;border-left:2px solid transparent;color:var(--text-disabled)}.desktop-nav nav a b{font:10px var(--font-mono);color:#70816d}.desktop-nav nav a span,.desktop-settings span{font-size:13px;font-weight:700}.desktop-nav nav a small,.desktop-settings small{display:block;margin-top:3px;font:9px var(--font-mono);letter-spacing:.12em;color:#788176}.desktop-nav nav a.active{border-left-color:var(--accent-l);background:#8fb18a1a;color:#fff}.desktop-nav nav a.active b{color:var(--accent-l)}.desktop-settings{margin-top:auto;border-top:1px solid rgba(255,255,255,.12);padding-top:18px}.desktop-settings.active{color:#fff}.desktop-nav>p{margin:24px 10px 0;font:9px/1.7 var(--font-mono);letter-spacing:.1em;color:#697068}.masthead{padding:38px 40px 20px}.masthead h1{font-size:34px}.masthead .settings-link{display:none}.content{width:100%;max-width:1240px;margin:0 auto;padding:28px 40px}.cards{padding-top:12px}.bean-grid,.journal-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.bean-grid .bean-card,.journal-grid .journal-card{margin-top:0}.bean-grid>.dashed{grid-column:1/-1;margin-top:0;display:grid;place-items:center;min-height:54px}.detail{max-width:1240px;padding-top:34px}.detail-hero{display:flex;justify-content:space-between;align-items:end;gap:32px;padding:24px 0 26px;border-bottom:1px solid var(--ink)}.detail-hero .overline{font:11px var(--font-mono);letter-spacing:.08em;color:var(--text-muted);margin:0 0 7px}.detail-hero h1{font-size:38px;margin:0}.detail-hero .mini-specs{width:330px;margin:0;flex:none}.bean-detail-grid{display:grid;grid-template-columns:1fr;grid-template-areas:"optimal" "ai" "history";gap:20px;align-items:start}.bean-detail-grid .optimal{grid-area:optimal}.bean-detail-grid .ai-panel{grid-area:ai}.history-panel{grid-area:history}.history-panel .section-label{margin-top:4px}.journal-detail-grid{display:grid;grid-template-columns:1fr;gap:24px;align-items:start}.journal-ai .section-label,.journal-core .section-label{margin-top:18px}.journal-core>.danger{max-width:280px;margin-top:34px}.sticky-actions{position:sticky;bottom:0;width:auto;max-width:none;margin-top:16px;padding:14px 40px 18px;background:#edf0eaf0;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.sticky-actions>*{max-width:1160px;margin-left:auto!important;margin-right:auto!important}.sticky-actions .primary{max-width:460px;margin-right:0!important}.form{max-width:780px;padding-top:38px}.form>h1{font-size:34px}.form-grid{gap:0 16px}.brew-page{max-width:1240px}.brew-page>.progress{margin-top:20px}.brew-page>.progress span:nth-child(2){border-color:var(--accent);color:var(--accent)}.brew-grid{display:grid;grid-template-columns:1fr;gap:30px;margin-top:8px}.brew-stage{display:block}.desktop-summary,.mobile-brew-action{display:none}.desktop-save{display:block!important}.score-stage .slider{padding:10px 0}.score-stage .field{margin-top:16px}.recipe-library .recipe-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.recipe-library>.dashed{margin-top:16px}.recipe-row{background:var(--card);border:1px solid var(--border);padding:15px}}@media(min-width:1080px){.bean-detail-grid{grid-template-columns:minmax(0,1fr) minmax(300px,.72fr);grid-template-areas:"optimal ai" "history ai";gap:20px 28px}.bean-detail-grid .ai-panel,.journal-ai{position:sticky;top:28px}.journal-detail-grid{grid-template-columns:minmax(0,1fr) minmax(320px,.78fr);gap:36px}.brew-grid{grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:42px}}@media(min-width:1180px){.app-shell{grid-template-columns:240px minmax(0,1fr)}.desktop-nav{padding-left:24px;padding-right:24px}.masthead,.content{padding-left:48px;padding-right:48px}.bean-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.journal-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.sticky-actions{padding-left:48px;padding-right:48px}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}.simulator-page{min-height:100%}.simulator-header{background:var(--ink);color:var(--ink-fg);padding:calc(24px + env(safe-area-inset-top)) 20px 18px}.simulator-header>div:first-child>span,.sim-result-eyebrow{color:var(--accent-l);font:10px var(--font-mono);letter-spacing:.18em}.simulator-header h1{margin:7px 0 0;font-size:28px}.simulator-header p{margin:8px 0 0;color:var(--text-disabled);font:11px/1.6 var(--font-mono)}.sim-presets{display:flex;gap:7px;overflow-x:auto;margin-top:17px;padding-bottom:2px;scrollbar-width:none}.sim-presets button{flex:none;border:1px solid #485149;background:#293029;color:var(--ink-fg);padding:8px 10px;cursor:pointer;font:10px var(--font-mono)}.sim-experiment-loading,.sim-experiment-error{padding:12px 20px;border-bottom:1px solid var(--border);background:var(--card);color:var(--text-secondary);font:11px/1.6 var(--font-mono)}.sim-experiment-error{color:var(--hot)}.sim-experiment-error a{display:block;margin-top:4px;color:var(--accent)}.sim-experiment-brief{display:grid;gap:12px;padding:16px 20px;border-bottom:1px solid var(--border);background:var(--card)}.sim-experiment-title span,.sim-experiment-change small{color:var(--accent);font:9px var(--font-mono);letter-spacing:.1em}.sim-experiment-title h2{margin:5px 0 0;font-size:18px}.sim-experiment-title p{margin:6px 0 0;color:var(--text-body);font-size:12px;line-height:1.65}.sim-experiment-change{display:grid;grid-template-columns:minmax(60px,auto) minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:8px;border-left:2px solid var(--accent);background:var(--app-bg);padding:10px 12px;font:11px var(--font-mono)}.sim-experiment-change small{grid-column:1 / -1}.sim-experiment-change b{color:var(--ink)}.sim-experiment-change span{color:var(--text-muted);text-decoration:line-through}.sim-experiment-change i{color:var(--accent);font-style:normal}.sim-experiment-change strong{min-width:0;overflow-wrap:anywhere;color:var(--accent)}.sim-experiment-status{padding-left:10px;border-left:2px solid var(--hot);color:var(--hot);font:10px/1.6 var(--font-mono)}.sim-experiment-status.valid{border-left-color:var(--accent);color:var(--text-secondary)}.sim-experiment-impacts{padding:10px 12px;border:1px solid var(--border)}.sim-experiment-impacts>small{color:var(--text-muted);font:9px var(--font-mono);letter-spacing:.08em}.sim-experiment-impacts>div{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-top:8px}.sim-experiment-impacts span{min-width:0;background:var(--app-bg);padding:6px;color:var(--text-muted);font:9px var(--font-mono)}.sim-experiment-impacts b{color:var(--text-secondary)}.sim-experiment-impacts .up b{color:var(--accent)}.sim-experiment-impacts .down b{color:var(--hot)}.sim-mobile-radar{background:var(--card);border-bottom:1px solid var(--border)}.sim-mobile-radar.expanded{padding:14px 20px 13px}.sim-mobile-radar.collapsed{position:sticky;z-index:8;top:0;background:#f6f8f3f5;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}.sim-mobile-radar-head{display:flex;align-items:start;justify-content:space-between;gap:12px}.sim-mobile-radar-head>span{min-width:0}.sim-mobile-radar-head small,.sim-mobile-radar-compact small{display:block;color:var(--text-muted);font:9px var(--font-mono);letter-spacing:.08em}.sim-mobile-radar-head b{display:block;margin-top:4px;font-size:16px}.sim-mobile-radar-head>button,.sim-mobile-radar-foot button{border:0;background:transparent;color:var(--accent);padding:2px 0;cursor:pointer;font:10px var(--font-mono)}.sim-mobile-radar.expanded .sim-radar svg{max-width:260px;margin-top:-8px;margin-bottom:-10px}.sim-mobile-radar-foot{display:flex;align-items:center;gap:10px;color:var(--text-secondary);font:10px var(--font-mono)}.sim-mobile-radar-foot button{margin-left:auto}.sim-mobile-radar-compact{display:grid;width:100%;grid-template-columns:88px minmax(0,1fr);align-items:center;gap:8px;border:0;background:transparent;color:var(--ink);padding:7px 16px 8px;text-align:left;cursor:pointer}.sim-mobile-radar-compact .sim-radar svg{width:88px;height:82px;margin:-7px 0}.sim-mobile-radar-compact .sim-radar figcaption,.sim-mobile-radar-compact .sim-radar-label{display:none}.sim-mobile-radar-compact>span{min-width:0}.sim-mobile-radar-compact>span>b{display:block;overflow:hidden;margin-top:3px;text-overflow:ellipsis;white-space:nowrap;font-size:13px}.simulator-workbench{padding:14px 20px 34px}.sim-controls{display:flex;flex-direction:column;gap:14px}.sim-control-group{background:var(--card);border:1px solid var(--border);padding:16px}.sim-control-group.foundation{background:var(--ink);color:var(--ink-fg);border-color:var(--ink)}.sim-control-group.craft{border-top:2px solid var(--accent)}.sim-group-title.sim-group-title-desktop{display:none}.sim-group-toggle{display:flex;width:100%;align-items:center;gap:9px;border:0;background:transparent;color:inherit;padding:0;text-align:left;cursor:pointer}.sim-group-title{display:flex;gap:9px;align-items:center;margin-bottom:17px}.sim-group-title>b,.sim-group-toggle>b{display:grid;place-items:center;width:25px;height:25px;background:var(--accent);color:#fff;font:10px var(--font-mono)}.sim-group-title>span,.sim-group-toggle>span{font-weight:700;font-size:15px}.sim-group-title small,.sim-group-toggle small{display:block;margin-top:2px;color:var(--text-muted);font:9px var(--font-mono);font-weight:400}.sim-group-toggle>i{margin-left:auto;color:var(--accent);font:20px var(--font-mono);font-style:normal}.foundation .sim-group-toggle>i{color:var(--accent-l)}.sim-group-content{display:none;padding-top:2px}.sim-control-group.open .sim-group-content{display:block}.sim-group-content>label{display:flex;justify-content:space-between;margin:15px 0 7px;font-size:12px;font-weight:700}.sim-group-content>label strong{color:var(--accent);font:12px var(--font-mono)}.sim-group-content>label small{color:var(--text-muted);font:9px var(--font-mono);font-weight:400}.foundation .sim-group-content>label strong{color:var(--accent-l)}.sim-info-button{display:inline-grid;width:17px;height:17px;place-items:center;margin-left:4px;border:1px solid var(--border);background:transparent;color:var(--accent);padding:0;vertical-align:middle;cursor:pointer;font:700 10px var(--font-mono)}.foundation .sim-info-button{border-color:#414941;color:var(--accent-l)}.sim-segment{display:flex;gap:6px}.sim-segment button{flex:1;border:1px solid var(--border);background:#fff;color:var(--text-secondary);padding:9px 3px;cursor:pointer;font:11px var(--font-mono)}.foundation .sim-segment button{background:#293029;border-color:#414941;color:var(--text-disabled)}.sim-segment button.active{border-color:var(--accent)!important;background:var(--accent)!important;color:#fff!important;font-weight:700}.sim-segment button:disabled{border-color:var(--border)!important;background:var(--surface-track)!important;color:var(--text-muted)!important;cursor:not-allowed;font-weight:400}.sim-control-group input[type=range]{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:100%;height:4px;margin:8px 0 0;background:var(--surface-track);accent-color:var(--accent)}.sim-control-group input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:20px;height:20px;border:2px solid #fff;border-radius:0;background:var(--accent);box-shadow:0 1px 4px #1c231d4d}.sim-range-ends{display:flex;justify-content:space-between;margin-top:6px;color:var(--text-muted);font:9px var(--font-mono)}.sim-result{display:none}.sim-result.under,.sim-result.over,.sim-result.uneven{border-color:var(--hot);background:var(--surface-warn-soft)}.sim-result.mobile-expanded{display:block;position:fixed;z-index:20;inset:auto 0 0;max-height:82dvh;overflow-y:auto;background:var(--card);border-top:2px solid var(--accent);padding:22px 20px calc(24px + env(safe-area-inset-bottom));box-shadow:0 -16px 42px #1c231d38}.sim-result h2{margin:8px 0 0;font-size:23px;line-height:1.25}.sim-result>p{margin:10px 0 18px;color:var(--text-body);font-size:13px;line-height:1.7}.sim-uniformity{display:grid;grid-template-columns:auto minmax(80px,1fr) 28px;align-items:center;gap:10px;margin:14px 0 8px;color:var(--text-body);font:10px var(--font-mono)}.sim-uniformity>i{height:7px;background:var(--surface-track);font-style:normal}.sim-uniformity>i>b{display:block;height:100%;background:var(--accent)}.sim-result.under .sim-uniformity>i>b,.sim-result.over .sim-uniformity>i>b,.sim-result.uneven .sim-uniformity>i>b{background:var(--hot)}.sim-uniformity>strong{font:700 13px var(--font-mono)}.sim-metrics{display:flex;flex-direction:column;gap:8px}.sim-metrics>div{display:grid;grid-template-columns:48px 36px 34px 1fr;align-items:center;gap:6px;padding:7px 8px;border:1px solid transparent}.sim-metrics>div.changed{border-color:var(--accent);background:#eef4ec}.sim-metrics span{color:var(--text-secondary);font:11px var(--font-mono)}.sim-metrics strong{font:700 16px var(--font-mono)}.sim-metrics em{font:10px var(--font-mono);font-style:normal}.sim-metrics em.up{color:var(--accent)}.sim-metrics em.down{color:var(--hot)}.sim-metrics em.same{color:var(--text-muted)}.sim-metrics i{height:6px;background:var(--surface-track);font-style:normal}.sim-metrics i b{display:block;height:100%;background:var(--accent)}.sim-metrics.compact{flex-direction:row;gap:12px;margin-top:8px}.sim-metrics.compact>div{display:flex;gap:4px;padding:0;border:0;background:transparent}.sim-metrics.compact strong{font-size:12px}.sim-metrics.compact em{font-size:9px}.sim-taste-overview{display:grid;grid-template-columns:minmax(0,1fr);gap:12px;align-items:center}.sim-radar{margin:0;min-width:0}.sim-radar svg{display:block;width:100%;max-width:340px;margin:0 auto;overflow:visible}.sim-radar-grid,.sim-radar-axis{fill:none;stroke:var(--border);stroke-width:1}.sim-radar-axis.highlighted{stroke:var(--accent);stroke-width:1.8}.sim-radar-baseline{fill:none;stroke:var(--text-secondary);stroke-width:1.5;stroke-dasharray:5 4;opacity:.7}.sim-radar-current{fill:color-mix(in srgb,var(--accent) 16%,transparent);stroke:var(--accent);stroke-width:2.4;stroke-linejoin:round;transition:points .18s ease}.sim-radar-dot{fill:var(--accent);stroke:var(--card);stroke-width:2;transition:cx .18s ease,cy .18s ease}.sim-radar-dot.highlighted{fill:var(--hot)}.sim-radar-label{fill:var(--text-secondary);font:11px var(--font-mono)}.sim-radar-label.highlighted{fill:var(--ink);font-weight:700}.sim-radar figcaption{display:flex;justify-content:center;gap:16px;color:var(--text-muted);font:9px var(--font-mono)}.sim-radar figcaption span{display:flex;align-items:center;gap:5px}.sim-radar figcaption i{display:block;width:14px;height:0;border-top:2px solid var(--accent)}.sim-radar figcaption i.baseline{border-top:1px dashed var(--text-secondary)}.sim-engine-summary{display:grid;grid-template-columns:1fr 1fr;border:1px solid var(--border);margin-top:18px}.sim-engine-summary.three{grid-template-columns:repeat(3,1fr)}.sim-engine-summary.three>div,.sim-engine-summary.three>div:nth-child(2n),.sim-engine-summary.three>div:nth-child(n+3){border-right:1px solid var(--border);border-bottom:0}.sim-engine-summary.three>div:last-child{border-right:0}.sim-engine-summary em{display:block;margin-top:3px;color:var(--text-muted);font:9px var(--font-mono);font-style:normal}.sim-engine-summary>div{padding:12px;border-right:1px solid var(--border);border-bottom:1px solid var(--border)}.sim-engine-summary>div:nth-child(2n){border-right:0}.sim-engine-summary>div:nth-child(n+3){border-bottom:0}.sim-engine-summary small{display:block;color:var(--text-muted);font:9px var(--font-mono)}.sim-engine-summary strong{display:block;margin-top:4px;font:16px var(--font-mono)}.sim-cause{margin-top:16px;padding:13px;border-left:2px solid var(--accent);background:var(--surface-panel-soft)}.sim-cause small{color:var(--accent);font:9px var(--font-mono);letter-spacing:.08em}.sim-cause p{margin:5px 0 0;color:var(--text-body);font-size:12px;line-height:1.65}.sim-pin{width:100%;margin-top:16px;border:1px solid var(--ink);background:transparent;color:var(--ink);padding:11px 13px;cursor:pointer;font:700 10px var(--font-mono);letter-spacing:.08em}.sim-pin.active,.sim-pin:hover{background:var(--ink);color:var(--ink-fg)}.sim-compare{margin-top:10px;border:1px dashed var(--text-disabled);background:var(--surface-panel-soft);padding:11px 12px;color:var(--text-body);font:10px/1.7 var(--font-mono)}.sim-compare p{margin:0}.sim-compare p strong{color:var(--accent)}.sim-compare>div{display:flex;flex-wrap:wrap;gap:5px 12px;margin-top:5px}.sim-compare>div b{color:var(--hot)}.sim-compare>small{display:block;margin-top:6px;color:var(--text-secondary)}.sim-time-readout{display:flex;align-items:center;justify-content:space-between;margin-top:18px;padding-top:13px;border-top:1px dashed var(--border);color:var(--text-secondary);font:10px var(--font-mono)}.sim-time-readout b{color:var(--accent);font-size:17px}.sim-timeline,.sim-extraction-chart{display:block;width:100%;height:auto}.sim-timeline-track{fill:var(--surface-track)}.sim-timeline-bloom{fill:var(--ink)}.sim-timeline-pour{fill:var(--accent)}.sim-timeline-bloom-label,.sim-timeline-pour-label{fill:#fff;font:700 9px var(--font-mono)}.sim-timeline-axis,.sim-chart-axis{stroke:var(--border);stroke-width:1}.sim-chart-axis-label,.sim-chart-axis-title{fill:var(--text-muted);font:9px var(--font-mono)}.sim-chart-ideal{fill:var(--accent);opacity:.08}.sim-chart-density{fill:var(--ink);fill-opacity:.08;stroke:var(--ink);stroke-opacity:.3;stroke-width:1}.sim-chart-zone{stroke:var(--ink);stroke-width:1.4;opacity:.5}.sim-chart-curve{fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}.sim-chart-curve.acid,.sim-chart-point.acid{stroke:var(--flavor-acid)}.sim-chart-curve.sweet,.sim-chart-point.sweet{stroke:var(--flavor-sweet)}.sim-chart-curve.bitter,.sim-chart-point.bitter{stroke:var(--flavor-bitter)}.sim-chart-curve.sweet{stroke-width:2.6}.sim-chart-curve-label{fill:var(--ink);font:700 9px var(--font-mono)}.sim-chart-current{stroke:var(--ink);stroke-width:2}.sim-chart-pinned{stroke:var(--ink);stroke-width:1;stroke-dasharray:3 3;opacity:.45}.sim-chart-point{fill:var(--card);stroke-width:4}.sim-under-hood{margin-top:18px;padding-top:16px;border-top:1px solid var(--border)}.sim-hood-title{color:var(--text-muted);text-align:center;font:9px var(--font-mono);letter-spacing:.1em}.sim-under-hood>p{margin:7px 0 2px;color:var(--text-muted);font:9px/1.6 var(--font-mono)}.sim-chart-legend{display:flex;justify-content:flex-end;gap:12px;margin-top:10px;font:9px var(--font-mono)}.sim-chart-legend span:before{display:inline-block;width:7px;height:7px;margin-right:4px;content:""}.sim-chart-legend .acid:before{background:var(--flavor-acid)}.sim-chart-legend .sweet:before{background:var(--flavor-sweet)}.sim-chart-legend .bitter:before{background:var(--flavor-bitter)}.sim-model-readout{display:grid;grid-template-columns:1fr 1fr;gap:1px;margin-top:4px;background:var(--border);border:1px solid var(--border)}.sim-model-readout span{display:flex;justify-content:space-between;background:var(--card);padding:8px;color:var(--text-muted);font:9px var(--font-mono)}.sim-model-readout b{color:var(--ink)}.sim-dialog-backdrop{position:fixed;z-index:50;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;padding:20px;background:#1c231d8c;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.sim-dialog{width:min(520px,100%);max-height:88dvh;overflow-y:auto;border:1px solid var(--ink);background:var(--card);box-shadow:var(--shadow-phone)}.sim-dialog>header{position:relative;background:var(--ink);color:var(--ink-fg);padding:18px 48px 18px 20px}.sim-dialog>header>span{color:var(--accent-l);font:9px var(--font-mono);letter-spacing:.16em}.sim-dialog h2{margin:5px 0 9px;font-size:21px}.sim-dialog>header>div{display:flex;flex-wrap:wrap;gap:5px}.sim-dialog>header b{background:#8fb18a29;color:var(--text-disabled);padding:3px 7px;font:9px var(--font-mono)}.sim-dialog>header>button{position:absolute;top:14px;right:15px;width:28px;height:28px;border:1px solid #414941;background:#293029;color:var(--ink-fg);cursor:pointer}.sim-dialog-body{padding:18px 20px 22px}.sim-dialog-body>section{margin-bottom:16px;padding-left:12px;border-left:2px solid var(--accent)}.sim-dialog-body>section.warn{border-left-color:var(--hot)}.sim-dialog-body h3{margin:0 0 5px;font-size:13px}.sim-dialog-body p{margin:0;color:var(--text-body);font-size:12px;line-height:1.75}.sim-takeaway{background:var(--app-bg);border-left:2px solid var(--accent);padding:10px 12px;font:11px/1.65 var(--font-mono)}.sim-caveat{margin-top:12px!important;padding-top:10px;border-top:1px dashed var(--border);color:var(--text-muted)!important;font:9px/1.6 var(--font-mono)!important}.sim-close-result{width:100%;margin-top:16px;border:1px solid var(--ink);background:var(--ink);color:var(--ink-fg);padding:12px;font:11px var(--font-mono)}@media(min-width:800px){.simulator-header{padding:34px 40px 22px;display:flex;align-items:end;justify-content:space-between;gap:28px}.simulator-header h1{font-size:34px}.sim-presets{justify-content:flex-end;margin:0}.sim-experiment-brief{grid-template-columns:minmax(0,1.4fr) minmax(300px,.9fr);max-width:1240px;margin:22px auto 0;padding:18px 40px;border:1px solid var(--border)}.sim-experiment-status,.sim-experiment-impacts{grid-column:1 / -1}.sim-mobile-radar,.sim-group-toggle{display:none}.sim-group-title.sim-group-title-desktop{display:flex}.sim-group-content,.sim-control-group.open .sim-group-content{display:block}.simulator-workbench{display:grid;grid-template-columns:minmax(0,1fr);gap:24px;max-width:1240px;margin:0 auto;padding:26px 40px 48px;align-items:start}.sim-result,.sim-result.mobile-expanded{display:block;position:static;z-index:1;inset:auto;top:24px;max-height:calc(100dvh - 48px);overflow-y:auto;background:var(--card);border:1px solid var(--accent);box-shadow:none;padding:24px}.sim-close-result{display:none}}@media(min-width:1080px){.simulator-workbench{grid-template-columns:minmax(320px,400px) minmax(390px,1fr)}.sim-result,.sim-result.mobile-expanded{position:sticky}.sim-taste-overview{grid-template-columns:minmax(220px,1.05fr) minmax(190px,.95fr)}}@media(min-width:1180px){.simulator-header{padding-left:48px;padding-right:48px}.simulator-workbench{padding-left:48px;padding-right:48px;grid-template-columns:400px minmax(420px,1fr);gap:30px}}@media(prefers-reduced-motion:reduce){.simulator-page *{transition:none!important}}
