:root{--bg: #f3f4f6;--panel: #ffffff;--line: #111827;--muted: #6b7280;--border: #e5e7eb;--accent: #2563eb;--accent-hover: #1d4ed8;--grid: #e7eaf0;--grid-strong: #cfd5df;--select: #2563eb;--snap: #16a34a;--hl: #fde68a}*{box-sizing:border-box}html,body,#root{margin:0;height:100%;overflow:hidden;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:var(--line);background:var(--bg);user-select:none}#app{display:grid;grid-template-columns:64px 220px 1fr 240px;grid-template-rows:36px 1fr 28px 24px;height:100vh;grid-template-areas:"top    top     top     top" "tools  tree    canvas  layers" "tools  tree    cmdline layers" "tools  tree    status  status"}#top{grid-area:top;background:var(--panel);border-bottom:1px solid var(--border);display:flex;align-items:center;padding:0 12px;gap:16px}#top .brand{font-weight:700;letter-spacing:.02em;font-size:13px}#top .brand .sub{color:var(--muted);font-weight:400;margin-left:6px;font-size:11px}#top .group{display:flex;gap:4px;align-items:center}#top button{font-size:12px;padding:4px 10px;border:1px solid var(--border);background:#fff;border-radius:5px;cursor:pointer}#top button:hover{background:#f9fafb}#top .sep{width:1px;height:20px;background:var(--border)}#tools{grid-area:tools;background:var(--panel);border-right:1px solid var(--border);padding:8px 6px;display:flex;flex-direction:column;gap:4px;align-items:center}.tool{width:52px;height:44px;border:1px solid var(--border);background:#fff;border-radius:6px;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;font-size:9px;color:var(--muted);padding:2px}.tool:hover{background:#f9fafb;color:var(--line)}.tool.active{background:var(--accent);color:#fff;border-color:var(--accent)}.tool svg{width:22px;height:22px}.tool-sep{width:36px;height:1px;background:var(--border);margin:4px 0}#canvas-wrap{grid-area:canvas;position:relative;background:#fff;overflow:hidden}canvas{display:block;width:100%;height:100%;cursor:crosshair}#cursor-hint{position:absolute;pointer-events:none;background:#111827eb;color:#fff;padding:4px 8px;border-radius:4px;font-size:11px;font-family:ui-monospace,Menlo,monospace;transform:translate(12px,-28px);white-space:nowrap;display:none}#calccard{position:absolute;left:12px;right:12px;top:12px;background:#f3f4f6;border:1px solid #d1d5db;border-radius:10px;padding:8px 12px;display:flex;align-items:center;gap:12px;font-size:12px;box-shadow:0 2px 8px #0000000a;z-index:20;flex-wrap:wrap}#calccard .lbl{color:#6b7280}#calccard .pill{display:inline-flex;align-items:center;background:#fff;border:1px solid #d1d5db;border-radius:16px;padding:4px 10px;gap:4px;cursor:pointer}#calccard .pill:hover{border-color:#9ca3af}#calccard .pill .v{font-weight:600;color:#111827}#calccard .pill .sub{color:#6b7280;font-size:11px}#calccard select,#calccard input[type=text],#calccard input[type=number]{font:inherit;font-size:12px;padding:4px 8px;border:1px solid #d1d5db;border-radius:5px;background:#fff;outline:none}#calccard select:focus,#calccard input:focus{border-color:var(--accent)}#calccard .sheet-info{color:var(--accent);font-weight:600;font-variant-numeric:tabular-nums}#calccard .grow{flex:1}#calccard button{font:inherit;font-size:12px;padding:4px 10px;border:1px solid #d1d5db;background:#fff;border-radius:5px;cursor:pointer}#calccard button:hover{background:#f9fafb}#cnc-summary{position:absolute;left:12px;bottom:12px;background:#fff;border:1px solid var(--border);border-radius:8px;padding:8px 12px;font-size:12px;font-variant-numeric:tabular-nums;box-shadow:0 2px 8px #0000000f;z-index:30;display:flex;flex-wrap:wrap;gap:14px;max-width:calc(100% - 24px)}#cnc-summary .item{white-space:nowrap;color:#374151}#cnc-summary .item b{color:var(--line);margin-right:4px}#cnc-summary .item .sub{color:#6b7280;margin-left:4px;font-size:11px}#cnc-summary .item.muted,#cnc-summary .item.muted b{color:#9ca3af}#cnc-summary .item.warn,#cnc-summary .item.warn b{color:#b45309}.modal-back{position:fixed;inset:0;background:#0f172a66;display:flex;align-items:center;justify-content:center;z-index:200}.modal{background:#fff;border-radius:12px;padding:18px 20px;box-shadow:0 12px 48px #00000040;min-width:720px;max-width:90vw;max-height:86vh;overflow-y:auto}.modal h2{margin:0 0 14px;font-size:16px}.modal .mat-list{width:100%;border-collapse:collapse;font-size:12px}.modal .mat-list th{text-align:left;color:var(--muted);font-weight:600;font-size:11px;text-transform:uppercase;letter-spacing:.05em;padding:6px 8px;border-bottom:1px solid var(--border)}.modal .mat-list td{padding:6px 8px;border-bottom:1px solid var(--border);vertical-align:middle}.modal .mat-list tr:hover{background:#f9fafb}.modal .mat-list input[type=text],.modal .mat-list input[type=number]{width:100%;padding:3px 6px;border:1px solid transparent;background:transparent;font:inherit;font-size:12px;border-radius:4px}.modal .mat-list input:focus{background:#fff;border-color:var(--accent);outline:none}.modal .mat-list .sheets-input{width:130px}.modal .actions{display:flex;gap:8px;justify-content:flex-end;margin-top:14px}.modal .actions button{font:inherit;font-size:12px;padding:6px 12px;border:1px solid var(--border);background:#fff;border-radius:5px;cursor:pointer}.modal .actions button.primary{background:var(--accent);color:#fff;border-color:var(--accent)}.modal .actions button.primary:hover{background:#1d4ed8}.modal .swatch-input{width:24px;height:22px;border:1px solid var(--border);border-radius:4px;padding:0}.modal .row-actions{white-space:nowrap}.modal .row-actions button{font-size:11px;padding:2px 8px;border:1px solid var(--border);background:#fff;border-radius:4px;cursor:pointer;color:var(--line)}.modal .row-actions button.danger{color:#b91c1c;border-color:#fca5a5}.modal .row-actions button:hover{background:#f3f4f6}.modal .add-row{padding-top:8px}.modal .add-row button{font:inherit;font-size:12px;padding:6px 12px;border:1px solid var(--border);background:#fff;border-radius:5px;cursor:pointer}#dimhud{position:absolute;left:12px;top:12px;background:#fff;border:1px solid var(--border);border-radius:8px;padding:6px 10px;display:none;align-items:center;gap:6px;font-size:12px;box-shadow:0 2px 8px #0000000f;z-index:30}#dimhud.show{display:flex}#dimhud .title{font-weight:700;margin-right:6px}#dimhud .seg{display:inline-flex;gap:2px;background:#f3f4f6;padding:2px;border-radius:6px}#dimhud .seg button{font:inherit;font-size:11px;padding:4px 10px;border:none;background:transparent;border-radius:4px;cursor:pointer;color:#374151}#dimhud .seg button.on{background:#2563eb;color:#fff}#dimhud .hint{color:var(--muted);margin-left:8px}#alhud{position:absolute;left:12px;right:12px;top:12px;background:#d6e3f2;border:1px solid #b2c4dd;border-radius:10px;padding:10px 14px;display:none;align-items:center;gap:12px;font-size:13px;box-shadow:0 4px 12px #0000000f;z-index:30}#alhud.show{display:flex}#alhud .title{font-weight:700;color:#111827;margin-right:8px}#alhud .grp{display:flex;align-items:center;gap:6px}#alhud .grp label{color:#374151}#alhud .grp input[type=text]{width:64px;padding:5px 8px;border:1px solid #b2c4dd;border-radius:5px;background:#fff;font-family:ui-monospace,Menlo,monospace;font-size:13px;text-align:right;color:#111827}#alhud .grp input[type=text]:focus{outline:2px solid #fbbf24;outline-offset:-1px;border-color:#fbbf24}#alhud .grp.metric{color:#374151;font-variant-numeric:tabular-nums;min-width:70px}#alhud .grp.metric b{color:#111827}#alhud .grow{flex:1}#alhud button{font:inherit;font-size:12px;padding:6px 12px;border:1px solid #b2c4dd;background:#fff;border-radius:5px;cursor:pointer;color:#111827}#alhud button:hover{background:#eef3fa}#alhud button.primary{background:#fff;border-color:#2563eb;color:#1d4ed8;font-weight:600}#alhud button.danger{color:#b91c1c;border-color:#fca5a5}#alhud .close{width:26px;height:26px;padding:0;display:inline-flex;align-items:center;justify-content:center;color:#6b7280}#alhud .chk{display:inline-flex;align-items:center;gap:6px;cursor:pointer}#alhud .chk input{accent-color:#2563eb;cursor:pointer}#alhud .chk.disabled{opacity:.5;cursor:not-allowed}#alhud .warn,.warn{color:#b45309}#dyninput{position:absolute;pointer-events:auto;display:none;gap:6px;transform:translate(14px,-34px);z-index:50}#dyninput.show{display:flex}.dyn-field{display:flex;align-items:center;background:#111827eb;border:1.5px solid transparent;border-radius:5px;padding:2px 4px 2px 6px;font-family:ui-monospace,Menlo,monospace;font-size:12px;color:#f9fafb;box-shadow:0 2px 6px #0000004d}.dyn-field.active{border-color:#fbbf24;background:#1f2937fa}.dyn-field .label{color:#93c5fd;margin-right:4px;font-weight:600}.dyn-field input{background:transparent;border:none;outline:none;color:#fff;font-family:inherit;font-size:inherit;width:64px;padding:2px 0;caret-color:#fbbf24}.dyn-field input::placeholder{color:#6b7280}.dyn-field .unit{color:#9ca3af;margin-left:4px;font-size:10px}#tree{grid-area:tree;background:var(--panel);border-right:1px solid var(--border);display:flex;flex-direction:column;min-height:0}#tree-head{padding:10px 12px 6px;display:flex;align-items:center;gap:8px;border-bottom:1px solid var(--border)}#tree-head h3{margin:0;font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-weight:600;flex:1}#tree-search{width:100%;padding:4px 8px;font-size:12px;border:1px solid var(--border);border-radius:5px;outline:none}#tree-search:focus{border-color:var(--accent)}#tree-controls{display:flex;gap:4px;padding:4px 12px;border-bottom:1px solid var(--border);font-size:11px;color:var(--muted)}#tree-controls .count{flex:1}#tree-controls button{font-size:11px;padding:2px 8px;border:1px solid var(--border);background:#fff;border-radius:4px;cursor:pointer}#tree-controls button:hover{background:#f9fafb}#tree-list{flex:1;overflow-y:auto;font-size:12px}.tree-row{display:grid;grid-template-columns:14px 1fr auto;align-items:center;gap:6px;padding:4px 10px;cursor:pointer;border-bottom:1px solid #f3f4f6}.tree-row:hover{background:#f9fafb}.tree-row.sel{background:#eff6ff}.tree-row .dot{width:8px;height:8px;border-radius:2px}.tree-row .name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tree-row .meta{color:var(--muted);font-size:11px;font-variant-numeric:tabular-nums}.tree-row .del{color:#b91c1c;font-size:11px;padding:0 4px;border-radius:3px;cursor:pointer;visibility:hidden}.tree-row:hover .del,.tree-row.sel .del{visibility:visible}.tree-row .del:hover{background:#fee2e2}.tree-empty{padding:10px 12px;color:var(--muted);font-size:12px}#layers{grid-area:layers;background:var(--panel);border-left:1px solid var(--border);padding:10px;overflow-y:auto;font-size:12px}#layers h3{margin:0 0 8px;font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-weight:600}.layer-row{display:grid;grid-template-columns:18px 18px 18px 1fr;gap:6px;align-items:center;padding:4px 0;border-bottom:1px solid var(--border)}.layer-row.current{background:#eff6ff;margin:0 -10px;padding:4px 10px;border-bottom-color:var(--accent)}.layer-row .swatch{width:14px;height:14px;border:1px solid var(--border);border-radius:3px;cursor:pointer}.layer-row .eye,.layer-row .lock{cursor:pointer;color:var(--muted)}.layer-row .name{cursor:pointer}.layer-row.off .name{color:var(--muted);text-decoration:line-through}#layers .add{margin-top:8px;width:100%;padding:4px;font-size:11px}#cmdline{grid-area:cmdline;background:#111827;color:#e5e7eb;border-top:1px solid #000;display:flex;align-items:center;padding:0 10px;font-family:ui-monospace,Menlo,monospace;font-size:12px;gap:6px}#cmdprompt{color:#93c5fd}#cmdinput{flex:1;background:transparent;border:none;outline:none;color:#f9fafb;font-family:inherit;font-size:inherit}#cmdhistory{position:absolute;left:64px;right:240px;bottom:52px;max-height:120px;overflow-y:auto;background:#111827f2;color:#d1d5db;padding:4px 10px;font-family:ui-monospace,Menlo,monospace;font-size:11px;display:none;z-index:60}#cmdhistory.show{display:block}#cmdhistory div{padding:1px 0}#cmdhistory .err{color:#fca5a5}#cmdhistory .info{color:#93c5fd}#status{grid-area:status;background:var(--panel);border-top:1px solid var(--border);display:flex;align-items:center;padding:0 10px;gap:14px;font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}#status .toggle{padding:2px 8px;border:1px solid var(--border);border-radius:4px;cursor:pointer;background:#fff}#status .toggle.on{background:var(--accent);color:#fff;border-color:var(--accent)}#status .coord{margin-left:auto}.kbd{font-family:ui-monospace,Menlo,monospace;font-size:10px;padding:0 4px;background:#f3f4f6;border-radius:3px;border:1px solid var(--border);color:var(--muted)}
