:root{--gray-0: #ffffff;--gray-50: #f5f7fa;--gray-100: #edf1f5;--gray-200: #dde3ea;--gray-300: #c6cfd9;--gray-400: #9aa5b1;--gray-500: #6e7a88;--gray-600: #55616e;--gray-700: #3a434d;--gray-800: #262d35;--gray-900: #171c22;--gray-950: #0e1216;--brand-700: #0f5039;--brand-600: #17654a;--brand-500: #1f7a5a;--brand-400: #2e9c74;--brand-300: #3ab287}:root{color-scheme:light;--bg: #f5f7fa;--bg-elevated: #ffffff;--bg-sunken: #edf1f5;--surface: #ffffff;--surface-hover: #eef2f7;--text: #16202b;--text-muted: #55616e;--text-inverse: #ffffff;--border: #dde3ea;--border-strong: #b9c3ce;--focus-ring: #1e5fd0;--accent: #17654a;--accent-hover: #0f5039;--accent-text: #ffffff;--accent-soft: #e3f1ea;--danger: #c02626;--danger-bg: #fdecec;--warning: #9a5b00;--warning-bg: #fff4e0;--success: #15704e;--success-bg: #e3f3ec;--info: #1b5fa8;--info-bg: #e6f0fb;--sheet-bg: #ffffff;--sheet-border: #3a434d;--waste-hatch: #b9c2cc;--offcut-hatch: #8fbfac;--cut-line: #6e7a88;--cut-line-active: #c02626;--dimension-line: #7a8794;--part-stroke: #4b5665;--part-text: #1f2933;--overlay: rgba(15, 20, 26, .45);--selection-bg: rgba(23, 101, 74, .14);--scrollbar-thumb: #c6cfd9;--scrollbar-track: transparent;--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-5: 24px;--sp-6: 32px;--font-sans: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif;--font-mono: ui-monospace, "Cascadia Mono", "Segoe UI Mono", Consolas, "Liberation Mono", "Courier New", monospace;--fs-xs: 11px;--fs-sm: 12px;--fs-md: 14px;--fs-lg: 16px;--fs-xl: 20px;--fs-2xl: 28px;--lh-tight: 1.25;--lh-normal: 1.5;--fs-input: var(--fs-md);--radius-sm: 4px;--radius-md: 6px;--radius-lg: 10px;--shadow-sm: 0 1px 2px rgba(16, 24, 32, .08);--shadow-md: 0 4px 12px rgba(16, 24, 32, .12);--shadow-lg: 0 12px 32px rgba(16, 24, 32, .18);--safe-top: env(safe-area-inset-top, 0px);--safe-right: env(safe-area-inset-right, 0px);--safe-bottom: env(safe-area-inset-bottom, 0px);--safe-left: env(safe-area-inset-left, 0px);--header-h: 52px;--sidebar-w: 420px;--sidebar-min: 320px;--sidebar-max: 720px;--row-h: 30px;--control-h: 30px;--z-header: 100;--z-sidebar: 200;--z-modal: 1000;--z-tooltip: 1100;--t-fast: .12s;--t-med: .2s}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){color-scheme:dark;--bg: #0e1216;--bg-elevated: #171c22;--bg-sunken: #0a0d11;--surface: #171c22;--surface-hover: #1f262e;--text: #e7edf3;--text-muted: #a3aeba;--text-inverse: #0b1116;--border: #2b333c;--border-strong: #3c4651;--focus-ring: #6fa5ff;--accent: #2e9c74;--accent-hover: #3ab287;--accent-text: #07120d;--accent-soft: #12281f;--danger: #f07070;--danger-bg: #341a1c;--warning: #e3a44a;--warning-bg: #33260f;--success: #3aae84;--success-bg: #10281f;--info: #7fb0ff;--info-bg: #12203a;--sheet-bg: #1b2127;--sheet-border: #8a96a2;--waste-hatch: #3e4954;--offcut-hatch: #2f6b55;--cut-line: #8a96a2;--cut-line-active: #f07070;--dimension-line: #7e8a96;--part-stroke: #333b44;--part-text: #1f2933;--overlay: rgba(0, 0, 0, .62);--selection-bg: rgba(46, 156, 116, .2);--scrollbar-thumb: #3c4651;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .5);--shadow-md: 0 4px 12px rgba(0, 0, 0, .55);--shadow-lg: 0 14px 34px rgba(0, 0, 0, .6)}}:root[data-theme=dark]{color-scheme:dark;--bg: #0e1216;--bg-elevated: #171c22;--bg-sunken: #0a0d11;--surface: #171c22;--surface-hover: #1f262e;--text: #e7edf3;--text-muted: #a3aeba;--text-inverse: #0b1116;--border: #2b333c;--border-strong: #3c4651;--focus-ring: #6fa5ff;--accent: #2e9c74;--accent-hover: #3ab287;--accent-text: #07120d;--accent-soft: #12281f;--danger: #f07070;--danger-bg: #341a1c;--warning: #e3a44a;--warning-bg: #33260f;--success: #3aae84;--success-bg: #10281f;--info: #7fb0ff;--info-bg: #12203a;--sheet-bg: #1b2127;--sheet-border: #8a96a2;--waste-hatch: #3e4954;--offcut-hatch: #2f6b55;--cut-line: #8a96a2;--cut-line-active: #f07070;--dimension-line: #7e8a96;--part-stroke: #333b44;--part-text: #1f2933;--overlay: rgba(0, 0, 0, .62);--selection-bg: rgba(46, 156, 116, .2);--scrollbar-thumb: #3c4651;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .5);--shadow-md: 0 4px 12px rgba(0, 0, 0, .55);--shadow-lg: 0 14px 34px rgba(0, 0, 0, .6)}:root[data-theme=light]{color-scheme:light}@media(max-width:768px){:root{--header-h: 48px;--row-h: 40px;--control-h: 40px}}@media(pointer:coarse){:root{--row-h: 40px;--control-h: 40px;--fs-input: 16px}}*,*:before,*:after{box-sizing:border-box}*{margin:0}html{-moz-text-size-adjust:100%;-webkit-text-size-adjust:100%;text-size-adjust:100%;height:100%}body{height:100%;min-height:100dvh;font-family:var(--font-sans);font-size:var(--fs-md);line-height:var(--lh-normal);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow-x:hidden}#root{height:100%;isolation:isolate}img,svg,video,canvas{display:block;max-width:100%}input,button,textarea,select{font:inherit;color:inherit}button{background:none;border:none;cursor:pointer}button,a,label,summary,[role=button]{touch-action:manipulation}button:disabled,input:disabled,select:disabled,textarea:disabled{cursor:not-allowed;opacity:.55}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}ul,ol{list-style:none;padding:0}fieldset{border:none;padding:0;min-width:0}hr{border:none;border-top:1px solid var(--border);margin:var(--sp-3) 0}h1,h2,h3,h4{line-height:var(--lh-tight);font-weight:600;color:var(--text)}h1{font-size:var(--fs-xl)}h2{font-size:var(--fs-lg)}h3{font-size:var(--fs-md)}h4{font-size:var(--fs-sm);text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted)}small{font-size:var(--fs-sm);color:var(--text-muted)}code,kbd,samp,pre{font-family:var(--font-mono);font-size:.92em}kbd{display:inline-block;padding:1px 5px;border:1px solid var(--border-strong);border-bottom-width:2px;border-radius:var(--radius-sm);background:var(--bg-sunken);font-size:var(--fs-xs);line-height:1.4;color:var(--text-muted);white-space:nowrap}a{color:var(--accent);text-decoration-thickness:1px;text-underline-offset:2px}a:hover{color:var(--accent-hover)}::selection{background:var(--selection-bg);color:var(--text)}:focus{outline:none}:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px;border-radius:var(--radius-sm)}[data-focus-inset]:focus-visible{outline-offset:-2px}*{scrollbar-width:thin;scrollbar-color:var(--scrollbar-thumb) var(--scrollbar-track)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);min-height:var(--control-h);padding:0 var(--sp-3);border:1px solid var(--border-strong);border-radius:var(--radius-md);background:var(--surface);color:var(--text);font-size:var(--fs-md);font-weight:500;line-height:1;white-space:nowrap;transition:background var(--t-fast) ease-out,border-color var(--t-fast) ease-out,color var(--t-fast) ease-out}.btn:hover:not(:disabled){background:var(--surface-hover);border-color:var(--text-muted)}.btn:active:not(:disabled){transform:translateY(1px)}.btn--primary{background:var(--accent);border-color:var(--accent);color:var(--accent-text)}.btn--primary:hover:not(:disabled){background:var(--accent-hover);border-color:var(--accent-hover)}.btn--ghost{background:transparent;border-color:transparent;color:var(--text-muted)}.btn--ghost:hover:not(:disabled){background:var(--surface-hover);border-color:transparent;color:var(--text)}.btn--danger{background:var(--danger-bg);border-color:var(--danger);color:var(--danger)}.btn--danger:hover:not(:disabled){background:var(--danger);border-color:var(--danger);color:var(--text-inverse)}.btn--sm{min-height:24px;padding:0 var(--sp-2);font-size:var(--fs-sm);border-radius:var(--radius-sm)}.btn--block{width:100%}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:var(--control-h);height:var(--control-h);padding:0;border:1px solid transparent;border-radius:var(--radius-md);background:transparent;color:var(--text-muted);font-size:var(--fs-md);line-height:1;transition:background var(--t-fast) ease-out,color var(--t-fast) ease-out}.icon-btn:hover:not(:disabled){background:var(--surface-hover);color:var(--text)}.icon-btn[aria-pressed=true]{background:var(--accent-soft);border-color:var(--accent);color:var(--accent)}.field{display:flex;flex-direction:column;gap:var(--sp-1);min-width:0}.field__label{font-size:var(--fs-sm);font-weight:500;color:var(--text-muted)}.field__help{font-size:var(--fs-xs);color:var(--text-muted)}.field__error{font-size:var(--fs-xs);font-weight:500;color:var(--danger)}.input,.select,textarea.input{width:100%;min-height:var(--control-h);padding:0 var(--sp-2);border:1px solid var(--border-strong);border-radius:var(--radius-md);background:var(--bg-elevated);color:var(--text);font-size:var(--fs-input);transition:border-color var(--t-fast) ease-out,box-shadow var(--t-fast) ease-out}textarea.input{padding:var(--sp-2);line-height:var(--lh-normal);resize:vertical}.input::placeholder{color:var(--text-muted);opacity:.75}.input:hover:not(:disabled),.select:hover:not(:disabled){border-color:var(--text-muted)}.input:focus-visible,.select:focus-visible{outline:2px solid var(--focus-ring);outline-offset:0;border-color:var(--focus-ring)}.input[aria-invalid=true],.select[aria-invalid=true]{border-color:var(--danger);background:var(--danger-bg)}.input--num{text-align:end;font-variant-numeric:tabular-nums}.select{appearance:none;padding-right:var(--sp-5);background-image:linear-gradient(45deg,transparent 50%,currentColor 50%),linear-gradient(135deg,currentColor 50%,transparent 50%);background-position:calc(100% - 14px) calc(50% + 1px),calc(100% - 9px) calc(50% + 1px);background-size:5px 5px,5px 5px;background-repeat:no-repeat;cursor:pointer}.checkbox{display:inline-flex;align-items:center;gap:var(--sp-2);font-size:var(--fs-md);cursor:pointer;user-select:none}.checkbox input[type=checkbox],.checkbox input[type=radio]{flex:none;width:16px;height:16px;margin:0;accent-color:var(--accent);cursor:pointer}.checkbox:has(input:disabled){cursor:not-allowed;opacity:.6}.switch{position:relative;flex:none;width:34px;height:18px;padding:0;border:1px solid var(--border-strong);border-radius:999px;background:var(--bg-sunken);transition:background var(--t-fast) ease-out,border-color var(--t-fast) ease-out}.switch:after{content:"";position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:var(--text-muted);transition:transform var(--t-fast) ease-out,background var(--t-fast) ease-out}.switch[aria-checked=true]{background:var(--accent);border-color:var(--accent)}.switch[aria-checked=true]:after{transform:translate(16px);background:var(--accent-text)}.card{border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-sm);padding:var(--sp-4);min-width:0}.card--flat{box-shadow:none}.chip{display:inline-flex;align-items:center;gap:var(--sp-1);max-width:100%;padding:2px var(--sp-2);border:1px solid var(--border);border-radius:999px;background:var(--bg-sunken);color:var(--text-muted);font-size:var(--fs-xs);line-height:1.6;white-space:nowrap}.badge{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;padding:0 5px;border-radius:999px;background:var(--bg-sunken);color:var(--text-muted);font-size:var(--fs-xs);font-weight:600;font-variant-numeric:tabular-nums;line-height:1}.badge--danger{background:var(--danger);color:var(--text-inverse)}.badge--warning{background:var(--warning);color:var(--text-inverse)}.badge--accent{background:var(--accent);color:var(--accent-text)}.notice{display:flex;align-items:flex-start;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border:1px solid var(--border);border-left-width:3px;border-radius:var(--radius-md);font-size:var(--fs-sm)}.notice--danger{border-color:var(--danger);background:var(--danger-bg);color:var(--danger)}.notice--warning{border-color:var(--warning);background:var(--warning-bg);color:var(--warning)}.notice--info{border-color:var(--info);background:var(--info-bg);color:var(--info)}.notice--success{border-color:var(--success);background:var(--success-bg);color:var(--success)}.toolbar{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap;min-width:0}.stack{display:flex;flex-direction:column;gap:var(--sp-3);min-width:0}.stack--tight{gap:var(--sp-2)}.row{display:flex;align-items:center;gap:var(--sp-2);min-width:0}.row--between{justify-content:space-between}.spacer{flex:1 1 auto;min-width:0}.scroll-x{overflow-x:auto;max-width:100%}.table{width:100%;border-collapse:collapse;font-size:var(--fs-sm)}.table th,.table td{padding:var(--sp-1) var(--sp-2);border-bottom:1px solid var(--border);text-align:start;vertical-align:middle}.table th{position:sticky;top:0;z-index:1;background:var(--bg-sunken);color:var(--text-muted);font-size:var(--fs-xs);font-weight:600;text-transform:uppercase;letter-spacing:.03em;white-space:nowrap}.table td.num,.table th.num{text-align:end;font-variant-numeric:tabular-nums}.table tbody tr:hover{background:var(--surface-hover)}.table--zebra tbody tr:nth-child(2n){background:var(--bg-sunken)}.table--zebra tbody tr:nth-child(2n):hover{background:var(--surface-hover)}.table tfoot td{font-weight:600;border-top:1px solid var(--border-strong);border-bottom:none}.tabs{display:flex;align-items:stretch;gap:var(--sp-1);border-bottom:1px solid var(--border);overflow-x:auto;scrollbar-width:none}.tab{display:inline-flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border:none;border-bottom:2px solid transparent;background:transparent;color:var(--text-muted);font-size:var(--fs-md);font-weight:500;white-space:nowrap;transition:color var(--t-fast) ease-out,border-color var(--t-fast) ease-out}.tab:hover{color:var(--text)}.tab[aria-selected=true]{color:var(--accent);border-bottom-color:var(--accent)}.tab:focus-visible{outline-offset:-2px}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--sp-3);padding:var(--sp-6) var(--sp-4);text-align:center;color:var(--text-muted)}.empty-state h2{color:var(--text)}.empty-state p{max-width:46ch;font-size:var(--fs-md)}.spinner{display:inline-block;width:16px;height:16px;border:2px solid var(--border-strong);border-top-color:var(--accent);border-radius:50%;animation:pedra-spin .7s linear infinite}@keyframes pedra-spin{to{transform:rotate(360deg)}}.progress{position:relative;width:100%;height:8px;border-radius:999px;background:var(--bg-sunken);border:1px solid var(--border);overflow:hidden}.progress__bar{display:block;height:100%;width:0;border-radius:999px;background:var(--accent);transition:width var(--t-med) ease-out}.progress--indeterminate .progress__bar{width:35%;animation:pedra-slide 1.2s ease-in-out infinite}@keyframes pedra-slide{0%{transform:translate(-100%)}to{transform:translate(300%)}}[data-tooltip]{position:relative}[data-tooltip]:after{content:attr(data-tooltip);position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%) translateY(2px);z-index:var(--z-tooltip);max-width:260px;width:max-content;padding:var(--sp-1) var(--sp-2);border-radius:var(--radius-sm);background:var(--text);color:var(--bg-elevated);font-family:var(--font-sans);font-size:var(--fs-xs);font-weight:400;line-height:1.4;text-align:center;text-transform:none;letter-spacing:normal;white-space:normal;pointer-events:none;opacity:0;visibility:hidden;box-shadow:var(--shadow-md);transition:opacity var(--t-fast) ease-out,transform var(--t-fast) ease-out,visibility var(--t-fast)}[data-tooltip]:hover:after,[data-tooltip]:focus-visible:after{opacity:1;visibility:visible;transform:translate(-50%) translateY(0)}[data-tooltip=""]:after,[data-tooltip][data-tooltip-off]:after{content:none}[data-tooltip][data-tooltip-pos=bottom]:after{bottom:auto;top:calc(100% + 6px)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);clip-path:inset(50%);white-space:nowrap;border:0}.truncate{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tabular{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}.mono{font-family:var(--font-mono)}.muted{color:var(--text-muted)}.text-danger{color:var(--danger)}.text-warning{color:var(--warning)}.text-success{color:var(--success)}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}@media(max-width:768px){body{font-size:var(--fs-md)}.btn{padding:0 var(--sp-3)}}@media(hover:none){[data-tooltip]:hover:after{opacity:0;visibility:hidden}[data-tooltip]:focus-visible:after{opacity:1;visibility:visible}}@media(pointer:coarse){.checkbox input[type=checkbox],.checkbox input[type=radio]{width:20px;height:20px}.switch{width:44px;height:24px}.switch:after{width:18px;height:18px}.switch[aria-checked=true]:after{transform:translate(20px)}}@media print{:root,:root[data-theme=dark]{color-scheme:light;--bg: #ffffff;--bg-elevated: #ffffff;--bg-sunken: #ffffff;--surface: #ffffff;--surface-hover: #ffffff;--text: #000000;--text-muted: #333333;--text-inverse: #ffffff;--border: #999999;--border-strong: #666666;--accent: #17654a;--accent-text: #ffffff;--danger: #a01f1f;--danger-bg: #ffffff;--warning: #7a4800;--warning-bg: #ffffff;--success: #15704e;--success-bg: #ffffff;--info: #14508f;--info-bg: #ffffff;--sheet-bg: #ffffff;--sheet-border: #000000;--waste-hatch: #999999;--offcut-hatch: #6f6f6f;--cut-line: #000000;--cut-line-active: #000000;--dimension-line: #444444;--part-stroke: #000000;--part-text: #14181f;--shadow-sm: none;--shadow-md: none;--shadow-lg: none}*{-webkit-print-color-adjust:exact;print-color-adjust:exact}html,body,#root{height:auto;min-height:0;overflow:visible;background:#fff}.no-print,.app-header,.header-root,.app-sidebar,.sidebar-root,.res-tabs,.res-toolbar,.tabs,.toast-region,button,.btn,.icon-btn{display:none!important}.print-only{display:block!important}.res-sheet{break-inside:avoid;page-break-inside:avoid;break-after:page;page-break-after:always}.res-sheet:last-child{break-after:auto;page-break-after:auto}.card{border-color:var(--border);box-shadow:none;break-inside:avoid}table{break-inside:auto}tr{break-inside:avoid;page-break-inside:avoid}thead{display:table-header-group}tfoot{display:table-footer-group}.table th{position:static;background:#fff;color:#000}h2,h3{break-after:avoid;page-break-after:avoid}a[href]:after{content:""}[data-tooltip]:after{content:none!important}}@page{size:A4 landscape;margin:10mm}.app-shell{display:grid;height:100%;min-height:100dvh;grid-template-rows:var(--header-h) minmax(0,1fr);grid-template-columns:var(--sidebar-w, 420px) minmax(0,1fr);grid-template-areas:"header header" "sidebar main";background:var(--bg);overflow:hidden;padding-right:var(--safe-right);padding-bottom:var(--safe-bottom);padding-left:var(--safe-left)}.app-shell:not(.is-sidebar-open){grid-template-columns:0 minmax(0,1fr)}.app-shell:not(.is-sidebar-open) .sidebar-root{display:none}.app-main{grid-area:main;min-width:0;min-height:0;overflow:hidden}.app-main:focus{outline:none}.app-skip{position:absolute;top:var(--sp-2);left:var(--sp-2);z-index:calc(var(--z-header) + 1);padding:var(--sp-2) var(--sp-3);border-radius:var(--radius-md);background:var(--accent);color:var(--accent-text);font-size:var(--fs-sm);font-weight:600;text-decoration:none;transform:translateY(-200%);transition:transform var(--t-fast) ease-out}.app-skip:focus-visible{transform:translateY(0);color:var(--accent-text)}.app-backdrop{display:none}.header-root{grid-area:header;z-index:var(--z-header);display:flex;align-items:center;gap:var(--sp-2);min-width:0;padding:0 var(--sp-3);border-bottom:1px solid var(--border);background:var(--bg-elevated);box-shadow:var(--shadow-sm)}.header-burger{position:relative;flex:none}.header-burger__badge{position:absolute;top:-2px;right:-2px;min-width:16px;height:16px;padding:0 3px;border-radius:999px;background:var(--danger);color:var(--text-inverse);font-size:10px;font-weight:700;line-height:16px;text-align:center}.header-brand{display:flex;align-items:center;gap:var(--sp-2);flex:none;min-width:0;padding-right:var(--sp-2)}.header-brand__mark{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:var(--radius-sm);background:var(--accent);color:var(--accent-text);font-size:var(--fs-md);line-height:1}.header-brand__name{font-size:var(--fs-md);font-weight:700;letter-spacing:-.01em;white-space:nowrap;color:var(--text)}.header-name{flex:1 1 220px;min-width:0;max-width:320px}.header-name__input{width:100%;height:calc(var(--control-h) - 2px);background:var(--bg-sunken);font-weight:600}.header-name__input:hover:not(:focus){background:var(--surface-hover)}.header-actions{display:flex;align-items:center;gap:var(--sp-1);margin-left:auto;min-width:0}.header-sep{width:1px;height:22px;margin:0 var(--sp-1);background:var(--border)}.header-menu{position:relative}.header-menu__btn{gap:var(--sp-1);white-space:nowrap}.header-menu__btn.is-open{background:var(--surface-hover);border-color:var(--border-strong)}.header-menu__caret{font-size:10px;color:var(--text-muted)}.header-menu__list{position:absolute;top:calc(100% + 4px);left:0;z-index:var(--z-modal);min-width:240px;padding:var(--sp-1);border:1px solid var(--border);border-radius:var(--radius-md);background:var(--bg-elevated);box-shadow:var(--shadow-lg);list-style:none}.header-menu__item{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);width:100%;padding:var(--sp-2) var(--sp-2);border-radius:var(--radius-sm);background:none;color:var(--text);font-size:var(--fs-sm);text-align:left}.header-menu__item:hover:not(:disabled){background:var(--surface-hover)}.header-menu__item-label{white-space:nowrap}.header-menu__hint{flex:none;color:var(--text-muted)}.header-menu__sep{height:1px;margin:var(--sp-1) 0;background:var(--border)}.header-save{display:flex;align-items:center;gap:var(--sp-1);flex:none;padding-left:var(--sp-2);font-size:var(--fs-xs);color:var(--text-muted);white-space:nowrap}.header-save__dot{width:8px;height:8px;border-radius:50%;background:var(--border-strong)}.header-save.is-saving .header-save__dot{background:var(--warning)}.header-save.is-saved .header-save__dot{background:var(--success)}.header-save.is-error{color:var(--danger)}.header-save.is-error .header-save__dot{background:var(--danger)}.sidebar-root{grid-area:sidebar;position:relative;z-index:var(--z-sidebar);display:flex;flex-direction:column;min-width:0;min-height:0;border-right:1px solid var(--border);background:var(--bg-elevated)}.sidebar-head{display:none;align-items:center;justify-content:space-between;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border-bottom:1px solid var(--border)}.sidebar-head__title{margin:0;font-size:var(--fs-sm);font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--text-muted)}.sidebar-body{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain}.sidebar-notice{margin:var(--sp-2);align-items:center;justify-content:space-between}.sidebar-section{position:relative}.sidebar-section__toggle{position:absolute;top:var(--sp-2);right:var(--sp-2);z-index:2;display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;padding:0;border-radius:var(--radius-sm);background:none;color:var(--text-muted);font-size:var(--fs-sm);line-height:1}.sidebar-section__toggle:hover{background:var(--surface-hover);color:var(--text)}.sidebar-section.is-collapsed .grid-panel>*:not(.grid-panel__head),.sidebar-section.is-collapsed .opt-panel>*:not(.opt-panel__title){display:none}.sidebar-section.is-collapsed .grid-panel,.sidebar-section.is-collapsed .opt-panel{padding-bottom:var(--sp-2)}.sidebar-calc{flex:none;display:flex;flex-direction:column;gap:var(--sp-2);padding:var(--sp-3);border-top:1px solid var(--border);background:var(--bg-elevated);box-shadow:0 -1px 0 var(--border)}.sidebar-calc__errors{flex-direction:column;align-items:stretch;gap:var(--sp-1);max-height:168px;overflow-y:auto}.sidebar-calc__errors-title{font-size:var(--fs-sm)}.sidebar-calc__list{margin:0;padding-left:var(--sp-4);list-style:disc;font-size:var(--fs-xs);line-height:1.45}.sidebar-calc__stale{margin:0;font-size:var(--fs-xs);color:var(--warning)}.sidebar-calc__running{display:flex;flex-direction:column;gap:var(--sp-2)}.sidebar-calc__progress{width:100%}.sidebar-calc__button{gap:var(--sp-2);height:44px;font-size:var(--fs-lg);font-weight:700;letter-spacing:.04em}.sidebar-calc__kbd{border-color:transparent;background:transparent;color:inherit;opacity:.75;font-size:var(--fs-xs);font-weight:400}.sidebar-resizer{position:absolute;top:0;right:-3px;bottom:0;width:7px;cursor:col-resize;background:transparent;touch-action:none}.sidebar-resizer:after{content:"";position:absolute;top:0;bottom:0;left:3px;width:1px;background:transparent;transition:background var(--t-fast) ease-out}.sidebar-resizer:hover:after,.sidebar-resizer:focus-visible:after{background:var(--accent)}.sidebar-resizer:focus-visible{outline:2px solid var(--focus-ring);outline-offset:-2px}.toast-region{--toast-gap-bottom: 48px;position:fixed;right:calc(var(--sp-4) + var(--safe-right));bottom:calc(var(--sp-3) + var(--safe-bottom) + var(--toast-gap-bottom));z-index:var(--z-tooltip);display:flex;flex-direction:column;gap:var(--sp-2);max-width:min(420px,calc(100vw - var(--sp-6)));pointer-events:none}.toast{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-2) var(--sp-2) var(--sp-3);border:1px solid var(--border);border-left-width:3px;border-radius:var(--radius-md);background:var(--bg-elevated);box-shadow:var(--shadow-lg);font-size:var(--fs-sm);color:var(--text);pointer-events:auto;animation:app-toast-in var(--t-med) ease-out}.toast__text{flex:1 1 auto;min-width:0}.toast__close{flex:none}.toast--info{border-left-color:var(--info)}.toast--success{border-left-color:var(--success)}.toast--danger{border-left-color:var(--danger);color:var(--danger)}@keyframes app-toast-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@media(max-width:768px){.app-shell,.app-shell:not(.is-sidebar-open){--header-h: 88px;grid-template-columns:minmax(0,1fr);grid-template-areas:"header" "main"}.sidebar-root{position:fixed;top:var(--header-h);bottom:0;left:0;width:min(92vw,460px);padding-left:var(--safe-left);border-right:1px solid var(--border);box-shadow:var(--shadow-lg);transform:translate(-100%);transition:transform var(--t-med) ease-out}.app-shell.is-sidebar-open .sidebar-root{display:flex;transform:translate(0)}.sidebar-head{display:flex}.sidebar-resizer{display:none}.app-shell.is-sidebar-open .app-backdrop{display:block;position:fixed;top:var(--header-h);right:0;bottom:0;left:0;z-index:calc(var(--z-sidebar) - 1);background:var(--overlay)}.sidebar-calc{padding-bottom:calc(var(--sp-3) + var(--safe-bottom))}.header-brand__name,.header-hide-sm{display:none}.header-root{flex-wrap:wrap;align-content:center;row-gap:0;padding:0 var(--sp-2)}.header-name{flex:1 1 auto;max-width:none}.header-save__text{display:none}.header-actions{order:1;flex:1 0 100%;justify-content:flex-start;margin-left:0;padding-block:2px var(--sp-1);min-width:0;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none}.header-actions::-webkit-scrollbar{display:none}.header-actions>*{flex:none}.header-menu__btn{padding-inline:var(--sp-2)}.header-sep{margin:0}.header-menu__list{position:fixed;top:var(--header-h);right:calc(var(--sp-2) + var(--safe-right));left:calc(var(--sp-2) + var(--safe-left));min-width:0;max-height:calc(100dvh - var(--header-h) - var(--sp-4) - var(--safe-bottom));overflow-y:auto}.header-menu__item{padding-block:var(--sp-3)}.toast-region{--toast-gap-bottom: 88px;right:calc(var(--sp-2) + var(--safe-right));left:calc(var(--sp-2) + var(--safe-left));bottom:calc(var(--sp-2) + var(--safe-bottom) + var(--toast-gap-bottom));max-width:none}}@media(min-width:769px)and (max-height:480px){.app-shell{--header-h: 44px}.sidebar-calc{padding-block:var(--sp-2)}.sidebar-calc__button{height:38px}.sidebar-calc__errors{max-height:84px}}@media print{.app-shell{display:block;height:auto;min-height:0;overflow:visible}.app-main{overflow:visible}.app-backdrop,.toast-region,.app-skip{display:none!important}}.grid-panel{display:flex;flex-direction:column;gap:var(--sp-2);padding:var(--sp-3);border-bottom:1px solid var(--border);background:var(--surface)}.grid-panel__head{display:flex;align-items:baseline;flex-wrap:wrap;gap:var(--sp-2)}.grid-panel__title{margin:0;font-size:var(--fs-md);font-weight:600;letter-spacing:.02em;text-transform:uppercase;color:var(--text)}.grid-panel__count{font-size:var(--fs-xs);color:var(--text-muted);font-variant-numeric:tabular-nums}.grid-panel__unit{display:inline-flex;align-items:center;gap:4px;padding:0 var(--sp-2);border:1px solid var(--border);border-radius:999px;background:var(--bg-sunken, var(--surface));color:var(--text-muted);font-family:var(--font-sans);font-size:var(--fs-xs);font-weight:600;line-height:1.7;white-space:nowrap}button.grid-panel__unit{cursor:pointer;transition:background var(--t-fast) ease-out,color var(--t-fast) ease-out}button.grid-panel__unit:hover,button.grid-panel__unit:focus-visible{border-color:var(--border-strong);background:var(--surface-hover);color:var(--text)}.grid-panel__unit--static{cursor:help}.grid-panel__badge{margin-inline-start:auto;padding:1px var(--sp-2);border-radius:var(--radius-sm);background:var(--danger-bg);color:var(--danger);font-size:var(--fs-xs);font-weight:600;white-space:nowrap}.grid-wrap{display:flex;flex-direction:column;gap:var(--sp-1);min-inline-size:0}.grid-msg{padding:var(--sp-1) var(--sp-2);border:1px solid var(--danger);border-radius:var(--radius-sm);background:var(--danger-bg);color:var(--danger);font-family:var(--font-sans);font-size:var(--fs-xs);font-weight:600;line-height:var(--lh-tight)}.grid{--grid-invalid: #ebccd1;--grid-hover: #c8e6c9;--grid-used: #dee4e7;--grid-grain-on: #0d4a34;--grid-grain-off: #333c46;--grid-row-h: 28px;position:relative;overflow:auto;max-block-size:46vh;min-block-size:var(--grid-row-h);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-elevated);font-size:var(--fs-sm);overscroll-behavior:contain;scrollbar-width:thin}:root[data-theme=dark] .grid{--grid-invalid: #4a2226;--grid-hover: #1f4023;--grid-used: #263038;--grid-grain-on: #6fdcb2;--grid-grain-off: #d3dce5}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .grid{--grid-invalid: #4a2226;--grid-hover: #1f4023;--grid-used: #263038;--grid-grain-on: #6fdcb2;--grid-grain-off: #d3dce5}}.grid-head{position:sticky;inset-block-start:0;z-index:2;background:var(--bg-sunken, var(--surface))}.grid-row{display:grid;align-items:stretch;min-block-size:var(--grid-row-h);border-block-end:1px solid var(--border)}.grid-row--head{border-block-end:1px solid var(--border-strong)}.grid-row:last-child{border-block-end:0}.grid-row--invalid{background:var(--grid-invalid)}.grid-row--used{background:var(--grid-used)}.grid-row--selected{background:var(--accent-soft, var(--surface-hover));box-shadow:inset 2px 0 0 var(--accent)}.grid-row:hover,.grid-row--highlight{background:var(--grid-hover)}.grid-row--active{outline:none}.grid-cell{display:flex;align-items:center;gap:var(--sp-1);min-inline-size:0;padding:0 var(--sp-1);border-inline-end:1px solid var(--border);color:var(--text);white-space:nowrap;overflow:hidden;cursor:cell}.grid-cell:last-child{border-inline-end:0}.grid-cell--start{justify-content:flex-start}.grid-cell--center{justify-content:center;padding-inline:0}.grid-cell--end{justify-content:flex-end;font-variant-numeric:tabular-nums;font-family:var(--font-mono)}.grid-cell--head{display:flex;flex-direction:column;justify-content:center;align-items:stretch;padding-inline:1px;padding-block:1px;font-family:var(--font-sans);font-size:9.5px;font-weight:700;line-height:1.15;color:var(--text-muted);text-transform:none;letter-spacing:-.02em;font-variant-numeric:normal;cursor:default;overflow:hidden;white-space:pre-line}.grid-cell--head.grid-cell--act{text-transform:uppercase}.grid-cell--head.grid-cell--start{text-align:start}.grid-cell--head.grid-cell--end{text-align:end}.grid-cell--head.grid-cell--center,.grid-cell--head.grid-cell--act{padding-inline:1px;text-align:center}.grid-cell--sel,.grid-cell--act{justify-content:center;padding-inline:0;cursor:default}.grid-cell--act{gap:2px}.grid-cell--readonly{cursor:default;color:var(--text-muted)}.grid-cell--active{outline:2px solid var(--focus-ring);outline-offset:-2px;border-radius:2px}.grid-cell--editing{position:relative;z-index:4}.grid-cell--error{box-shadow:inset 3px 0 0 var(--danger)}.grid-cell--error .grid-text{text-decoration:underline wavy var(--danger);text-underline-offset:3px}.grid-text{overflow:hidden;text-overflow:ellipsis}.grid-empty{padding:var(--sp-4) var(--sp-3);color:var(--text-muted);font-size:var(--fs-sm);text-align:center}.grid-editor{inline-size:100%;min-inline-size:0;block-size:calc(var(--grid-row-h) - 4px);padding:0 var(--sp-1);border:1px solid var(--accent);border-radius:2px;background:var(--bg-elevated);color:var(--text);font:inherit;font-family:inherit;text-align:inherit}.grid-editor:focus{outline:2px solid var(--focus-ring);outline-offset:-1px}.grid-editor--error{border-color:var(--danger);background:var(--danger-bg)}.grid-editor--select{padding-inline-start:0}.grid-checkbox{inline-size:14px;block-size:14px;accent-color:var(--accent);cursor:pointer}.grid-toggle,.grid-grain,.grid-band,.grid-swatch,.grid-act{display:inline-flex;align-items:center;justify-content:center;inline-size:22px;block-size:22px;padding:0;border:1px solid transparent;border-radius:var(--radius-sm);background:transparent;color:var(--text-muted);font-size:var(--fs-md);line-height:1;cursor:pointer;transition:background var(--t-fast) ease-out,color var(--t-fast) ease-out}.grid-toggle:hover,.grid-grain:hover,.grid-band:hover,.grid-act:hover{background:var(--surface-hover);color:var(--text)}.grid-toggle:disabled,.grid-grain:disabled,.grid-band:disabled,.grid-swatch:disabled{cursor:default;opacity:.5}.grid-toggle--on{color:var(--success)}.grid-grain--0{color:var(--grid-grain-off)}.grid-grain--1,.grid-grain--2{color:var(--grid-grain-on);font-weight:700}.grid-act--danger:hover{background:var(--danger-bg);color:var(--danger)}.grid-swatch{inline-size:18px;block-size:18px;border:1px solid var(--border-strong)}.grid-palette{position:absolute;z-index:5;display:grid;grid-template-columns:repeat(4,20px);gap:4px;margin-block-start:2px;padding:var(--sp-2);border:1px solid var(--border-strong);border-radius:var(--radius-md);background:var(--bg-elevated);box-shadow:var(--shadow-md)}.grid-palette__dot{inline-size:20px;block-size:20px;padding:0;border:1px solid var(--border-strong);border-radius:var(--radius-sm);cursor:pointer}.grid-palette__dot.is-current{outline:2px solid var(--focus-ring);outline-offset:1px}.grid-band__box{display:block;inline-size:13px;block-size:13px;border:1px solid var(--border-strong);background:transparent}.grid-band__box[data-top]{border-block-start:3px solid var(--accent)}.grid-band__box[data-right]{border-inline-end:3px solid var(--accent)}.grid-band__box[data-bottom]{border-block-end:3px solid var(--accent)}.grid-band__box[data-left]{border-inline-start:3px solid var(--accent)}.grid-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-1)}.grid-toolbar__spacer{flex:1 1 auto}.grid-paste{display:flex;flex-direction:column;gap:var(--sp-2);padding:var(--sp-2);border:1px dashed var(--border-strong);border-radius:var(--radius-md);background:var(--bg-sunken, var(--surface))}.grid-paste__label{font-size:var(--fs-xs);color:var(--text-muted)}.grid-paste__area{inline-size:100%;padding:var(--sp-2);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-elevated);color:var(--text);font-family:var(--font-mono);font-size:var(--fs-sm);resize:vertical}.grid-paste__actions{display:flex;gap:var(--sp-2)}@media(max-width:768px){.grid{max-block-size:40dvh}.grid-toolbar .btn{flex:1 1 auto}.grid-paste__area{min-block-size:128px}}@media(pointer:coarse){.grid{--grid-row-h: 36px;font-size:var(--fs-md)}.grid-editor,.grid-paste__area{font-size:var(--fs-input)}.grid-toggle,.grid-grain,.grid-band{inline-size:26px;block-size:32px}.grid-act{inline-size:21px;block-size:32px}.grid-checkbox{inline-size:20px;block-size:20px}.grid-swatch{inline-size:22px;block-size:22px}.grid-palette{grid-template-columns:repeat(4,30px);gap:var(--sp-2);transform:translate(-100%)}.grid-palette__dot{inline-size:30px;block-size:30px}}@media(prefers-reduced-motion:reduce){.grid-toggle,.grid-grain,.grid-band,.grid-act,button.grid-panel__unit{transition:none}}@media print{.grid-toolbar,.grid-paste{display:none!important}.grid-cell--sel>*,.grid-cell--act>*{visibility:hidden}.grid{max-block-size:none;overflow:visible}}.modal-backdrop{position:fixed;inset:0;z-index:var(--z-modal);display:flex;align-items:flex-start;justify-content:center;padding:var(--sp-5) var(--sp-4);overflow-y:auto;background:var(--overlay, rgb(0 0 0 / 45%));animation:modal-fade var(--t-fast) ease-out}.modal-box{display:flex;flex-direction:column;width:100%;max-height:calc(100vh - var(--sp-6));margin:auto;overflow:hidden;background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);animation:modal-rise var(--t-med) ease-out}.modal-box--sm{max-width:420px}.modal-box--md{max-width:620px}.modal-box--lg{max-width:820px}.modal-box:focus{outline:none}.modal-header{display:flex;flex:0 0 auto;gap:var(--sp-3);align-items:center;padding:var(--sp-4) var(--sp-5);border-bottom:1px solid var(--border)}.modal-title{flex:1 1 auto;margin:0;font-size:var(--fs-lg);font-weight:600;line-height:1.3;color:var(--text)}.modal-close{display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;width:32px;height:32px;font-size:var(--fs-xl);line-height:1;color:var(--text-muted);cursor:pointer;background:transparent;border:1px solid transparent;border-radius:var(--radius-sm);transition:background var(--t-fast) ease-out,color var(--t-fast) ease-out}.modal-close:hover{color:var(--text);background:var(--surface-hover)}.modal-body{flex:1 1 auto;padding:var(--sp-4) var(--sp-5);overflow-y:auto}.modal-footer{display:flex;flex:0 0 auto;flex-wrap:wrap;gap:var(--sp-2);align-items:center;padding:var(--sp-3) var(--sp-5);background:var(--bg-sunken);border-top:1px solid var(--border)}.modal-footer__spacer{flex:1 1 auto}@keyframes modal-fade{0%{opacity:0}to{opacity:1}}@keyframes modal-rise{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.modal-section{padding-bottom:var(--sp-4);margin-bottom:var(--sp-4);border-bottom:1px solid var(--border)}.modal-section:last-child{padding-bottom:0;margin-bottom:0;border-bottom:none}.modal-section__title{margin:0 0 var(--sp-3);font-size:var(--fs-sm);font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}.modal-preview{margin:var(--sp-2) 0 0;font-size:var(--fs-sm);color:var(--text-muted)}.modal-empty{margin:0 0 var(--sp-3);font-size:var(--fs-sm);line-height:1.5;color:var(--text-muted)}.modal-slider{display:flex;gap:var(--sp-3);align-items:center}.modal-slider__input{flex:1 1 auto;min-width:0;accent-color:var(--accent)}.modal-slider__value{flex:0 0 auto;min-width:52px;font-size:var(--fs-sm);color:var(--text-muted);text-align:end}.modal-seed{display:flex;gap:var(--sp-2);align-items:center}.modal-seed .opt-input{flex:1 1 auto;min-width:0}.modal-eb-part{display:flex;flex-wrap:wrap;gap:var(--sp-2);align-items:baseline;margin:0 0 var(--sp-3);font-size:var(--fs-md);color:var(--text)}.modal-eb-part .tabular{color:var(--text-muted)}.modal-eb-figure{position:relative;display:block;width:100%;max-width:320px;height:148px;margin:0 auto var(--sp-4);background:var(--sheet-bg);border:1px solid var(--sheet-border);border-radius:var(--radius-sm)}.modal-eb-side{position:absolute;padding:0;cursor:pointer;background-color:transparent;border:1px dashed var(--border-strong);border-radius:2px;transition:filter var(--t-fast) ease-out,border-color var(--t-fast) ease-out}.modal-eb-side[data-on=true]{border-style:solid;border-color:var(--border-strong)}.modal-eb-side:hover{filter:brightness(1.08);border-color:var(--accent)}.modal-eb-side--top,.modal-eb-side--bottom{left:14px;width:calc(100% - 28px);height:14px}.modal-eb-side--top{top:4px}.modal-eb-side--bottom{bottom:4px}.modal-eb-side--left,.modal-eb-side--right{top:14px;width:14px;height:calc(100% - 28px)}.modal-eb-side--left{left:4px}.modal-eb-side--right{right:4px}.modal-eb-center{position:absolute;inset:32px;display:flex;align-items:center;justify-content:center;font-size:var(--fs-sm);color:var(--text-muted);pointer-events:none}.modal-eb-sides{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-3);margin-bottom:var(--sp-3)}.modal-eb-table{width:100%;margin-bottom:var(--sp-3);font-size:var(--fs-sm);border-collapse:collapse}.modal-eb-table th{padding:var(--sp-1) var(--sp-2);font-size:var(--fs-xs);font-weight:600;color:var(--text-muted);text-align:start;text-transform:uppercase;letter-spacing:.03em;border-bottom:1px solid var(--border)}.modal-eb-table td{padding:var(--sp-1) var(--sp-2);vertical-align:middle;border-bottom:1px solid var(--border)}.modal-eb-table tr[data-new=true] td{background:var(--info-bg)}.modal-eb-table td:nth-child(2){width:118px}.modal-eb-table td:nth-child(3){width:56px}.modal-eb-table td:last-child{width:92px;text-align:end}.modal-eb-color{width:40px;height:28px;padding:2px;cursor:pointer;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm)}.opt-panel{display:flex;flex-direction:column;gap:var(--sp-3);padding:var(--sp-3) var(--sp-4)}.opt-panel__title{margin:0;font-size:var(--fs-sm);font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}.opt-toggles{display:flex;flex-direction:column;gap:var(--sp-2)}.opt-more{align-self:flex-start}.opt-field{display:flex;flex-direction:column;gap:var(--sp-1);min-width:0}.opt-field__head{display:flex;gap:var(--sp-2);align-items:center}.opt-field__label{font-size:var(--fs-sm);font-weight:600;color:var(--text)}.opt-field__help{margin:0;font-size:var(--fs-xs);color:var(--text-muted)}.opt-field__error{margin:0;font-size:var(--fs-xs);color:var(--danger)}.opt-field__warning{margin:0;font-size:var(--fs-xs);color:var(--warning)}.opt-input,.opt-select{width:100%;min-width:0;padding:6px var(--sp-2);font-family:inherit;font-size:var(--fs-input);color:var(--text);background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-sm);transition:border-color var(--t-fast) ease-out,box-shadow var(--t-fast) ease-out}.opt-input:focus-visible,.opt-select:focus-visible{border-color:var(--accent);outline:2px solid var(--focus-ring);outline-offset:1px}.opt-input[aria-invalid=true]{border-color:var(--danger);background:var(--danger-bg)}.opt-input:disabled,.opt-select:disabled{color:var(--text-muted);cursor:not-allowed;background:var(--bg-sunken)}.opt-input--compact{padding:4px var(--sp-1);font-size:var(--fs-sm)}.opt-input-wrap{position:relative;display:flex;align-items:center}.opt-input-wrap .opt-input{padding-right:42px;text-align:end;font-variant-numeric:tabular-nums}.opt-input__suffix{position:absolute;right:var(--sp-2);font-size:var(--fs-sm);color:var(--text-muted);pointer-events:none}.opt-row{display:flex;gap:var(--sp-2);align-items:center;min-height:28px}.opt-row__label{flex:0 1 auto;font-size:var(--fs-md);line-height:1.3;color:var(--text);cursor:pointer}.opt-row__action{flex:0 0 auto;margin-left:auto}.opt-switch{position:relative;flex:0 0 auto;width:34px;height:18px;margin:0;cursor:pointer;appearance:none;background:var(--border-strong);border:none;border-radius:999px;transition:background var(--t-fast) ease-out}.opt-switch:after{position:absolute;top:2px;left:2px;width:14px;height:14px;content:"";background:var(--bg-elevated);border-radius:50%;box-shadow:var(--shadow-sm);transition:transform var(--t-fast) ease-out}.opt-switch:checked{background:var(--accent)}.opt-switch:checked:after{transform:translate(16px)}.opt-switch:disabled{cursor:not-allowed;opacity:.5}.opt-switch:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px}.opt-hint{position:relative;display:inline-flex;flex:0 0 auto;align-items:center;justify-content:center;width:16px;height:16px;font-size:var(--fs-xs);font-weight:700;color:var(--text-muted);cursor:help;background:var(--bg-sunken);border:1px solid var(--border);border-radius:50%}.opt-hint:hover,.opt-hint:focus-visible{color:var(--accent-text);background:var(--accent);border-color:var(--accent)}.opt-hint:after{position:absolute;bottom:calc(100% + 6px);left:50%;z-index:var(--z-tooltip);display:none;width:max-content;max-width:260px;padding:var(--sp-2);font-size:var(--fs-xs);font-weight:400;line-height:1.45;color:var(--text);text-align:start;white-space:normal;content:attr(data-tip);background:var(--bg-elevated);border:1px solid var(--border-strong);border-radius:var(--radius-sm);box-shadow:var(--shadow-md);transform:translate(-50%)}.opt-hint:hover:after,.opt-hint:focus-visible:after{display:block}.opt-row .opt-hint:after,.opt-field__head .opt-hint:after{left:auto;right:-8px;transform:none}@media(max-width:768px){.modal-backdrop{padding:var(--safe-top) var(--safe-right) var(--safe-bottom) var(--safe-left)}.modal-box,.modal-box--sm,.modal-box--md,.modal-box--lg{max-width:none;min-height:100%;max-height:none;border:none;border-radius:0}.modal-header,.modal-body,.modal-footer{padding-right:var(--sp-3);padding-left:var(--sp-3)}.modal-footer .btn{flex:1 1 auto}.modal-footer__spacer{display:none}.modal-eb-sides{grid-template-columns:minmax(0,1fr)}.modal-eb-table th,.modal-eb-table td{padding-inline:var(--sp-1)}.modal-eb-table td:nth-child(2){width:92px}.modal-eb-table td:nth-child(3){width:54px}.modal-eb-table td:last-child{width:72px}}@media(pointer:coarse){.opt-row{min-height:40px}.opt-hint{width:22px;height:22px}.opt-hint:focus:after{display:block}.modal-eb-side--top,.modal-eb-side--bottom{left:22px;width:calc(100% - 44px);height:22px}.modal-eb-side--left,.modal-eb-side--right{top:22px;width:22px;height:calc(100% - 44px)}.modal-eb-color{width:48px;height:34px}.modal-slider__input{height:28px}}@media(prefers-reduced-motion:reduce){.modal-backdrop,.modal-box{animation:none}.modal-close,.opt-switch,.opt-switch:after,.opt-input,.opt-select,.modal-eb-side{transition:none}}@media print{.modal-backdrop,.opt-panel{display:none!important}}.res-root{--res-side-w: 360px;display:flex;flex-direction:column;min-width:0;min-height:0;height:100%;background:var(--bg);color:var(--text)}.res-topbar{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-2) var(--sp-3);border-bottom:1px solid var(--border);background:var(--bg-elevated);font-size:var(--fs-sm);color:var(--text-muted)}.res-topbar-info{min-width:0}.res-layout{flex:1 1 auto;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) var(--res-side-w);align-items:stretch;overflow:hidden}.res-center{min-width:0;min-height:0;display:flex;flex-direction:column;gap:var(--sp-3);padding:var(--sp-3);overflow:auto}.res-side{min-width:0;min-height:0;display:flex;flex-direction:column;gap:var(--sp-3);padding:var(--sp-3);border-left:1px solid var(--border);background:var(--bg-elevated);overflow-y:auto;overscroll-behavior:contain}.res-card{flex:none;border:1px solid var(--border);border-radius:var(--radius-md);background:var(--surface);overflow:hidden}.res-card--danger{border-color:var(--danger)}.res-card-head{margin:0;font-size:var(--fs-sm);font-weight:700}.res-card-toggle{display:flex;align-items:center;gap:var(--sp-2);width:100%;padding:var(--sp-2) var(--sp-3);background:var(--bg-elevated);border-bottom:1px solid var(--border);color:var(--text);font:inherit;text-align:start;transition:background var(--t-fast) ease-out}.res-card.is-collapsed .res-card-toggle{border-bottom-color:transparent}.res-card-toggle:hover{background:var(--surface-hover)}.res-card-toggle:focus-visible{outline:2px solid var(--focus-ring);outline-offset:-2px}.res-card--danger .res-card-toggle{background:var(--danger-bg);color:var(--danger)}.res-card-caret{flex:none;font-size:10px;line-height:1;color:var(--text-muted);transition:transform var(--t-fast) ease-out;transform:rotate(90deg)}.res-card.is-collapsed .res-card-caret{transform:rotate(0)}.res-card--danger .res-card-caret{color:inherit}.res-card-title{flex:1 1 auto;min-width:0;text-transform:uppercase;letter-spacing:.04em}.res-card-badge{flex:none}.res-card-body{padding:var(--sp-3)}.res-card-body[hidden]{display:none}.res-warnings{background:var(--warning-bg);border-bottom:1px solid var(--border);padding:var(--sp-2) var(--sp-4)}.res-warning{margin:0;font-size:var(--fs-sm);color:var(--warning)}.res-alert{display:flex;align-items:center;gap:var(--sp-3);background:var(--danger-bg);color:var(--danger);border-bottom:1px solid var(--border);padding:var(--sp-2) var(--sp-4);font-size:var(--fs-sm)}.res-stale,.res-cancelled{display:flex;align-items:center;gap:var(--sp-3);padding:var(--sp-2) var(--sp-4);font-size:var(--fs-sm);border-bottom:1px solid var(--border)}.res-stale{background:var(--warning-bg);color:var(--warning);border-left:4px solid var(--warning)}.res-cancelled{background:var(--bg-sunken);color:var(--text-muted);border-left:4px solid var(--border-strong)}.res-stale-icon{font-size:var(--fs-lg);line-height:1;flex:0 0 auto}.res-stale-text{flex:1 1 auto;min-width:0}.res-stale strong,.res-cancelled strong{color:inherit}.res-stale .btn,.res-cancelled .btn{flex:0 0 auto}.res-stale-chip{margin-left:var(--sp-2);padding:0 var(--sp-2);border-radius:var(--radius-sm);background:var(--warning-bg);color:var(--warning);font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.04em}.res-root.is-stale .res-viewport .diagram-svg,.res-root.is-stale .res-thumbs{opacity:.55;filter:grayscale(.35)}.res-empty,.res-running,.res-error,.res-cancelled-state{flex:1 1 auto;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--sp-3);padding:var(--sp-6) var(--sp-4);text-align:center}.res-empty-art{width:200px;max-width:60%;height:auto}.res-empty-sheet{fill:var(--sheet-bg);stroke:var(--sheet-border);stroke-width:1.5}.res-empty-part{fill:var(--bg-sunken);stroke:var(--part-stroke);stroke-width:1}.res-empty-title{margin:0;font-size:var(--fs-xl);font-weight:600}.res-empty-text{margin:0;max-width:46ch;color:var(--text-muted);font-size:var(--fs-md)}.res-empty-actions{display:flex;flex-wrap:wrap;gap:var(--sp-3);justify-content:center}.res-running-title{margin:0;font-size:var(--fs-lg);font-weight:600}.res-running-bar{width:min(420px,80%)}.res-running-meta,.res-running-best{margin:0;font-size:var(--fs-sm);color:var(--text-muted)}.res-error{color:var(--danger)}.res-error-title{margin:0;font-size:var(--fs-lg);font-weight:600}.res-error-text{margin:0;max-width:60ch;color:var(--text);font-size:var(--fs-md)}.res-cancelled-art{width:64px;height:64px}.res-cancelled-ring{fill:none;stroke:var(--border-strong);stroke-width:3}.res-cancelled-x{stroke:var(--text-muted);stroke-width:3.5;stroke-linecap:round}.res-cancelled-title{margin:0;font-size:var(--fs-lg);font-weight:600}.res-cancelled-text{margin:0;max-width:52ch;color:var(--text-muted);font-size:var(--fs-md)}.res-sheetbar{display:flex;align-items:center;gap:var(--sp-3);flex-wrap:wrap;padding:var(--sp-2) var(--sp-3);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md)}.res-nav{display:flex;align-items:center;gap:var(--sp-1)}.res-sheet-select{min-width:190px}.res-sheet-meta{flex:1 1 200px;min-width:0;font-size:var(--fs-sm);color:var(--text-muted)}.res-zoom{display:flex;align-items:center;gap:var(--sp-1)}.res-zoom-value{min-width:4ch;text-align:center;font-size:var(--fs-sm);color:var(--text-muted)}.res-viewport{flex:1 1 auto;min-height:260px;display:flex;align-items:center;justify-content:center;overflow:auto;padding:var(--sp-3);background:var(--bg-sunken);border:1px solid var(--border);border-radius:var(--radius-md)}.res-viewport:focus-visible{outline:2px solid var(--focus-ring);outline-offset:-2px}.res-thumbs{display:flex;gap:var(--sp-2);overflow-x:auto;padding-bottom:var(--sp-1);scrollbar-width:thin}.res-thumb{flex:0 0 auto;width:72px;display:flex;flex-direction:column;align-items:center;gap:2px;padding:var(--sp-1);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);cursor:pointer;color:var(--text-muted);font-size:var(--fs-xs);transition:border-color var(--t-fast) ease-out}.res-thumb:hover{border-color:var(--border-strong)}.res-thumb.is-active{border-color:var(--accent);color:var(--text)}.res-thumb-svg{width:100%;height:44px}.res-thumb-bg{fill:var(--sheet-bg);stroke:var(--sheet-border);stroke-width:1;vector-effect:non-scaling-stroke}.res-thumb-part{stroke:var(--part-stroke);stroke-width:.5;vector-effect:non-scaling-stroke}.res-toggles{display:flex;flex-wrap:wrap;gap:var(--sp-3);align-items:center;font-size:var(--fs-sm);color:var(--text-muted)}.res-strip{display:flex;flex-wrap:wrap;gap:var(--sp-4);padding:var(--sp-2) var(--sp-3);background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-md);font-size:var(--fs-sm);color:var(--text-muted)}.res-strip strong{color:var(--text);font-size:var(--fs-md)}.diagram-root{position:relative;max-width:100%}.diagram-svg{display:block;max-width:100%;touch-action:none;cursor:grab;background:var(--sheet-bg);border-radius:var(--radius-sm);box-shadow:var(--shadow-sm);user-select:none}.diagram-svg:active{cursor:grabbing}.diagram-reset{position:absolute;right:var(--sp-2);bottom:var(--sp-2);box-shadow:var(--shadow-md)}.diagram-sheet{fill:var(--sheet-bg)}.diagram-sheet-border{fill:none;stroke:var(--sheet-border);stroke-width:1.5;vector-effect:non-scaling-stroke;pointer-events:none}.diagram-hatch-waste{stroke:var(--waste-hatch);stroke-width:1.2;vector-effect:non-scaling-stroke;fill:none}.diagram-hatch-offcut{stroke:var(--offcut-hatch);stroke-width:1;vector-effect:non-scaling-stroke;fill:none}.diagram-offcut-border{stroke:var(--border-strong);stroke-width:1;stroke-dasharray:6 4;vector-effect:non-scaling-stroke}.diagram-offcut.is-usable .diagram-offcut-border{stroke:var(--success)}.diagram-offcut-text{fill:var(--text-muted);font-family:var(--font-mono);pointer-events:none}.diagram-part{cursor:pointer}.diagram-part-rect{stroke:var(--part-stroke);stroke-width:1.2;vector-effect:non-scaling-stroke;transition:opacity var(--t-fast) ease-out}.diagram-part-text{fill:var(--part-text);font-family:var(--font-sans);font-weight:600;pointer-events:none}.diagram-part-text.is-dims{font-weight:400;font-family:var(--font-mono)}.diagram-part-glyph{fill:var(--part-text);opacity:.7;pointer-events:none}.diagram-band{stroke:none;pointer-events:none}.diagram-svg.has-highlight .diagram-part{opacity:.35}.diagram-svg.has-highlight .diagram-part.is-highlighted{opacity:1}.diagram-part.is-highlighted .diagram-part-rect{stroke:var(--accent);stroke-width:3}.diagram-cuts{pointer-events:none}.diagram-cut-line{stroke:var(--cut-line);stroke-width:1;stroke-dasharray:8 5;vector-effect:non-scaling-stroke}.diagram-cut-badge{fill:var(--bg-elevated);stroke:var(--cut-line);stroke-width:1;vector-effect:non-scaling-stroke;opacity:.9}.diagram-cut-num{fill:var(--text-muted);font-family:var(--font-mono)}.diagram-cut.is-active .diagram-cut-line{stroke:var(--cut-line-active);stroke-width:3;stroke-dasharray:none}.diagram-cut.is-active .diagram-cut-badge{stroke:var(--cut-line-active);stroke-width:2;opacity:1}.diagram-cut.is-active .diagram-cut-num{fill:var(--cut-line-active);font-weight:700}.diagram-dims{pointer-events:none}.diagram-dim-line,.diagram-dim-tick{stroke:var(--dimension-line);stroke-width:1;vector-effect:non-scaling-stroke}.diagram-dim-bg{fill:var(--sheet-bg);opacity:.9}.diagram-dim-text{fill:var(--dimension-line);font-family:var(--font-mono)}.stats-root{display:flex;flex-direction:column;gap:var(--sp-3)}.stats-kv{width:100%;border-collapse:collapse;font-size:var(--fs-sm)}.stats-kv-row:not(:last-child)>*{border-bottom:1px solid var(--border)}.stats-kv-label{padding:var(--sp-1) var(--sp-2) var(--sp-1) 0;text-align:start;font-weight:400;color:var(--text-muted);vertical-align:top}.stats-kv-value{padding:var(--sp-1) 0;text-align:end;font-weight:600;color:var(--text);white-space:nowrap;vertical-align:top}.stats-kv-sub{display:block;font-size:var(--fs-xs);font-weight:400;color:var(--text-muted)}.stats-note{margin:0;font-size:var(--fs-xs);color:var(--text-muted)}.stats-bar{display:flex;width:100%;height:16px;border-radius:var(--radius-sm);overflow:hidden;background:var(--bg-sunken);border:1px solid var(--border)}.stats-bar-seg.is-used{background:var(--accent)}.stats-bar-seg.is-reusable{background:var(--success);opacity:.55}.stats-bar-seg.is-waste{background:var(--waste-hatch)}.stats-legend{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:var(--sp-3);font-size:var(--fs-xs);color:var(--text-muted)}.stats-swatch{display:inline-block;width:12px;height:12px;border-radius:2px;margin-right:var(--sp-1);vertical-align:-1px;border:1px solid var(--border)}.stats-swatch.is-used{background:var(--accent)}.stats-swatch.is-reusable{background:var(--success);opacity:.55}.stats-swatch.is-waste{background:var(--waste-hatch)}.stats-band-dot{display:inline-block;width:12px;height:12px;border-radius:50%;margin-right:var(--sp-2);vertical-align:-1px;border:1px solid var(--border-strong)}.stats-scroll{overflow-x:auto;max-width:100%}.stats-table{width:100%;font-size:var(--fs-sm);border-collapse:collapse}.stats-table th,.stats-table td{padding:var(--sp-1) var(--sp-2);text-align:start;white-space:nowrap;border-bottom:1px solid var(--border)}.stats-num{text-align:end}.stats-row.is-clickable{cursor:pointer}.stats-row.is-clickable:hover{background:var(--surface-hover)}.stats-row.is-selected{box-shadow:inset 3px 0 0 var(--accent)}.stats-row.is-selected td{color:var(--text);font-weight:600}.stats-chip{font-size:var(--fs-xs)}.stats-chip.is-good{background:var(--success-bg);color:var(--success)}.stats-empty{color:var(--text-muted);text-align:center;padding:var(--sp-4)}.cuts-root{display:flex;flex-direction:column;gap:var(--sp-2)}.cuts-scroll{max-height:420px;overflow:auto;scrollbar-width:thin}.cuts-toolbar{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap}.cuts-count{font-size:var(--fs-sm);color:var(--text-muted)}.cuts-feedback{margin:0;font-size:var(--fs-sm);color:var(--success)}.cuts-table{width:100%;border-collapse:collapse;font-size:var(--fs-xs)}.cuts-table thead th{position:sticky;top:0;z-index:1;background:var(--surface)}.cuts-table th,.cuts-table td{padding:2px var(--sp-1);text-align:start;border-bottom:1px solid var(--border);white-space:nowrap}.cuts-num{text-align:end}.cuts-col-seq{width:4ch;text-align:end}.cuts-col-sheet{width:5ch;text-align:end}.cuts-row{cursor:pointer}.cuts-row:hover{background:var(--surface-hover)}.cuts-row.is-selected{box-shadow:inset 3px 0 0 var(--accent)}.cuts-axis{display:inline-block;min-width:9ch;font-size:var(--fs-xs);padding:0 var(--sp-1);border-radius:var(--radius-sm);background:var(--bg-sunken);color:var(--text-muted);text-align:center}.cuts-axis.is-x{background:var(--info-bg);color:var(--info)}.cuts-axis.is-y{background:var(--warning-bg);color:var(--warning)}.cuts-child.is-waste{color:var(--text-muted);font-style:italic}.cuts-sep{color:var(--text-muted)}.cuts-empty{color:var(--text-muted);padding:var(--sp-6);text-align:center}.cuts-root.is-saw .cuts-table{font-size:var(--fs-md)}.cuts-root.is-saw .cuts-table th,.cuts-root.is-saw .cuts-table td{padding:var(--sp-2) var(--sp-2)}.cuts-root.is-saw .cuts-scroll{max-height:620px}.cuts-root.is-saw .cuts-child.is-waste{font-style:normal}.unfit-root{display:flex;flex-direction:column;gap:var(--sp-2)}.unfit-ok{margin:0;color:var(--success);font-size:var(--fs-sm)}.unfit-sub{margin:0;font-size:var(--fs-xs);color:var(--text-muted)}.unfit-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--sp-2)}.unfit-item{padding:var(--sp-2);border:1px solid var(--border);border-left:3px solid var(--danger);border-radius:var(--radius-sm);background:var(--surface)}.unfit-item-head{display:flex;align-items:baseline;gap:var(--sp-2)}.unfit-item-name{flex:1 1 auto;min-width:0;font-size:var(--fs-sm);font-weight:600}.unfit-item-qty{flex:none;font-size:var(--fs-sm);font-weight:700;color:var(--danger)}.unfit-item-dims{font-size:var(--fs-xs);color:var(--text-muted)}.unfit-reason{margin-top:var(--sp-1);font-size:var(--fs-xs);font-weight:600;color:var(--danger)}.unfit-message,.unfit-fix{color:var(--text-muted);font-size:var(--fs-xs)}@media(min-width:1600px){.res-root{--res-side-w: 400px}}@media(max-width:1199px){.res-layout{display:block;overflow:auto}.res-center{overflow:visible}.res-viewport{min-height:340px}.res-side{border-left:0;border-top:1px solid var(--border);overflow:visible;display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));align-items:start}.cuts-scroll{max-height:340px}}@media(max-width:800px){.res-side{display:flex;flex-direction:column;align-items:stretch}}@media(max-width:768px){.res-center,.res-side,.res-card-body{padding:var(--sp-2)}.res-sheetbar{gap:var(--sp-2)}.res-nav{flex:1 1 100%}.res-sheet-select{flex:1 1 auto;min-width:0}.res-sheet-meta{order:3;flex-basis:100%}.res-zoom{flex:1 1 100%;justify-content:flex-end}.res-viewport{min-height:54dvh;padding:var(--sp-2)}.res-topbar{padding:var(--sp-1) var(--sp-2);font-size:var(--fs-xs)}.stats-kv-value{white-space:normal}.cuts-scroll{max-height:50dvh}}@media(pointer:coarse){.res-card-toggle{padding-block:var(--sp-3)}.cuts-table td,.stats-table td{padding-block:var(--sp-2)}.diagram-reset{right:var(--sp-3);bottom:var(--sp-3)}}.res-print{display:none}@media print{.no-print{display:none!important}.res-root{height:auto;overflow:visible;background:transparent}.res-layout,.res-topbar{display:none}.res-print{display:block}.res-sheet{break-inside:avoid;page-break-inside:avoid;break-after:page;page-break-after:always;padding:0;margin:0 0 var(--sp-4);text-align:center}.res-sheet:last-child{break-after:auto;page-break-after:auto}.res-sheet-title{font-size:12pt;font-weight:600;margin:0 0 var(--sp-2);text-align:start}.diagram-root{margin:0 auto;max-width:100%}.diagram-svg{box-shadow:none;max-width:100%;height:auto}.diagram-reset{display:none}.diagram-part-rect,.diagram-sheet-border{stroke-width:1.2}.stats-root,.cuts-root,.unfit-root{padding:0;margin:0;background:transparent}.stats-table,.cuts-table,.unfit-table{font-size:9pt}.stats-table thead,.cuts-table thead,.unfit-table thead{display:table-header-group}.cuts-table tr,.stats-table tr,.unfit-table tr{break-inside:avoid;page-break-inside:avoid}.cuts-table thead th{position:static}.res-stale .btn,.res-cancelled .btn,.res-stale-chip{display:none}.res-stale,.res-cancelled{border:1px solid currentColor;padding:var(--sp-2);margin-bottom:var(--sp-3);font-size:9pt}}
