:root{--bg:#f3f4f1;--card:#fff;--ink:#1d2521;--muted:#5d6963;--line:#d9ddd8;--accent:#1f6f5c;--accent-ink:#fff;--warn-bg:#fff4d6;--warn-ink:#7a5300;--bad-bg:#fde4e1;--bad-ink:#9b1c10;--ok-ink:#1f6f5c;--hl:#ffd166;--plot-bg:#fbfcfa;--grid:#c7cdc8;--stock:#c9d1d4;--stock-edge:#8d989d;--part:#7c8a90;--rough:#2a9d8f;--finish:#3a86ff;--rapid:#e63946;--left:#e76f51;--tool:#e9a23b;--mono:ui-monospace, "Cascadia Mono", Consolas, "Liberation Mono", monospace;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#131816;--card:#1c2320;--ink:#e5ebe7;--muted:#9aa7a0;--line:#313b36;--accent:#3fb68f;--accent-ink:#0c1411;--warn-bg:#3a2f10;--warn-ink:#f3d27a;--bad-bg:#401a16;--bad-ink:#ffb4a8;--ok-ink:#6fd6b0;--plot-bg:#161c19;--grid:#3b4641;--stock:#3d474b;--stock-edge:#6d787d;--part:#a3adb2;--rough:#43c6b6;--finish:#6aa5ff;--rapid:#ff6b74;--left:#ff9a7a;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}:root[data-theme=dark]{--bg:#131816;--card:#1c2320;--ink:#e5ebe7;--muted:#9aa7a0;--line:#313b36;--accent:#3fb68f;--accent-ink:#0c1411;--warn-bg:#3a2f10;--warn-ink:#f3d27a;--bad-bg:#401a16;--bad-ink:#ffb4a8;--ok-ink:#6fd6b0;--plot-bg:#161c19;--grid:#3b4641;--stock:#3d474b;--stock-edge:#6d787d;--part:#a3adb2;--rough:#43c6b6;--finish:#6aa5ff;--rapid:#ff6b74;--left:#ff9a7a;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}body{background:var(--bg);color:var(--ink);margin:0;font:15px/1.45 system-ui,-apple-system,Segoe UI,Roboto,sans-serif}a{color:var(--accent)}code{font-family:var(--mono);font-size:.85em}.top{max-width:1400px;margin:0 auto;padding:20px 24px 8px}.top h1{letter-spacing:-.01em;margin:0;font-size:1.5rem}.sub{color:var(--muted);margin:4px 0 0;font-size:.9rem}.layout{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;max-width:1400px;margin:0 auto;padding:16px 24px 40px;display:grid}.card{background:var(--card);border:1px solid var(--line);border-radius:10px;min-width:0;padding:16px 18px}.card.wide{grid-column:1/-1}.card h2{align-items:center;gap:8px;margin:0 0 12px;font-size:1.05rem;display:flex}.card h2 small{color:var(--muted);font-weight:400}.card-head{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.card-head h2{margin-bottom:12px}.step{background:var(--accent);width:24px;height:24px;color:var(--accent-ink);border-radius:50%;place-items:center;font-size:.8rem;font-weight:700;display:inline-grid}.hint{color:var(--muted);margin:8px 0 0;font-size:.85rem}.mono{font-family:var(--mono);font-size:.85rem}[hidden]{display:none!important}button{font:inherit;border:1px solid var(--line);background:var(--card);color:var(--ink);cursor:pointer;border-radius:6px;padding:6px 12px;font-size:.9rem}button:hover:not(:disabled){border-color:var(--accent)}button:disabled{opacity:.5;cursor:not-allowed}button.primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink);font-weight:600}button.small{margin-left:6px;padding:2px 8px;font-size:.8rem}button.link{color:var(--accent);background:0 0;border:none;padding:2px 0;text-decoration:underline}.btns{flex-wrap:wrap;align-items:center;gap:8px;display:flex}input,select{font:inherit;color:var(--ink);background:var(--bg);border:1px solid var(--line);border-radius:6px;width:100%;padding:5px 8px}input:focus,select:focus,button:focus-visible{outline:2px solid var(--accent);outline-offset:1px}input[type=checkbox],input[type=radio]{width:auto;accent-color:var(--accent)}input:disabled,select:disabled{opacity:.55}input.invalid,select.invalid{border-color:var(--bad-ink);background:var(--bad-bg)}.drop{border:2px dashed var(--line);text-align:center;cursor:pointer;border-radius:10px;flex-direction:column;align-items:center;gap:4px;padding:20px 12px;display:flex}.drop:hover,.drop.over{border-color:var(--accent);background:color-mix(in srgb, var(--accent) 7%, transparent)}.drop small{color:var(--muted)}.linkish{color:var(--accent);text-decoration:underline}.examples{color:var(--muted);margin:8px 0 0;font-size:.85rem}.info p{border-radius:6px;margin:6px 0;padding:6px 10px;font-size:.9rem}.info .ok{color:var(--ok-ink);padding-left:0}.info .muted{color:var(--muted);padding-left:0}.info .warn{background:var(--warn-bg);color:var(--warn-ink)}.info .bad{background:var(--bad-bg);color:var(--bad-ink)}fieldset{border:none;margin:12px 0 0;padding:0}fieldset:first-of-type{margin-top:0}legend{margin-bottom:6px;font-size:.9rem;font-weight:600}.row3{grid-template-columns:repeat(3,1fr);gap:10px;display:grid}.row3 legend{grid-column:1/-1}.row3 label,.opts label,.tool-fields label{color:var(--muted);flex-direction:column;gap:3px;font-size:.85rem;display:flex}.row3 output{font-family:var(--mono);color:var(--ink);padding:6px 0;font-size:.8rem}.opts{grid-template-columns:repeat(2,1fr);gap:10px;margin-top:10px;display:grid}.opts label.inline{color:var(--ink);flex-direction:row;align-items:center;gap:8px}.tool-row{grid-template-columns:minmax(0,1fr) 150px;align-items:start;gap:12px;display:grid}.tool-fields{gap:10px;display:grid}.tool-fields .hint{margin:0}.tool-pic{border:1px solid var(--line);background:var(--plot-bg);aspect-ratio:1;border-radius:8px}.tool-pic svg{width:100%;height:100%;display:block}.tool-pic .insert{fill:color-mix(in srgb, var(--tool) 30%, transparent);stroke:var(--tool);stroke-width:1.5px;vector-effect:non-scaling-stroke}.tool-pic .ref{fill:var(--rapid)}.tool-pic .axis{stroke:var(--grid);stroke-width:1px;vector-effect:non-scaling-stroke;stroke-dasharray:4 3}.tool-pic text{fill:var(--muted)}.plot-wrap{grid-template-columns:minmax(0,1fr) 240px;gap:12px;display:grid}.plot{border:1px solid var(--line);background:var(--plot-bg);touch-action:none;border-radius:8px;height:560px;position:relative;overflow:hidden}.plot .empty{color:var(--muted);pointer-events:none;place-items:center;margin:0;display:grid;position:absolute;inset:0}.preview-svg{cursor:grab;-webkit-user-select:none;user-select:none;width:100%;height:100%;display:block}.preview-svg.dragging{cursor:grabbing}.preview-svg *{vector-effect:non-scaling-stroke}.preview-svg .centre{stroke:var(--muted);stroke-width:1px;stroke-dasharray:10 3 2 3}.preview-svg .blank{fill:none;stroke:var(--stock-edge);stroke-width:1px;stroke-dasharray:4 3}.preview-svg .stock{fill:var(--stock);stroke:var(--stock-edge);stroke-width:1px}.preview-svg .part{fill:color-mix(in srgb, var(--part) 55%, transparent);stroke:var(--part);stroke-width:1.5px}.preview-svg .left{fill:color-mix(in srgb, var(--left) 55%, transparent);stroke:var(--left);stroke-width:1px}.preview-svg .chuck{fill:color-mix(in srgb, var(--muted) 25%, transparent);stroke:var(--muted);stroke-width:1px}.preview-svg .mv{fill:none;stroke-width:1.2px;stroke-linejoin:round}.preview-svg .mv.rough{stroke:var(--rough)}.preview-svg .mv.finish{stroke:var(--finish);stroke-width:1.8px}.preview-svg .mv.rapid{stroke:var(--rapid);stroke-dasharray:4 3;stroke-width:1px;opacity:.8}.preview-svg .mv.future{opacity:.15}.preview-svg .mv.tip{stroke:var(--finish);stroke-dasharray:2 2;stroke-width:1px;opacity:.7}.preview-svg .stop{fill:var(--hl);stroke:var(--ink);stroke-width:1px}.preview-svg .safe rect{fill:none;stroke:var(--ink);stroke-width:1.5px}.preview-svg .tool{fill:color-mix(in srgb, var(--tool) 45%, transparent);stroke:var(--tool);stroke-width:1.5px}.preview-svg .ruler line{stroke:var(--muted);stroke-width:1px}.preview-svg text{fill:var(--muted);font-family:system-ui,sans-serif}.preview-svg text.label{fill:var(--ink);font-weight:600}.preview-svg .hidden-layer{display:none}.view-col{min-width:0}.player{flex-wrap:wrap;align-items:center;gap:6px;margin-top:8px;display:flex}.player button{min-width:40px;padding:5px 8px;font-size:1rem;line-height:1}.player .speed{font-family:var(--mono);min-width:46px;font-size:.85rem}.player input[type=range]{min-width:140px;accent-color:var(--accent);background:0 0;border:none;flex:1;padding:0}.sim-info{width:100%;color:var(--muted);min-height:1.2em;font-size:.8rem}.legend{flex-direction:column;gap:6px;margin:0;padding:0;font-size:.9rem;list-style:none;display:flex}.legend label{cursor:pointer;align-items:center;gap:8px;display:flex}.swatch{background:var(--c);border-radius:3px;flex:none;width:14px;height:14px;display:inline-block}.swatch.line{border-radius:1px;height:3px}.swatch.dash{border-top:2px dashed var(--c);background:0 0;height:0}.stats{margin-top:14px;font-size:.85rem}.stats table{border-collapse:collapse;width:100%}.stats td{padding:2px 0}.stats td:last-child{text-align:right;font-family:var(--mono)}.pass-tools .inline-field{color:var(--muted);align-items:center;gap:6px;font-size:.85rem;display:flex}.pass-tools input{width:80px}.table-scroll{border:1px solid var(--line);border-radius:8px;max-height:420px;margin-top:10px;overflow:auto}.empty-row{color:var(--muted);margin:0;padding:12px;font-size:.9rem}table.passes{border-collapse:collapse;width:100%;font-size:.88rem}.passes th,.passes td{border-bottom:1px solid var(--line);text-align:left;white-space:nowrap;padding:4px 8px}.passes thead th{background:var(--card);z-index:1;font-size:.8rem;position:sticky;top:0}.passes td.num{font-family:var(--mono);text-align:right}.passes input[type=number]{width:90px;padding:3px 6px}.passes tr.cur td{background:color-mix(in srgb, var(--hl) 25%, transparent)}.passes .kind{align-items:center;gap:6px;display:inline-flex}.errors p{background:var(--bad-bg);color:var(--bad-ink);border-radius:6px;margin:10px 0 0;padding:6px 10px;font-size:.9rem}#gcode{resize:vertical;width:100%;height:380px;font:13px/1.4 var(--mono);color:var(--ink);background:var(--plot-bg);border:1px solid var(--line);border-radius:8px;padding:10px}@media (width<=860px){.layout{grid-template-columns:minmax(0,1fr);padding:12px 16px 32px}.top{padding:16px 16px 4px}.plot-wrap{grid-template-columns:minmax(0,1fr)}.plot{height:380px}.row3,.opts{grid-template-columns:1fr}.tool-row{grid-template-columns:minmax(0,1fr) 110px}}
