:root{--bg:#f4f5f7;--panel:#fff;--line:#d9dce1;--text:#1c2127;--muted:#6b7380;--accent:#e8590c;--accent-2:#1971c2;--part:#b8bec7;--stock:#9fb3c8;--tool:#d4a72c;--seq:#0b7285;--wait-bg:#fff3bf;--load-bg:#e7f5ff;--wait-active:#ffd43b;--skip:#862e9c;--issue:#ffe3e3;--ok:#2b8a3e;--path:#c2255c;--bore-back:#7048e8;--z-axis:#0c8599;--measure:#e8590c;--bad:#c92a2a;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}@media (prefers-color-scheme:dark){:root:not([data-theme=light]){--bg:#15181c;--panel:#1d2126;--line:#2f353d;--text:#e6e9ed;--muted:#8a93a0;--accent:#ff922b;--accent-2:#4dabf7;--part:#8c949e;--stock:#7f95ab;--tool:#e0b84a;--seq:#3bc9db;--wait-bg:#3d3412;--load-bg:#10304a;--wait-active:#8f6f00;--skip:#da77f2;--issue:#4a1d1d;--ok:#69db7c;--path:#f06595;--bore-back:#b197fc;--z-axis:#3bc9db;--measure:#ff922b;--bad:#ff8787;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}}:root[data-theme=dark]{--bg:#15181c;--panel:#1d2126;--line:#2f353d;--text:#e6e9ed;--muted:#8a93a0;--accent:#ff922b;--accent-2:#4dabf7;--part:#8c949e;--stock:#7f95ab;--tool:#e0b84a;--seq:#3bc9db;--wait-bg:#3d3412;--load-bg:#10304a;--wait-active:#8f6f00;--skip:#da77f2;--issue:#4a1d1d;--ok:#69db7c;--path:#f06595;--bore-back:#b197fc;--z-axis:#3bc9db;--measure:#ff922b;--bad:#ff8787;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--bg);color:var(--text);font:14px/1.4 system-ui,-apple-system,Segoe UI,sans-serif}.app{flex-direction:column;height:100%;display:flex}.app>.model{flex:0 0 46vh;min-height:260px}.app.no-program>.model{flex:auto}.app>.columns{flex:1}.app.dragging:after{content:"Drop a STEP or STL model, a project, or a .PRG program";border:3px dashed var(--accent);background:color-mix(in srgb, var(--bg) 85%, transparent);pointer-events:none;border-radius:12px;place-items:center;font-size:20px;display:grid;position:fixed;inset:12px}.bar{background:var(--panel);border-bottom:1px solid var(--line);align-items:center;gap:12px;padding:8px 16px;display:flex}.bar h1{margin:0;font-size:16px}.machine{color:var(--muted);font-size:13px}.spacer{flex:1}.button,button{font:inherit;border:1px solid var(--line);background:var(--bg);color:var(--text);cursor:pointer;border-radius:6px;padding:5px 12px}.error{background:var(--issue);color:var(--bad);padding:6px 16px}.model{border-bottom:1px solid var(--line);grid-template-columns:minmax(0,2fr) minmax(400px,1fr);min-height:0;display:grid}.stage{min-height:0;position:relative}.viewer,.viewer canvas{width:100%;height:100%;display:block}.caption{color:var(--muted);gap:16px;font-size:12px;display:flex;position:absolute;bottom:10px;left:12px}.legend i{vertical-align:middle;width:14px;height:3px;margin:0 4px 3px 8px;display:inline-block}.legend .od{background:var(--accent)}.legend .id{background:var(--accent-2)}.profile{background:var(--panel);border-left:1px solid var(--line);padding:10px 12px;overflow:auto}.facts{align-items:end;gap:14px;margin-bottom:8px;display:flex}.facts span{color:var(--muted);font-size:11px;display:block}.facts button{margin-left:auto}table{border-collapse:collapse;font-variant-numeric:tabular-nums;width:100%;font-size:12px}th,td{text-align:left;border-bottom:1px solid var(--line);padding:3px 4px}th{color:var(--muted);font-weight:500}table.holes{margin-top:12px}td .sub{color:var(--muted);font-size:11px;display:block}tr.bore td:first-child{color:var(--accent-2)}.program-bar{background:var(--panel);border-bottom:1px solid var(--line);align-items:baseline;gap:14px;padding:6px 16px;font-size:13px;display:flex}.program-bar .ok{color:var(--ok)}.program-bar .bad{color:var(--bad)}.program-bar .hint{color:var(--muted);margin-left:auto}.columns{min-height:0;display:grid}.column{border-right:1px solid var(--line);flex-direction:column;min-height:0;display:flex}.column header{background:var(--panel);border-bottom:1px solid var(--line);gap:8px;padding:4px 10px;font-size:12px;display:flex}.column header span{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.code{padding:4px 0;font:12px/1.5 ui-monospace,Cascadia Mono,Consolas,monospace;overflow:auto}.ln{white-space:pre;padding-right:8px;display:flex}.ln .no{text-align:right;width:3.5em;color:var(--muted);opacity:.6;-webkit-user-select:none;user-select:none;flex:none;padding-right:10px}.ln.seq .tx{color:var(--seq);font-weight:600}.ln.comment .tx{color:var(--muted)}.ln.skip .tx{color:var(--skip)}.ln.wait{background:var(--wait-bg);cursor:pointer}.ln.wait.active{background:var(--wait-active)}.ln.issue{background:var(--issue)}@media (width<=800px){html,body,#root,.app{height:auto}.app>.model{flex:none}.code{max-height:60vh}.program-bar{flex-wrap:wrap}.model{grid-template-rows:minmax(240px,1fr) auto;grid-template-columns:1fr}.profile{border-left:0;border-top:1px solid var(--line);max-height:220px}.columns{grid-template-columns:1fr!important}.program-bar .hint{display:none}}.side{border-left:1px solid var(--line);background:var(--panel);flex-direction:column;min-height:0;display:flex}.side .profile{border-left:none;border-top:1px solid var(--line);flex:1}.job{gap:6px;padding:10px 12px;display:grid}.job h2{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:0;font-size:13px}.job label{grid-template-columns:84px minmax(0,1fr);align-items:center;gap:8px;font-size:13px;display:grid}.job label span{color:var(--muted)}.job label strong{text-overflow:ellipsis;white-space:nowrap;font-weight:600;overflow:hidden}.job select,.job input{min-width:0;font:inherit;border:1px solid var(--line);background:var(--bg);color:var(--text);border-radius:4px;padding:3px 6px}.job .primary,.start-card .primary{background:var(--accent);color:#fff;font:inherit;cursor:pointer;border:none;border-radius:4px;margin-top:2px;padding:6px 10px;font-weight:600}.job .primary:disabled{opacity:.6;cursor:default}.job .notes{color:var(--muted);margin:0;padding-left:18px;font-size:12px}.side .profile{border-top:none}.tabs{border-bottom:1px solid var(--line);display:flex}.tabs button{color:var(--muted);background:0 0;border:none;border-bottom:2px solid #0000;border-radius:0;flex:1;padding:8px 6px;font-size:13px}.tabs button.on{color:var(--text);border-bottom-color:var(--accent);font-weight:600}.job,.tools{overflow:auto}.job h2+label,.job label+h2,.job details,.job .primary,.start-card .primary{margin-top:4px}.job label select{width:100%}.cutting summary{cursor:pointer;color:var(--accent-2);font-size:13px}.cutting table{border-collapse:collapse;width:100%;margin-top:4px;font-size:12px}.cutting td{padding:2px 4px 2px 0}.cutting input{width:80px;font:inherit;border:1px solid var(--line);background:var(--bg);color:var(--text);border-radius:4px;padding:2px 4px}.cutting .unit,.job .hint,.tools .hint{color:var(--muted);font-size:12px}.tools{align-content:start;gap:8px;padding:10px 12px;display:grid}.tools-head{align-items:baseline;gap:8px;display:flex}.tools-head h2{text-transform:uppercase;letter-spacing:.04em;color:var(--muted);margin:0;font-size:13px}.tools-head .spacer{flex:1}.tools table{border-collapse:collapse;width:100%;font-size:12px}.tools th{text-align:left;color:var(--muted);padding:2px 4px 4px 0;font-weight:500}.tools td{border-top:1px solid var(--line);vertical-align:top;padding:3px 4px 3px 0}.tools tr.added td{background:var(--load-bg)}.tools input,.tools select{font:inherit;border:1px solid var(--line);background:var(--bg);color:var(--text);border-radius:3px;min-width:0;padding:1px 3px}.tools .pocket{width:42px}.tools .size{width:58px}.tools .insert-code{text-transform:uppercase;width:96px}.tools .desc{width:100%;color:var(--muted);margin-top:2px;display:block}.tools .badge{text-transform:uppercase;color:var(--accent);margin-right:4px;font-size:10px;font-weight:700;display:inline-block}.tools .remove{color:var(--muted);background:0 0;border:none;padding:0 6px;font-size:15px}.tools-add{gap:6px;display:flex}.tools-add button{padding:3px 8px;font-size:12px}.code .ln.block,.code .ln.seq,.code .ln.skip{cursor:help}.code-help{background:var(--panel);border-bottom:1px solid var(--line);flex-direction:column;flex:none;max-height:32vh;display:flex}.code-help header{flex-wrap:wrap;align-items:center;gap:6px;padding:6px 16px;font-size:12px;display:flex}.code-help header button{border:1px solid var(--line);color:var(--text);cursor:pointer;background:0 0;border-radius:4px;padding:2px 8px;font:12px ui-monospace,Cascadia Mono,Consolas,monospace}.code-help header button.on{border-color:var(--accent);color:var(--accent)}.code-help .source{color:var(--muted);margin-left:auto}.code-help .close{font-size:15px;line-height:1}.code-help pre{margin:0;padding:4px 16px 10px;font:12px/1.45 ui-monospace,Cascadia Mono,Consolas,monospace;overflow:auto}.tools tr.holder td{border-top:0;padding-top:0}.tools .holder-cell{align-items:flex-start;gap:10px;display:flex}.tools .holder-fields{flex-wrap:wrap;flex:1;align-items:center;gap:6px;min-width:0;display:flex}.tools tr.holder img{border:1px solid var(--line);background:#fff;border-radius:3px;flex:none;width:auto;max-width:none;height:auto}.tools tr.holder select:first-of-type{max-width:128px}.tools tr.holder label{color:var(--muted);align-items:center;gap:4px;display:flex}.tools .offset{width:44px}.tools .offset.dup{border-color:var(--bad)}.tools .bad{color:var(--bad);margin:0;font-size:12px}.axis-choice{border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:8px;padding:6px 12px;font-size:12px;display:flex}.axis-choice label{color:var(--muted);align-items:center;gap:4px;display:flex}.axis-choice input{width:52px}.axis-choice select,.axis-choice input,.axis-choice button{font:inherit;padding:1px 4px}.legend .c0{background:var(--ok)}.dialog-backdrop{z-index:10;background:#00000059;place-items:center;display:grid;position:fixed;inset:0}.dialog{background:var(--panel);border:1px solid var(--line);border-radius:8px;width:min(420px,100vw - 32px);padding:16px;box-shadow:0 8px 30px #00000040}.dialog h2{margin:0 0 6px}.dialog input{width:100%;margin:8px 0 12px}.dialog .buttons{justify-content:flex-end;gap:8px;display:flex}.start-card{background:var(--panel);border:1px solid var(--line);border-radius:8px;flex-direction:column;gap:8px;width:min(380px,100% - 32px);padding:16px;display:flex;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.start-card h2,.dialog h2{margin:0 0 4px}.start-card label:not(.button):not(.link),.dialog label{grid-template-columns:120px 1fr;align-items:center;gap:8px;display:grid}.start-card .button{text-align:center;margin-top:4px}.start-card .link{color:var(--accent-2);cursor:pointer;text-decoration:underline}.start-card p.bad,.dialog p.bad{color:var(--bad);margin:0}input.bad{border-color:var(--bad)}.operations{flex-direction:column;gap:8px;padding:12px;display:flex;overflow:auto}.operations .hint{margin:0}.op-path h2{margin:4px 0}.op-path ol{flex-direction:column;gap:4px;margin:0;padding:0;list-style:none;display:flex}.op-path li{border:1px solid var(--line);background:var(--panel);border-radius:4px;padding:6px 8px}.op-path li.skipped{opacity:.5}.op-path li.skipped strong{text-decoration:line-through}.op-head{align-items:center;gap:6px;display:flex}.op-head .spacer{flex:1}.op-head .icon{padding:0 6px;line-height:1.4}.op-detail{color:var(--muted);flex-wrap:wrap;gap:4px 12px;margin:2px 0 0 22px;font-size:12px;display:flex}.op-cut{flex-wrap:wrap;align-items:center;gap:4px 12px;margin:4px 0 0 22px;font-size:12px;display:flex}.op-cut label{align-items:center;gap:4px;display:flex}.op-cut input{width:64px}.op-cut input.edited{border-color:var(--accent-2);background:var(--load-bg)}.op-cut .feeds{color:var(--muted);margin-left:6px}.op-actions{background:var(--bg);justify-content:flex-end;gap:8px;padding:8px 0 0;display:flex;position:sticky;bottom:0}.operations .primary{background:var(--accent);color:#fff;font:inherit;cursor:pointer;border:none;border-radius:4px;padding:6px 12px;font-weight:600}.operations .primary:disabled{opacity:.6;cursor:default}.op-icon{flex:none;width:28px;height:28px}.op-icon .part{fill:var(--line);stroke:var(--muted);stroke-width:1px}.op-icon .tool{fill:var(--accent);stroke:var(--accent);stroke-width:1px;stroke-linejoin:round}.op-icon .tool.line{fill:none;stroke-width:2px}.op-icon .cut{fill:none;stroke:var(--accent-2);stroke-width:1.5px}.op-icon .cut.dashed{stroke-dasharray:2 2}.op-path li{cursor:pointer}.op-path li.selected{border-color:var(--path);box-shadow:inset 3px 0 0 var(--path)}.add-op-button{border-style:dashed;width:100%;margin-top:6px}.add-op{border:1px solid var(--accent-2);background:var(--panel);border-radius:4px;flex-direction:column;gap:6px;margin-top:6px;padding:8px;display:flex}.add-kinds{flex-wrap:wrap;gap:6px;display:flex}.add-kinds button{align-items:center;gap:6px;display:flex}.add-kinds button.on{border-color:var(--accent-2);background:var(--load-bg)}.add-op label{grid-template-columns:120px 1fr;align-items:center;gap:8px;display:grid}.add-op .buttons{justify-content:flex-end;gap:8px;display:flex}.start-card.empty p{margin:0 0 8px}.start-card .buttons{justify-content:flex-end;gap:8px;display:flex}.file-menu{margin-left:12px;position:relative}.file-menu summary{cursor:pointer;border-radius:4px;padding:4px 8px;list-style:none}.file-menu summary::-webkit-details-marker{display:none}.file-menu[open] summary,.file-menu summary:hover{background:var(--line)}.file-menu .menu{z-index:20;background:var(--panel);border:1px solid var(--line);border-radius:6px;flex-direction:column;min-width:180px;padding:4px;display:flex;position:absolute;top:calc(100% + 4px);left:0;box-shadow:0 6px 20px #0000002e}.file-menu .menu button{text-align:left;background:0 0;border:none;padding:6px 10px}.file-menu .menu button:hover:not(:disabled){background:var(--load-bg)}.column.editing{flex-direction:column;display:flex}.code-edit{resize:none;outline:2px solid var(--accent-2);outline-offset:-2px;background:var(--panel);width:100%;min-height:0;color:inherit;white-space:pre;border:none;flex:1;padding:6px 10px;font:12px/18px ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;overflow:auto}.program-bar button.on{border-color:var(--accent-2);background:var(--load-bg)}.legend-toggle{border:1px solid var(--line);background:var(--panel);color:inherit;font:inherit;cursor:pointer;pointer-events:auto;border-radius:12px;align-items:center;margin-left:6px;padding:2px 8px;display:inline-flex}.legend-toggle.off{opacity:.45;text-decoration:line-through}.legend .idBack{background:var(--bore-back)}.legend .axis{background:var(--z-axis)}.viewer.picking canvas{cursor:crosshair}.drill-specs{background:var(--bg);border-radius:6px;grid-template-columns:auto 1fr;gap:2px 10px;margin:6px 0 2px;padding:8px 10px;font-size:12px;display:grid}.drill-specs dt{color:var(--muted)}.drill-specs dd{margin:0}.file-menu hr{border:0;border-top:1px solid var(--line);margin:4px 0}.dialog.about{text-align:center}.dialog.about p{margin:4px 0}.viewer-wrap{width:100%;height:100%;position:relative}.measure{flex-direction:column;align-items:flex-end;gap:6px;font-size:12px;display:flex;position:absolute;bottom:10px;right:12px}.measure button.on{border-color:var(--measure);color:var(--measure)}.measure-read{background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--measure);border-radius:6px;min-width:200px;padding:8px 10px;box-shadow:0 2px 8px #0000001f}.measure-read p{color:var(--muted);margin:0}.measure-row{font-variant-numeric:tabular-nums;justify-content:space-between;gap:12px;display:flex}.measure-row span{color:var(--muted)}.ask-front{z-index:5;background:var(--panel);border:1px solid var(--line);border-left:3px solid var(--ok);border-radius:8px;width:min(440px,100% - 32px);padding:12px 14px;position:absolute;top:12px;left:50%;transform:translate(-50%);box-shadow:0 6px 20px #0003}.ask-front p{color:var(--muted);margin:4px 0 10px;font-size:13px}.ask-front .buttons{justify-content:flex-end;gap:8px;display:flex}.sim{background:var(--panel);border:1px solid var(--line);border-radius:8px;width:min(620px,100% - 32px);padding:8px 12px;font-size:13px;position:absolute;bottom:40px;left:50%;transform:translate(-50%);box-shadow:0 6px 20px #0003}.sim-title{align-items:baseline;gap:10px;margin-bottom:6px;display:flex}.sim-title span{color:var(--muted);font-variant-numeric:tabular-nums}.sim-controls{align-items:center;gap:6px;display:flex}.sim-controls input[type=range]{flex:1;min-width:0}.code .ln.current{background:color-mix(in srgb, var(--measure) 22%, transparent);box-shadow:inset 3px 0 0 var(--measure)}.sim-title .spacer{flex:1}.sim-title label{color:var(--muted);align-items:center;gap:4px;display:inline-flex}.model-name{text-overflow:ellipsis;white-space:nowrap;max-width:45%;color:var(--muted);pointer-events:none;font-size:13px;position:absolute;top:10px;right:12px;overflow:hidden}.demo-note{background:var(--wait-bg);color:var(--text);border-bottom:1px solid var(--line);padding:6px 16px;font-size:13px}
