:root{color-scheme:light;--bg: #f6f6f7;--surface: #ffffff;--surface-2: #fafbfb;--hover: #f1f2f3;--border: #e1e3e5;--border-strong: #c9cccf;--text: #202223;--text-dim: #5c6166;--icon-dim: #8a8f94;--accent: #6b4c9a;--accent-hover: #5a3d87;--accent-weak: #efeaf6;--accent-text: #5e3f8c;--on-accent: #ffffff;--brand-mark-cream: #f5f1df;--brand-mark-grid: #10553d;--brand-mark-stray: #6b4c9a;--danger: #b42318;--danger-hover: #9a1c13;--danger-text: #b42318;--warn: #b54708;--warn-bg: #fef6e7;--focus: #5e3f8c;--backdrop: rgba(0, 0, 0, .4);--r-sm: 4px;--r-md: 6px;--r-lg: 8px;--r-xl: 12px;--radius: var(--r-lg);--sp-2xs: .125rem;--sp-xs: .25rem;--sp-sm: .375rem;--sp-md: .5rem;--sp-lg: .75rem;--sp-xl: 1rem;--sp-2xl: 1.5rem;--sp-3xl: 2rem;--sp-4xl: 3rem;--fs-xs: .75rem;--fs-sm: .8125rem;--fs-base: .875rem;--fs-lg: 1rem;--fs-xl: 1.15rem;--shadow: 0 1px 2px rgba(0, 0, 0, .06), 0 1px 3px rgba(0, 0, 0, .05);--shadow-pop: 0 8px 28px rgba(0, 0, 0, .16)}@media (prefers-color-scheme: dark){:root:not([data-theme=light]){color-scheme:dark;--bg: #111315;--surface: #1b1d1f;--surface-2: #222527;--hover: #2a2d30;--border: #303336;--border-strong: #44484c;--text: #e3e5e7;--text-dim: #a3a8ad;--icon-dim: #7d8287;--accent: #7d5fb0;--accent-hover: #6b4c9a;--accent-weak: #2e2440;--accent-text: #b9a3e0;--danger-text: #f2766b;--warn: #f5a35c;--warn-bg: #3a2614;--focus: #b9a3e0;--backdrop: rgba(0, 0, 0, .6);--shadow: 0 1px 2px rgba(0, 0, 0, .4);--shadow-pop: 0 8px 28px rgba(0, 0, 0, .5)}}:root[data-theme=dark]{color-scheme:dark;--bg: #111315;--surface: #1b1d1f;--surface-2: #222527;--hover: #2a2d30;--border: #303336;--border-strong: #44484c;--text: #e3e5e7;--text-dim: #a3a8ad;--icon-dim: #7d8287;--accent: #7d5fb0;--accent-hover: #6b4c9a;--accent-weak: #2e2440;--accent-text: #b9a3e0;--danger-text: #f2766b;--warn: #f5a35c;--warn-bg: #3a2614;--focus: #b9a3e0;--backdrop: rgba(0, 0, 0, .6);--shadow: 0 1px 2px rgba(0, 0, 0, .4);--shadow-pop: 0 8px 28px rgba(0, 0, 0, .5)}*{box-sizing:border-box}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;color:var(--text);background:var(--bg);font-size:14px;line-height:1.4}.app{display:flex;flex-direction:column;height:100vh;height:100dvh}:focus-visible{outline:2px solid var(--focus);outline-offset:2px}.icon{flex-shrink:0;vertical-align:-.15em}.eyebrow{font-size:var(--fs-xs);font-weight:600;text-transform:uppercase;letter-spacing:.03em;color:var(--text-dim)}.app-header{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-xl);padding:var(--sp-xl) var(--sp-2xl);background:var(--surface);border-bottom:1px solid var(--border)}.app-header h1{margin:0;font-size:var(--fs-xl)}.brand{display:flex;align-items:center;gap:var(--sp-md)}.brand-mark{flex-shrink:0}.brand-mark__tile{fill:var(--brand-mark-cream)}.brand-mark__grid{fill:var(--brand-mark-grid)}.brand-mark__stray{fill:var(--brand-mark-stray)}.h1-sub{margin-left:var(--sp-2xs);color:var(--text-dim);font-size:var(--fs-base);font-weight:400}.header-actions{display:flex;align-items:center;gap:var(--sp-lg);flex-shrink:0;min-height:2.375rem}.header-actions .btn{width:auto;margin:0}.file-name{font-size:var(--fs-base);color:var(--text-dim);max-width:22ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.upload{flex:1;display:flex;flex-direction:column;align-items:center;gap:var(--sp-xl);padding:var(--sp-3xl) var(--sp-xl);overflow-y:auto}.upload>*{width:min(560px,100%)}.intro{margin-top:auto}.intro h2{margin:0 0 var(--sp-md);font-size:var(--fs-xl)}.intro-jobs{margin:0;padding-left:var(--sp-xl);color:var(--text-dim);font-size:var(--fs-base);line-height:1.5}.intro-jobs strong{color:var(--text)}.upload-error,.notice{padding:var(--sp-md) var(--sp-lg);border-radius:var(--r-lg)}.upload-error{border:1px solid var(--danger-text)}.upload-error p{margin:0}.notice{display:flex;align-items:flex-start;gap:var(--sp-md);font-size:var(--fs-base)}.notice>span{flex:1}.notice.warn{color:var(--warn);background:var(--warn-bg)}.upload-alt{display:flex;align-items:center;justify-content:center;gap:var(--sp-lg);color:var(--text-dim)}.upload-alt .btn{width:auto;margin:0}.howto{font-size:var(--fs-base)}.howto summary{cursor:pointer;color:var(--accent-text);font-weight:500}.howto ol{margin:var(--sp-md) 0 0;padding-left:var(--sp-2xl);line-height:1.6}.spinner{display:inline-block;width:1.2em;height:1.2em;border:2px solid var(--accent-weak);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.spinner{animation-duration:2.4s}}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.dropzone.busy{cursor:progress;border-style:solid}.dropzone{padding:var(--sp-4xl) var(--sp-3xl);border:2px dashed var(--border-strong);border-radius:var(--r-xl);background:var(--surface);text-align:center;cursor:pointer;transition:border-color .15s,background .15s}.dropzone:hover,.dropzone.dragging{border-color:var(--accent);background:var(--accent-weak)}.dropzone-icon{font-size:var(--fs-xl);color:var(--accent-text)}.dropzone-title{margin:var(--sp-md) 0 var(--sp-2xs);font-weight:600;font-size:var(--fs-lg)}.dropzone-sub{margin:0;color:var(--text-dim)}.upload-note{margin:0 0 auto;color:var(--text-dim);font-size:var(--fs-sm)}.site-footer{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--sp-xs) var(--sp-xl);padding:var(--sp-md) var(--sp-xl);border-top:1px solid var(--border);background:var(--surface);color:var(--text-dim);font-size:var(--fs-xs)}.site-footer a{color:inherit}.footer-link{border:0;padding:0;background:none;color:inherit;font:inherit;text-decoration:underline;cursor:pointer}.site-footer a:hover,.footer-link:hover{color:var(--accent-text)}.workspace{flex:1;min-height:0;display:grid;grid-template-columns:1fr 340px;grid-template-rows:1fr auto}.main{grid-column:1;grid-row:1;display:flex;flex-direction:column;min-height:0;min-width:0;padding:var(--sp-xl) var(--sp-2xl)}.main>.parse-warnings,.main>.command-area{flex-shrink:0}.sidebar{grid-column:2;grid-row:1;overflow:auto;position:relative;border-left:1px solid var(--border);background:var(--surface);display:flex;flex-direction:column}.tabs{position:sticky;top:0;z-index:2;display:flex;align-items:stretch;gap:var(--sp-xs);padding:var(--sp-md) var(--sp-2xl) 0;background:var(--surface);border-bottom:1px solid var(--border)}.tab{flex:1;border:0;border-bottom:2px solid transparent;background:none;color:var(--text-dim);font:inherit;font-size:var(--fs-sm);font-weight:600;padding:var(--sp-md) var(--sp-xs);cursor:pointer;white-space:nowrap}.tab:hover{color:var(--text)}.tab.on{color:var(--accent-text);border-bottom-color:var(--accent)}.tabpanel{padding:var(--sp-xl) var(--sp-2xl)}.tabpanel>.panel{border:0;box-shadow:none;padding:0}.tabpanel>.panel+.panel{margin-top:var(--sp-2xl);padding-top:var(--sp-2xl);border-top:1px solid var(--border)}.btn-inline.sidebar-toggle{display:none}.grid-wrap{flex:1;min-height:0;overflow:auto;position:relative}.grid{border-collapse:separate;border-spacing:0;table-layout:fixed;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg)}.grid th,.grid td{text-align:left;padding:var(--sp-sm) var(--sp-md);border-bottom:1px solid var(--border);vertical-align:middle;overflow:hidden}.resizer{position:absolute;top:0;right:0;width:7px;height:100%;cursor:col-resize;-webkit-user-select:none;user-select:none}.resizer:hover,.resizer:active{background:var(--accent);opacity:.4}.grid thead th:first-child{border-top-left-radius:var(--r-lg)}.grid thead th:last-child{border-top-right-radius:var(--r-lg)}.grid thead th{position:sticky;top:0;background:var(--surface-2);font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.03em;color:var(--text-dim);z-index:2}.grid tbody tr{background:var(--surface)}.grid tbody tr:hover{background:var(--surface-2)}.grid tbody tr.selected{background:var(--accent-weak)}.grid .frz,.grid .pin,.grid td.gcell.frz{position:sticky;z-index:1;background-color:inherit}.grid thead .frz,.grid thead .pin{z-index:3;background-color:var(--surface-2)}.grid .col-check.frz{left:0}.grid .col-link.frz{left:34px}.grid .frz-first{left:var(--frz-first);box-shadow:inset -1px 0 0 var(--border)}.grid .col-variants.pin{right:30px;box-shadow:inset 1px 0 0 var(--border)}.grid .col-del.pin{right:0}.grid td.gcell.frz-first.sel{background-color:var(--accent-weak)}.col-check{width:34px;text-align:center}.col-link{text-align:center;padding-left:0;padding-right:0}.store-link{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:var(--r-sm);color:var(--text-dim);text-decoration:none;font-size:var(--fs-base);line-height:1}.store-link:hover{color:var(--accent-text);background:var(--accent-weak)}.col-variants{width:92px;white-space:nowrap;color:var(--text-dim)}.flag{margin-left:var(--sp-sm);color:var(--warn);cursor:help}.was,.arrow{color:var(--text-dim)}.now{font-weight:600;color:var(--accent-text)}.command-area{margin-bottom:var(--sp-md)}.grid-toolbar{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-md) var(--sp-xl);flex-wrap:wrap}.gt-left,.gt-right{display:flex;align-items:center;gap:var(--sp-md);flex-wrap:wrap}.gt-left{flex:1 1 auto;min-width:0}.gt-right{margin-left:auto}.grid-toolbar .btn-inline,.grid-toolbar .filter-search,.chip-toggle{min-height:2rem}.gt-count{order:1;font-size:var(--fs-sm);color:var(--text-dim);font-variant-numeric:tabular-nums}.gt-after-count{order:2}.gt-left.selecting .gt-count{order:0;color:var(--accent-text);font-weight:600}.chip-toggle{display:inline-flex;align-items:center;padding:0 var(--sp-lg);border:1px solid var(--border-strong);border-radius:999px;background:var(--surface);color:var(--text);font:inherit;font-size:var(--fs-sm);cursor:pointer}.chip-toggle:hover{background:var(--hover)}.chip-toggle.on,.filter-pop.on>.btn-inline{border-color:var(--accent);background:var(--accent-weak);color:var(--accent-text)}.filter-badge{min-width:1.1rem;padding:0 var(--sp-xs);border-radius:999px;background:var(--accent);color:var(--on-accent);font-size:var(--fs-xs);font-weight:600;text-align:center}.history{display:flex;gap:var(--sp-xs)}.gt-confirm{display:inline-flex;align-items:center;gap:var(--sp-sm);font-size:var(--fs-sm);color:var(--danger-text)}.btn-inline{display:inline-flex;align-items:center;gap:var(--sp-xs);border:1px solid var(--border-strong);background:var(--surface);color:var(--text);font:inherit;font-size:var(--fs-sm);padding:var(--sp-xs) var(--sp-md);border-radius:var(--r-sm);cursor:pointer}.btn-inline:hover:not(:disabled){background:var(--hover)}.btn-inline:disabled{opacity:.45;cursor:not-allowed}.btn-inline.danger{border-color:var(--danger);color:var(--on-accent);background:var(--danger)}.btn-inline.danger:hover{background:var(--danger-hover)}.grid-focus{display:inline-block;min-width:100%}.grid:focus{outline:none}.grid:focus-visible{outline:2px solid var(--focus);outline-offset:-2px}.grid td.gcell{padding:0;position:relative;cursor:cell;-webkit-user-select:none;user-select:none;scroll-margin-top:2.6rem;scroll-margin-left:var(--frz-end);scroll-margin-right:var(--pin-w)}.grid td.gcell.frz-first{scroll-margin-left:var(--frz-first)}.gcell-text{display:block;padding:var(--sp-xs) var(--sp-md);min-height:1.75em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.gcell.sel{background:var(--accent-weak)}.gcell.active{box-shadow:inset 0 0 0 2px var(--accent)}.gcell.edited{background-image:linear-gradient(225deg,var(--accent) 6px,transparent 6px)}.gcell.mixed .gcell-text{color:var(--warn);text-decoration:underline dotted;text-underline-offset:3px}.mixed-peek{position:absolute;top:50%;right:.2rem;transform:translateY(-50%);display:none;padding:var(--sp-2xs);border:none;border-radius:var(--r-sm);background:var(--warn-bg);color:var(--warn);line-height:0;cursor:pointer}.mixed-peek:hover{outline:1px solid var(--warn)}.gcell.mixed:hover .mixed-peek,.gcell.mixed.active .mixed-peek{display:block}.gcell-input{width:100%;border:none;padding:var(--sp-xs) var(--sp-md);font:inherit;color:inherit;background:var(--surface);outline:2px solid var(--accent);outline-offset:-2px}.gcell.ghandle .gcell-text{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:var(--fs-sm);color:var(--text-dim)}.grid td.gcell.editing-multiline{overflow:visible;z-index:6}.gcell-textarea{position:absolute;top:0;left:0;z-index:6;width:max(100%,380px);height:168px;resize:both;white-space:pre-wrap;word-break:break-word;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:var(--fs-sm);line-height:1.45;box-shadow:var(--shadow)}.col-del{width:30px;text-align:center;padding:0!important}.row-del{border:none;background:transparent;color:var(--text-dim);cursor:pointer;font-size:var(--fs-xs);line-height:1;padding:var(--sp-xs);border-radius:var(--r-sm);color:var(--icon-dim);display:inline-flex;transition:color .12s,background .12s}.grid tbody tr:hover .row-del{color:var(--text-dim)}.row-del:hover,.row-del:focus-visible{background:var(--warn-bg);color:var(--danger-text)}.panel{border:1px solid var(--border);border-radius:var(--r-lg);padding:var(--sp-lg);background:var(--surface);box-shadow:var(--shadow)}.help-btn{width:1.15rem;height:1.15rem;margin-left:var(--sp-xs);padding:0;border:1px solid var(--border-strong);border-radius:50%;background:var(--surface);color:var(--text-dim);font:inherit;font-size:var(--fs-xs);font-weight:600;line-height:1;vertical-align:.1em;cursor:pointer}.help-btn:hover,.help-btn[aria-expanded=true]{border-color:var(--accent);color:var(--accent-text)}.help-box{margin:0 0 var(--sp-lg);padding:var(--sp-md) var(--sp-lg);border-radius:var(--r-lg);background:var(--accent-weak);font-size:var(--fs-sm);line-height:1.5}.help-box p{margin:0 0 var(--sp-sm)}.help-box a{color:var(--accent-text)}.panel-title{margin:0 0 var(--sp-sm);font-size:var(--fs-lg)}.panel-hint{margin:0 0 var(--sp-md);color:var(--text-dim);font-size:var(--fs-sm)}.panel-hint.note{background:var(--accent-weak);padding:var(--sp-sm) var(--sp-md);border-radius:var(--r-md);color:var(--text)}.field{display:block;margin-bottom:var(--sp-md)}.field>span{display:block;font-size:var(--fs-sm);color:var(--text-dim);margin-bottom:var(--sp-2xs)}input[type=text],.field input{width:100%;border:1px solid var(--border-strong);border-radius:var(--r-md);padding:var(--sp-sm) var(--sp-md);font:inherit;background:var(--surface);color:inherit}.field input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-weak)}.btn-icon{border:none;background:transparent;color:var(--text-dim);cursor:pointer;font-size:var(--fs-base);padding:var(--sp-2xs) var(--sp-xs);border-radius:var(--r-sm)}.btn-icon:hover{background:var(--border);color:var(--danger-text)}.count{margin:var(--sp-xs) 0 var(--sp-md);font-size:var(--fs-base);color:var(--text-dim)}.count strong{color:var(--text)}.tpl-prices{margin:calc(-1 * var(--sp-xs)) 0 var(--sp-xs);font-size:var(--fs-sm);color:var(--accent-text);font-variant-numeric:tabular-nums}.tpl-summary{border:1px solid var(--border);border-radius:var(--r-md);padding:var(--sp-md) var(--sp-md);background:var(--surface-2);margin-bottom:var(--sp-md)}.tpl-name{font-weight:600;margin-bottom:var(--sp-sm)}.tpl-options{list-style:none;margin:0 0 var(--sp-sm);padding:0;display:flex;flex-direction:column;gap:var(--sp-xs)}.tpl-options li{display:flex;gap:var(--sp-sm);font-size:var(--fs-sm)}.tpl-opt-name{flex-shrink:0;font-weight:600;color:var(--text-dim);min-width:70px}.tpl-opt-values{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tpl-linked{float:right;font-size:var(--fs-xs);font-weight:500;color:var(--accent-text)}.tpl-linked.unsaved{color:var(--text-dim)}.btn-row{display:flex;gap:var(--sp-sm)}.btn-row .btn{flex:1}.tpl-save-new{margin-top:var(--sp-sm)}.tpl-library{margin-top:var(--sp-2xl)}.tpl-library-title{display:flex;align-items:center;gap:var(--sp-sm);margin:0 0 var(--sp-md)}.tpl-library-count{background:var(--border);color:var(--text-dim);border-radius:999px;padding:0 var(--sp-sm);font-size:var(--fs-xs)}.tpl-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:var(--sp-sm)}.tpl-item{display:flex;align-items:center;gap:var(--sp-xs);flex-wrap:wrap;border:1px solid var(--border);border-radius:var(--r-md);padding:var(--sp-xs) var(--sp-sm);background:var(--surface-2)}.tpl-item.active{border-color:var(--accent);background:var(--accent-weak)}.tpl-load{flex:1;min-width:0;display:flex;flex-direction:column;align-items:flex-start;gap:var(--sp-2xs);border:none;background:transparent;cursor:pointer;font:inherit;text-align:left;padding:var(--sp-2xs) var(--sp-2xs);color:inherit}.tpl-item-name{font-weight:600;font-size:var(--fs-base);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tpl-item-meta{font-size:var(--fs-xs);color:var(--text-dim)}.tpl-item-actions{display:flex;gap:var(--sp-2xs);flex-shrink:0}.tpl-rename{flex:1;min-width:0;border:1px solid var(--accent);border-radius:var(--r-sm);padding:var(--sp-xs) var(--sp-sm);font:inherit;font-size:var(--fs-base);background:var(--surface);color:inherit}.tpl-rename:focus{outline:none}.tpl-del-confirm{flex-basis:100%;display:flex;align-items:center;gap:var(--sp-sm);font-size:var(--fs-sm);color:var(--danger-text);padding:var(--sp-xs) var(--sp-2xs) var(--sp-2xs)}.tpl-del-confirm span{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.warn-note{background:var(--warn-bg);color:var(--warn);padding:var(--sp-sm) var(--sp-md);border-radius:var(--r-md);margin:0 0 var(--sp-sm);font-size:var(--fs-sm)}.confirm{border:1px solid var(--warn);background:var(--warn-bg);border-radius:var(--r-md);padding:var(--sp-md);margin-top:var(--sp-sm)}.confirm p{margin:0 0 var(--sp-md);font-size:var(--fs-sm)}.confirm-actions{display:flex;gap:var(--sp-md)}.confirm-actions .btn{margin-top:0}.btn.danger{background:var(--danger);border-color:var(--danger)}.btn.danger:hover{background:var(--danger-hover)}.strategy{border:1px solid var(--border);border-radius:var(--r-md);padding:var(--sp-md) var(--sp-md);margin:0 0 var(--sp-lg)}.strategy legend{font-size:var(--fs-sm);color:var(--text-dim);padding:0 var(--sp-xs)}.strategy label{display:flex;gap:var(--sp-md);align-items:flex-start;font-size:var(--fs-sm);margin-bottom:var(--sp-sm)}.strategy label:last-child{margin-bottom:0}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-sm);width:100%;padding:var(--sp-md) var(--sp-lg);margin-top:var(--sp-sm);border:1px solid var(--border-strong);border-radius:var(--r-md);background:var(--surface);color:var(--text);font:inherit;font-weight:500;cursor:pointer;transition:background .12s,border-color .12s}.btn:hover{background:var(--hover)}.btn.primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}.btn.primary:hover{background:var(--accent-hover)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary:disabled:hover{background:var(--accent)}.preview-bar{grid-column:1 / -1;grid-row:2;display:flex;align-items:center;justify-content:space-between;gap:var(--sp-xl);padding:var(--sp-md) var(--sp-2xl);background:var(--surface);border-top:1px solid var(--border)}.rows-preview{font-size:var(--fs-lg)}.rows-before{color:var(--text-dim)}.rows-after{font-weight:700;color:var(--accent-text)}.rows-label{color:var(--text-dim)}.delta{margin-left:var(--sp-md);font-size:var(--fs-sm);font-weight:600;padding:var(--sp-2xs) var(--sp-sm);border-radius:999px}.delta.down{color:var(--accent-text);background:var(--accent-weak)}.delta.up{color:var(--warn);background:var(--warn-bg)}.preview-bar .export{width:auto;margin:0;padding:var(--sp-md) var(--sp-2xl)}.error{color:var(--danger-text);font-size:var(--fs-base)}.parse-warnings{margin:0 0 var(--sp-md);padding:var(--sp-md) var(--sp-lg);background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--r-lg);font-size:var(--fs-base)}.parse-warnings.lossy{border-color:var(--danger)}.parse-warnings summary{cursor:pointer;font-weight:600}.parse-warnings.lossy summary,.parse-warnings li.loss{color:var(--danger-text)}.parse-warnings ul{margin:var(--sp-sm) 0;padding-left:var(--sp-xl)}.parse-ack{display:block;margin-top:var(--sp-xs)}.modal:focus{outline:none}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--backdrop);display:flex;align-items:center;justify-content:center;padding:var(--sp-3xl);z-index:100}.modal{background:var(--surface);border-radius:var(--r-xl);width:min(920px,100%);max-height:90vh;display:flex;flex-direction:column;box-shadow:var(--shadow-pop)}.modal-head{display:flex;align-items:center;gap:var(--sp-lg);padding:var(--sp-xl) var(--sp-xl);border-bottom:1px solid var(--border)}.modal-title-input{flex:1;border:1px solid transparent;border-radius:var(--r-md);padding:var(--sp-sm) var(--sp-md);font:inherit;font-size:var(--fs-lg);font-weight:600;background:transparent;color:inherit}.modal-title-input:hover{border-color:var(--border)}.modal-title-input:focus{outline:none;border-color:var(--accent);background:var(--surface)}.btn-icon.lg{font-size:var(--fs-xl);padding:var(--sp-xs) var(--sp-md)}.modal-body{padding:var(--sp-xl);overflow-y:auto}.modal-foot{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-xl);padding:var(--sp-lg) var(--sp-xl);border-top:1px solid var(--border)}.foot-count{color:var(--text-dim)}.foot-count strong{color:var(--text)}.foot-actions{display:flex;align-items:flex-end;gap:var(--sp-md)}.foot-actions .btn{width:auto;margin:0;padding:var(--sp-md) var(--sp-2xl)}.options{display:flex;flex-direction:column;gap:var(--sp-lg);margin-bottom:var(--sp-2xl)}.option-block{border:1px solid var(--border);border-radius:var(--r-lg);padding:var(--sp-lg) var(--sp-lg);background:var(--surface-2)}.option-head{display:flex;align-items:center;gap:var(--sp-md);margin-bottom:var(--sp-md)}.option-name{width:220px;max-width:60%;border:1px solid var(--border-strong);border-radius:var(--r-md);padding:var(--sp-xs) var(--sp-md);font:inherit;font-weight:600;background:var(--surface);color:inherit}.option-name:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-weak)}.chips{display:flex;flex-wrap:wrap;gap:var(--sp-sm);align-items:center}.chip{display:inline-flex;align-items:center;gap:var(--sp-xs);background:var(--surface);border:1px solid var(--border-strong);border-radius:999px;padding:var(--sp-xs) var(--sp-xs) var(--sp-xs) var(--sp-md);font-size:var(--fs-base)}.chip-label{border:none;background:transparent;color:inherit;font:inherit;padding:0;cursor:text;border-radius:var(--r-sm)}.chip-label:hover{text-decoration:underline dotted;text-underline-offset:3px}.chip.editing{padding:var(--sp-2xs) var(--sp-xs);border-color:var(--accent)}.chip-edit{border:none;background:transparent;color:inherit;font:inherit;padding:var(--sp-2xs) var(--sp-xs);outline:none}.chip-x{border:none;background:transparent;cursor:pointer;color:var(--text-dim);font-size:var(--fs-xs);line-height:1;padding:var(--sp-2xs);border-radius:50%}.chip-x:hover{background:var(--border);color:var(--danger-text)}.chip-input{flex:1;min-width:160px;border:none;padding:var(--sp-xs) var(--sp-sm);font:inherit;background:transparent;color:inherit}.add-option{width:auto;margin:0;align-self:flex-start;padding:var(--sp-sm) var(--sp-xl)}.matrix-empty{padding:var(--sp-2xl);text-align:center;border:1px dashed var(--border-strong);border-radius:var(--r-lg)}.matrix-toolbar{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-xl);padding-bottom:var(--sp-md);border-bottom:1px solid var(--border);margin-bottom:var(--sp-sm)}.group-by{display:flex;align-items:center;gap:var(--sp-sm);font-size:var(--fs-base);color:var(--text-dim)}.group-by select{font:inherit;padding:var(--sp-xs) var(--sp-sm);border:1px solid var(--border-strong);border-radius:var(--r-md);background:var(--surface);color:inherit}.matrix-count{font-size:var(--fs-base);color:var(--text-dim)}.matrix-prices{display:inline-flex;align-items:center;gap:var(--sp-sm);font-size:var(--fs-sm);color:var(--accent-text);font-weight:600}.matrix-prices .dot{font-size:var(--fs-xs)}.matrix-price-hint{margin:0 0 var(--sp-md)}.vgroup-head .vgroup-price,.vrow .vrow-price,.matrix .vgroup-qty,.vrow .vrow-qty{width:84px;flex-shrink:0;border:1px solid var(--border-strong);border-radius:var(--r-md);padding:var(--sp-xs) var(--sp-sm);font:inherit;font-size:var(--fs-sm);font-variant-numeric:tabular-nums;text-align:right;background:var(--surface);color:inherit}.vgroup-price:focus,.vrow-price:focus,.vgroup-qty:focus,.vrow-qty:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-weak)}.vgroup-price:disabled,.vrow-price:disabled,.vgroup-qty:disabled,.vrow-qty:disabled{opacity:.45;cursor:not-allowed}.matrix .vgroup-qty,.vrow .vrow-qty{width:64px}.vgroup-qty[aria-invalid],.vrow-qty[aria-invalid]{border-color:var(--danger)}.matrix-inventory{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-sm) var(--sp-xl);margin:0 0 var(--sp-md);font-size:var(--fs-sm)}.inv-switch,.inv-all{display:inline-flex;align-items:center;gap:var(--sp-md)}.inv-hint{flex-basis:100%;margin:0}.groups-list{display:flex;flex-direction:column}.vgroup{border-bottom:1px solid var(--border)}.vgroup-head{display:flex;align-items:center;gap:var(--sp-md);padding:var(--sp-md) var(--sp-xs)}.vgroup-toggle{flex:1;display:flex;align-items:center;gap:var(--sp-md);border:none;background:transparent;cursor:pointer;font:inherit;padding:var(--sp-2xs) 0;text-align:left;color:inherit}.caret{display:inline-block;transition:transform .12s;color:var(--text-dim);font-size:var(--fs-sm)}.caret.open{transform:rotate(90deg)}.vgroup-name{font-weight:600}.vgroup-count{color:var(--text-dim);font-size:var(--fs-sm)}.vrows{display:flex;flex-direction:column;padding:0 0 var(--sp-sm) var(--sp-3xl)}.vrow{display:flex;align-items:center;gap:var(--sp-md);padding:var(--sp-xs) var(--sp-xs);border-top:1px dashed var(--border);font-size:var(--fs-base);cursor:pointer}.vrow.off .vrow-label{color:var(--text-dim);text-decoration:line-through}.vrow-toggle{flex:1;display:inline-flex;align-items:center;gap:var(--sp-md);cursor:pointer;min-width:0}.vrow-toggle .vrow-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.popover{position:relative;display:inline-block}.popover>.btn-inline{display:inline-flex;align-items:center;gap:var(--sp-xs)}.popover-panel{position:absolute;top:calc(100% + 4px);z-index:30;max-height:min(70vh,560px);overflow-y:auto;background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--r-lg);box-shadow:var(--shadow-pop);padding:var(--sp-md)}.popover-panel.left{left:0}.popover-panel.right{right:0}.cc-count{color:var(--text-dim);font-variant-numeric:tabular-nums}.cc-pop{width:300px}.popover-panel .cc-search{width:100%;margin-bottom:var(--sp-md);border:1px solid var(--border-strong);border-radius:var(--r-md);padding:var(--sp-sm) var(--sp-md);font:inherit;background:var(--surface);color:inherit}.cc-actions{display:flex;gap:var(--sp-sm);padding-bottom:var(--sp-md);margin-bottom:var(--sp-sm);border-bottom:1px solid var(--border)}.cc-actions .btn-inline{flex:1}.cc-group+.cc-group{margin-top:var(--sp-md)}.cc-group-title{margin:var(--sp-2xs) 0 var(--sp-xs)}.cc-item{display:flex;align-items:center;gap:var(--sp-md);padding:var(--sp-2xs) var(--sp-xs);border-radius:var(--r-sm);cursor:pointer;font-size:var(--fs-base)}.cc-item:hover{background:var(--hover)}.cc-item-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cc-note{margin:var(--sp-md) 0 var(--sp-2xs);padding-top:var(--sp-md);border-top:1px solid var(--border);font-size:var(--fs-xs);line-height:1.4;color:var(--text-dim)}.field select{width:100%;border:1px solid var(--border-strong);border-radius:var(--r-md);padding:var(--sp-sm) var(--sp-md);font:inherit;background:var(--surface);color:inherit}.field select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-weak)}.fr-opts{display:flex;flex-wrap:wrap;gap:var(--sp-md) var(--sp-xl);margin:var(--sp-2xs) 0 var(--sp-xs)}.check{display:inline-flex;align-items:center;gap:var(--sp-sm);font-size:var(--fs-sm);color:var(--text);cursor:pointer}.check.disabled{opacity:.45;cursor:not-allowed}.gcell-select{padding:var(--sp-xs) var(--sp-sm);cursor:pointer}.grid-empty{padding:var(--sp-2xl);text-align:center;color:var(--text-dim);border:1px dashed var(--border-strong);border-radius:var(--r-lg);background:var(--surface)}.filter-panel{width:min(40rem,calc(100vw - 3rem))}.filter-group{display:flex;flex-direction:column;gap:var(--sp-sm)}.filter-row{display:flex;align-items:flex-start;gap:var(--sp-sm)}.filter-label,.filter-conj{flex:0 0 3.75rem;width:3.75rem}.filter-label{padding-top:var(--sp-sm);font-size:var(--fs-sm);color:var(--text-dim)}.filter-cond{flex:1;min-width:0;display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-sm)}.filter-subgroup{flex:1;min-width:0;padding:var(--sp-sm);border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface-2)}.filter-actions{display:flex;align-items:center;gap:var(--sp-sm);padding-left:calc(3.75rem + var(--sp-sm))}.filter-remove-group{margin-left:auto;color:var(--text-dim)}.filter-remove-group:hover:not(:disabled){color:var(--danger-text)}.filter-empty{margin:0 0 var(--sp-sm);font-size:var(--fs-sm);color:var(--text-dim)}.filter-panel-foot{display:flex;justify-content:flex-end;margin-top:var(--sp-md);padding-top:var(--sp-md);border-top:1px solid var(--border)}.filter-x{color:var(--text-dim)}.filter-x:hover{color:var(--danger-text)}.filter-search,.filter-panel select,.filter-q{border:1px solid var(--border-strong);border-radius:var(--r-md);padding:var(--sp-xs) var(--sp-md);font:inherit;font-size:var(--fs-base);background:var(--surface);color:inherit}.filter-search:focus,.filter-panel select:focus,.filter-q:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-weak)}.filter-conj{padding:var(--sp-xs)}.filter-col{width:11rem}.filter-op{width:9rem}.filter-q{flex:1;min-width:6rem}.filter-search{width:280px;max-width:100%}.filter-values{flex-basis:100%;display:flex;flex-wrap:wrap;gap:var(--sp-xs);max-height:9rem;overflow-y:auto}.value-chip{display:inline-flex;align-items:center;gap:var(--sp-xs);max-width:100%;padding:var(--sp-2xs) var(--sp-sm);border:1px solid var(--border-strong);border-radius:var(--r-sm);font-size:var(--fs-sm);cursor:pointer}.value-chip.on{border-color:var(--accent);background:var(--accent-weak);color:var(--accent-text)}.value-chip-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fv-count{color:var(--text-dim);font-size:var(--fs-xs);font-variant-numeric:tabular-nums}.col-sort{display:inline-flex;align-items:center;gap:var(--sp-xs);max-width:calc(100% - 8px);border:none;background:transparent;font:inherit;color:inherit;letter-spacing:inherit;cursor:pointer;padding:0}.col-sort-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.col-sort-ind{flex-shrink:0;font-size:.7em;color:var(--icon-dim)}.col-sort:hover .col-sort-ind{color:var(--text-dim)}.col-sort.active{color:var(--accent-text)}.col-sort.active .col-sort-ind{color:inherit}.col-sort-rank{font-size:.85em;font-weight:600;margin-left:1px;vertical-align:super}.col-sort{cursor:grab}.col-sort:active{cursor:grabbing}.col-drag-grip{flex-shrink:0;font-size:.85em;color:var(--icon-dim);letter-spacing:-.15em}.col-head:hover .col-drag-grip{color:var(--text-dim)}.col-variants .col-sort{cursor:pointer}.col-head.dragging{opacity:.4}.col-head.drop-target{box-shadow:inset 2px 0 0 0 var(--accent)}.col-head.drop-target-after{box-shadow:inset -2px 0 0 0 var(--accent)}.grid-nomatch{text-align:center;color:var(--text-dim);padding:var(--sp-xl)!important}.toasts{position:fixed;right:1rem;bottom:4.5rem;z-index:90;display:flex;flex-direction:column;gap:var(--sp-md);width:min(420px,calc(100vw - 2rem));pointer-events:none}.toast-live{display:flex;flex-direction:column;gap:var(--sp-md)}.toast{pointer-events:auto;background:var(--surface);color:var(--text);border:1px solid var(--border-strong);border-left:4px solid var(--text-dim);border-radius:var(--r-lg);box-shadow:var(--shadow-pop);padding:var(--sp-md) var(--sp-lg);font-size:var(--fs-base)}.toast.success{border-left-color:var(--accent)}.toast.warning{border-left-color:var(--warn);background:var(--warn-bg)}.toast.error{border-left-color:var(--danger);color:var(--danger-text)}.toast-main{display:flex;align-items:flex-start;gap:var(--sp-md)}.toast-text{flex:1}.toast-actions{display:flex;align-items:center;gap:var(--sp-xs);flex-shrink:0}.toast-btn{border:0;background:none;color:var(--accent-text);font:inherit;font-weight:600;cursor:pointer;padding:0 var(--sp-xs)}.toast-btn:hover{text-decoration:underline}.toast-x{border:0;background:none;color:var(--text-dim);cursor:pointer;font-size:var(--fs-sm);padding:0 var(--sp-xs)}.toast-line{margin:var(--sp-sm) 0 0;color:var(--text-dim)}.toast-details{margin:var(--sp-sm) 0 0;padding-left:var(--sp-xl);color:var(--text-dim)}.confirm-backdrop{z-index:200}.confirm-dialog{width:min(440px,100%);padding:var(--sp-xl) var(--sp-xl)}.confirm-title{margin:0 0 var(--sp-sm);font-size:var(--fs-lg)}.confirm-msg{margin:0 0 var(--sp-xl);color:var(--text-dim);font-size:var(--fs-base)}.confirm-dialog-actions{display:flex;justify-content:flex-end;gap:var(--sp-md)}.confirm-dialog-actions .btn{width:auto;margin-top:0}.field-hint{margin:calc(-1 * var(--sp-xs)) 0 var(--sp-sm);font-size:var(--fs-xs);color:var(--text-dim)}.field-hint.error{color:var(--danger-text)}.foot-actions .apply-template{display:flex;flex-direction:column;align-items:flex-end;gap:var(--sp-xs);max-width:520px}.foot-actions .apply-template .warn-note,.foot-actions .apply-template .error{margin:0}.settings-field{display:flex;flex-direction:column;gap:var(--sp-xs);width:280px;margin:0 0 var(--sp-lg);padding:0;border:0}.settings-field:last-child{margin-bottom:0}.settings-title{padding:0;margin-bottom:var(--sp-xs)}.settings-field .field-hint{margin:0}.seg{display:flex;border:1px solid var(--border-strong);border-radius:var(--r-md);overflow:hidden}.seg-opt{flex:1;text-align:center;font-size:var(--fs-sm);padding:var(--sp-sm) var(--sp-xs);cursor:pointer}.seg-opt+.seg-opt{border-left:1px solid var(--border-strong)}.seg-opt input{position:absolute;opacity:0;pointer-events:none}.seg-opt.disabled{color:var(--text-dim);cursor:not-allowed}.seg-opt.on{background:var(--accent-weak);color:var(--accent-text);font-weight:600}.seg-opt:has(input:focus-visible){outline:2px solid var(--focus);outline-offset:-2px}.shortcuts-pop{width:360px}.shortcuts-list{margin:0;display:grid;gap:var(--sp-sm)}.shortcut{display:grid;grid-template-columns:11rem 1fr;gap:var(--sp-md);align-items:baseline;font-size:var(--fs-sm)}.shortcut dt,.shortcut dd{margin:0}kbd{font-family:inherit;font-size:var(--fs-xs);background:var(--surface-2);border:1px solid var(--border-strong);border-radius:var(--r-sm);padding:var(--sp-2xs) var(--sp-xs);white-space:nowrap}.warn-note .icon,.flag .icon{vertical-align:-.2em}.mobile-note{display:none}.seg-field{border:0;margin:0 0 var(--sp-md);padding:0}.tracking-actions{display:flex;flex-direction:column}.variants-btn{border:none;background:transparent;color:inherit;font:inherit;padding:var(--sp-2xs) var(--sp-sm);margin:calc(-1 * var(--sp-2xs)) calc(-1 * var(--sp-sm));border-radius:var(--r-sm);cursor:pointer;white-space:nowrap}.variants-btn:hover{background:var(--accent-weak);color:var(--accent-text)}.variants-btn .flag{cursor:inherit}.drawer-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--backdrop);display:flex;justify-content:flex-end;z-index:100}.drawer{background:var(--surface);width:min(1180px,100%);height:100%;display:flex;flex-direction:column;box-shadow:var(--shadow-pop)}.drawer:focus{outline:none}.drawer-head{display:flex;align-items:flex-start;gap:var(--sp-lg);padding:var(--sp-xl) var(--sp-xl);border-bottom:1px solid var(--border)}.drawer-titles{flex:1;min-width:0}.drawer-title{margin:0;font-size:var(--fs-lg);font-weight:600;overflow-wrap:anywhere}.drawer-sub{margin:var(--sp-xs) 0 0;font-size:var(--fs-sm);color:var(--text-dim)}.drawer-differ{color:var(--warn)}.drawer-differ .icon,.peek-table .icon{vertical-align:-.2em}.drawer-body{flex:1;overflow:auto}.drawer-empty{padding:var(--sp-xl);color:var(--text-dim)}.drawer-foot{padding:var(--sp-lg) var(--sp-xl);border-top:1px solid var(--border);font-size:var(--fs-sm);color:var(--text-dim)}.peek-table{border-collapse:collapse;width:100%;font-size:var(--fs-sm)}.peek-table th,.peek-table td{padding:var(--sp-sm) var(--sp-lg);border-bottom:1px solid var(--border);text-align:left;white-space:nowrap}.peek-table th{position:sticky;top:0;background:var(--surface-2);font-weight:600;z-index:1}.peek-table th.differs{color:var(--warn)}.peek-table .peek-num{color:var(--text-dim);width:1%;text-align:right}.peek-table .peek-opt{font-weight:500}.peek-table tbody tr:hover{background:var(--hover)}.peek-table .peek-focus{background:var(--accent-weak)}.peek-table th.peek-focus{box-shadow:inset 0 -2px 0 var(--accent)}.peek-table td.peek-edit,.peek-setall td{padding:var(--sp-2xs) var(--sp-sm)}.peek-setall th,.peek-setall td{position:sticky;top:2.05rem;z-index:1;background:var(--surface-2)}.peek-setall th{font-weight:500;color:var(--text-dim);text-align:right}.peek-input{width:6.5rem;padding:var(--sp-xs) var(--sp-sm);font:inherit;font-variant-numeric:tabular-nums;color:var(--text);background:var(--surface);border:1px solid var(--border);border-radius:4px}.peek-input.wide{width:11rem}.peek-input:hover{border-color:var(--text-dim)}.peek-input:focus{outline:2px solid var(--accent);outline-offset:-1px;border-color:var(--accent)}.peek-input[data-dirty]{background:var(--accent-weak)}@media (max-width: 1100px){.app-header.with-file{flex-wrap:wrap}.workspace{grid-template-columns:1fr 300px}.workspace:has(.sidebar.collapsed){grid-template-columns:1fr 44px}.btn-inline.sidebar-toggle{display:inline-flex;align-self:flex-start;margin:var(--sp-md)}.sidebar.collapsed .tabs,.sidebar.collapsed .tabpanel{display:none}}@media (max-width: 820px){.workspace,.workspace:has(.sidebar.collapsed){grid-template-columns:1fr;grid-template-rows:auto auto auto}.main{grid-column:1;grid-row:1}.sidebar{grid-column:1;grid-row:2;border-left:none;border-top:1px solid var(--border)}.preview-bar{grid-row:3}.app{height:auto;min-height:100dvh}.app-header{padding:var(--sp-lg) var(--sp-xl)}.with-file .header-actions{width:100%;flex-wrap:wrap}.brand{min-width:0}.file-name{flex:1;max-width:none}.history-text{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.main{padding:var(--sp-lg) var(--sp-xl)}.tabs{padding:var(--sp-md) var(--sp-xl) 0}.tabpanel{padding:var(--sp-lg) var(--sp-xl)}.grid-wrap{max-height:70dvh}.btn-inline.sidebar-toggle{display:none}.sidebar.collapsed .tabs,.sidebar.collapsed .tabpanel{display:revert}.preview-bar{position:sticky;bottom:0;padding:var(--sp-md) var(--sp-xl)}.mobile-note{display:flex;align-items:flex-start;gap:var(--sp-md);margin:0 0 var(--sp-md);padding:var(--sp-md) var(--sp-lg);font-size:var(--fs-sm);background:var(--warn-bg);color:var(--text);border-radius:var(--r-md)}.mobile-note span{flex:1}.toasts{left:1rem;right:1rem;width:auto}.popover-panel,.popover-panel.left,.popover-panel.right{position:fixed;top:4rem;left:1rem;right:1rem}.cc-pop,.shortcuts-pop,.settings-field,.filter-panel{width:auto}.filter-label,.filter-conj{flex-basis:3.25rem;width:3.25rem}.filter-col,.filter-op{flex:1 1 7rem;width:auto;min-width:0}.filter-actions{flex-wrap:wrap;padding-left:0}.filter-actions .btn-inline{white-space:nowrap}.shortcut{grid-template-columns:1fr 1fr}.grid td.gcell.frz-first{position:relative;left:auto}.grid thead th.frz-first,.grid thead th.col-variants.pin,.grid thead th.col-del.pin{left:auto;right:auto;box-shadow:none}.grid td.pin{position:static}.preview-bar .export{white-space:nowrap}}.tag-preview{list-style:none;margin:calc(-1 * var(--sp-xs)) 0 var(--sp-md);padding:0;font-size:var(--fs-xs);color:var(--text-dim)}.tag-preview li{padding:var(--sp-2xs) 0;overflow-wrap:anywhere}.bulk-row-head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-md);margin-bottom:var(--sp-2xs)}.bulk-row-head label{font-size:var(--fs-sm);color:var(--text-dim);overflow-wrap:anywhere}.field textarea{width:100%;border:1px solid var(--border-strong);border-radius:var(--r-md);padding:var(--sp-sm) var(--sp-md);font:inherit;background:var(--surface);color:inherit;resize:vertical}.field textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-weak)}
