:root{color-scheme:light;--bg: #f4f6f6;--panel: #ffffff;--line: #e5e7eb;--line-strong: #b8c4d4;--text: #1f1f1f;--muted: #6b7280;--brand: #0058aa;--brand-dark: #004488;--brand-soft: #e8f1fa;--yellow: #fbd915;--yellow-soft: #fef7cc;--green: #1e9e5a;--danger: #ed1c24;--orange: #f59e0b;--shadow: 0 1px 3px rgba(0, 40, 80, .08), 0 4px 12px rgba(0, 40, 80, .06);--cell-w: 216px;--title-w: 96px;--cell-line: 24px}*{box-sizing:border-box}body{margin:0;overflow:hidden;color:var(--text);background:var(--bg);font-family:Alibaba PuHuiTi,PingFang SC,Microsoft YaHei,Helvetica Neue,Arial,sans-serif}button,input{font:inherit}button{cursor:pointer}.app-shell{display:grid;grid-template-rows:54px 1fr;width:100vw;height:100vh}.top-tabs{position:relative;display:flex;align-items:center;gap:6px;overflow:hidden;padding:8px 12px 14px;border-bottom:1px solid var(--line);background:#fff}.top-tabs:after{position:absolute;left:0;right:0;bottom:0;height:6px;background:repeating-linear-gradient(45deg,var(--yellow) 0 12px,#ffffff 12px 24px);content:""}.tab-strip{display:flex;flex:1 1 auto;min-width:0;align-items:center;gap:6px;overflow-x:auto}.tab-button{flex:0 0 auto;height:32px;padding:0 12px;color:var(--muted);white-space:nowrap;border:1px solid var(--line);border-radius:6px;background:#fff;transition:border-color .16s ease,color .16s ease,background .16s ease}.tab-button:not(.progress){cursor:grab}.tab-button:not(.progress):active{cursor:grabbing}.tab-button.active{color:#fff;border-color:var(--brand);background:var(--brand)}.tab-button.progress{flex:0 0 auto;color:var(--brand);border-color:var(--yellow);background:var(--yellow);font-weight:800}.new-tab-button{flex:0 0 auto;width:32px;height:32px;color:var(--brand);border:1px solid var(--line);border-radius:6px;background:#fff}.tab-step-button{flex:0 0 auto;width:28px;height:32px;padding:0;color:var(--muted);border:1px solid var(--line);border-radius:6px;background:#fff;transition:color .16s ease,border-color .16s ease,background .16s ease}.tab-step-button:hover{color:var(--brand);border-color:var(--brand);background:var(--brand-soft)}.tab-context-menu{position:fixed;z-index:30;display:none;min-width:112px;padding:6px;border:1px solid var(--line);border-radius:6px;box-shadow:var(--shadow);background:#fff}.tab-context-menu.open,.tab-switch-menu.open{display:grid;gap:4px}.tab-context-menu button,.tab-switch-menu button{height:30px;padding:0 10px;color:var(--text);text-align:left;white-space:nowrap;border:0;border-radius:4px;background:transparent}.tab-context-menu button:hover,.tab-switch-menu button:hover,.tab-switch-menu button.active{color:var(--brand);background:var(--brand-soft)}.tab-switch-menu{position:fixed;z-index:30;display:none;min-width:160px;width:max-content;max-height:360px;overflow-y:auto;padding:6px;border:1px solid var(--line);border-radius:6px;box-shadow:var(--shadow);background:#fff}.tab-switch-empty{padding:8px 10px;color:var(--muted);font-size:12px;white-space:nowrap}.workspace{display:grid;grid-template-columns:336px 1fr;min-height:0}.workspace.sidebar-collapsed{grid-template-columns:42px 1fr}.sidebar{display:grid;grid-template-rows:auto auto auto auto auto 1fr;min-height:0;padding:14px;border-right:1px solid var(--line);background:var(--panel);box-shadow:2px 0 12px #0028500a}.workspace.sidebar-collapsed .sidebar{width:42px;min-width:0;padding:8px 6px;overflow:hidden}.sidebar.group-mode{grid-template-rows:auto auto auto auto 1fr 0}.title-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:12px}.title-copy{min-width:0}.title-row h1{min-width:0;margin:0;font-size:20px;color:var(--brand);font-weight:800;line-height:1.2;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.room-title-separator,.room-title-name{color:var(--muted)}.room-title-name{font-weight:700}.room-title-separator.hidden,.room-title-name.hidden{display:none}.brand-title{display:flex;align-items:center;gap:8px;min-width:0}.brand-title img{width:44px;height:auto;flex:0 0 auto;object-fit:contain}.sidebar-toggle-button{display:inline-flex;flex-shrink:0;align-items:center;justify-content:center;width:28px;height:28px;padding:0;color:var(--muted);border:0;border-radius:6px;outline:none;background:transparent;transition:color .16s ease,background .16s ease,box-shadow .16s ease}.sidebar-toggle-button:hover{color:var(--brand);background:var(--brand-soft)}.sidebar-toggle-button:focus-visible{box-shadow:0 0 0 3px #0058aa2e}.sidebar-toggle-button svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;pointer-events:none}.workspace.sidebar-collapsed .title-row{justify-content:center;margin-bottom:0}.workspace.sidebar-collapsed .title-copy,.workspace.sidebar-collapsed .field,.workspace.sidebar-collapsed .actions,.workspace.sidebar-collapsed .file-input,.workspace.sidebar-collapsed .group-panel,.workspace.sidebar-collapsed .product-list{display:none}.count-badge{color:var(--muted);font-size:12px}.field{display:grid;gap:6px;margin-bottom:10px}.field span{color:var(--muted);font-size:12px}.text-input{width:100%;height:34px;padding:0 10px;color:var(--text);border:1px solid var(--line);border-radius:6px;outline:none;background:#fff}.text-input:focus{border-color:var(--brand);box-shadow:0 0 0 3px #0058aa1f}.actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:10px}.hidden-action{display:none}.export-wide{grid-column:1 / -1}.button{height:34px;padding:0 10px;border:1px solid var(--line);border-radius:6px;background:#fff;transition:border-color .16s ease,background .16s ease}.button:hover{color:var(--brand);border-color:var(--brand);background:var(--brand-soft)}.button.primary{color:#fff;border-color:var(--brand);background:var(--brand)}.button.primary:hover{color:#fff;border-color:var(--brand-dark);background:var(--brand-dark)}.button.green{color:var(--brand);border-color:var(--yellow);background:var(--yellow);font-weight:800}.button.green:hover{color:var(--brand);border-color:var(--brand);background:var(--yellow-soft)}.button.danger{color:#fff;border-color:var(--danger);background:var(--danger)}.button:disabled{cursor:not-allowed;opacity:.55}.group-panel{display:none;max-height:238px;min-height:0;overflow-y:auto;margin-bottom:10px;border:1px solid var(--line);border-radius:6px;background:#fafbfc}.group-panel.open{display:block}.sidebar.group-mode .group-panel.open{height:100%;max-height:none}.sidebar.group-mode .product-list{display:none}.group-item{display:grid;grid-template-columns:28px 1fr 30px;align-items:center;min-height:36px;padding:4px 6px;border-bottom:1px solid var(--line)}.group-item:hover{background:var(--brand-soft)}.group-item:last-child{border-bottom:0}.drag-handle{color:var(--muted);text-align:center;cursor:grab}.group-name-input{width:100%;padding:5px 6px;border:1px solid transparent;border-radius:4px;background:transparent}.group-name-input:focus{border-color:var(--brand);background:#fff;outline:none}.delete-button{width:26px;height:26px;color:var(--danger);border:1px solid transparent;border-radius:4px;background:transparent}.delete-button:hover{color:#fff;border-color:var(--danger);background:var(--danger)}.product-list{min-height:0;overflow:auto;padding-right:4px}.list-hint{padding:14px;color:var(--muted);border:1px solid var(--line);border-radius:6px;background:#fafbfc}.list-hint strong{display:block;margin-bottom:8px;color:var(--text);font-size:15px}.product-card{position:relative;display:grid;gap:5px;margin-bottom:8px;padding:10px 34px 10px 10px;border:1px solid var(--line);border-radius:6px;background:#fff;cursor:grab;transition:border-color .16s ease,box-shadow .16s ease,transform .16s ease}.product-card:hover{border-color:var(--brand);box-shadow:var(--shadow);transform:translateY(-1px)}.product-card-delete{position:absolute;top:6px;right:6px;display:grid;place-items:center;width:24px;height:24px;padding:0;color:var(--danger);border:1px solid transparent;border-radius:4px;background:transparent;font-size:13px;font-weight:800;line-height:1;cursor:pointer}.product-card:hover .product-card-delete,.product-card-delete:hover,.product-card-delete:focus-visible{color:#fff;border-color:var(--danger);outline:none;background:var(--danger)}.category-group{display:grid;gap:6px}.category-group.level-2{margin-bottom:8px}.category-group.level-3{margin-left:12px}.category-toggle{display:flex;align-items:center;justify-content:space-between;min-height:34px;padding:0 10px;color:var(--text);border:1px solid var(--line);border-radius:6px;background:#fff}.category-toggle:hover{border-color:var(--brand);background:var(--brand-soft)}.category-toggle[data-open=true]{color:var(--brand);border-color:var(--brand);background:var(--brand-soft);font-weight:700}.category-toggle span{min-width:0;overflow:hidden;text-align:left;white-space:nowrap;text-overflow:ellipsis}.category-toggle em{flex:0 0 auto;color:var(--muted);font-size:12px;font-style:normal}.category-products{margin-left:12px}.product-name{font-weight:700;line-height:1.35}.product-meta{display:grid;grid-template-columns:92px minmax(0,1fr);gap:4px 12px;color:var(--muted);font-size:12px}.product-meta span{min-width:0}.product-meta .meta-barcode,.product-meta .meta-sku,.product-meta .meta-spec{white-space:nowrap;word-break:keep-all}.canvas-area{position:relative;min-width:0;min-height:0;overflow:hidden;background:linear-gradient(#e7edf3 1px,transparent 1px),linear-gradient(90deg,#e7edf3 1px,transparent 1px);background-size:24px 24px}.canvas-toolbar{position:absolute;z-index:5;top:12px;right:12px;display:grid;align-items:stretch;gap:12px;padding:8px;border:1px solid var(--line);border-radius:6px;background:#fffffff0;box-shadow:var(--shadow)}.canvas-toolbar-row{display:flex;align-items:center;gap:8px}.zoom-toolbar-row{justify-content:center}.action-toolbar-row{justify-content:flex-end}.canvas-toolbar .button{height:28px;padding:0 8px;font-size:12px}.canvas-toolbar .button.active{color:#fff;border-color:var(--brand);background:var(--brand)}.canvas-minimap-panel{position:absolute;z-index:5;top:var(--toolbar-bottom, 96px);right:12px;width:var(--minimap-width, 180px);height:var(--minimap-height, 180px)}.canvas-minimap-panel.hidden{display:none}.canvas-minimap-panel.collapsed{width:32px;aspect-ratio:auto}.canvas-minimap{position:relative;width:100%;height:100%;overflow:hidden;cursor:grab;border:1px solid var(--line);border-radius:6px;box-shadow:var(--shadow);background:#fffffff0}.canvas-minimap:active{cursor:grabbing}.canvas-minimap.hidden,.canvas-minimap-panel.collapsed .canvas-minimap{display:none}.minimap-toggle-button{position:absolute;z-index:2;top:4px;right:4px;display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;padding:0;color:var(--brand);border:1px solid rgba(0,88,170,.22);border-radius:6px;outline:none;background:#ffffffeb;box-shadow:var(--shadow);transition:color .16s ease,background .16s ease,box-shadow .16s ease}.minimap-toggle-button:hover{color:var(--brand-dark);background:var(--brand-soft)}.minimap-toggle-button:focus-visible{box-shadow:0 0 0 3px #0058aa2e}.minimap-toggle-button svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;pointer-events:none}.minimap-item,.minimap-viewport{position:absolute;box-sizing:border-box;border-radius:3px}.minimap-item.group{border:1px dashed rgba(0,88,170,.58);background:#0058aa1f}.minimap-item.group span{position:absolute;top:50%;left:2px;overflow:visible;color:var(--brand);font-size:8px;line-height:10px;padding:0 2px;white-space:nowrap;background:#ffffffe0;transform:translateY(-50%);pointer-events:none}.minimap-item.free{border:1px solid rgba(22,163,74,.55);background:#16a34a24}.minimap-viewport{border:2px solid var(--brand);background:#0058aa14}.zoom-slider-wrap{position:relative;display:inline-flex;align-items:center;width:58px}.zoom-label{position:absolute;left:50%;color:var(--text);font-size:11px;font-weight:700;line-height:1;text-align:center;transform:translate(-50%);pointer-events:none}.zoom-slider{width:58px;accent-color:var(--brand)}.canvas-viewport{width:100%;height:100%;overflow:hidden;-webkit-user-select:none;user-select:none}.canvas-content{position:relative;width:3600px;min-height:9000px;transform-origin:0 0;-webkit-user-select:none;user-select:none}.canvas-content input,.canvas-content textarea,.canvas-content select{-webkit-user-select:text;user-select:text}.empty-hint,.progress-view{position:absolute;top:88px;left:88px;max-width:680px;padding:18px;color:var(--muted);border:1px solid var(--line);border-radius:6px;background:#fffffff2;box-shadow:var(--shadow)}.empty-hint strong,.progress-view strong{display:block;margin-bottom:8px;color:var(--text);font-size:16px}.empty-hint p{margin:0 0 8px;line-height:1.7}.empty-hint p:last-child{margin-bottom:0}.progress-view{display:grid;gap:12px}.progress-tab{padding:10px;border:1px solid var(--line);border-radius:6px;background:#fff}.progress-tab:hover{border-color:var(--brand);background:var(--brand-soft)}.progress-tab h3{margin:0 0 8px;color:var(--brand);font-size:15px}.progress-tab p{margin:4px 0;color:var(--muted);font-size:13px}.group-box{position:absolute;border:2px dashed rgba(0,88,170,.62);background:#ffffffb3;transition:width .12s ease,height .12s ease}.group-title{position:absolute;top:0;left:0;display:flex;align-items:center;width:100%;height:44px;padding-left:8px;color:var(--brand);font-size:22px;font-weight:800}.group-summary{position:absolute;top:0;right:42px;display:flex;align-items:center;justify-content:flex-end;height:44px;max-width:calc(100% - 180px);color:#31546f;font-size:14px;font-weight:700;pointer-events:none;white-space:nowrap}.group-header{position:absolute;left:0;display:grid;height:28px;color:var(--brand);font-size:12px;font-weight:700;background:var(--brand-soft)}.group-header div{display:flex;align-items:center;justify-content:center;min-width:0;padding:0 6px;overflow:hidden;line-height:1.15;text-align:center;white-space:nowrap;border-top:1px solid var(--line-strong);border-right:1px solid var(--line-strong);border-bottom:1px solid var(--line-strong)}.group-header div:first-child{border-left:1px solid var(--line-strong)}.group-content{position:absolute;top:0;height:100%}.inline-edit-input{z-index:8;border:1px solid var(--brand);outline:none;background:#fff}.layer-meta{position:absolute;left:0;display:grid;grid-template-columns:34px 54px 54px;width:142px;height:var(--row-h);background:#fafbfc}.layer-label,.layer-pitch-input,.layer-weight-input{display:flex;align-items:center;justify-content:center;min-width:0;height:100%;color:var(--text);font-size:12px;font-weight:700;text-align:center;border:0;border-top:1px solid var(--line-strong);border-right:1px solid var(--line-strong);border-bottom:1px solid var(--line-strong);background:transparent}.layer-label{position:relative;border-left:1px solid var(--line-strong)}.layer-pitch-input,.layer-weight-input{padding:0 4px;outline:none;font-weight:600;user-select:text;-webkit-user-select:text}.layer-pitch-input:focus,.layer-weight-input:focus{background:#fff;box-shadow:inset 0 0 0 2px #0058aa47}.row-title{position:absolute;display:grid;grid-template-rows:var(--row-grid, var(--cell-line) var(--cell-line) var(--cell-line) calc(var(--cell-line) * 2) var(--cell-line) var(--cell-line) var(--cell-line));width:var(--title-w);border-left:1px solid var(--line-strong);background:#fafbfc}.row-insert-button{position:absolute;left:0;z-index:6;display:flex;align-items:center;justify-content:center;width:34px;height:28px;padding:0;color:#fff;border:0;outline:none;background:transparent;opacity:0}.row-insert-button:before{display:flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:var(--brand);box-shadow:var(--shadow);content:"+"}.row-insert-button:hover,.row-insert-button:focus-visible{opacity:1}.row-delete-button{position:absolute;z-index:7;top:50%;left:50%;display:flex;align-items:center;justify-content:center;width:22px;height:22px;padding:0;color:#fff;border:0;border-radius:50%;outline:none;background:var(--danger);box-shadow:var(--shadow);opacity:0;transform:translate(-50%,-50%);cursor:pointer}.empty-layer-label:hover .row-delete-button,.row-delete-button:focus-visible{opacity:1}.row-title div,.product-block div{display:flex;align-items:center;justify-content:center;min-width:0;padding:0 6px;overflow:hidden;line-height:1.15;text-align:center;white-space:nowrap;word-break:keep-all;border-right:1px solid var(--line-strong);border-bottom:1px solid var(--line-strong)}.row-title div:first-child,.product-block>div:first-of-type{border-top:1px solid var(--line-strong)}.product-block div{white-space:normal;word-break:break-all}.product-block{position:absolute;display:grid;grid-template-rows:var(--row-grid, var(--cell-line) var(--cell-line) var(--cell-line) calc(var(--cell-line) * 2) var(--cell-line) var(--cell-line) var(--cell-line));width:var(--cell-w);height:var(--row-h, calc(var(--cell-line) * 8));cursor:grab;background:#fff;user-select:none;-webkit-user-select:none}.product-block.status-product:after{position:absolute;z-index:0;top:0;right:0;bottom:0;left:0;content:"";border-radius:2px;pointer-events:none}.product-block.status-new{background:#ff0}.product-block.status-new:after{background:#ffff0038;box-shadow:inset 0 0 0 2px #b09c006b}.product-block.status-off{background:red}.product-block.status-off:after{background:#ff00002e;box-shadow:inset 0 0 0 2px #a000006b}.product-block:hover{outline:2px solid rgba(0,88,170,.18);outline-offset:0}.product-block div,.product-block button:not(.product-remove),.product-block span{position:relative;z-index:1;user-select:none;-webkit-user-select:none}.product-block.heat-product div,.product-block.heat-product .spec-cell{background:transparent}.drop-preview{position:absolute;z-index:2;width:var(--cell-w);height:var(--row-h, calc(var(--cell-line) * 8));border:2px dashed rgba(0,88,170,.75);background:#0058aa24;box-shadow:0 10px 22px #0058aa2e;pointer-events:none;transition:left .1s ease,top .1s ease}.photo-link-layer{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;width:3600px;height:9000px;overflow:visible;pointer-events:none}.photo-link-layer line{stroke:var(--brand);stroke-width:2;stroke-dasharray:7 6;opacity:.62}.photo-window{position:absolute;z-index:5;color:var(--text);border:1px solid var(--line-strong);border-radius:8px;background:#fff;box-shadow:var(--shadow)}.photo-header{display:flex;align-items:center;justify-content:space-between;height:38px;gap:8px;padding:0 10px;color:var(--brand);font-weight:700;cursor:move;border-bottom:1px solid var(--line);border-radius:8px 8px 0 0;background:var(--brand-soft);-webkit-user-select:none;user-select:none}.photo-actions{display:flex;align-items:center;gap:4px}.photo-actions button{width:26px;height:26px;padding:0;color:var(--brand);border:1px solid var(--line);border-radius:4px;background:#fff}.photo-actions .photo-delete-button{color:var(--danger)}.photo-body{position:relative;display:grid;place-items:center;padding:12px;overflow:hidden;border-radius:0 0 8px 8px;background:linear-gradient(45deg,rgba(148,163,184,.08) 25%,transparent 25%),linear-gradient(-45deg,rgba(148,163,184,.08) 25%,transparent 25%),#fff;background-size:18px 18px}.photo-body.has-photo{display:block;padding:0}.photo-body.drag-over{background:var(--brand-soft);box-shadow:inset 0 0 0 2px #0058aa6b}.empty-photo{width:100%;height:100%;display:grid;place-items:center;gap:8px;color:var(--muted);text-align:center;border:2px dashed var(--line-strong);border-radius:6px;background:#ffffffad}.empty-photo strong{display:block;color:var(--text)}.photo-preview{position:absolute;left:50%;top:50%;object-fit:contain;border-radius:4px;background:#fff;transform-origin:center center}.photo-file-input{display:none}.photo-resize-handle{position:absolute;z-index:7;width:36px;height:36px;border:2px solid #fff;border-radius:50%;background:var(--brand)}.photo-resize-handle.nw{top:-18px;left:-18px;cursor:nwse-resize}.photo-resize-handle.ne{top:-18px;right:-18px;cursor:nesw-resize}.photo-resize-handle.sw{bottom:-18px;left:-18px;cursor:nesw-resize}.photo-resize-handle.se{right:-18px;bottom:-18px;cursor:nwse-resize}.free-product{border-left:1px solid var(--line-strong)}.product-remove{position:absolute;z-index:4;top:-18px;right:-18px;display:none;width:60px;height:60px;padding:0;color:#fff;border:0;border-radius:50%;background:radial-gradient(circle at center,var(--danger) 0 20px,transparent 21px);font-size:26px;line-height:60px;text-align:center}.product-block:hover .product-remove{display:block}.product-block.dragging{opacity:.45}.product-block .name-cell{font-weight:700}.product-block.stacked-product .sku-cell,.product-block.stacked-product .barcode-cell,.product-block.stacked-product .name-cell,.product-block.stacked-product .price-cell{display:grid;align-content:center;gap:1px}.product-block.stacked-product .sku-cell span,.product-block.stacked-product .barcode-cell span,.product-block.stacked-product .name-cell span,.product-block.stacked-product .price-cell span{display:block;min-width:0}.spec-cell,.face-cell{display:flex;align-items:center;justify-content:center;width:100%;min-width:0;height:100%;padding:0 6px;color:var(--text);text-align:center;border:0;border-right:1px solid var(--line-strong);border-bottom:1px solid var(--line-strong);background:transparent}.editable-text{display:inline-block;min-width:28px;padding:1px 4px;border-radius:3px;background:#94a3b82e}.spec-cell:hover,.face-cell:hover{color:var(--brand);background:var(--brand-soft)}.spec-cell.editing,.face-cell.editing{position:relative;z-index:10;display:block;padding:0;background:#fff;overflow:visible}.editable-input{width:100%;height:100%;padding:0 6px;text-align:center;border:1px solid var(--brand);outline:none}.product-block .spec-option-panel{position:absolute;z-index:20;top:100%;left:0;display:grid;align-items:start;grid-template-columns:minmax(72px,1fr);width:max-content;min-width:100%;max-width:120px;height:auto;padding:6px;gap:4px;overflow:visible;color:var(--text);text-align:left;white-space:normal;word-break:keep-all;border:1px solid var(--line-strong);border-radius:6px;background:#fff;box-shadow:var(--shadow)}.spec-option{min-width:0;height:26px;padding:0 8px;color:var(--text);text-align:center;border:1px solid #dbe3ef;border-radius:4px;background:#f8fafc}.spec-option:hover{color:var(--brand);border-color:var(--brand);background:var(--brand-soft)}.resize-dot{position:absolute;width:36px;height:36px;border:2px solid #fff;border-radius:50%;background:var(--brand)}.resize-dot.top{top:-18px;left:50%;transform:translate(-50%);cursor:ns-resize}.resize-dot.bottom{bottom:-18px;left:50%;transform:translate(-50%);cursor:ns-resize}.resize-dot.right{top:50%;right:-18px;transform:translateY(-50%);cursor:ew-resize}.resize-guide{position:absolute;z-index:3;pointer-events:none;border-color:var(--brand);opacity:.9;transition:left .12s ease,top .12s ease}.resize-guide.vertical{top:0;bottom:0;border-left:2px dashed var(--brand)}.resize-guide.horizontal{left:0;right:0;border-top:2px dashed var(--brand)}.resize-guide.top-guide{border-top-color:var(--brand-dark)}.selection-box{position:absolute;display:none;border:1px dashed var(--brand);background:#0058aa1f;pointer-events:none}.file-input{display:none}.toast{position:absolute;z-index:20;right:12px;bottom:12px;max-width:360px;padding:10px 12px;color:#fff;border-radius:6px;background:var(--brand);box-shadow:var(--shadow);opacity:0;transform:translateY(8px);transition:opacity .18s ease,transform .18s ease}.toast.show{opacity:1;transform:translateY(0)}.modal-backdrop{position:fixed;z-index:30;top:0;right:0;bottom:0;left:0;display:none;align-items:center;justify-content:center;padding:20px;background:#00285038}.modal-backdrop.open{display:flex}.modal-backdrop.stacked-modal{z-index:60;background:#00285057}.room-entry-modal{background:#ffffffc7;-webkit-backdrop-filter:blur(14px) saturate(112%);backdrop-filter:blur(14px) saturate(112%)}.room-entry-modal .modal-card{box-shadow:0 18px 42px #00285029}.modal-card{width:min(420px,100%);max-height:calc(100vh - 40px);overflow:auto;padding:16px;border:1px solid var(--line);border-radius:8px;background:#fff;box-shadow:var(--shadow)}.small-modal-card{width:min(360px,100%);min-height:0}.import-card{width:min(820px,100%);height:min(700px,calc(100vh - 40px));overflow:hidden;display:grid;grid-template-rows:auto auto minmax(0,1fr)}.management-tabs{display:flex;gap:8px;margin:-4px 0 14px}.management-tab{min-width:128px;height:46px;padding:0 16px;color:var(--text);border:1px solid var(--line);border-radius:14px;background:#fff;box-shadow:0 1px 2px #0028500d;font-weight:800;transition:color .16s ease,border-color .16s ease,background .16s ease,box-shadow .16s ease}.management-tab:hover{color:var(--brand);border-color:var(--brand);background:var(--brand-soft)}.management-tab.active{color:#fff;border-color:var(--brand);background:var(--brand);box-shadow:0 4px 10px #0058aa2e}.archive-layout{display:grid;grid-template-columns:minmax(0,1fr) 220px;gap:14px;min-height:0;height:100%}.archive-panel-wrap,.archive-control-panel{display:grid;min-height:0}.archive-panel-wrap{grid-template-rows:auto 1fr;gap:8px}.archive-control-panel{grid-template-rows:auto repeat(3,36px) minmax(0,1fr);gap:10px;overflow:hidden;padding-left:14px;border-left:1px solid var(--line)}.archive-admin-region{min-height:0;overflow-y:auto;padding-right:2px}.archive-section-title{color:var(--muted);font-size:12px;font-weight:700}.archive-panel{position:relative;min-height:0;overflow:hidden}.archive-list{display:grid;align-content:start;gap:8px;height:100%;min-height:0;overflow-y:auto;padding-right:4px}.archive-multi-hint{position:absolute;top:50%;left:0;right:4px;z-index:2;display:grid;place-items:center;color:#94a3b857;font-size:34px;font-weight:800;letter-spacing:0;pointer-events:none;transform:translateY(-50%);-webkit-user-select:none;user-select:none}.archive-node{position:relative;z-index:1;display:grid;grid-template-columns:minmax(0,1fr) 136px;gap:5px;column-gap:12px;align-items:center;min-height:58px;padding:10px;text-align:left;border:1px solid var(--line);border-radius:6px;background:#fff;transition:border-color .16s ease,background .16s ease,box-shadow .16s ease,transform .16s ease}.archive-node:hover,.archive-node.active{border-color:var(--brand);background:var(--brand-soft)}.archive-node strong{grid-column:1;color:var(--text);font-size:14px}.archive-node span{grid-column:1;color:var(--muted);font-size:12px}.archive-node>em,.archive-node-tags{grid-column:2;grid-row:1 / span 2;justify-self:end}.archive-node-tags{display:flex;align-items:center;justify-content:flex-end;gap:6px;min-width:0}.archive-node .archive-node-tags{grid-column:2;color:inherit;font-size:inherit}.archive-node em{justify-self:end;padding:4px 8px;color:var(--brand);font-size:12px;font-style:normal;font-weight:800;white-space:nowrap;border:1px solid rgba(0,88,170,.28);border-radius:999px;background:#0058aa14}.archive-node .room-badge{max-width:70px;overflow:hidden;color:#64748b;text-overflow:ellipsis;border-color:#64748b3d;background:#64748b14}.room-node{overflow:hidden;border-radius:10px;cursor:grab}.category-node em{color:#64748b;border-color:#64748b3d;background:#64748b14}.management-category-group{display:grid;gap:6px}.category-node.level-2{display:grid;grid-template-columns:28px minmax(0,1fr);padding-left:6px}.category-node.level-3{margin-left:28px}.category-tree-toggle{width:24px;height:24px;padding:0;color:var(--brand);border:0;background:transparent;font-weight:800}.category-node-main{display:grid;grid-template-columns:minmax(0,1fr) 88px;gap:5px;column-gap:12px;align-items:center;min-width:0;padding:0;text-align:left;border:0;background:transparent}.category-node-main>span{grid-column:1;color:var(--muted);font-size:12px}.category-node-main>em{grid-column:2;grid-row:1 / span 2;justify-self:end}.category-node strong{min-width:0}.category-node strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.room-node:hover{box-shadow:var(--shadow);transform:translateY(-1px)}.room-node.active{box-shadow:0 5px 14px #0058aa24}.room-node.active:before{position:absolute;top:8px;bottom:8px;left:0;width:4px;border-radius:0 999px 999px 0;background:var(--brand);content:""}.room-node.dragging{opacity:.48;cursor:grabbing}.room-node.drop-before,.room-node.drop-after{box-shadow:var(--shadow)}.room-node.drop-before:after,.room-node.drop-after:after{position:absolute;left:10px;right:10px;height:3px;border-radius:999px;background:var(--brand);content:""}.room-node.drop-before:after{top:-2px}.room-node.drop-after:after{bottom:-2px}.archive-admin-box{display:grid;grid-template-columns:1fr;gap:8px;align-content:start;padding-top:12px;margin-top:2px;border-top:1px solid var(--line)}.archive-admin-box.muted-box,.archive-admin-note{color:var(--muted);font-size:12px;line-height:1.5}.archive-admin-box .field{margin-bottom:0}.modal-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}.modal-head h2{margin:0;font-size:18px;line-height:1.25}.modal-field{display:grid;gap:6px}.modal-field span{color:var(--muted);font-size:12px}.modal-copy{margin:0;color:var(--muted);line-height:1.6}.check-field{display:flex;align-items:center;gap:8px;min-height:32px;margin-top:10px;color:var(--text)}.check-field input{width:16px;height:16px;accent-color:var(--brand)}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}.vertical-button{width:100%;height:100%;min-height:116px;padding:10px 0;writing-mode:vertical-rl;text-orientation:upright;letter-spacing:0}.import-summary{display:grid;grid-template-columns:170px 1fr;align-items:center;gap:12px;padding:10px;border:1px solid var(--line);border-radius:6px;background:#fff}.sheet-picker{display:grid;gap:5px}.sheet-picker span{color:var(--muted);font-size:12px}.sheet-picker select{height:34px;min-width:0;padding:0 8px;color:var(--text);border:1px solid var(--line);border-radius:6px;background:#fff}.import-file-info{display:flex;align-items:center;justify-content:space-between;min-width:0;gap:12px}.import-file-info strong{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.import-file-info span{flex:0 0 auto;color:var(--muted);font-size:12px}.mapping-board-wrap{display:grid;grid-template-columns:52px 1fr;gap:8px;align-items:stretch}.mapping-braces{display:grid;grid-template-rows:repeat(5,44px) repeat(7,44px);gap:8px}.mapping-brace{position:relative;display:flex;align-items:center;justify-content:center;min-width:0;border-left:3px solid var(--brand);color:var(--brand);font-weight:800;writing-mode:vertical-rl;text-orientation:upright}.mapping-brace:before,.mapping-brace:after{content:"";position:absolute;left:-3px;width:18px;height:3px;background:currentColor}.mapping-brace:before{top:0}.mapping-brace:after{bottom:0}.mapping-brace span{padding:8px 0;background:#fff}.preset-brace{grid-row:1 / span 5}.base-brace{grid-row:6 / span 7;color:var(--green);border-left-color:var(--green)}.mapping-board{display:grid;gap:8px}.mapping-row{display:grid;grid-template-columns:140px 44px 1fr;align-items:center;gap:8px}.mapping-standard{padding:8px 10px;color:var(--brand);border:1px solid rgba(0,88,170,.26);border-radius:6px;background:var(--brand-soft);font-weight:700;text-align:center}.mapping-standard.base-field{color:var(--brand);border-color:#fbd915e6;background:var(--yellow-soft)}.mapping-arrow{position:relative;color:var(--brand);font-weight:800;text-align:center}.mapping-arrow:before{content:"";position:absolute;top:50%;left:-4px;right:-4px;border-top:2px solid rgba(0,88,170,.45);transform:translateY(-50%);z-index:-1}.mapping-select{height:36px;min-width:0;padding:0 10px;color:var(--text);border:1px solid var(--line);border-radius:6px;background:#fff}@media(max-width:900px){.workspace{grid-template-columns:292px 1fr}.workspace.sidebar-collapsed{grid-template-columns:42px 1fr}.sidebar{padding:10px}}.workspace.mobile-preview-mode{grid-template-columns:1fr}.workspace.mobile-preview-mode .sidebar,.workspace.mobile-preview-mode .canvas-toolbar,.workspace.mobile-preview-mode .canvas-minimap-panel{display:none}.workspace.mobile-preview-mode .canvas-viewport{overflow:auto;touch-action:pan-x pan-y;-webkit-overflow-scrolling:touch}.workspace.mobile-preview-mode .canvas-content{transform:none}.workspace.mobile-preview-mode .product-block,.workspace.mobile-preview-mode .group-title,.workspace.mobile-preview-mode .resize-dot,.workspace.mobile-preview-mode .product-remove,.workspace.mobile-preview-mode .row-insert-button,.workspace.mobile-preview-mode .row-delete-button{pointer-events:none}.workspace.mobile-preview-mode .row-insert-button,.workspace.mobile-preview-mode .row-delete-button,body.mobile-preview-mode .new-tab-button{display:none}body.mobile-preview-mode .tab-button:not(.progress){cursor:pointer}
