@keyframes toast-in{0%{opacity:0;transform:translateY(14px) scale(.96)}to{opacity:1;transform:translateY(0) scale(1)}}@keyframes screen-in{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:translateY(0)}}.screen-in{animation:screen-in .28s cubic-bezier(.2,.8,.2,1)}@keyframes pulse-ring{0%{box-shadow:0 0 #6a93c48c}to{box-shadow:0 0 0 14px #6a93c400}}@keyframes shimmer{0%{background-position:-200px 0}to{background-position:200px 0}}.shimmer{background:linear-gradient(90deg,transparent,rgba(255,255,255,.04),transparent);background-size:200px 100%;animation:shimmer 1.4s linear infinite}.press{transition:transform .12s ease-out,opacity .12s ease-out}.press:active{transform:scale(.96);opacity:.78}.press-sm{transition:transform .1s ease-out,opacity .1s ease-out}.press-sm:active{transform:scale(.92);opacity:.7}.mobile-scope{font-family:Plus Jakarta Sans,system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;height:100dvh;width:100vw;overflow:hidden;overscroll-behavior:none}.mobile-scope *{-webkit-tap-highlight-color:transparent}.mobile-scope button,.mobile-scope [role=button]{user-select:none;-webkit-user-select:none}.mobile-scope input[type=number]::-webkit-inner-spin-button,.mobile-scope input[type=number]::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.mobile-scope input[type=number]{-moz-appearance:textfield}.mobile-scope .canvas-wrap{position:absolute;top:0;right:0;bottom:0;left:0}.mobile-scope ::-webkit-scrollbar{width:4px;height:4px}.mobile-scope ::-webkit-scrollbar-track{background:transparent}.mobile-scope ::-webkit-scrollbar-thumb{background:#ffffff1f;border-radius:2px}.mobile-scope .hide-scroll::-webkit-scrollbar{display:none}.mobile-scope .zoom-controls button{width:44px;height:44px}.mobile-scope .snap-options .snap{padding:13px 12px;font-size:12px}:root{--bg: #14171b;--bg-2: #191d22;--bg-3: #20242b;--bg-4: #2a2f37;--border: #2e333c;--border-2: #3a4049;--fg: #f6f5f1;--fg-2: #c4c2bb;--fg-3: #8b8881;--fg-4: #585852;--accent: #6a93c4;--accent-2: #4d77a8;--accent-soft: rgba(106, 147, 196, .14);--accent-fg: #f6f5f1;--danger: #e87a6f;--warn: #e0b070;--good: #8cc99a;--grid: rgba(246, 245, 241, .045);--grid-strong: rgba(246, 245, 241, .09);--paper: #191d22;--shadow-lg: 0 20px 60px rgba(0, 0, 0, .55);--shadow-md: 0 8px 24px rgba(0, 0, 0, .45);--pack-card-bg: #242a32;--pack-card-border: #353e4a;--pack-bar-bg: #353e4a;--pack-bar-border: #404a58;--pack-margin-line: rgba(246,245,241,.18);--pack-offcut-lo: rgba(246,245,241,.04);--pack-offcut-hi: rgba(246,245,241,.08);--pack-toolbar-bg: rgba(20, 23, 27, .92)}.theme-light{--bg: #f6f5f1;--bg-2: #fdfcf8;--bg-3: #ececdf;--bg-4: #e1e0d4;--border: #d4d2c6;--border-2: #bdb9ac;--fg: #14171b;--fg-2: #3a3d44;--fg-3: #6b6d72;--fg-4: #9b9c9f;--accent: #1f3a5c;--accent-2: #14294a;--accent-soft: rgba(31, 58, 92, .1);--accent-fg: #f6f5f1;--danger: #b94a3e;--warn: #b07d35;--good: #4a7a3a;--grid: rgba(20, 23, 27, .04);--grid-strong: rgba(20, 23, 27, .09);--paper: #fdfcf8;--pack-card-bg: #e6e3d8;--pack-card-border: #c7c3b4;--pack-bar-bg: #d8d4c5;--pack-bar-border: #b9b4a3;--pack-margin-line: rgba(20,23,27,.18);--pack-offcut-lo: rgba(20,23,27,.05);--pack-offcut-hi: rgba(20,23,27,.1);--pack-toolbar-bg: rgba(246, 245, 241, .94)}*{box-sizing:border-box}html,body{margin:0;padding:0;height:100%;background:var(--bg);color:var(--fg);font-family:Geist,Inter,system-ui,-apple-system,sans-serif;font-size:13px;-webkit-font-smoothing:antialiased;overflow:hidden}#root{height:100%}.mono{font-family:Geist Mono,ui-monospace,SF Mono,Menlo,monospace;font-variant-numeric:tabular-nums}button{font-family:inherit;font-size:inherit;color:inherit;background:none;border:none;cursor:pointer;padding:0}input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}.app{display:grid;grid-template-rows:44px 34px 1fr 28px;grid-template-columns:56px 1fr var(--panel-w, 300px);grid-template-areas:"topbar topbar topbar" "tabs   tabs   tabs" "tools  canvas  layers" "status status status";height:100%}.sheet-tabs{grid-area:tabs;background:var(--bg-2);border-bottom:1px solid var(--border);display:flex;gap:2px;padding:4px 8px;overflow-x:auto;align-items:center}.sheet-tabs::-webkit-scrollbar{height:4px}.sheet-tab{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:5px 5px 0 0;color:var(--fg-2);font-size:12px;background:transparent;border:1px solid transparent;border-bottom:none;max-width:220px;white-space:nowrap}.sheet-tab:hover{background:var(--bg-3);color:var(--fg)}.sheet-tab.active{background:var(--bg);color:var(--fg);border-color:var(--border);position:relative}.sheet-tab .dot{width:6px;height:6px;border-radius:50%;background:var(--fg-4);flex-shrink:0}.sheet-tab.active .dot{background:var(--accent)}.sheet-tab .name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:160px}.sheet-tab .scale{font-size:10px;color:var(--fg-3)}.sheet-tab-close{margin-left:4px;width:16px;height:16px;display:inline-flex;align-items:center;justify-content:center;border-radius:3px;font-size:14px;line-height:1;color:var(--fg-4);opacity:0;flex-shrink:0}.sheet-tab:hover .sheet-tab-close,.sheet-tab.active .sheet-tab-close{opacity:1}.sheet-tab-close:hover{background:var(--bg-4);color:var(--danger)}.sheet-add{width:26px;height:26px;display:inline-flex;align-items:center;justify-content:center;border-radius:4px;color:var(--fg-3);margin-left:4px}.sheet-add:hover{background:var(--bg-3);color:var(--fg)}.sheet-row{display:flex;align-items:center;border:1px solid var(--border);border-radius:5px;background:var(--bg-3)}.sheet-row.active{border-color:var(--accent)}.sheet-row-main{flex:1;display:flex;align-items:center;gap:8px;padding:8px 10px;text-align:left;cursor:pointer;min-width:0}.sheet-row-main:hover,.sheet-row.active .sheet-row-main:hover{background:var(--bg-4)}.sheet-row .sheet-name{flex:1;font-size:12px;color:var(--fg);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.sheet-row .kind-pill{font-size:9px;font-family:JetBrains Mono,monospace;background:var(--bg-4);color:var(--fg-3);padding:1px 5px;border-radius:3px;letter-spacing:.05em}.sheet-row.active .kind-pill{background:var(--accent);color:#0a1316}.sheet-row-actions{display:flex;gap:2px;padding-right:6px}.sheet-row-actions button{width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;border-radius:3px;color:var(--fg-3);font-size:12px}.sheet-row-actions button:hover{background:var(--bg-4);color:var(--fg)}.sheet-row-actions button.danger:hover{color:var(--danger)}.topbar{grid-area:topbar;display:flex;align-items:center;gap:16px;padding:0 12px 0 16px;background:var(--bg-2);border-bottom:1px solid var(--border)}.topbar .brand{display:flex;align-items:center;gap:10px;padding-right:4px;font-family:Geist,system-ui,sans-serif;font-weight:700;letter-spacing:-.03em;font-size:19px;color:var(--fg);line-height:1}.topbar .brand-mark{display:block;color:var(--accent);flex-shrink:0}.topbar .brand-name{display:inline-block;line-height:1}.topbar .brand .dot{display:none}.topbar .file{display:flex;align-items:center;gap:8px;padding:4px 10px;background:var(--bg-3);border:1px solid var(--border);border-radius:5px;font-size:12px;color:var(--fg-2)}.topbar .file .icon{color:var(--fg-3)}.topbar .file strong{color:var(--fg);font-weight:500}.topbar .spacer{flex:1}.topbar .scale-pill{display:flex;align-items:center;gap:8px;padding:4px 10px;background:var(--bg-3);border:1px solid var(--border);border-radius:5px;font-size:12px}.topbar .scale-pill .label{color:var(--fg-3);font-size:11px;text-transform:uppercase;letter-spacing:.06em}.topbar .scale-pill .value{color:var(--fg)}.topbar .scale-pill button{color:var(--accent);font-size:11px;padding:2px 6px}.topbar .icon-btn{width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;border-radius:5px;color:var(--fg-2)}.topbar .icon-btn:hover{background:var(--bg-3);color:var(--fg)}.topbar .icon-btn.active{background:var(--accent-soft);color:var(--accent)}.share-chip{display:inline-flex;align-items:center;padding:3px 8px;border-radius:4px;background:var(--accent-soft);color:var(--accent);font-size:11px;font-weight:500;letter-spacing:.03em;pointer-events:none}.tool-rail{grid-area:tools;background:var(--bg-2);border-right:1px solid var(--border);display:flex;flex-direction:column;align-items:center;padding:8px 0;gap:4px}.tool-rail .tool{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border-radius:6px;color:var(--fg-2);position:relative}.tool-rail .tool:hover{background:var(--bg-3);color:var(--fg)}.tool-rail .tool.active{background:var(--accent-soft);color:var(--accent)}.tool-rail .tool.active:before{content:"";position:absolute;left:-8px;top:8px;bottom:8px;width:2px;background:var(--accent);border-radius:2px}.tool-rail .divider{width:24px;height:1px;background:var(--border);margin:6px 0}.tool-rail .tool .kbd{position:absolute;bottom:2px;right:4px;font-size:9px;color:var(--fg-4);font-family:JetBrains Mono,monospace}.tooltip{position:absolute;left:48px;top:50%;transform:translateY(-50%);background:var(--bg-4);border:1px solid var(--border-2);color:var(--fg);padding:4px 8px;border-radius:4px;font-size:11px;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity .15s;z-index:100;box-shadow:var(--shadow-md)}.tool:hover .tooltip{opacity:1}.tooltip .k{color:var(--fg-3);margin-left:6px}.canvas-wrap{grid-area:canvas;position:relative;overflow:hidden;background:linear-gradient(var(--grid) 1px,transparent 1px) 0 0 / 20px 20px,linear-gradient(90deg,var(--grid) 1px,transparent 1px) 0 0 / 20px 20px,var(--bg)}.canvas-stage{position:absolute;top:0;right:0;bottom:0;left:0;cursor:grab;touch-action:none;-ms-touch-action:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}.canvas-stage.tool-rect,.canvas-stage.tool-poly,.canvas-stage.tool-scale,.canvas-stage.tool-line{cursor:crosshair}.canvas-stage.tool-select{cursor:default}.canvas-stage.tool-pan{cursor:grab}.drawing-paper{position:absolute}.cursor-readout{position:absolute;pointer-events:none;background:var(--bg-4);border:1px solid var(--border-2);padding:3px 7px;border-radius:4px;font-size:11px;color:var(--fg);font-family:JetBrains Mono,monospace;white-space:nowrap;z-index:30;transform:translate(14px,14px)}.layers{grid-area:layers;background:var(--bg-2);border-left:1px solid var(--border);display:flex;flex-direction:column;min-height:0;position:relative}.panel-resize-handle{position:absolute;left:0;top:0;bottom:0;width:5px;cursor:col-resize;z-index:10}.panel-resize-handle:hover,.panel-resize-handle:active{background:var(--accent);opacity:.35}.allowance-row{display:flex;align-items:center;gap:6px;padding:5px 12px;cursor:pointer;border-bottom:1px solid var(--border);-webkit-user-select:none;user-select:none}.allowance-row:hover{background:var(--bg-3)}.allowance-row--editing{display:block;padding:8px 12px;cursor:default;border-bottom:1px solid var(--border)}.allowance-picker-row{display:flex;align-items:flex-start;gap:6px;padding:4px 6px;border-radius:3px;cursor:pointer}.allowance-picker-row:hover{background:var(--bg-2)}.panel-header{display:flex;align-items:center;justify-content:space-between;padding:10px 12px;border-bottom:1px solid var(--border);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--fg-3)}.panel-header .actions{display:flex;gap:4px}.panel-header .actions button{width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;border-radius:4px;color:var(--fg-3)}.panel-header .actions button:hover{background:var(--bg-3);color:var(--fg)}.panel-header.collapsible{cursor:pointer;-webkit-user-select:none;user-select:none}.panel-header.collapsible:hover{background:var(--bg-2)}.totals{padding:14px 14px 16px;border-bottom:1px solid var(--border);background:var(--bg-2)}.totals .row{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px}.totals .row:last-child{margin-bottom:0}.totals .label{font-size:11px;color:var(--fg-3);text-transform:uppercase;letter-spacing:.05em}.totals .big{font-size:22px;font-weight:500}.totals .small{font-size:12px;color:var(--fg-2)}.totals .accent{color:var(--accent)}.panel-scroll{flex:1;overflow-y:auto;min-height:0}.layers-section{flex:none;display:flex;flex-direction:column}.layer-list,.bg-layer-list{padding:4px 0}.bg-opacity-row{display:flex;align-items:center;gap:6px;margin-top:4px}.bg-opacity-row .slider{flex:1;height:3px;cursor:pointer}.sheets-list-panel{overflow-y:auto;padding:4px 0;max-height:160px}.inline-rename{width:100%;background:var(--bg-4);border:1px solid var(--accent);border-radius:3px;padding:2px 6px;font-size:13px;outline:none;color:var(--fg)}.layer-swatch.bg-swatch{background:var(--bg-4);display:flex;align-items:center;justify-content:center;color:var(--fg-3)}.layer-item{display:flex;align-items:center;gap:8px;padding:8px 10px 8px 8px;border-left:2px solid transparent;position:relative;cursor:pointer;border-bottom:1px solid var(--border)}.layer-item:hover{background:var(--bg-3)}.layer-item.active{background:var(--accent-soft);border-left-color:var(--accent)}.layer-item.hidden .layer-info{opacity:.45}.layer-item.linked-group:before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--warn)}.layer-swatch{width:22px;height:22px;border-radius:4px;flex-shrink:0;border:1px solid rgba(255,255,255,.15);position:relative}.layer-swatch.locked:after{content:"🔒";position:absolute;font-size:9px;bottom:-2px;right:-2px}.layer-info{flex:1;min-width:0}.layer-info .name{font-size:13px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:2px;display:flex;align-items:center;gap:6px}.mp-table{display:flex;flex-direction:column;gap:3px;margin-top:6px}.mp-head,.mp-row{display:flex;align-items:center;gap:4px}.mp-head{font-size:10px;color:var(--fg-3);text-transform:uppercase;letter-spacing:.05em;padding-bottom:2px}.mp-name{flex:2;min-width:0}.mp-num{flex:1;min-width:0}.mp-qty{width:44px}.mp-del{flex-shrink:0;width:22px;height:22px;display:flex;align-items:center;justify-content:center;border-radius:3px;color:var(--fg-4)}.mp-del:hover{background:var(--bg-4);color:var(--danger)}.mp-row{padding:1px 0}.mp-row input{background:var(--bg-3);border:1px solid var(--border-2);border-radius:3px;color:var(--fg);font-size:12px;padding:4px 8px;width:100%;transition:border-color .12s ease}.mp-row input::placeholder{color:var(--fg-4)}.mp-row input:hover{border-color:var(--fg-4)}.mp-row input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px #7f9ef026}.mp-undo-toast{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:8px;padding:6px 10px;background:var(--bg-4);border:1px solid var(--border-2);border-radius:4px;font-size:11px;color:var(--fg-2)}.shape-panel{border-bottom:1px solid var(--border);background:var(--bg-2)}.shape-panel .panel-header{padding-bottom:6px}.shape-field{display:flex;flex-direction:column;gap:2px;font-size:10px;color:var(--fg-3);text-transform:uppercase;letter-spacing:.05em}.shape-dim-input{position:relative;display:flex;align-items:center;background:var(--bg-3);border:1px solid var(--border-2);border-radius:3px;padding-right:22px}.shape-dim-input input{background:transparent;border:0;color:var(--fg);font-size:12px;padding:4px 6px;width:100%;font-family:JetBrains Mono,monospace;outline:none}.shape-dim-input:focus-within{border-color:var(--accent);box-shadow:0 0 0 2px #7f9ef026}.shape-dim-input .suffix{position:absolute;right:6px;font-size:10px;color:var(--fg-4);pointer-events:none}.pack-section{border-bottom:1px solid var(--border)}.pack-section .panel-header .btn{font-size:11px}.dim-label{position:absolute;background:var(--bg-2);border:1px solid var(--accent);border-radius:3px;color:var(--fg);font-size:10px;font-family:JetBrains Mono,monospace;padding:2px 6px;cursor:pointer;white-space:nowrap;-webkit-user-select:none;user-select:none;transform-origin:center}.dim-label:hover{background:var(--bg-3)}.dim-label.editing{padding:0;background:var(--bg-3)}.dim-label.editing input{background:transparent;border:0;outline:none;color:var(--fg);font-family:inherit;font-size:10px;width:54px;padding:2px 6px;text-align:right}.dim-label.editing .suffix{padding-right:6px;color:var(--fg-3);font-size:10px}.add-shape-popover{position:absolute;z-index:80;background:var(--bg-2);border:1px solid var(--border-2);border-radius:6px;box-shadow:var(--shadow-lg);padding:10px;min-width:220px;display:flex;flex-direction:column;gap:8px}.add-shape-popover .kind-pills{display:flex;gap:4px}.add-shape-popover .kind-pill{flex:1;padding:4px 6px;font-size:11px;border:1px solid var(--border-2);background:var(--bg-3);color:var(--fg-2);border-radius:3px;cursor:pointer}.add-shape-popover .kind-pill.active{border-color:var(--accent);background:var(--bg-4);color:var(--fg)}.add-shape-popover .dim-row{display:grid;grid-template-columns:1fr 1fr;gap:6px}.add-shape-popover .dim-row label{display:flex;flex-direction:column;gap:2px;font-size:10px;color:var(--fg-3);text-transform:uppercase;letter-spacing:.05em}.add-shape-popover .actions{display:flex;gap:4px;justify-content:flex-end;margin-top:2px}.bulk-paste-area{display:flex;flex-direction:column;gap:6px;margin-top:6px;padding:8px;background:var(--bg-3);border:1px solid var(--border-2);border-radius:4px}.bulk-paste-area textarea{background:var(--bg-2);border:1px solid var(--border-2);border-radius:3px;color:var(--fg);font-family:JetBrains Mono,monospace;font-size:11px;padding:6px 8px;min-height:80px;resize:vertical;outline:none}.bulk-paste-area textarea:focus{border-color:var(--accent)}.bulk-paste-area .bp-actions{display:flex;gap:6px;align-items:center}.bulk-paste-area .bp-feedback{font-size:10px;color:var(--fg-3)}.bulk-paste-area .bp-feedback.error{color:var(--danger)}.layer-name-input{background:var(--bg-3, #1e2127);border:1px solid var(--accent);border-radius:3px;color:var(--fg-1, #fff);font-size:13px;font-weight:500;padding:0 4px;width:100%;min-width:0;outline:none}.layer-info .name .link-chip{background:var(--warn);color:#1a1d22;font-size:9px;font-weight:600;padding:1px 4px;border-radius:3px;letter-spacing:.05em}.layer-info .name .csv-chip{background:none;border:1px solid var(--accent);color:var(--accent);font-size:9px;font-weight:600;padding:1px 4px;border-radius:3px;letter-spacing:.05em;cursor:pointer;display:inline-flex;align-items:center;gap:2px;line-height:1.4}.layer-info .name .csv-chip:hover{background:var(--accent);color:#0a1316}.csv-modal{width:min(640px,95vw);max-height:86vh;display:flex;flex-direction:column}.csv-modal[data-step="2"]{width:min(720px,95vw)}.csv-modal[data-step="3"]{width:min(900px,95vw)}.csv-modal .modal-body{flex:1;overflow-y:auto}.csv-import-btn{display:inline-flex;align-items:center;gap:4px;background:var(--bg-3);border:1px solid var(--border);color:var(--fg-2);font-size:10px;font-weight:600;letter-spacing:.04em;padding:3px 7px;border-radius:4px;cursor:pointer}.csv-import-btn:hover{color:var(--accent);border-color:var(--accent)}.csv-drop-zone{border:2px dashed var(--border-2);border-radius:6px;padding:20px;text-align:center;cursor:pointer;font-size:12px;color:var(--fg-3);transition:border-color .15s,background .15s}.csv-drop-zone:hover,.csv-drop-zone.drag-over{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 8%,transparent);color:var(--fg)}.csv-col-table{width:100%;border-collapse:collapse;font-size:12px}.csv-col-table th{text-align:left;font-weight:500;color:var(--fg-3);padding:0 6px 6px;font-size:11px;text-transform:uppercase;letter-spacing:.04em}.csv-col-table td{padding:4px 6px;border-top:1px solid var(--border)}.csv-col-table select{background:var(--bg-3);border:1px solid var(--border);border-radius:4px;color:var(--fg);padding:3px 6px;font-size:11px;width:100%}.csv-col-table .csv-sample{color:var(--fg-4);font-family:monospace;font-size:11px}.csv-assign-row{display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px solid var(--border);font-size:12px}.csv-assign-row:last-child{border-bottom:none}.csv-assign-omitted{opacity:.45}.csv-family-name{flex:2;display:flex;align-items:center;gap:6px;min-width:0}.csv-family-name>span:first-child{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-width:0;flex-shrink:1;line-height:1.25;word-break:break-word}.csv-kind-badge{background:var(--bg-3);border:1px solid var(--border);border-radius:3px;font-size:9px;padding:1px 4px;color:var(--fg-3);flex-shrink:0}.csv-code-badge{background:color-mix(in srgb,var(--accent) 15%,transparent);border:1px solid color-mix(in srgb,var(--accent) 40%,transparent);border-radius:3px;font-size:9px;padding:1px 5px;color:var(--accent);flex-shrink:0;font-weight:600;font-family:monospace}.csv-arrow{color:var(--fg-4);flex-shrink:0}.csv-assign-row select{flex:1;min-width:140px;background:var(--bg-3);border:1px solid var(--border);border-radius:4px;color:var(--fg);padding:3px 6px;font-size:11px}.csv-count{color:var(--fg-4);font-size:11px;flex-shrink:0}.csv-diff-summary{display:flex;gap:10px;flex-wrap:wrap;font-size:11px;margin-bottom:10px;font-weight:600}.csv-diff-add{color:#10b981}.csv-diff-rem{color:var(--danger, #ef4444)}.csv-diff-chg{color:#f59e0b}.csv-diff-unch{color:var(--fg-4);font-weight:400}.csv-preview-table-wrap{overflow-y:auto;border:1px solid var(--border);border-radius:5px}.csv-preview-table{width:100%;border-collapse:collapse;font-size:11px}.csv-preview-table th{position:sticky;top:0;background:var(--bg-3);padding:5px 8px;text-align:left;font-size:10px;text-transform:uppercase;letter-spacing:.04em;color:var(--fg-3);border-bottom:1px solid var(--border)}.csv-preview-table td{padding:4px 8px;border-top:1px solid var(--border)}.csv-preview-table tr.csv-row-warn td{background:color-mix(in srgb,#f59e0b 10%,transparent)}.csv-preview-table tr.csv-row-add td{background:color-mix(in srgb,#10b981 10%,transparent)}.csv-preview-table tr.csv-row-rem td{background:color-mix(in srgb,#ef4444 10%,transparent)}.csv-preview-table tr.csv-row-chg td{background:color-mix(in srgb,#f59e0b 10%,transparent)}.csv-preview-table tr.csv-row-excluded td{opacity:.35}.csv-preview-table .csv-type-cell{color:var(--fg-3);font-size:11px}.layer-info .meta{font-size:11px;color:var(--fg-3);display:flex;gap:8px}.layer-info .meta .area{color:var(--fg-2)}.layer-cost-excluded{opacity:.4}.excl-badge{font-size:9px;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--fg-4);background:var(--bg-4);padding:1px 4px;border-radius:3px;line-height:1.4}.layer-actions{display:flex;gap:2px;opacity:.4}.layer-item:hover .layer-actions,.layer-item.active .layer-actions{opacity:1}.layer-actions button{width:22px;height:22px;display:inline-flex;align-items:center;justify-content:center;color:var(--fg-3);border-radius:3px}.layer-actions button:hover{background:var(--bg-4);color:var(--fg)}.layer-actions button.on{color:var(--accent)}.expand-btn{display:flex;align-items:center;justify-content:center;width:14px;height:14px;flex-shrink:0;color:var(--fg-4);border-radius:3px}.expand-btn:hover{color:var(--fg-2);background:var(--bg-4)}.layer-item.drag-over{background:var(--accent-soft);border-left-color:var(--accent);outline:1px dashed var(--accent-2);outline-offset:-2px}.shape-list{background:var(--bg);border-bottom:1px solid var(--border)}.shape-list-empty{padding:6px 12px 6px 42px;font-size:11px;color:var(--fg-4);font-style:italic}.shape-row{display:flex;align-items:center;gap:6px;padding:5px 10px 5px 30px;border-bottom:1px solid var(--border);font-size:11px;color:var(--fg-2);cursor:grab;-webkit-user-select:none;user-select:none}.shape-row:last-child{border-bottom:none}.shape-row:hover{background:var(--bg-3)}.shape-row.checked{background:var(--accent-soft)}.shape-row input[type=checkbox]{width:12px;height:12px;flex-shrink:0;accent-color:var(--accent);cursor:pointer}.shape-icon{display:flex;align-items:center;color:var(--fg-3);flex-shrink:0}.shape-type{color:var(--fg-2);flex-shrink:0}.shape-area{color:var(--fg-3);font-size:10px;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.shape-mult{background:var(--bg-4);color:var(--fg-2);font-size:9px;font-weight:600;padding:1px 4px;border-radius:3px;flex-shrink:0}.status{grid-area:status;background:var(--bg-2);border-top:1px solid var(--border);display:flex;align-items:center;gap:16px;padding:0 12px;font-size:11px;color:var(--fg-3)}.status .seg{display:flex;align-items:center;gap:6px}.status .seg .v{color:var(--fg-2)}.status .seg .v.mono{font-family:JetBrains Mono,monospace}.status .spacer{flex:1}.status .pill{padding:1px 7px;background:var(--bg-3);border:1px solid var(--border);border-radius:10px;color:var(--fg-2)}.drawer-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;z-index:50;opacity:0;pointer-events:none;transition:opacity .2s}.drawer-backdrop.open{opacity:1;pointer-events:auto}.drawer{position:fixed;top:0;right:0;bottom:0;width:420px;background:var(--bg-2);border-left:1px solid var(--border);box-shadow:var(--shadow-lg);z-index:60;transform:translate(100%);transition:transform .25s cubic-bezier(.2,.8,.2,1);display:flex;flex-direction:column}.drawer.open{transform:translate(0)}.drawer-header{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;border-bottom:1px solid var(--border)}.drawer-header .title{font-size:15px;font-weight:500}.drawer-header .sub{font-size:11px;color:var(--fg-3);text-transform:uppercase;letter-spacing:.08em;margin-top:2px}.drawer-close{width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;border-radius:5px;color:var(--fg-2)}.drawer-close:hover{background:var(--bg-3);color:var(--fg)}.drawer-body{flex:1;overflow-y:auto;padding:18px}.drawer-footer{padding:12px 18px;border-top:1px solid var(--border);display:flex;gap:8px;justify-content:flex-end}.field{margin-bottom:14px}.field label{display:block;font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--fg-3);margin-bottom:5px}.field .hint{color:var(--fg-4);font-size:11px;margin-top:4px;text-transform:none;letter-spacing:0}.field-row{display:flex;gap:10px}.field-row>.field{flex:1;margin-bottom:14px}input[type=text],input[type=number],select,textarea{width:100%;background:var(--bg-3);border:1px solid var(--border);border-radius:5px;padding:7px 9px;color:var(--fg);outline:none;transition:border-color .15s}input[type=text]:focus,input[type=number]:focus,select:focus,textarea:focus{border-color:var(--accent)}textarea{resize:vertical;min-height:60px}.input-with-suffix{position:relative}.input-with-suffix .suffix{position:absolute;right:10px;top:50%;transform:translateY(-50%);color:var(--fg-3);font-size:11px;pointer-events:none}.input-with-suffix input{padding-right:36px}.input-with-prefix{position:relative}.input-with-prefix .prefix{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--fg-3);font-size:11px;pointer-events:none}.input-with-prefix input{padding-left:24px}.swatch-grid{display:grid;grid-template-columns:repeat(10,1fr);gap:6px}.swatch{aspect-ratio:1;border-radius:5px;border:1px solid rgba(255,255,255,.12);cursor:pointer;position:relative;transition:transform .1s}.swatch:hover{transform:scale(1.08)}.swatch.selected{outline:2px solid var(--fg);outline-offset:2px}.swatch.selected:after{content:"✓";position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;color:#000000b3;font-weight:700}.section{margin-bottom:22px}.section-title{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--fg-3);margin-bottom:10px;padding-bottom:6px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}.btn{padding:7px 14px;border-radius:5px;background:var(--bg-3);border:1px solid var(--border);color:var(--fg);font-size:12px;cursor:pointer;display:inline-flex;align-items:center;gap:6px}.btn:hover{background:var(--bg-4);border-color:var(--border-2)}.btn.primary{background:var(--accent);color:#0a1316;border-color:var(--accent);font-weight:500}.btn.primary:hover{background:var(--accent-2)}.btn.danger{color:var(--danger)}.btn.ghost{background:transparent;border-color:transparent}.btn.ghost:hover{background:var(--bg-3)}.btn.sm{padding:4px 8px;font-size:11px}.toggle{display:inline-flex;align-items:center;gap:8px;cursor:pointer}.toggle input{display:none}.toggle-track{width:32px;height:18px;background:var(--bg-4);border-radius:10px;position:relative;transition:background .15s;border:1px solid var(--border-2)}.toggle-track:after{content:"";position:absolute;top:1px;left:1px;width:14px;height:14px;background:var(--fg-2);border-radius:50%;transition:transform .15s,background .15s}.toggle input:checked+.toggle-track{background:var(--accent);border-color:var(--accent)}.toggle input:checked+.toggle-track:after{transform:translate(14px);background:#0a1316}.slider-row{display:flex;align-items:center;gap:10px}.slider{flex:1;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:var(--bg-3);height:4px;border-radius:2px;outline:none}.slider::-webkit-slider-thumb{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:14px;height:14px;background:var(--accent);border-radius:50%;cursor:pointer;border:2px solid var(--bg-2)}.slider::-moz-range-thumb{width:14px;height:14px;background:var(--accent);border-radius:50%;cursor:pointer;border:2px solid var(--bg-2)}.slider-row .v{min-width:36px;font-family:JetBrains Mono,monospace;font-size:11px;color:var(--fg-2);text-align:right}.seg-ctrl{display:inline-flex;background:var(--bg-3);border:1px solid var(--border);border-radius:5px;padding:2px;gap:2px}.seg-ctrl button{padding:4px 10px;font-size:11px;color:var(--fg-2);border-radius:3px}.seg-ctrl button.active{background:var(--bg-4);color:var(--fg)}.check-row{display:flex;align-items:center;gap:10px;padding:9px 0;border-bottom:1px solid var(--border);cursor:pointer}.check-row:last-child{border-bottom:none}.check-row .name{flex:1;font-size:12px}.check-row .desc{font-size:11px;color:var(--fg-3);margin-top:1px}.check-row .swatch-mini{width:14px;height:14px;border-radius:3px;border:1px solid rgba(255,255,255,.15);flex-shrink:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000008c;display:flex;align-items:center;justify-content:center;z-index:70}.modal{background:var(--bg-2);border:1px solid var(--border);border-radius:8px;width:380px;box-shadow:var(--shadow-lg);overflow:hidden}.modal-header{padding:14px 18px;border-bottom:1px solid var(--border)}.modal-header h3{margin:0;font-size:14px;font-weight:500}.modal-header p{margin:4px 0 0;font-size:12px;color:var(--fg-3)}.modal-body{padding:16px 18px}.modal-footer{padding:12px 18px;border-top:1px solid var(--border);display:flex;justify-content:flex-end;gap:8px}.modal.pdf-picker{width:min(720px,92vw);max-height:86vh;display:flex;flex-direction:column}.pdf-picker-body{overflow-y:auto;flex:1}.pdf-picker-actions{display:flex;align-items:center;gap:8px;margin-bottom:12px}.pdf-thumb-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:10px}.pdf-thumb{display:flex;flex-direction:column;align-items:stretch;padding:6px;background:var(--bg-3);border:2px solid var(--border);border-radius:6px;cursor:pointer;transition:border-color .15s,transform .1s}.pdf-thumb:hover{border-color:var(--border-2)}.pdf-thumb.selected{border-color:var(--accent)}.pdf-thumb img{width:100%;max-height:180px;object-fit:contain;background:#fff;border-radius:3px;display:block}.pdf-thumb-label{display:flex;align-items:center;gap:6px;padding:6px 4px 0;font-size:11px;color:var(--fg-2)}.pdf-thumb-label .check{width:14px;height:14px;display:inline-flex;align-items:center;justify-content:center;border-radius:3px;background:var(--bg-4);border:1px solid var(--border-2);color:#0a1316;font-size:10px;font-weight:700}.pdf-thumb.selected .pdf-thumb-label .check{background:var(--accent);border-color:var(--accent)}.snap-options{position:absolute;top:12px;left:12px;background:var(--bg-2);border:1px solid var(--border);border-radius:6px;padding:6px;display:flex;gap:4px;box-shadow:var(--shadow-md);z-index:10}.snap-options .snap{padding:5px 9px;font-size:11px;color:var(--fg-3);border-radius:4px;display:inline-flex;align-items:center;gap:5px}.snap-options .snap.on{background:var(--accent-soft);color:var(--accent)}.snap-options .snap:hover{background:var(--bg-3)}.snap-options .snap.on:hover{background:var(--accent-soft)}.bg-bar{position:absolute;top:12px;left:50%;transform:translate(-50%);background:var(--bg-2);border:1px solid var(--border);border-radius:6px;padding:6px;display:flex;gap:4px;align-items:center;box-shadow:var(--shadow-md);z-index:10}.bg-bar.unlocked{border-color:var(--accent)}.bg-bar .snap{padding:5px 9px;font-size:11px;color:var(--fg-3);border-radius:4px;display:inline-flex;align-items:center;gap:5px;background:transparent;border:none;cursor:pointer}.bg-bar .snap:hover{background:var(--bg-3);color:var(--fg)}.bg-bar .snap.on{background:var(--accent-soft);color:var(--accent)}.bg-bar .snap.on:hover{background:var(--accent-soft)}.bg-bar-label{font-size:11px;color:var(--fg-3);padding:0 4px;letter-spacing:.04em;white-space:nowrap}.bg-bar-divider{width:1px;align-self:stretch;background:var(--border);margin:0 2px}.canvas-stage.crop-mode{cursor:crosshair}.canvas-stage.bg-move{cursor:move}.canvas-stage.alt-copy{cursor:copy}.canvas-stage.space-ready{cursor:grab}.canvas-stage.panning{cursor:grabbing}.zoom-controls{position:absolute;bottom:16px;right:16px;display:flex;flex-direction:column;background:var(--bg-2);border:1px solid var(--border);border-radius:6px;overflow:hidden;box-shadow:var(--shadow-md);z-index:10}.zoom-controls button{width:32px;height:32px;display:flex;align-items:center;justify-content:center;color:var(--fg-2);border-bottom:1px solid var(--border)}.zoom-controls button:last-child{border-bottom:none}.zoom-controls button:hover{background:var(--bg-3);color:var(--fg)}.zoom-controls .v{padding:4px 6px;font-size:10px;font-family:JetBrains Mono,monospace;color:var(--fg-3);text-align:center;border-bottom:1px solid var(--border)}.vertex{fill:var(--accent);stroke:var(--bg);stroke-width:1.5}.vertex.first{fill:var(--good)}.shape-label{font-family:JetBrains Mono,monospace;font-size:13px;fill:var(--fg);paint-order:stroke;stroke:var(--bg);stroke-width:3;stroke-linejoin:round}.empty{text-align:center;padding:24px 16px;color:var(--fg-3);font-size:12px}.empty .icon{font-size:28px;margin-bottom:8px;opacity:.5}.canvas-empty{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;pointer-events:none}.canvas-empty .card{background:var(--bg-2);border:2px dashed var(--border-2);border-radius:10px;padding:36px 56px;text-align:center;pointer-events:auto;box-shadow:var(--shadow-md)}.canvas-empty .card .icon{font-size:38px;margin-bottom:12px;color:var(--fg-3)}.canvas-empty .card .title{font-size:16px;font-weight:500;margin-bottom:6px}.canvas-empty .card .sub{font-size:12px;color:var(--fg-3);max-width:360px;line-height:1.5}.drop-overlay{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:12px;pointer-events:none;z-index:20}.drop-overlay .card{background:var(--bg-2);border:2px dashed var(--border-2);border-radius:8px;padding:32px 48px;text-align:center}.drop-overlay .card .icon{font-size:32px;margin-bottom:8px}.drop-overlay .card .title{font-size:14px;font-weight:500;margin-bottom:4px}.drop-overlay .card .sub{font-size:12px;color:var(--fg-3)}.link-picker .layer-opt{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:5px;cursor:pointer;border:1px solid transparent}.link-picker .layer-opt:hover{background:var(--bg-3)}.link-picker .layer-opt.selected{background:var(--accent-soft);border-color:var(--accent)}.link-picker .layer-opt .sw{width:16px;height:16px;border-radius:3px;flex-shrink:0}.ctx-menu{position:fixed;background:var(--bg-2);border:1px solid var(--border-2);border-radius:6px;padding:4px;min-width:180px;box-shadow:var(--shadow-lg);z-index:80}.ctx-menu button{display:flex;align-items:center;gap:8px;width:100%;padding:6px 10px;border-radius:4px;font-size:12px;color:var(--fg);text-align:left}.ctx-menu button:hover{background:var(--bg-3)}.ctx-menu button.danger{color:var(--danger)}.ctx-menu .divider{height:1px;background:var(--border);margin:4px 0}.ctx-menu .kbd{margin-left:auto;color:var(--fg-4);font-family:JetBrains Mono,monospace;font-size:10px}.ctx-submenu-wrap{position:relative}.ctx-submenu{position:absolute;left:100%;top:-4px;background:var(--bg-2);border:1px solid var(--border-2);border-radius:6px;padding:4px;min-width:190px;box-shadow:var(--shadow-lg);z-index:81}.ctx-swatch{display:inline-block;width:10px;height:10px;border-radius:2px;flex-shrink:0}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:var(--border-2);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--fg-4)}.pack-btn-topbar{background:var(--accent);border-color:var(--accent);color:var(--bg);font-weight:500}.pack-btn-topbar:hover{filter:brightness(.95);border-color:var(--accent);background:var(--accent)}.sheet-tab.pack-tab .pack-pill{font-family:JetBrains Mono,monospace;font-size:9px;letter-spacing:.08em;font-weight:600;padding:2px 5px;border-radius:3px;background:var(--accent);color:var(--bg);line-height:1}.sheet-tab.pack-tab .dot{display:none}.sheet-tab.pack-tab.active{border-color:var(--accent)}.sheet-tab.pack-tab.active .pack-pill{background:var(--accent)}.sheet-tab.pack-tab .warn-dot{width:7px;height:7px;background:var(--warn);border-radius:50%;box-shadow:0 0 6px var(--warn);flex-shrink:0}.sheet-tab.pack-tab.stale{box-shadow:inset 0 -2px 0 var(--warn)}.pack-rename{font-size:12px;padding:1px 4px;background:var(--bg-3);border:1px solid var(--accent);color:var(--fg);outline:none;min-width:100px;max-width:200px}.pack-preview-card{display:flex;gap:12px;align-items:center;padding:12px;background:var(--bg-3);border:1px solid var(--border);border-radius:6px;margin-bottom:16px}.pack-preview-card .mini-stack{display:flex;flex-direction:column;gap:3px;flex-shrink:0}.pack-preview-card .mini-stack>div{width:32px;height:8px;background:var(--bg-4);border-radius:1px}.pack-preview-card .stats{flex:1;display:grid;grid-template-columns:repeat(2,1fr);gap:6px 12px}.pack-preview-card .stat .l{font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--fg-3)}.pack-preview-card .stat .v{font-family:JetBrains Mono,monospace;font-size:16px;font-weight:500;color:var(--fg)}.pack-preview-card .stat .v.warn{color:var(--warn)}.preset-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:6px;margin-bottom:12px}.preset-card{background:var(--bg-3);border:1px solid var(--border);border-radius:5px;padding:8px 10px;text-align:left;cursor:pointer;position:relative;font-family:inherit}.preset-card:hover{background:var(--bg-4);border-color:var(--border-2)}.preset-card.active{background:var(--accent-soft);border-color:var(--accent)}.preset-card .pname{font-size:11px;font-weight:500;color:var(--fg);margin-bottom:2px}.preset-card .pdims{font-family:JetBrains Mono,monospace;font-size:10px;color:var(--fg-3)}.preset-card .pkind,.preset-card .ptag-saved{position:absolute;top:6px;right:8px;font-size:8px;letter-spacing:.08em;text-transform:uppercase;color:var(--fg-4)}.preset-card .ptag-saved{color:var(--accent)}.pack-layer-sub{font-size:10px;letter-spacing:.08em;text-transform:uppercase;color:var(--fg-3);margin:4px 0 6px}.layer-check-row{display:flex;align-items:center;gap:10px;padding:8px 10px;margin-bottom:5px;background:var(--bg-3);border:1px solid var(--border);border-radius:5px;cursor:pointer}.layer-check-row:hover{background:var(--bg-4)}.layer-check-row.checked{border-color:var(--accent);background:var(--accent-soft)}.layer-check-row.disabled{opacity:.5;cursor:not-allowed}.layer-check-row input[type=checkbox]{width:14px;height:14px;cursor:pointer;flex-shrink:0}.layer-check-row .sw{width:14px;height:14px;border-radius:3px;flex-shrink:0}.layer-check-row .info{flex:1;min-width:0}.layer-check-row .nm{font-size:12px;color:var(--fg)}.layer-check-row .meta{font-size:10px;color:var(--fg-3);margin-top:2px}.layer-check-row .kind-tag{font-family:JetBrains Mono,monospace;font-size:9px;letter-spacing:.06em;padding:2px 5px;border-radius:3px;background:var(--bg-4);color:var(--fg-3)}.layer-check-row .kind-tag.sheet{color:var(--accent)}.layer-check-row .kind-tag.linear{color:var(--good)}.layer-check-row .kind-tag.area{color:var(--fg-4)}.recent-list{display:flex;flex-direction:column;gap:4px}.recent-row{display:flex;align-items:center;gap:8px;padding:6px 8px;background:var(--bg-3);border:1px solid var(--border);border-radius:4px;cursor:pointer}.recent-row:hover{background:var(--bg-4)}.recent-row .rkind{font-family:JetBrains Mono,monospace;font-size:9px;padding:2px 5px;background:var(--bg-4);color:var(--accent);border-radius:3px;letter-spacing:.06em}.recent-row .rdim{font-family:JetBrains Mono,monospace;font-size:11px;color:var(--fg);flex:1}.recent-row .rmeta{font-size:10px;color:var(--fg-3)}.pack-rotate{display:flex!important;align-items:center;gap:8px;cursor:pointer;padding:6px 0}.pack-rotate input[type=checkbox]{display:inline-block!important;width:16px;height:16px;margin:0;cursor:pointer}.pack-canvas-wrap{position:relative;overflow:hidden;background:var(--bg)}.yield-stage{position:absolute;top:0;right:0;bottom:0;left:0;background:var(--bg);background-image:linear-gradient(to right,var(--grid) 1px,transparent 1px),linear-gradient(to bottom,var(--grid) 1px,transparent 1px);background-size:40px 40px;cursor:grab;overflow:hidden;-webkit-user-select:none;user-select:none}.yield-stage.panning{cursor:grabbing}.yield-world{position:absolute;top:0;left:0;transform-origin:0 0}.sheet-card{position:absolute;background:var(--pack-card-bg);border:6px solid var(--pack-card-border);box-shadow:0 24px 80px #0006}.sheet-margin{position:absolute;border:2px dashed var(--pack-margin-line);pointer-events:none}.sheet-card .pp{position:absolute;border:4px solid rgba(0,0,0,.4);display:flex;flex-direction:column;align-items:center;justify-content:center;color:#000000d9;cursor:pointer;overflow:hidden;font-family:JetBrains Mono,monospace;text-align:center;background-color:var(--pp-color);background-color:color-mix(in srgb,var(--pp-color) calc(var(--pp-fill-opacity, 1) * 100%),transparent)}.sheet-card .pp:hover{filter:brightness(1.08)}.sheet-card .pp.selected{outline:12px solid var(--accent);outline-offset:-4px}.sheet-card .pp{touch-action:none}.sheet-card .pp.dragging{opacity:.85;box-shadow:0 24px 64px #00000073;z-index:50;cursor:grabbing}.sheet-card .pp.collides{outline:calc(6px * var(--inv-zoom, 1)) solid var(--danger);outline-offset:calc(-3px * var(--inv-zoom, 1))}.sheet-card.manual{background-image:repeating-linear-gradient(45deg,rgba(255,255,255,.02),rgba(255,255,255,.02) 20px,transparent 20px,transparent 40px);border-style:dashed}.sheet-card .manual-sheet-remove{position:absolute;top:calc(16px * var(--inv-zoom, 1));right:calc(16px * var(--inv-zoom, 1));width:calc(48px * var(--inv-zoom, 1));height:calc(48px * var(--inv-zoom, 1));font-size:calc(28px * var(--inv-zoom, 1));line-height:1;border-radius:50%;background:#0006;color:var(--fg);border:none;cursor:pointer;z-index:5}.sheet-card .manual-sheet-remove:hover{background:var(--danger)}.sheet-card .pp.rotated:before{content:"↻";position:absolute;top:14px;right:18px;font-size:calc(13px * var(--inv-zoom, 1));color:#0006}.sheet-card .pp .num{font-weight:600;line-height:1}.sheet-card .pp .dim{color:#0000008c;margin-top:16px;line-height:1}.sheet-card .pp .piece-name{opacity:.7;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1;margin-top:4px}.sheet-card .pp .piece-xy{opacity:.5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1;margin-top:2px}.sheet-card .pp .lock-btn{position:absolute;top:8px;right:8px;background:#00000040;border-radius:4px;padding:4px;opacity:.4;transition:opacity .15s;color:#000c}.sheet-card .pp:hover .lock-btn{opacity:.85}.sheet-card .pp .lock-btn.locked{opacity:1;background:#00000080}.sheet-card .pp .rotate-btn{position:absolute;top:8px;right:44px;background:#00000040;border-radius:4px;padding:4px 6px;opacity:.4;transition:opacity .15s;color:#000c;font-family:JetBrains Mono,monospace;font-size:calc(13px * var(--inv-zoom, 1));line-height:1;border:none;cursor:pointer}.sheet-card .pp:hover .rotate-btn{opacity:.85}.sheet-card .pp .pp-up-arrow{position:absolute;bottom:calc(10px * var(--inv-zoom, 1));left:calc(10px * var(--inv-zoom, 1));font-size:calc(16px * var(--inv-zoom, 1));color:#0000008c;font-family:JetBrains Mono,monospace;line-height:1;pointer-events:none;font-weight:700;transform-origin:center}.sheet-card .pp .edge-allow{display:flex;align-items:center;justify-content:center;z-index:3}.sheet-card .pp .edge-allow.pos{background:repeating-linear-gradient(45deg,#ff5a468c 0,#ff5a468c 6px,#ff5a4626 6px,#ff5a4626 12px);outline:1px solid rgba(255,90,70,.7)}.sheet-card .pp .edge-allow.neg{background:repeating-linear-gradient(45deg,#508cdc8c 0,#508cdc8c 6px,#508cdc26 6px,#508cdc26 12px);outline:1px solid rgba(80,140,220,.7)}.sheet-card .pp .edge-allow .ea-label{color:#000000d9;font-weight:700;font-size:calc(14px * var(--inv-zoom, 1));background:#ffffffb3;padding:1px 4px;border-radius:3px;pointer-events:none}.sheet-card .pp .edge-allow.left .ea-label,.sheet-card .pp .edge-allow.right .ea-label{writing-mode:vertical-rl}.sheet-card .pp .edge-band{background:var(--warn);outline:1px solid rgba(0,0,0,.35);z-index:4}.cut-list-table{border-collapse:collapse;font-size:22px;color:var(--fg-2, #ccc);background:var(--bg-2, #1a1d22);border-radius:4px;overflow:hidden}.cut-list-table th{text-align:left;padding:12px 16px;font-size:18px;font-weight:600;color:var(--fg-3, #888);border-bottom:2px solid var(--bg-4, #2a2a2a)}.cut-list-table td{padding:10px 16px;border-bottom:1px solid var(--bg-4, #2a2a2a)}.cut-list-table tr:last-child td{border-bottom:none}.cut-list-table tr:nth-child(2n){background:#ffffff08}.sheet-card .sheet-label{position:absolute;left:0;top:100%;transform-origin:top left;transform:translateY(calc(12px * var(--inv-zoom, 1))) scale(var(--inv-zoom, 1));display:flex;gap:12px;align-items:center;font-family:JetBrains Mono,monospace;font-size:12px;color:var(--fg-3);white-space:nowrap}.sheet-card .sheet-label .num{padding:6px 12px;background:var(--bg-3);border:1px solid var(--border-2);color:var(--fg);font-weight:600;border-radius:6px}.sheet-card .sheet-label .stock{color:var(--fg-2)}.sheet-card .sheet-label .yield-pct{color:var(--good)}.sheet-card .sheet-label .yield-pct.low{color:var(--warn)}.sheet-card .sheet-label .yield-pct.bad{color:var(--danger)}.sheet-card .sheet-label .pcount{color:var(--fg-4)}.sheet-card .sheet-label .sheet-repack-btn{background:var(--bg-3);border:1px solid var(--border-2);color:var(--fg-2);font-family:JetBrains Mono,monospace;padding:5px 12px;border-radius:6px;font-size:12px;cursor:pointer}.sheet-card .sheet-label .sheet-repack-btn:hover{background:var(--bg-4);color:var(--fg)}.sheet-card .sheet-veneer-bg{object-fit:fill;pointer-events:none;-webkit-user-select:none;user-select:none;z-index:0}.sheet-card .sheet-margin,.sheet-card .pp,.sheet-card .manual-sheet-remove{z-index:1}.sheet-card .pp.dragging{z-index:50}.sheet-veneer-ctl{position:relative;display:inline-flex}.sheet-veneer-btn{background:var(--bg-3);border:1px solid var(--border-2);color:var(--fg-2);font-family:JetBrains Mono,monospace;padding:5px 12px;border-radius:6px;font-size:12px;cursor:pointer}.sheet-veneer-btn:hover{background:var(--bg-4);color:var(--fg)}.sheet-veneer-pop{position:absolute;bottom:calc(100% + 8px);left:0;background:var(--bg-2);border:1px solid var(--border-2);border-radius:10px;padding:12px;min-width:240px;box-shadow:0 16px 48px #00000080;z-index:100;font-family:JetBrains Mono,monospace;font-size:12px;color:var(--fg-2)}.sheet-veneer-pop .vp-thumb{width:100%;height:80px;margin-bottom:10px;background-size:cover;background-position:center;background-color:var(--bg-3);border-radius:6px;border:1px solid var(--border-2)}.sheet-veneer-pop .vp-row{display:flex;align-items:center;gap:8px;margin:6px 0 10px}.sheet-veneer-pop .vp-row input[type=range]{flex:1}.sheet-veneer-pop .vp-actions{display:flex;gap:6px;flex-wrap:wrap}.sheet-veneer-pop .vp-actions .btn.sm{font-size:11px;padding:4px 10px}.sheet-veneer-pop .vp-actions .btn.sm.danger{color:var(--danger);border-color:var(--danger)}.sheet-veneer-pop .vp-msg{color:var(--fg-3);padding:4px 0 8px}.sheet-veneer-pop .vp-err{color:var(--danger);margin-top:8px;font-size:11px}.bar-stock{position:absolute;background:var(--pack-bar-bg);border:6px solid var(--pack-bar-border);border-radius:4px;box-shadow:0 16px 48px #0000004d}.bar-stock .bar-piece{height:100%;border-right:6px solid rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;color:#000000d9;cursor:pointer;font-family:JetBrains Mono,monospace;overflow:hidden;text-align:center;flex-direction:column;gap:14px}.bar-stock .bar-piece:hover{filter:brightness(1.08)}.bar-stock .bar-piece.selected{outline:12px solid var(--accent);outline-offset:-4px}.bar-stock .bar-piece .bn{font-weight:600;line-height:1}.bar-stock .bar-piece .bl{color:#0000008c;line-height:1}.bar-stock .bar-offcut{background-image:repeating-linear-gradient(45deg,var(--pack-offcut-lo),var(--pack-offcut-lo) 16px,var(--pack-offcut-hi) 16px,var(--pack-offcut-hi) 32px);display:flex;align-items:center;justify-content:center;color:var(--fg-4);font-family:JetBrains Mono,monospace;text-transform:uppercase}.bar-stock .bar-label{position:absolute;left:0;top:calc(100% + 60px);display:flex;gap:56px;align-items:baseline;font-family:JetBrains Mono,monospace;font-size:calc(13px * var(--inv-zoom, 1));color:var(--fg-3);white-space:nowrap}.bar-stock .bar-label .num{padding:14px 26px;background:var(--bg-3);border:4px solid var(--border-2);color:var(--fg);font-weight:600;border-radius:14px}.bar-stock .bar-label .yield-pct{color:var(--good)}.bar-stock .bar-label .yield-pct.low{color:var(--warn)}.bar-stock .bar-label .yield-pct.bad{color:var(--danger)}.unplaced-bin{position:absolute;padding:calc(24px * var(--inv-zoom, 1)) calc(32px * var(--inv-zoom, 1));background:#ff6b6b0f;border:calc(3px * var(--inv-zoom, 1)) dashed var(--danger);border-radius:24px}.unplaced-bin .ub-head{font-family:JetBrains Mono,monospace;font-size:calc(14px * var(--inv-zoom, 1));color:var(--danger);margin-bottom:calc(16px * var(--inv-zoom, 1));font-weight:500}.unplaced-bin .ub-grid{display:flex;flex-wrap:wrap;gap:48px;align-items:flex-start}.unplaced-bin .unplaced-pp{border:4px solid rgba(0,0,0,.4);display:flex;flex-direction:column;align-items:center;justify-content:center;color:#000000d9;cursor:pointer;overflow:hidden;font-family:JetBrains Mono,monospace;text-align:center;box-shadow:0 8px 24px #00000040}.unplaced-bin .unplaced-pp:hover{filter:brightness(1.08)}.unplaced-bin .unplaced-pp.selected{outline:12px solid var(--accent);outline-offset:-4px}.unplaced-bin .unplaced-pp .num{font-weight:600;line-height:1}.unplaced-bin .unplaced-pp .dim{color:#0000008c;margin-top:16px;line-height:1}.unplaced-bin .unplaced-pp .piece-name{opacity:.7;line-height:1;margin-top:4px}.pack-annot-overlay{pointer-events:none;z-index:5}.pack-annot{pointer-events:auto;cursor:default}.pack-annot:hover>rect:first-of-type,.pack-annot:hover>polygon:first-of-type,.pack-annot:hover>line:first-of-type{filter:brightness(.9)}.pack-text-draft{pointer-events:auto;box-sizing:content-box;z-index:6}.unplaced-shape{position:relative;flex-shrink:0;border:4px solid var(--danger);border-radius:6px;overflow:hidden}.unplaced-shape.poly{border:none;overflow:visible}.unplaced-shape svg{display:block}.up-label,.up-dim{display:block;line-height:1.2;font-family:JetBrains Mono,monospace;font-weight:700;color:#000000d9;white-space:nowrap}.up-dim{font-weight:500;color:#0000008c}.unplaced-shape.rect .up-label,.unplaced-shape.rect .up-dim,.unplaced-shape.linear .up-label,.unplaced-shape.linear .up-dim{position:absolute;left:10px}.unplaced-shape.rect .up-label,.unplaced-shape.linear .up-label{bottom:30px}.unplaced-shape.rect .up-dim,.unplaced-shape.linear .up-dim{bottom:10px}.up-overlay{position:absolute;bottom:10px;left:10px;pointer-events:none}.pack-toolbar{position:absolute;top:12px;left:12px;right:12px;z-index:4;display:flex;align-items:center;gap:10px;padding:8px 12px;background:var(--pack-toolbar-bg);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow-md);pointer-events:auto}.pack-toolbar .group{display:flex;align-items:center;gap:8px}.pack-toolbar .spacer{flex:1}.pack-toolbar .divider{width:1px;height:22px;background:var(--border)}.pack-toolbar .tb-btn{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border-radius:5px;background:var(--bg-3);border:1px solid var(--border);color:var(--fg-2);font-size:11px;cursor:pointer}.pack-toolbar .tb-btn:hover{background:var(--bg-4);color:var(--fg)}.pack-toolbar .tb-slider{display:inline-flex;align-items:center;gap:8px;padding:6px 12px;background:var(--bg-3);border:1px solid var(--border-2);border-radius:8px;font-size:12px;color:var(--fg-2);-webkit-user-select:none;user-select:none}.pack-toolbar .tb-slider input[type=range]{width:100px}.pack-toolbar .tb-slider .mono{color:var(--fg);min-width:38px;text-align:right}.pack-toolbar .stat{display:flex;flex-direction:column;align-items:flex-end;min-width:50px}.pack-toolbar .stat .sl{font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--fg-4)}.pack-toolbar .stat .sv{font-family:JetBrains Mono,monospace;font-size:13px;font-weight:500;color:var(--fg)}.pack-toolbar .stat .sv.warn{color:var(--warn)}.pack-toolbar .stat .sv.good{color:var(--good)}.pack-toolbar .stat .sv.danger{color:var(--danger)}.pack-stale-banner{position:absolute;top:64px;left:50%;transform:translate(-50%);z-index:4;display:inline-flex;align-items:center;gap:10px;padding:8px 14px;background:var(--bg-2);border:1px solid var(--warn);border-radius:6px;color:var(--fg);font-size:12px;box-shadow:var(--shadow-md)}.pack-stale-banner .dot{width:8px;height:8px;background:var(--warn);border-radius:50%;box-shadow:0 0 8px var(--warn)}.pack-toast{position:absolute;top:108px;left:50%;transform:translate(-50%);z-index:4;display:inline-flex;align-items:center;gap:10px;padding:8px 14px;background:var(--bg-2);border:1px solid var(--danger);border-radius:6px;color:var(--fg);font-size:12px;box-shadow:var(--shadow-md);max-width:520px;animation:pack-toast-in .18s ease-out}.pack-toast .dot{width:8px;height:8px;background:var(--danger);border-radius:50%;box-shadow:0 0 8px var(--danger);flex-shrink:0}.pack-toast .msg{line-height:1.4}.pack-toast .close{background:none;border:none;color:var(--fg-3);font-size:18px;line-height:1;cursor:pointer;padding:0 4px;margin-left:4px}.pack-toast .close:hover{color:var(--fg)}@keyframes pack-toast-in{0%{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%)}}.hover-card{position:absolute;z-index:5;background:var(--bg-2);border:1px solid var(--border-2);border-radius:6px;padding:10px 12px;min-width:240px;max-width:320px;box-shadow:var(--shadow-lg);pointer-events:none;font-size:11px}.hover-card .hc-head{display:flex;align-items:center;gap:8px;margin-bottom:8px;padding-bottom:6px;border-bottom:1px solid var(--border)}.hover-card .hc-head .sw{width:12px;height:12px;border-radius:3px}.hover-card .hc-head .nm{color:var(--fg);font-weight:500;flex:1}.hover-card .hc-head .tag{font-family:JetBrains Mono,monospace;font-size:9px;padding:2px 5px;background:var(--bg-3);color:var(--fg-3);border-radius:3px;letter-spacing:.06em}.hover-card .hc-row{display:flex;justify-content:space-between;gap:12px;margin-bottom:3px;color:var(--fg-3)}.hover-card .hc-row .v{color:var(--fg);text-align:right}.hover-card .hc-sub{margin-top:8px;padding-top:6px;border-top:1px solid var(--border);font-size:10px;color:var(--fg-4)}.pack-inspector{position:absolute;top:70px;right:14px;width:280px;z-index:5;background:var(--bg-2);border:1px solid var(--border-2);border-radius:7px;box-shadow:var(--shadow-lg);display:flex;flex-direction:column}.pack-inspector .inspector-head{display:flex;align-items:center;gap:8px;padding:10px 12px;border-bottom:1px solid var(--border)}.pack-inspector .inspector-head .sw{width:12px;height:12px;border-radius:3px}.pack-inspector .inspector-head .num{font-weight:500;color:var(--fg)}.pack-inspector .inspector-head .close{width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;border-radius:4px;color:var(--fg-3)}.pack-inspector .inspector-head .close:hover{background:var(--bg-3);color:var(--fg)}.pack-inspector .inspector-body{padding:12px;max-height:calc(100vh - 220px);overflow-y:auto}.pack-inspector .inspector-body .row{display:flex;justify-content:space-between;gap:12px;margin-bottom:6px;font-size:11px}.pack-inspector .inspector-body .row .k{color:var(--fg-3)}.pack-inspector .inspector-body .row .v{color:var(--fg);text-align:right}.pack-inspector .inspector-body .row .code-input{width:140px;padding:3px 8px;background:var(--bg-3);border:1px solid var(--border);border-radius:4px;color:var(--fg);text-align:right;font-size:12px;font-weight:600}.pack-inspector .inspector-body .row .code-input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px #7f9ef026}.pack-inspector .inspector-body .row .code-input::placeholder{color:var(--fg-4);font-weight:400}.pack-inspector .dim-edit-block{margin-top:10px;padding-top:10px;border-top:1px solid var(--border)}.pack-inspector .dim-edit-head{font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--fg-3);margin-bottom:8px}.pack-inspector .dim-edit-head .warn-note{margin-left:6px;color:var(--warn);text-transform:none;letter-spacing:0}.pack-inspector .input-row{display:flex;gap:8px}.pack-inspector .input-row label{flex:1;display:flex;flex-direction:column;gap:4px;font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--fg-3)}.pack-inspector .input-row input{background:var(--bg-3);border:1px solid var(--border);color:var(--fg);border-radius:4px;padding:5px 7px;font-family:JetBrains Mono,monospace;font-size:12px}.pack-inspector .input-row input:focus{outline:none;border-color:var(--accent)}.pack-inspector .allow-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:6px;align-items:center;justify-items:center}.pack-inspector .allow-grid .allow-cell{display:flex;flex-direction:column;align-items:center;gap:3px;font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--fg-3)}.pack-inspector .allow-grid .allow-cell input{background:var(--bg-3);border:1px solid var(--border);color:var(--fg);border-radius:4px;padding:4px 6px;font-family:JetBrains Mono,monospace;font-size:12px;width:64px;text-align:center}.pack-inspector .allow-grid .allow-cell input:focus{outline:none;border-color:var(--accent)}.pack-inspector .allow-piece-icon{font-size:32px;color:var(--fg-3);line-height:1}.pack-inspector .allow-presets{display:flex;gap:6px;margin-top:8px}.pack-inspector .allow-presets .btn{flex:1;font-size:11px}.pack-inspector .edge-toggle{background:var(--bg-3);border:1px solid var(--border);color:var(--fg-3);border-radius:4px;padding:6px 8px;font-size:10px;letter-spacing:.06em;text-transform:uppercase;cursor:pointer;min-width:64px;min-height:28px;font-family:inherit}.pack-inspector .edge-toggle:hover{background:var(--bg-2);color:var(--fg)}.pack-inspector .edge-toggle.active{background:var(--warn);border-color:var(--warn);color:#1a1a1a;font-weight:600}.pack-inspector .edge-band-rot-note{font-size:10px;color:var(--warn);margin-bottom:6px}.pack-inspector .inspector-footer{display:flex;gap:6px;padding:10px 12px;border-top:1px solid var(--border)}.pack-inspector .inspector-footer .btn{padding:5px 10px;font-size:11px}.yield-stage .zoom-controls{position:absolute;right:14px;bottom:14px;display:flex;flex-direction:column;align-items:center;gap:4px;z-index:3;background:var(--bg-2);border:1px solid var(--border);border-radius:6px;padding:4px}.yield-stage .zoom-controls button{width:26px;height:26px;display:inline-flex;align-items:center;justify-content:center;color:var(--fg-3);border-radius:4px}.yield-stage .zoom-controls button:hover{background:var(--bg-3);color:var(--fg)}.yield-stage .zoom-controls .v{font-size:10px;color:var(--fg-3);padding:2px 0}.sheet-yield-summary{padding:12px 16px;border-bottom:1px solid var(--border);background:var(--bg-2)}.sheet-yield-summary .ss-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.sheet-yield-summary .ss-head .t{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--fg-3)}.sheet-yield-summary .ss-row{display:flex;justify-content:space-between;gap:8px;margin-bottom:4px;font-size:11px}.sheet-yield-summary .ss-row .l{color:var(--fg-3)}.sheet-yield-summary .ss-row .v{color:var(--fg);font-family:JetBrains Mono,monospace}.sheet-yield-summary .ss-row .v.warn{color:var(--warn)}.sheet-yield-summary .ss-row .v.good{color:var(--good)}.canvas-stage.tool-text{cursor:text}.text-props-bar{position:absolute;top:12px;left:50%;transform:translate(-50%);background:var(--bg-2);border:1px solid var(--border);border-radius:6px;padding:6px;display:flex;gap:4px;align-items:center;box-shadow:var(--shadow-md);z-index:11;white-space:nowrap}.text-props-bar select,.text-props-bar input[type=number]{background:var(--bg-3);border:1px solid var(--border);border-radius:4px;padding:4px 6px;font-size:11px;color:var(--fg);outline:none;width:auto}.text-props-bar input[type=number]{width:48px;text-align:center}.text-props-bar select{width:110px}.text-props-bar input[type=color]{width:28px;height:26px;padding:0 2px;border:1px solid var(--border);border-radius:4px;background:var(--bg-3);cursor:pointer}.text-props-bar .snap{padding:5px 8px;font-size:12px;color:var(--fg-3);border-radius:4px;display:inline-flex;align-items:center;cursor:pointer;background:none;border:none;line-height:1}.text-props-bar .snap:hover{background:var(--bg-3);color:var(--fg)}.text-props-bar .snap.on{background:var(--accent-soft);color:var(--accent)}.text-props-bar-divider{width:1px;align-self:stretch;background:var(--border);margin:0 2px}.text-draft-textarea{position:absolute;background:transparent;border:1px dashed var(--accent);border-radius:2px;padding:0 4px;outline:none;resize:none;overflow:hidden;min-width:60px;z-index:5;line-height:1.25;white-space:pre}@media print{body>*{display:none!important}.yield-view{display:flex!important;flex-direction:column}.yield-toolbar,.rpanel,.lpanel,.topbar,.sheet-tabs,.tb-btn,.edit-repack-btn{display:none!important}.sheet-card-wrap{page-break-after:always;break-after:page}.pp .num{font-size:clamp(14px,3vw,28px)!important}.cut-list-table{display:table!important;font-size:11pt;width:100%;margin-top:8pt}}
