@import "https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,500;9..144,600;9..144,700&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;500;600&display=swap";:root,[data-theme=light]{--bg:#fafaf7;--bg-2:#fff;--bg-3:#f1eee7;--bg-elev:#fff;--ink:#1c2329;--ink-mute:#6b7682;--ink-soft:#9aa3ac;--line:#e0dcd2;--line-soft:#ecead8;--accent:#2a8590;--accent-2:#3aa9b5;--accent-soft:#d6eef1;--accent-ink:#fff;--ok:#2f8f5e;--warn:#b8860b;--danger:#b3382c;--info:#3a7fb5;--shadow-sm:0 1px 2px rgba(28,35,41,.06);--shadow-md:0 4px 16px -6px rgba(28,35,41,.12);--serif:"Fraunces", Georgia, serif;--sans:"Inter", -apple-system, BlinkMacSystemFont, system-ui, sans-serif;--mono:"JetBrains Mono", "Courier New", monospace}[data-theme=dark]{--bg:#0e1418;--bg-2:#151c22;--bg-3:#1c242b;--bg-elev:#1f2830;--ink:#e1e6ec;--ink-mute:#8a96a3;--ink-soft:#5a6675;--line:#242c34;--line-soft:#1c242b;--accent:#3aa9b5;--accent-2:#4dc4d2;--accent-soft:#1a3a40;--accent-ink:#0e1418;--ok:#5cd6a5;--warn:#e8c547;--danger:#e55a4a;--info:#6ab4f5;--shadow-sm:0 1px 2px rgba(0,0,0,.4);--shadow-md:0 4px 16px -6px rgba(0,0,0,.5)}*{box-sizing:border-box}html,body{background:var(--bg);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;margin:0;padding:0;font-size:14px;line-height:1.5}.codal-root{flex-direction:column;gap:24px;max-width:880px;margin:32px auto;padding:0 24px;display:flex}.codal-header{border-bottom:1px solid var(--line);padding-bottom:16px}.codal-header h1{letter-spacing:-.5px;margin:0 0 4px;font-size:28px}.codal-header .brand-display{font-family:var(--serif);letter-spacing:-.012em;font-variation-settings:"opsz" 144;font-size:42px;font-weight:400;line-height:1.05}.codal-header .brand-display .brand-display-ital{color:var(--accent);font-style:italic}.codal-card{background:var(--bg-2);border:1px solid var(--line);border-radius:8px;padding:20px 24px}.codal-card h2{color:var(--accent);letter-spacing:.04em;text-transform:uppercase;margin:0 0 12px;font-size:16px}.codal-card ul{color:var(--ink-mute);margin:0;padding-left:20px;line-height:1.8}.muted{color:var(--ink-mute);margin:0}.error{color:var(--danger);font-family:var(--mono);margin:0;font-size:12px}.codal-topbar{background:var(--bg-2);border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:16px;padding:10px 24px;display:flex}.codal-topbar .brand{font-family:var(--mono);color:var(--ink);letter-spacing:.06em;text-transform:uppercase;align-items:center;gap:.2em;font-size:14px;font-weight:600;text-decoration:none;display:inline-flex}.codal-topbar .brand .bracket{color:var(--accent);font-weight:400}.codal-topbar .brand:hover .bracket{color:var(--accent-2)}.codal-topbar .topbar-nav{gap:4px;margin-left:24px;margin-right:auto;display:flex}.codal-topbar .topbar-nav a{color:var(--ink-mute);border-radius:4px;padding:6px 12px;font-size:13px;text-decoration:none}.codal-topbar .topbar-nav a:hover{color:var(--ink);background:var(--bg-3)}.codal-topbar .topbar-right{align-items:center;gap:12px;display:flex}.theme-switcher{background:var(--bg-3);border:1px solid var(--line);color:var(--ink);cursor:pointer;border-radius:4px;padding:4px 8px;font-size:11px}.theme-switcher:focus{border-color:var(--accent);outline:none}.auth-status{align-items:center;gap:10px;font-size:13px;display:flex}.auth-status .email{font-family:var(--mono);color:var(--ink)}.btn-link{color:var(--accent);font:inherit;cursor:pointer;background:0 0;border:0;padding:0;text-decoration:none}.btn-link:hover{text-decoration:underline}.inline-form{margin:0;display:inline}.auth-form{flex-direction:column;gap:14px;display:flex}.auth-form label{flex-direction:column;gap:4px;display:flex}.auth-form label span{letter-spacing:.04em;text-transform:uppercase;color:var(--ink-mute);font-size:12px}.auth-form input{background:var(--bg-3);border:1px solid var(--line);color:var(--ink);font:inherit;border-radius:6px;padding:8px 10px}.auth-form input:focus{border-color:var(--accent);outline:none}.auth-form small.muted{font-size:11px}.btn{font:inherit;cursor:pointer;border:0;border-radius:6px;padding:9px 14px;transition:background .15s}.btn.primary{background:var(--accent);color:#1a1208;font-weight:600}.btn.primary:hover{background:var(--accent-soft);color:var(--ink)}.btn.primary:disabled{opacity:.6;cursor:not-allowed}.center-text{text-align:center}.sample-grid{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px;margin-top:12px;display:grid}.sample-btn{text-align:left;background:var(--bg-3);border:1px solid var(--line);cursor:pointer;font:inherit;color:inherit;border-radius:6px;flex-direction:column;align-items:flex-start;gap:4px;padding:12px 14px;transition:border-color .15s,background .15s;display:flex}.sample-btn:hover{border-color:var(--accent);background:var(--bg-2)}.sample-btn .label{color:var(--accent);font-size:13px;font-weight:600}.sample-btn .summary{font-size:11px;line-height:1.4}.upload-form{flex-direction:column;gap:14px;display:flex}.upload-form label{flex-direction:column;gap:4px;display:flex}.upload-form label span{letter-spacing:.04em;text-transform:uppercase;color:var(--ink-mute);font-size:12px}.upload-form input,.upload-form textarea{background:var(--bg-3);border:1px solid var(--line);color:var(--ink);font:inherit;border-radius:6px;padding:8px 10px}.upload-form input:focus,.upload-form textarea:focus{border-color:var(--accent);outline:none}.upload-form textarea{font-family:var(--mono);resize:vertical;min-height:200px;font-size:12px}.upload-list{flex-direction:column;gap:10px;margin:0 0 12px;padding:0;list-style:none;display:flex}.upload-list li{border:1px solid var(--line);background:var(--bg-3);border-radius:6px;padding:10px 14px}.upload-list .row{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.upload-list .row.sub{flex-wrap:wrap;justify-content:flex-start;margin-top:4px;font-size:12px}.upload-list .name{font-weight:600}.upload-list .ts{font-family:var(--mono);font-size:11px}.upload-link{color:inherit;text-decoration:none;display:block}.upload-link:hover .name{color:var(--accent)}.upload-item{position:relative}.upload-item .upload-link{padding-right:80px}.upload-item .upload-actions{gap:4px;display:flex;position:absolute;top:8px;right:10px}.upload-item .upload-actions .btn-link{color:var(--ink-mute);cursor:pointer;background:0 0;border:1px solid transparent;border-radius:4px;padding:2px 6px;font-size:14px}.upload-item .upload-actions .btn-link:hover{color:var(--accent);border-color:var(--line)}.upload-item .upload-actions .btn-link.danger:hover{color:var(--danger,#e44)}.upload-item .upload-rename{align-items:center;gap:8px;margin-top:8px;display:flex}.upload-item .upload-rename input[type=text]{font-family:var(--mono);flex:1;padding:4px 8px;font-size:13px}.validation-hint{font-size:11px;font-style:italic}.bulk-bar{background:var(--bg-elev-1);border:1px solid var(--accent);border-radius:6px;align-items:center;gap:12px;margin-bottom:10px;padding:8px 12px;font-size:13px;display:flex}.upload-item .upload-select{cursor:pointer;position:absolute;top:12px;left:10px}.upload-item .upload-link{padding-left:32px}.upload-dropzone-shell .dropzone-frame{border:2px dashed var(--line);text-align:center;cursor:pointer;color:var(--ink);border-radius:8px;padding:28px 16px;transition:all .15s}.upload-dropzone-shell .dropzone-frame:hover{border-color:var(--accent);background:var(--bg-elev-1)}.upload-dropzone-shell .dropzone-frame.dragging{border-color:var(--accent);background:var(--bg-elev-1);transform:scale(1.005)}.upload-dropzone-shell .dropzone-frame p{margin:0}.upload-dropzone-shell .dropzone-status{margin:8px 0 0;font-size:12px}.part-list{flex-direction:column;gap:8px;margin:0;padding:0;list-style:none;display:flex}.part-list li{border:1px solid var(--line);background:var(--bg-3);border-radius:6px;padding:10px 14px}.part-list .row{justify-content:space-between;align-items:baseline;gap:8px;display:flex}.part-list .row.sub{justify-content:flex-start;margin-top:4px;font-size:12px}.part-list .name{font-weight:600}.raw-json{background:var(--bg-3);border:1px solid var(--line);font-family:var(--mono);border-radius:6px;max-height:400px;margin:8px 0 0;padding:12px;font-size:11px;overflow-x:auto}.mono{font-family:var(--mono)}details>summary{cursor:pointer;color:var(--accent);-webkit-user-select:none;user-select:none}details>summary:hover{text-decoration:underline}.detection-list{flex-direction:column;gap:6px;margin:12px 0 0;padding:0;list-style:none;display:flex}.detection-list li{border:1px solid var(--line);background:var(--bg-3);border-radius:6px;padding:8px 12px}.detection-list li .row{flex-wrap:wrap;align-items:center;gap:8px;font-size:13px;display:flex}.badge{letter-spacing:.04em;text-transform:uppercase;background:var(--bg);border:1px solid var(--line);border-radius:12px;padding:2px 8px;font-size:11px;font-weight:600;display:inline-block}.badge-outline{color:var(--accent);border-color:var(--accent)}.badge-hole{background:var(--accent-soft);color:var(--accent);border-color:var(--accent)}.badge-profile{color:#4a9dff;border-color:#4a9dff}.badge-flat{color:var(--ink-mute)}.badge-warning{color:var(--danger);border-color:var(--danger)}.badge-rough{color:#ff7a45;border-color:#ff7a45}.badge-finish{color:#5cd6a5;border-color:#5cd6a5}.plan-list{counter-reset:none;flex-direction:column;gap:6px;margin:12px 0 0;padding:0;list-style:none;display:flex}.plan-list>li{border:1px solid var(--line);background:var(--bg-3);border-radius:6px;padding:8px 12px}.collapsible-list{margin-top:12px}.collapsible-list>summary{cursor:pointer;color:var(--accent);-webkit-user-select:none;user-select:none;border:1px dashed var(--line);border-radius:6px;padding:8px 12px;font-size:13px}.collapsible-list>summary:hover{background:var(--bg-3)}.collapsible-list[open]>summary{margin-bottom:8px}.job-grid{grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;margin-top:12px;display:grid}.job-grid label{flex-direction:column;gap:4px;display:flex}.job-grid label span{letter-spacing:.04em;text-transform:uppercase;color:var(--ink-mute);font-size:11px}.job-grid select,.job-grid input{background:var(--bg-3);border:1px solid var(--line);color:var(--ink);font:inherit;border-radius:6px;padding:8px 10px}.job-grid select:focus,.job-grid input:focus{border-color:var(--accent);outline:none}.toolpath-actions{flex-wrap:wrap;align-items:center;gap:12px;margin:12px 0;display:flex}.toolpath-actions .btn{color:var(--accent);border:1px solid var(--accent);padding:6px 14px;font-size:12px;font-weight:600;text-decoration:none;transition:background .15s}.toolpath-actions .btn:hover{background:var(--accent);color:var(--bg)}.toolpath-list{flex-direction:column;gap:6px;max-height:340px;margin:0;padding:0;list-style:none;display:flex;overflow-y:auto}.toolpath-list>li{border:1px solid var(--line);background:var(--bg-3);border-radius:6px;padding:8px 12px}.plan-row{flex-wrap:wrap;align-items:baseline;gap:8px;font-size:13px;display:flex}.plan-row .seq{font-family:var(--mono);color:var(--ink-mute);min-width:24px;font-weight:600}.plan-row .op-name{color:var(--ink);font-size:12px}.plan-row .row.sub{width:100%;margin-top:4px;font-size:11px}.warnings-block{border:1px solid var(--line);background:rgba(192,57,43,.05);border-radius:6px;margin-top:12px;padding:8px 12px}.warning-list{flex-direction:column;gap:6px;margin:8px 0 0;padding:0;font-size:12px;list-style:none;display:flex}.warning-list li{flex-wrap:wrap;align-items:baseline;gap:8px;display:flex}.workpiece-svg{background:var(--bg-3);border:1px solid var(--line);border-radius:6px;width:100%;height:auto;max-height:480px;margin-top:8px;padding:8px;display:block}.workpiece-svg .wp-bbox{fill:none;stroke:var(--ink-mute);stroke-dasharray:8 4;opacity:.6}.workpiece-svg .wp-outline{fill:rgba(255,157,74,.08);stroke:var(--accent)}.workpiece-svg .wp-hole{fill:var(--bg);stroke:var(--accent);stroke-opacity:.9}.workpiece-svg .wp-sketch{fill:none;stroke:var(--accent);stroke-dasharray:4 2;opacity:.7}.workpiece-svg .wp-toolpath-rapid{fill:none;stroke:var(--ink-mute);stroke-dasharray:2 2;opacity:.4}.workpiece-svg .wp-toolpath-cut{fill:none;stroke:var(--accent);stroke-opacity:.85}.tool-list{flex-direction:column;gap:6px;margin:12px 0 0;padding:0;list-style:none;display:flex}.tool-list>li{border:1px solid var(--line);background:var(--bg-3);border-radius:6px;padding:8px 12px}.add-tool-form{margin-top:16px;padding:8px 0}.add-tool-form>summary{cursor:pointer;color:var(--accent);-webkit-user-select:none;user-select:none;padding:6px 0;font-size:13px}.add-tool-form>summary:hover{text-decoration:underline}.add-tool-form[open]>summary{margin-bottom:12px}.add-tool-form .btn.primary{margin-top:12px}.profile-shape-block{background:var(--bg-elev-1);border-left:2px solid var(--accent);border-radius:4px;margin-top:12px;padding:10px}.profile-shape-block>label{margin-bottom:8px;font-size:12px;display:block}.profile-shape-block>label>span{color:var(--ink-mute);margin-bottom:4px;display:block}.profile-shape-block>label>textarea{width:100%;font-family:var(--mono);box-sizing:border-box;padding:6px;font-size:12px}.profile-shape-block>p.muted{margin:6px 0 0;font-size:11px}.edit-tool-form{background:var(--bg-elev-1);border-radius:4px;margin:8px 0 16px 24px;padding:10px}.shape-editor{margin-top:8px}.shape-editor .shape-editor-toolbar{align-items:center;gap:12px;margin-bottom:6px;font-size:12px;display:flex}.shape-editor .shape-editor-toolbar .checkbox{cursor:pointer;align-items:center;gap:4px;display:inline-flex}.shape-editor .shape-editor-canvas{-webkit-user-select:none;user-select:none;max-width:100%;display:block}.shape-editor .shape-editor-status{margin-top:4px;font-size:11px}.overlay-3d-summary{margin-top:12px}.overlay-3d-summary>summary{cursor:pointer;-webkit-user-select:none;user-select:none;padding:4px 0;font-size:12px}.overlay-3d-summary>summary:hover{color:var(--ink)}.overlay-legend{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:4px 12px;margin:12px 0 0;padding:0;font-size:11px;list-style:none;display:grid}.overlay-legend .legend-row{cursor:pointer;border-radius:4px;align-items:center;gap:6px;padding:2px 4px;transition:background .1s;display:flex}.overlay-legend .legend-row:hover{background:var(--bg-3)}.overlay-legend .legend-row .swatch{border-radius:2px;flex-shrink:0;width:14px;height:4px}.overlay-legend .legend-row .op{font-size:11px}.overlay-legend .legend-row .tool{font-family:var(--mono);color:var(--ink-mute);margin-left:auto;font-size:10px}.toolpath-op{transition:opacity .15s}.workpiece-3d{background:var(--bg-3);border:1px solid var(--line);border-radius:6px;width:100%;height:500px;margin-top:8px;display:block}.anim-bar{align-items:center;gap:10px;margin:8px 0;display:flex}.anim-bar>.btn-link{text-align:center;border:1px solid var(--line);background:var(--bg-3);border-radius:4px;width:32px;height:28px;padding:0;font-size:14px}.anim-bar>.btn-link:hover{border-color:var(--accent);color:var(--accent)}.anim-bar input[type=range]{accent-color:var(--accent);flex:1}.anim-bar .percent{text-align:right;min-width:38px;font-family:var(--mono);font-size:11px}.view-controls{flex-wrap:wrap;align-items:center;gap:12px;margin:8px 0;display:flex}.view-controls .btn-link{border:1px solid var(--line);background:var(--bg-3);border-radius:4px;padding:4px 10px;font-size:12px}.view-controls .btn-link:hover{border-color:var(--accent);color:var(--accent)}.toolpath-toggle{color:var(--ink-mute);cursor:pointer;align-items:center;gap:6px;margin:8px 0;font-size:12px;display:inline-flex}.toolpath-toggle input[type=checkbox]{cursor:pointer}.comp-toggle{align-items:center;gap:4px;margin-left:8px;font-size:11px;display:inline-flex}.comp-toggle select{padding:1px 4px;font-size:11px}.plan-row-edited{background:var(--surface-active,rgba(0,120,255,.06));border-left:2px solid var(--accent);padding-left:6px}.badge-edited{background:var(--accent,#36c);color:#fff;border-radius:3px;margin-left:4px;padding:1px 6px;font-size:10px}.plan-row-reset{color:var(--ink-mute);margin-left:4px;font-size:11px}.plan-row-reset:hover{color:var(--accent)}.tool-default-hint{opacity:.8;cursor:help;font-size:10px;font-style:italic}.override-import-export{border-top:1px dashed var(--border,#ddd);margin-top:16px;padding-top:8px}.override-import-export>summary{cursor:pointer;color:var(--ink-mute);-webkit-user-select:none;user-select:none;font-size:12px}.override-import-export>summary:hover{color:var(--ink)}.override-import-export textarea{background:var(--surface-mute,#f7f7f7);border:1px solid var(--border,#ddd);border-radius:3px;margin:4px 0;padding:6px}.override-import-export .btn-link.disabled{opacity:.4;pointer-events:none}.gcode-preview{margin-top:16px}.gcode-preview>summary{cursor:pointer;color:var(--ink-mute);-webkit-user-select:none;user-select:none;padding:6px 0;font-size:12px}.gcode-preview>summary:hover{color:var(--ink)}.gcode-pre{background:var(--surface-mute,#f7f7f7);border:1px solid var(--border,#e0e0e0);white-space:pre;border-radius:4px;max-height:480px;margin:8px 0 0;padding:12px;font-size:11px;line-height:1.45;overflow:auto}.gcode-line{white-space:pre;border-left:2px solid transparent;padding:0 6px}.gcode-line.hl{background:var(--highlight-bg,rgba(255,220,100,.3));border-left-color:var(--accent)}.plan-row-clickable{cursor:pointer;transition:background .12s}.plan-row-clickable:hover{background:var(--surface-mute,rgba(0,0,0,.04))}.plan-row-selected{cursor:pointer;background:var(--surface-active,rgba(0,120,255,.08));box-shadow:inset 3px 0 0 var(--accent);border-radius:2px}.meta-list{grid-template-columns:120px 1fr;gap:6px 16px;margin:0;display:grid}.meta-list dt{color:var(--ink-mute);letter-spacing:.04em;text-transform:uppercase;font-size:11px}.meta-list dd{font-family:var(--mono);color:var(--ink);margin:0}.machines-header{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.machines-header>div{flex:1;min-width:220px}.import-step{margin-top:16px}.import-step h2{color:var(--accent);text-transform:uppercase;letter-spacing:.04em;font-size:14px}.import-step .file-input-shell{cursor:pointer;background:var(--bg-3);border:1.5px dashed var(--line);border-radius:8px;margin-top:16px;padding:14px 22px;transition:border-color .15s,background .15s;display:inline-block}.import-step .file-input-shell:hover{border-color:var(--accent)}.import-step .file-input-shell .file-input-label{color:var(--accent);font-size:14px;font-weight:600}.import-step .file-input-shell input[type=file]{display:none}.import-step .hint{margin-top:14px;font-size:12px}.import-preview{margin-top:12px;margin-bottom:18px}.import-actions{align-items:center;gap:16px;margin-top:8px;display:flex}.policies-table,.presets-table{border-collapse:collapse;width:100%;font-size:13px}.policies-table th,.policies-table td,.presets-table th,.presets-table td{text-align:left;border-bottom:1px solid var(--line);padding:8px 12px}.policies-table th,.presets-table th{color:var(--ink-mute);text-transform:uppercase;letter-spacing:.06em;font-size:11px;font-weight:500}.policies-table tbody tr:hover,.presets-table tbody tr:hover{background:var(--bg-3)}.policies-table td.small,.presets-table td.small{color:var(--ink-mute);font-size:11px}.btn-link.danger{color:var(--danger)}.btn-link.danger:hover{color:var(--accent)}.post-rule-editor .field-row{flex-wrap:wrap;align-items:flex-end;gap:16px;margin-bottom:12px;display:flex}.post-rule-editor .field{flex-direction:column;gap:4px;margin-bottom:14px;display:flex}.post-rule-editor .field .label{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-mute);font-size:11px}.post-rule-editor .field textarea{background:var(--bg-3);border:1px solid var(--line);color:var(--ink);font:inherit;border-radius:6px;padding:8px 10px}.post-rule-editor .field input[type=text]{background:var(--bg-3);border:1px solid var(--line);color:var(--ink);font:inherit;border-radius:6px;padding:8px 10px}.post-rule-editor .field textarea:focus{border-color:var(--accent);outline:none}.post-rule-editor .field input[type=text]:focus{border-color:var(--accent);outline:none}.post-rule-editor .field.checkbox{flex-direction:row;align-items:center;gap:8px;margin-bottom:0}.post-rule-editor .field.checkbox input{accent-color:var(--accent)}.post-rule-editor .field.checkbox .label{text-transform:none;letter-spacing:0;margin:0;font-size:12px}.post-rule-editor .rhai-editor{min-height:320px;font-family:var(--mono);resize:vertical;tab-size:2;font-size:12.5px;line-height:1.55}.post-rule-editor .small{font-size:11px}.toast-container{z-index:200;pointer-events:none;flex-direction:column;gap:8px;max-width:360px;display:flex;position:fixed;top:16px;right:16px}.toast{pointer-events:auto;background:var(--bg-2);border:1px solid var(--line);border-left:3px solid var(--ink-mute);border-radius:6px;align-items:flex-start;gap:10px;padding:10px 12px;font-size:13px;line-height:1.4;animation:.18s ease-out toast-in;display:flex;box-shadow:0 8px 24px rgba(0,0,0,.35)}.toast .toast-icon{font-family:var(--mono);text-align:center;width:18px;color:var(--ink-mute);flex-shrink:0;font-weight:700}.toast .toast-message{color:var(--ink);word-break:break-word;flex:1}.toast .toast-close{color:var(--ink-mute);cursor:pointer;background:0 0;border:0;flex-shrink:0;padding:0 4px;font-size:16px;line-height:1}.toast .toast-close:hover{color:var(--ink)}.toast.toast-success{border-left-color:#5cd6a5}.toast.toast-success .toast-icon{color:#5cd6a5}.toast.toast-error{border-left-color:var(--danger)}.toast.toast-error .toast-icon{color:var(--danger)}.toast.toast-info{border-left-color:var(--accent)}.toast.toast-info .toast-icon{color:var(--accent)}.toast.toast-warn{border-left-color:#e8c547}.toast.toast-warn .toast-icon{color:#e8c547}@keyframes toast-in{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}.modal-overlay{backdrop-filter:blur(2px);z-index:100;background:rgba(6,8,16,.65);justify-content:center;align-items:center;padding:16px;display:flex;position:fixed;inset:0}.modal-panel{background:var(--bg-2);border:1px solid var(--line);border-radius:10px;width:100%;max-width:480px;padding:24px;box-shadow:0 20px 50px rgba(0,0,0,.4)}.modal-panel h2{color:var(--accent);text-transform:uppercase;letter-spacing:.04em;margin:0 0 6px;font-size:14px}.modal-panel .small{margin-bottom:16px;font-size:11.5px}.modal-panel .modal-message{color:var(--ink-mute);white-space:pre-line;margin:0 0 18px;font-size:13px;line-height:1.5}.modal-panel .field{flex-direction:column;gap:4px;margin-bottom:14px;display:flex}.modal-panel .field .label{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-mute);font-size:11px}.modal-panel .field input[type=text]{background:var(--bg-3);border:1px solid var(--line);color:var(--ink);font:inherit;border-radius:6px;padding:9px 11px;font-size:14px}.modal-panel .field input[type=text]:focus{border-color:var(--accent);outline:none}.modal-panel .modal-actions{align-items:center;gap:16px;margin-top:8px;display:flex}.eval-panel{margin-top:16px}.eval-panel .eval-header{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.eval-panel .eval-grid{grid-template-columns:1fr 1fr;gap:16px;display:grid}@media (width<=720px){.eval-panel .eval-grid{grid-template-columns:1fr}}.eval-panel .eval-grid .field{flex-direction:column;gap:4px;display:flex}.eval-panel .eval-grid .field .label{letter-spacing:.06em;text-transform:uppercase;color:var(--ink-mute);font-size:11px}.eval-panel .eval-grid .field textarea{background:var(--bg-3);border:1px solid var(--line);color:var(--ink);font:inherit;border-radius:6px;padding:8px 10px}.eval-panel .eval-grid .field textarea:focus{border-color:var(--accent);outline:none}.eval-panel .eval-output{background:var(--bg-3);border:1px solid var(--line);white-space:pre-wrap;word-break:break-word;border-radius:6px;min-height:200px;margin:0;padding:10px;overflow-x:auto}.eval-panel .eval-output.success{border-left:3px solid var(--accent)}.eval-panel .eval-output.error-bg{border-left:3px solid var(--danger);color:var(--danger)}.preset-picker-card .picker-row{flex-wrap:wrap;align-items:center;gap:12px;margin-top:10px;display:flex}.preset-picker-card .picker-row select{background:var(--bg-3);border:1px solid var(--line);color:var(--ink);font:inherit;border-radius:6px;min-width:280px;padding:7px 10px;font-size:13px}.preset-picker-card .picker-row select:focus{border-color:var(--accent);outline:none}.btn.primary.small{padding:6px 10px;font-size:12px}.machine-picker-card .picker-row{flex-wrap:wrap;align-items:center;gap:12px;margin-top:10px;display:flex}.machine-picker-card .picker-row select{background:var(--bg-3);border:1px solid var(--line);color:var(--ink);font:inherit;border-radius:6px;min-width:320px;padding:7px 10px;font-size:13px}.machine-picker-card .picker-row select:focus{border-color:var(--accent);outline:none}.machine-picker-card .ok-badge{background:var(--accent-soft);color:var(--accent);border:1px solid var(--accent);font-size:11px;font-family:var(--mono);border-radius:4px;padding:2px 8px}.banner{border:1px solid var(--line);border-radius:6px;align-items:flex-start;gap:12px;margin:12px 0;padding:10px 14px;font-size:13px;display:flex}.banner .ico{flex-shrink:0;font-size:16px;line-height:1}.banner a{color:var(--accent);text-decoration:underline}.banner.warn{background:var(--accent-soft);border-color:var(--accent);color:var(--ink)}.banner.warn .ico{color:var(--accent)}.btn.primary.danger{background:var(--danger);color:#fff}.btn.primary.danger:hover{background:var(--accent);color:var(--ink)}.import-status{background:var(--bg-3);border-radius:6px;margin-top:12px;padding:8px 12px;font-size:12px}.machine-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;margin-top:16px;display:grid}.machine-card{background:var(--bg-2);border:1px solid var(--line);color:var(--ink);border-radius:8px;padding:18px 22px;text-decoration:none;transition:border-color .15s,transform .15s;display:block}.machine-card:hover{border-color:var(--accent);transform:translateY(-1px)}.machine-card__title{color:var(--accent);letter-spacing:-.01em;margin:0 0 12px;font-size:18px}.machine-card__meta{grid-template-columns:max-content 1fr;gap:4px 12px;margin:0;font-size:12.5px;display:grid}.machine-card__meta dt{color:var(--ink-mute);text-transform:uppercase;letter-spacing:.06em;align-self:center;font-size:10.5px}.machine-card__meta dd{color:var(--ink);margin:0}.machine-card__meta dd.mono{font-family:var(--mono);font-size:11.5px}.empty-state{text-align:center;margin-top:16px;padding:48px 32px}.empty-state h2{color:var(--ink);text-transform:none;letter-spacing:0;margin-bottom:8px;font-size:18px}.empty-state p{margin:8px 0}.empty-state code{font-family:var(--mono);background:var(--bg-3);border-radius:3px;padding:1px 6px;font-size:12px}.machine-detail-header .breadcrumb{margin:0 0 8px;font-size:12.5px}.machine-detail-header .breadcrumb a{color:var(--ink-mute);text-decoration:none}.machine-detail-header .breadcrumb a:hover{color:var(--accent)}.tab-bar{border-bottom:1px solid var(--line);flex-wrap:wrap;gap:2px;margin:24px 0 0;display:flex}.tab-bar .tab{color:var(--ink-mute);font:inherit;cursor:pointer;background:0 0;border:none;border-bottom:2px solid transparent;margin-bottom:-1px;padding:10px 16px;font-size:13px}.tab-bar .tab:hover{color:var(--ink)}.tab-bar .tab.active{color:var(--accent);border-bottom-color:var(--accent)}.tab-panel{padding:24px 0}.tab-section{margin-bottom:32px}.tab-section h2{color:var(--accent);text-transform:uppercase;letter-spacing:.06em;margin:0 0 12px;font-size:14px}.tab-section .note{margin-top:12px;font-size:12px;font-style:italic}.kv-list{grid-template-columns:max-content 1fr;gap:6px 18px;max-width:520px;margin:0;font-size:13px;display:grid}.kv-list dt{color:var(--ink-mute);text-transform:uppercase;letter-spacing:.06em;align-self:center;font-size:11px}.kv-list dd{color:var(--ink);font-family:var(--mono);margin:0;font-size:12.5px}.axis-list{margin:0;padding:0;list-style:none}.axis-row{border-bottom:1px solid var(--line);grid-template-columns:60px 100px 1fr;gap:12px;padding:6px 0;font-size:12.5px;display:grid}.axis-row .axis-name{color:var(--accent);font-weight:600}.spindle-viewer-shell{grid-template-columns:minmax(320px,1fr) minmax(220px,280px);align-items:flex-start;gap:24px;margin-top:14px;display:grid}@media (width<=720px){.spindle-viewer-shell{grid-template-columns:1fr}}.spindle-viewer-canvas{background:var(--bg-3);border:1px solid var(--line);border-radius:8px;padding:12px}.spindle-viewer-canvas .spindle-svg{width:100%;height:auto;max-height:420px;display:block}.spindle-viewer-canvas .spindle-svg .grid .origin-line{stroke:var(--line);stroke-width:.4px;stroke-dasharray:2 4}.spindle-viewer-canvas .spindle-svg .spindle-marker{cursor:pointer;transition:transform .1s}.spindle-viewer-canvas .spindle-svg .spindle-marker circle,.spindle-viewer-canvas .spindle-svg .spindle-marker rect,.spindle-viewer-canvas .spindle-svg .spindle-marker polygon{stroke:var(--ink);stroke-width:.5px}.spindle-viewer-canvas .spindle-svg .spindle-marker.rot-left circle,.spindle-viewer-canvas .spindle-svg .spindle-marker.rot-left rect,.spindle-viewer-canvas .spindle-svg .spindle-marker.rot-left polygon{fill:var(--accent)}.spindle-viewer-canvas .spindle-svg .spindle-marker.rot-right circle,.spindle-viewer-canvas .spindle-svg .spindle-marker.rot-right rect,.spindle-viewer-canvas .spindle-svg .spindle-marker.rot-right polygon{fill:var(--ink-mute)}.spindle-viewer-canvas .spindle-svg .spindle-marker.selected circle,.spindle-viewer-canvas .spindle-svg .spindle-marker.selected rect,.spindle-viewer-canvas .spindle-svg .spindle-marker.selected polygon{stroke:var(--accent);stroke-width:1.5px}.spindle-viewer-canvas .spindle-svg .spindle-marker .spindle-num{font-family:var(--mono);fill:var(--bg);pointer-events:none;-webkit-user-select:none;user-select:none;font-size:6px;font-weight:600}.spindle-viewer-summary{text-align:center;margin:8px 0 0;font-size:11px}.spindle-viewer-side{font-size:12.5px}.spindle-viewer-side .side-title{color:var(--ink-mute);text-transform:uppercase;letter-spacing:.06em;margin:0 0 8px;font-size:11.5px}.spindle-viewer-side .legend{flex-direction:column;gap:4px;margin:0 0 16px;padding:0;font-size:11.5px;list-style:none;display:flex}.spindle-viewer-side .legend li{align-items:center;gap:8px;display:flex}.spindle-viewer-side .legend .dot{border:1px solid var(--ink);width:14px;height:14px;display:inline-block}.spindle-viewer-side .legend .dot.upper-l{background:var(--accent);border-radius:50%}.spindle-viewer-side .legend .dot.upper-r{background:var(--ink-mute);border-radius:50%}.spindle-viewer-side .legend .dot.right-l{background:var(--ink-mute);border-radius:0}.spindle-viewer-side .legend .dot.left-l{background:var(--ink-mute);transform:rotate(45deg)}.spindle-viewer-side .spindle-detail{background:var(--bg-3);border:1px solid var(--line);border-radius:6px;padding:10px 12px}.spindle-viewer-side .spindle-detail .lbl{text-transform:uppercase;letter-spacing:.08em;color:var(--ink-mute);margin-bottom:6px;font-size:10.5px}.spindle-table-toggle{margin-top:16px}.spindle-table-toggle summary{cursor:pointer;color:var(--ink-mute);padding:4px 0;font-size:11.5px}.spindle-table-toggle summary:hover{color:var(--accent)}.spindle-table{border-collapse:collapse;width:100%;max-width:760px;margin-top:10px;font-size:12px}.spindle-table th,.spindle-table td{text-align:left;border-bottom:1px solid var(--line);padding:5px 10px}.spindle-table th{color:var(--ink-mute);text-transform:uppercase;letter-spacing:.06em;font-size:10.5px;font-weight:500}.spindle-table .rot-left{color:var(--accent);font-weight:600}.spindle-table .rot-right{color:var(--ink);font-weight:600}.extras-table{border-collapse:collapse;width:100%;max-width:700px;font-size:12px}.extras-table th,.extras-table td{text-align:left;border-bottom:1px solid var(--line);padding:6px 12px}.extras-table th{color:var(--ink-mute);text-transform:uppercase;letter-spacing:.06em;font-size:10.5px;font-weight:500}.extras-table td{color:var(--ink)}