:root{--bg:#f6f4ef;--surface:#fff;--surface-2:#f0ede6;--border:#ddd7cb;--text:#22201c;--muted:#6f685c;--accent:#7a4fd0;--accent-soft:#efe8fb;--ok:#2f7d4a;--ok-soft:#e4f3e8;--warn:#a4570e;--warn-soft:#fbeedd;--steam:#3a86b8;--edge:#a39c8e;--radius:8px;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#16151a;--surface:#1f1e24;--surface-2:#29282f;--border:#3a3842;--text:#ebe8f0;--muted:#a09ba9;--accent:#b596ff;--accent-soft:#2e2640;--ok:#7bd49a;--ok-soft:#1f3327;--warn:#f0b36a;--warn-soft:#3a2c1a;--steam:#7cc0ea;--edge:#6d6878;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}:root[data-theme=dark]{--bg:#16151a;--surface:#1f1e24;--surface-2:#29282f;--border:#3a3842;--text:#ebe8f0;--muted:#a09ba9;--accent:#b596ff;--accent-soft:#2e2640;--ok:#7bd49a;--ok-soft:#1f3327;--warn:#f0b36a;--warn-soft:#3a2c1a;--steam:#7cc0ea;--edge:#6d6878;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body{margin:0}body{background:var(--bg);color:var(--text);flex-direction:column;min-height:100vh;font:14px/1.45 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;display:flex}button,input,select{font:inherit;color:inherit}button{background:var(--surface-2);border:1px solid var(--border);cursor:pointer;border-radius:6px;padding:4px 10px}button:hover{border-color:var(--accent)}input,select{background:var(--surface);border:1px solid var(--border);border-radius:6px;min-width:0;padding:4px 6px}a{color:var(--accent)}h1{margin:0;font-size:18px}h2{margin:0 0 8px;font-size:15px}h3{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;margin:14px 0 6px;font-size:13px}.muted{color:var(--muted)}.small{font-size:12px}.pad{padding:24px}.num{font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}.topbar{background:var(--surface);border-bottom:1px solid var(--border);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;padding:10px 16px;display:flex}.topbar-actions{align-items:center;gap:10px;display:flex}.toggle{cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:6px;display:inline-flex}.topbar .toggle{border:1px solid var(--border);background:var(--ok-soft);border-radius:999px;padding:4px 10px}.layout{flex:1;grid-template-columns:330px 1fr;min-height:0;display:grid}.sidebar{border-right:1px solid var(--border);flex-direction:column;gap:10px;padding:12px;display:flex;overflow-y:auto}.main{flex-direction:column;min-width:0;display:flex}.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px}details.panel>summary{cursor:pointer;margin-bottom:6px;font-weight:600}.field{grid-template-columns:1fr 1fr;align-items:center;gap:8px;margin:6px 0;display:grid}.field>span{color:var(--muted);font-size:13px}.field input{width:100%}.vegan-panel{background:var(--ok-soft)}.vegan-panel p{margin:4px 0 8px;font-size:13px}.checks{grid-template-columns:1fr 1fr;gap:2px 8px;font-size:13px;display:grid}.avoid-row{grid-template-columns:1fr auto;gap:6px;margin:6px 0;display:grid}.vegan-panel .chips{margin:4px 0}.sidebar>.panel>.toggle{margin-top:6px}.targets{flex-direction:column;gap:6px;display:flex}.target-row{grid-template-columns:1fr 70px auto auto;align-items:center;gap:6px;display:grid}.target-row .unit{color:var(--muted);font-size:12px}button.icon{background:0 0;padding:2px 8px}button.add{align-self:flex-start}.summary dl{grid-template-columns:auto 1fr;gap:4px 10px;margin:0;display:grid}.summary dt{color:var(--muted)}.summary dd{margin:0}ul.kv{margin:0;padding:0;list-style:none}ul.kv li{border-bottom:1px dashed var(--border);align-items:center;gap:6px;padding:2px 0;display:flex}ul.kv li>:first-child{text-align:left;flex:1}button.link{color:var(--accent);text-align:left;background:0 0;border:none;padding:0}.badge{background:var(--accent-soft);color:var(--accent);border-radius:999px;margin-left:6px;padding:0 6px;font-size:11px;display:inline-block}.badge.ok{background:var(--ok-soft);color:var(--ok)}.badge.warn{background:var(--warn-soft);color:var(--warn)}.tabs{gap:4px;padding:10px 16px 0;display:flex}.tabs button[aria-selected=true]{background:var(--accent);border-color:var(--accent);color:#fff}.status.info{background:var(--accent-soft);color:var(--text)}.research{flex-wrap:wrap;align-items:center;gap:6px 12px;font-size:13px;display:flex}.research-label{color:var(--muted);font-weight:600}.research label{align-items:center;gap:4px;display:inline-flex}.research input{text-align:right;width:48px}.status{border-radius:var(--radius);background:var(--warn-soft);color:var(--warn);margin:10px 16px 0;padding:8px 12px}.view{flex:1;min-height:0;padding:10px 16px 16px}.table-wrap{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);overflow-x:auto}table.lines{border-collapse:collapse;width:100%}table.lines th,table.lines td{border-bottom:1px solid var(--border);vertical-align:top;text-align:left;padding:6px 8px}table.lines th{color:var(--muted);background:var(--surface-2);font-size:12px;font-weight:600;position:sticky;top:0}table.lines td.num{text-align:right}tr.vegan-row td:first-child{box-shadow:inset 3px 0 0 var(--ok)}tr.boiler-row{background:color-mix(in srgb, var(--steam) 12%, transparent)}.item-btn,.recipe-btn{text-align:left;background:0 0;border:none;padding:0}.item-btn{font-weight:600}.recipe-btn{color:var(--accent)}.chips{flex-wrap:wrap;gap:4px;display:flex}.chip{border-radius:999px;padding:1px 8px;font-size:12px}.heat-select{max-width:150px}.graph-tools{flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:8px;display:flex}.graph-wrap{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);height:calc(100vh - 190px);min-height:420px;overflow:hidden}svg.graph{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;width:100%;height:100%;display:block}svg.graph:active{cursor:grabbing}.edge path{fill:none;stroke:var(--edge)}.edge path.hit{stroke:#0000;stroke-width:12px}.cluster rect{fill:color-mix(in srgb, var(--accent) 5%, transparent);stroke:color-mix(in srgb, var(--accent) 35%, transparent);stroke-dasharray:5 4}.cluster-label{fill:var(--accent);font-size:12px;font-weight:600}.edge{opacity:.45}.edge .edge-label{display:none}svg.focusing .edge:not(.on),svg.focusing .node:not(.on){opacity:.08}.edge.on{opacity:1}.edge.on path:not(.hit){stroke-width:2.5px}.edge.on .edge-label{fill:var(--accent);font-weight:600;display:inline}.stack-input{text-align:right;width:56px}.edge.steam path:not(.hit){stroke:var(--steam);stroke-dasharray:2 4;stroke-linecap:round}.edge.portal path:not(.hit){stroke:var(--warn);stroke-dasharray:7 4}.edge.surplus path:not(.hit){stroke:var(--muted);stroke-dasharray:3 3}.arrowhead{fill:var(--edge)}.edge-label{fill:var(--muted);paint-order:stroke;stroke:var(--surface);stroke-width:3px;font-size:11px}.node rect{fill:var(--surface-2);stroke:var(--border);stroke-width:1.2px}.node{cursor:pointer}.node:hover rect,.node:focus rect{stroke:var(--accent);stroke-width:2px;outline:none}.node.raw rect{fill:var(--warn-soft)}.node.target rect{fill:var(--accent-soft);stroke:var(--accent)}.node.surplus rect{fill:var(--surface);stroke-dasharray:4 3}.node.boiler rect{fill:color-mix(in srgb, var(--steam) 18%, var(--surface));stroke:var(--steam)}.n-title{fill:var(--text);font-size:13px;font-weight:600}.n-sub{fill:var(--muted);font-size:11.5px}dialog.picker{border:1px solid var(--border);background:var(--surface);width:min(720px,100vw - 32px);max-height:calc(100vh - 48px);color:var(--text);border-radius:12px;padding:0}dialog.picker::backdrop{background:#00000073}.picker-inner{padding:14px 16px 18px}.picker-inner header{justify-content:space-between;align-items:center;display:flex}.picker-actions{flex-wrap:wrap;gap:8px;margin-top:6px;display:flex}.options,.combos{flex-direction:column;gap:6px;display:flex}button.option{text-align:left;background:var(--surface-2);padding:8px 10px}button.option.small{padding:4px 10px}button.option.selected{border-color:var(--accent);background:var(--accent-soft)}.option-title{font-weight:600}.combo-head{justify-content:space-between;align-items:center;gap:8px;display:flex}.seg{display:inline-flex}.seg button{border-radius:0}.seg button:first-child{border-radius:6px 0 0 6px}.seg button:last-child{border-radius:0 6px 6px 0}.seg button.on{background:var(--accent);color:#fff;border-color:var(--accent)}.footer{color:var(--muted);border-top:1px solid var(--border);background:var(--surface);padding:10px 16px;font-size:12px}.toast{background:var(--text);color:var(--bg);border-radius:999px;padding:8px 14px;font-size:13px;position:fixed;bottom:20px;left:50%;transform:translate(-50%)}@media (width<=860px){.layout{grid-template-columns:1fr}.sidebar{border-right:none;border-bottom:1px solid var(--border);padding:12px 16px}.view{padding:10px 16px 16px}.graph-wrap{height:70vh}}.legend{color:var(--muted);flex-wrap:wrap;gap:14px;margin:-2px 0 8px;display:flex}.legend span{align-items:center;gap:6px;display:inline-flex}.lg{border-top:2px solid var(--accent);width:28px;height:0;display:inline-block}.lg.portal{border-top:2px dashed var(--warn)}.lg.steam{border-top:2px dotted var(--steam)}.lg.surplus{border-top:2px dashed var(--muted)}.starter{margin-bottom:12px}.starter p{margin:4px 0 8px}.starter-list{columns:2 280px;column-gap:24px;margin:0;padding-left:22px}.starter-list li{break-inside:avoid;padding:1px 0}.recipe-filter{width:100%;margin-bottom:6px}button.option[hidden]{display:none}.num.coins{min-width:64px;color:var(--warn)}.ingredient-row{grid-template-columns:auto 1fr;align-items:center;gap:8px;margin:4px 0 6px;display:grid}.ingredient-row .recipe-filter{margin:0}#plan-mode{align-items:center}#plan-mode .seg-label{color:var(--muted);margin-right:6px;font-size:13px;font-weight:600}.build-banner{flex-direction:column;gap:6px;margin-bottom:10px;display:flex}.count-cell{min-width:120px}.stepper{align-items:center;gap:2px;display:inline-flex}.stepper input{text-align:right;width:52px}.stepper button.icon{border:1px solid var(--border);padding:0 7px}.util{background:var(--surface-2);border-radius:3px;height:5px;margin:4px 0 2px;overflow:hidden}.util-fill{background:var(--ok);height:100%}tr.tight .util-fill{background:var(--warn)}tr.choke .util-fill{background:#c62828}tr.choke td:first-child{box-shadow:inset 3px 0 #c62828}tr.tight td:first-child{box-shadow:inset 3px 0 0 var(--warn)}.reach{flex-wrap:wrap;align-items:center;gap:4px;display:flex}.reach-input{text-align:right;width:80px}.ok-text{color:var(--ok)}
