: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;--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;--hl:#ffd166;--plot-bg:#161c19;--grid:#3b4641;--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}.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[hidden]{display:none}.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}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:4px 0;text-decoration:underline}.btns{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.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:22px 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}.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:0 0 14px;padding: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{color:var(--muted);flex-direction:column;gap:3px;font-size:.85rem;display:flex}.bounds>label.inline{align-items:center;gap:8px;margin-bottom:8px;font-size:.9rem;display:flex}.bounds-grid{grid-template-columns:auto 1fr 1fr;align-items:end;gap:8px 10px;display:grid}.bounds-grid>span{color:var(--muted);padding-bottom:6px;font-size:.85rem}.bounds-grid label{color:var(--muted);flex-direction:column;gap:3px;font-size:.85rem;display:flex}.bounds.off .bounds-grid{opacity:.5}.bounds .hint button.link{margin-left:4px;padding:0}.datum-row{gap:8px;display:flex}.datum-row select{flex:1;min-width:0}.datum.off .datum-row,.datum.off .datum-offset{opacity:.5}.datum-offset{margin-top:8px}#datumPick.active{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}.plot.picking .hole{cursor:crosshair}.preview-svg .hole.datum .dot{fill:var(--ink)}.preview-svg .hole.datum .ring{stroke-width:3px}.mode{gap:8px;display:grid}.choice{border:1px solid var(--line);cursor:pointer;border-radius:8px;align-items:flex-start;gap:10px;padding:8px 10px;display:flex}.choice:has(input:checked){border-color:var(--accent);background:color-mix(in srgb, var(--accent) 8%, transparent)}.choice input{margin-top:4px}.choice span{flex-direction:column;display:flex}.choice small{color:var(--muted)}details summary{cursor:pointer;font-size:.9rem;font-weight:600}.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}.plot-wrap{grid-template-columns:minmax(0,1fr) 200px;gap:12px;display:grid}.plot{border:1px solid var(--line);background:var(--plot-bg);border-radius:8px;height:460px;position:relative;overflow:hidden}.plot .empty{color:var(--muted);place-items:center;margin:0;display:grid;position:absolute;inset:0}.preview-svg{cursor:grab;touch-action:none;-webkit-user-select:none;user-select:none;width:100%;height:100%;display:block}.preview-svg.dragging{cursor:grabbing}.preview-svg .axes line{stroke:var(--grid);stroke-width:1px;vector-effect:non-scaling-stroke}.preview-svg .origin circle{fill:none;stroke:var(--ink);stroke-width:1.5px;vector-effect:non-scaling-stroke}.preview-svg .origin text,.preview-svg .safe text{fill:var(--muted);font-family:var(--mono)}.preview-svg .safe rect{fill:none;stroke:var(--accent);stroke-width:2px;vector-effect:non-scaling-stroke}.preview-svg .path{fill:none;stroke:var(--c,var(--muted));stroke-width:1px;stroke-dasharray:4 4;opacity:.7;vector-effect:non-scaling-stroke}.preview-svg .hole{cursor:pointer}.preview-svg .hole .ring{fill:color-mix(in srgb, var(--c) 22%, transparent);stroke:var(--c);stroke-width:1.5px;vector-effect:non-scaling-stroke}.preview-svg .hole .dot{fill:var(--c)}.preview-svg .hole text{fill:var(--ink);font-family:var(--mono);paint-order:stroke;stroke:var(--plot-bg);stroke-width:3px;stroke-linejoin:round;vector-effect:non-scaling-stroke;font-weight:700}.preview-svg .hole.hl .ring,.preview-svg .hole:focus .ring{stroke:var(--hl);stroke-width:4px}.preview-svg .hole:focus{outline:none}.preview-svg .window{fill:color-mix(in srgb, var(--accent) 5%, transparent);stroke:var(--accent);stroke-width:1.5px;stroke-dasharray:8 4;vector-effect:non-scaling-stroke}.preview-svg .handle{fill:var(--plot-bg);stroke:var(--accent);stroke-width:2px;vector-effect:non-scaling-stroke;cursor:nwse-resize}.preview-svg .handle.nesw{cursor:nesw-resize}.preview-svg .handle:hover{fill:var(--accent)}.preview-svg.resizing,.preview-svg.resizing *{cursor:nwse-resize}.preview-svg.resizing.nesw,.preview-svg.resizing.nesw *{cursor:nesw-resize}.preview-svg .ghost .ring{fill:none;stroke:var(--grid);stroke-width:1px;stroke-dasharray:2 2;vector-effect:non-scaling-stroke}.preview-svg .ghost .dot{fill:var(--grid)}.preview-svg .hole.skipped{opacity:.45}.preview-svg .hole.skipped .ring{fill:none;stroke-dasharray:3 2}.legend{flex-direction:column;gap:6px;margin:0;padding:0;font-size:.9rem;list-style:none;display:flex}.legend li{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.legend small{color:var(--muted);width:100%;margin-top:-4px;padding-left:22px}.swatch{background:var(--c);border:2px solid color-mix(in srgb, var(--c) 60%, #000);border-radius:50%;flex:none;width:14px;height:14px;display:inline-block}.table-tools{flex-wrap:wrap;align-items:center;gap:8px;margin:12px 0 8px;display:flex}.copy-status{color:var(--muted);font-size:.85rem}.table-scroll{border:1px solid var(--line);border-radius:8px;max-height:560px;overflow:auto}table.params{border-collapse:collapse;width:100%;font-size:.88rem}.params th,.params td{border-bottom:1px solid var(--line);text-align:left;white-space:nowrap;padding:4px 6px}.params thead th{background:var(--card);z-index:1;vertical-align:bottom;font-size:.8rem;line-height:1.15;position:sticky;top:0}.params th small{color:var(--muted);font-weight:400}.params td.num{font-family:var(--mono);text-align:right}.params td.id{font-weight:700;font-family:var(--mono)}.params input[type=number]{width:80px;padding:3px 6px}.params select{width:96px;padding:3px 4px}.params .group-row td{background:color-mix(in srgb, var(--c) 12%, var(--card));font-weight:600}.params .group-row .swatch{vertical-align:-2px;margin-right:4px}.params .group-row button{margin-left:12px;font-size:.85rem;font-weight:400}.params tr.hl td{background:color-mix(in srgb, var(--hl) 30%, var(--card))}.params tr.source td{box-shadow:inset 0 2px 0 var(--accent), inset 0 -2px 0 var(--accent)}.params tr.source .src-btn{background:var(--accent);color:var(--accent-ink);border-color:var(--accent)}.params tr.row-invalid td.id{color:var(--bad-ink)}.params tr.flash td{animation:.8s ease-out flash}@keyframes flash{0%{background:color-mix(in srgb, var(--accent) 35%, var(--card))}}.src-btn{padding:2px 10px;font-size:.8rem}.params th.drill,.params td.drill{text-align:center;background:color-mix(in srgb, var(--accent) 6%, transparent)}.params tr.skipped td:not(.drill){opacity:.45}.params tr.skipped td.id{font-weight:400}#params-card.manual .pcol,#params-card.manual .auto-only{display:none}.errors p{background:var(--bad-bg);color:var(--bad-ink);border-radius:6px;margin:0 0 6px;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:340px}.row3,.opts{grid-template-columns:1fr}}.print-only{display:none}@media print{:root,:root:not([data-theme=light]){--bg:#fff;--card:#fff;--ink:#000;--muted:#444;--line:#999;--plot-bg:#fff;--grid:#bbb;--accent:#1f6f5c;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@page{size:A4 landscape;margin:10mm}*{-webkit-print-color-adjust:exact;print-color-adjust:exact}body{background:#fff;font-size:10pt}body.printing-layout .top,body.printing-layout .card:not(#layout),body.printing-layout #layout .card-head,body.printing-layout #layout .hint{display:none!important}body.printing-layout .layout{max-width:none;padding:0;display:block}body.printing-layout #layout{border:none;padding:0}body.printing-layout .print-only{display:block}#print-head h1{margin:0 0 2px;font-size:14pt}#print-head p{color:var(--muted);margin:0 0 6px;font-size:9pt}body.printing-layout .plot-wrap{break-inside:avoid;grid-template-columns:minmax(0,1fr) 45mm}body.printing-layout .plot{border-color:#999;height:150mm}body.printing-layout .preview-svg .path{opacity:1}body.printing-layout .preview-svg .handles{display:none}#print-holes{columns:3;column-gap:8mm;margin-top:6mm}.print-table{border-collapse:collapse;break-inside:avoid;width:100%;margin-bottom:4mm;font-size:9pt}.print-table caption{text-align:left;padding:2px 0;font-weight:700}.print-table caption .swatch{vertical-align:-2px}.print-table th,.print-table td{text-align:right;font-family:var(--mono);border:1px solid #999;padding:1px 4px}.print-table th{background:color-mix(in srgb, var(--c) 18%, #fff);font-family:inherit}.print-table td:first-child{text-align:center;font-weight:700}.print-table td.box{width:6mm}}
