:root,:root[data-theme=dark]{color-scheme:dark;--ground: #0b1220;--bg: var(--ground);--panel: #111827;--panel-2: #0f172a;--raised: #1e293b;--border: #1e293b;--border-strong: #334155;--rule: #1e293b;--control: #334155;--text: #e2e8f0;--muted: #94a3b8;--accent: #38bdf8;--accent-hover: #7dd3fc;--on-accent: #0b1220;--accent-2: #38bdf8;--chart: #38bdf8;--positive: #4ade80;--negative: #f87171;--warn: #422006;--warn-text: #fde68a;--warn-badge: #d97706;--ikea: #0058a3;--ikea-fg: #ffda1a;--castorama: #0f7a3c;--brw: #b91c1c;--canvas: #0f172a;--plan-bg: #0b1220;--plan-empty: rgba(11, 18, 32, .78);--modal-scrim: rgba(2, 6, 23, .65);--radius: 8px;--radius-control: 6px;--gap: 12px;--pad: 16px;--control-h: 36px;--topbar-h: 44px;--rail-w: 232px;--inspector-w: 280px;--font: "Geist", "IBM Plex Sans", system-ui, sans-serif;--mono: "Geist Mono", "IBM Plex Mono", ui-monospace, Menlo, monospace;--fs-body: 14px;--fs-small: 12px;--fs-section: 13px;--shadow-none: none}:root[data-theme=light]{color-scheme:light;--ground: #f2f4f7;--bg: var(--ground);--panel: #ffffff;--panel-2: #fafafa;--raised: #eeeeee;--border: #e6e6e6;--border-strong: #d4d4d4;--rule: #f0f0f0;--control: #d4d4d4;--text: #0a0a0a;--muted: #6b6b6b;--accent: #141414;--accent-hover: #2a2a2a;--on-accent: #ffffff;--accent-2: #1d5fbf;--chart: #1d5fbf;--positive: #2e7d32;--negative: #c4242a;--warn: #fffbeb;--warn-text: #92400e;--warn-badge: #d97706;--ikea: #0058a3;--ikea-fg: #ffda1a;--castorama: #0f7a3c;--brw: #b91c1c;--canvas: #e8ecf1;--plan-bg: #eef1f5;--plan-empty: rgba(242, 244, 247, .72);--modal-scrim: rgba(10, 10, 10, .35)}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:var(--font);font-size:var(--fs-body);color:var(--text);background:var(--ground);-webkit-font-smoothing:antialiased}.app{display:flex;flex-direction:column;height:100%;overflow:hidden;position:relative;background:var(--ground)}.topbar{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:8px 16px;height:auto;min-height:var(--topbar-h);padding:6px 12px;background:var(--ground);border-bottom:1px solid var(--border);flex-shrink:0;position:relative;z-index:20;overflow:visible}.topbar-left,.topbar-center,.topbar-right{display:flex;align-items:center;gap:8px;min-width:0}.topbar-left{gap:12px}.topbar-center{justify-content:center;flex-wrap:wrap}.topbar-right{justify-content:flex-end;gap:4px}.topbar-cluster{display:inline-flex;align-items:center;gap:4px;padding-right:8px;margin-right:4px;border-right:1px solid var(--border)}.topbar-cluster:last-child{border-right:0;padding-right:0;margin-right:0}.topbar-label{font-size:11px;color:var(--muted);margin-right:4px;white-space:nowrap}.app-logo{display:flex;align-items:center;gap:8px}.app-logo img{display:block;height:22px;width:auto}.app-logo-sub{font-size:14px;font-weight:600;color:var(--text);letter-spacing:-.01em}.app-logo-author{font-size:11px;color:var(--muted);text-decoration:none}.app-logo-author:hover{color:var(--chart)}.statusbar-meta a{color:var(--muted);text-decoration:none}.statusbar-meta a:hover{color:var(--chart)}.seg{display:inline-flex;gap:0;border:1px solid var(--border-strong);border-radius:var(--radius-control);overflow:hidden;background:var(--panel)}.seg .icon-btn{border:0;border-radius:0;border-right:1px solid var(--border);min-height:32px;background:transparent}.seg .icon-btn:last-child{border-right:0}.seg .icon-btn:hover{background:var(--raised)}.seg .icon-btn.active{background:var(--raised);color:var(--text);box-shadow:inset 0 -2px 0 var(--chart)}.menu{position:relative}.menu-panel{position:absolute;right:0;top:calc(100% + 6px);z-index:30;min-width:200px;padding:6px;background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);box-shadow:0 8px 24px #0a0a0a14;display:flex;flex-direction:column;gap:2px}.menu-panel button{text-align:left;width:100%;border:0;background:transparent;padding:8px 10px;border-radius:var(--radius-control)}.menu-panel button:hover{background:var(--raised)}.menu-panel button:disabled{opacity:.4}.menu-sep{height:1px;background:var(--rule);margin:4px 0}button{padding:0 12px;height:var(--control-h);border:1px solid var(--border-strong);background:var(--panel);color:var(--text);border-radius:var(--radius-control);cursor:pointer;font:inherit;font-size:var(--fs-small)}button:hover{background:var(--raised)}button.active{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}button:disabled{opacity:.4;cursor:not-allowed}button.primary{background:var(--accent);border-color:var(--accent);color:var(--on-accent);font-weight:500}button.primary:hover{background:var(--accent-hover)}button:focus-visible,.icon-btn:focus-visible{outline:2px solid var(--chart);outline-offset:2px}.icon-btn{display:inline-flex;align-items:center;gap:6px;padding:0 8px;min-height:32px;height:32px;border:1px solid transparent;background:transparent;color:var(--text)}.icon-btn:hover{background:var(--raised)}.icon-btn.active{background:var(--raised);color:var(--text)}.icon-btn.with-label{padding-right:10px}.icon-btn-glyph{display:inline-flex;color:inherit}.icon-btn-label{font-size:var(--fs-small);font-weight:500}.icon-btn.primary-action{background:var(--accent);color:var(--on-accent);border-color:var(--accent);height:32px;padding:0 12px}.icon-btn.primary-action:hover{background:var(--accent-hover)}.spin{animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.help-popover{position:absolute;top:calc(var(--topbar-h) + 8px);right:12px;z-index:35;width:min(380px,calc(100% - 24px));background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px;box-shadow:0 12px 32px #0a0a0a1a;font-size:var(--fs-small);color:var(--muted)}.help-popover strong{color:var(--text);display:block;margin-bottom:8px;font-size:14px}.help-popover p{margin:6px 0;line-height:1.45}.help-popover kbd{display:inline-block;padding:1px 5px;border:1px solid var(--border-strong);border-radius:4px;background:var(--raised);font-family:var(--mono);font-size:11px;color:var(--text)}.main{flex:1;display:flex;min-height:0;min-width:0;gap:var(--gap);padding:0 8px 8px;background:var(--ground)}.left-panel,.right-panel{width:var(--rail-w);flex:0 0 var(--rail-w);padding:var(--pad);background:var(--panel);border:1px solid var(--border);border-radius:12px;overflow:auto}.right-panel{width:var(--inspector-w);flex-basis:var(--inspector-w)}.panel-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:12px}.panel-head h2{margin:0;font-size:var(--fs-section);font-weight:600;color:var(--text);text-transform:none;letter-spacing:0}.left-panel h3,.right-panel h3{margin:16px 0 8px;font-size:var(--fs-small);font-weight:500;color:var(--muted);text-transform:none;letter-spacing:0}.inspector-tabs{display:grid;grid-template-columns:1fr 1fr 1fr;gap:2px;padding:2px;background:var(--raised);border-radius:var(--radius-control);margin-bottom:12px}.inspector-tabs button{height:30px;border:0;background:transparent;font-size:12px;font-weight:500;color:var(--muted);border-radius:4px}.inspector-tabs button:hover{color:var(--text)}.inspector-tabs button.active{background:var(--panel);color:var(--text);box-shadow:0 1px 2px #0000000f}.inspector-tabs .tab-badge{display:inline-block;margin-left:4px;min-width:16px;padding:0 4px;border-radius:999px;background:var(--negative);color:#fff;font-size:10px;font-weight:600;line-height:16px;text-align:center}.inspector-tabs .tab-badge.warn{background:var(--warn-badge)}.tool-list{display:flex;flex-direction:column;gap:2px;margin-bottom:12px}.tool-group-label{font-size:11px;color:var(--muted);margin:10px 0 4px;padding-left:2px}.tool-row{display:grid;grid-template-columns:20px 1fr auto;gap:10px;align-items:center;text-align:left;height:40px;padding:0 10px;border:0;background:transparent;border-radius:var(--radius-control);color:var(--text);font-size:14px;font-weight:400}.tool-row:hover{background:var(--raised)}.tool-row.active{background:var(--raised);box-shadow:inset 3px 0 0 var(--chart);font-weight:500}.tool-icon{display:inline-flex;color:var(--muted)}.tool-row.active .tool-icon{color:var(--chart)}.tool-hint{opacity:.55;font-size:11px;font-family:var(--mono)}.canvas-area{flex:1 1 auto;display:flex;min-width:0;min-height:0;background:var(--canvas);border:1px solid var(--border);border-radius:12px;overflow:hidden}.canvas-area.split>*{flex:1 1 50%;min-width:0;min-height:0;position:relative}.canvas-area.single>*{flex:1;min-width:0;min-height:0;position:relative}.canvas-area.split>*:first-child{border-right:1px solid var(--border)}.viewport-3d,.viewport-2d{width:100%;height:100%;position:relative;overflow:hidden}.viewport-2d-inner{width:100%;height:100%;position:relative}.plan-svg{width:100%;height:100%;display:block;background:var(--plan-bg);touch-action:none}.plan-svg.panning{cursor:grab}.viewport-3d canvas{display:block!important;width:100%!important;height:100%!important}.plan-empty{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-content:center;gap:8px;background:var(--plan-empty);text-align:center;padding:24px;z-index:5;pointer-events:none}.plan-empty h3{margin:0;font-size:18px;font-weight:600}.plan-empty p{margin:0;color:var(--muted)}.plan-empty .btn-row{justify-content:center;pointer-events:auto}.plan-empty button{pointer-events:auto}.statusbar{display:flex;gap:16px;flex-wrap:wrap;align-items:center;padding:6px 16px;background:var(--ground);border-top:1px solid var(--border);font-size:var(--fs-small);color:var(--muted);flex-shrink:0}.statusbar span{display:inline-flex;align-items:center;gap:4px}.statusbar strong{color:var(--text);font-weight:500;font-variant-numeric:tabular-nums;font-family:var(--mono)}.statusbar-kbd{display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;margin-left:4px;padding:0 4px;border:1px solid var(--border-strong);border-radius:4px;background:var(--panel);font-family:var(--mono);font-size:10px;color:var(--muted)}.statusbar-alert{height:24px;padding:0 8px;border:1px solid #fecaca;background:#fff5f5;color:var(--negative);font-size:11px;font-weight:600;border-radius:999px}.statusbar-alert:hover{background:#fee2e2}.inspector-empty{text-align:left;border-style:solid;background:var(--panel-2)}.inspector-empty strong{color:var(--text);font-size:13px}.design-scan.warn-only{border-color:#fde68a;background:#fffbeb}.field{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px;min-height:32px}.field label{font-size:var(--fs-small);color:var(--muted)}.field input{width:104px;height:32px;padding:0 8px;background:var(--panel);color:var(--text);border:1px solid var(--border-strong);border-radius:var(--radius-control);font-family:var(--mono);font-size:var(--fs-small);font-variant-numeric:tabular-nums}.hint{font-size:var(--fs-small);color:var(--muted);line-height:1.45;margin:8px 0}.warning{background:var(--warn);color:var(--warn-text);padding:8px 10px;border-radius:var(--radius-control);font-size:var(--fs-small);margin-bottom:10px}.room-row{display:flex;justify-content:space-between;gap:8px;align-items:center;font-size:var(--fs-small);margin-bottom:2px;padding:6px 8px;border-radius:var(--radius-control);color:var(--text)}.room-row:hover{background:var(--raised)}.room-row .mono{color:var(--muted)}.linkish{border:0;background:transparent;color:var(--chart);padding:0;height:auto;text-align:left;font-weight:500}.linkish:hover{text-decoration:underline;background:transparent}.toast{position:fixed;bottom:48px;left:50%;transform:translate(-50%);background:var(--accent);color:var(--on-accent);padding:8px 16px;border-radius:999px;font-size:13px;z-index:40;box-shadow:0 8px 24px #0a0a0a2e}.search{width:100%;height:36px;margin-bottom:8px;padding:0 10px;background:var(--panel);color:var(--text);border:1px solid var(--border-strong);border-radius:var(--radius-control);font:inherit;font-size:var(--fs-small)}.chip-row{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:8px}.chip-row button{height:28px;padding:0 8px;font-size:11px;background:var(--panel)}.catalog-grid{display:flex;flex-direction:column;gap:4px;max-height:280px;overflow:auto}.catalog-grid.product-catalog{max-height:min(52vh,420px);gap:6px}.product-card{display:grid!important;grid-template-columns:56px 1fr!important;gap:8px!important;align-items:stretch!important;padding:6px!important;text-align:left;height:auto;min-height:68px;background:var(--panel)}.product-card.active,.product-card:focus-visible{border-color:var(--chart);box-shadow:inset 0 0 0 1px var(--chart)}.product-thumb{width:56px;height:56px;border-radius:6px;overflow:hidden;border:1px solid var(--border);display:grid;place-items:center;background:var(--raised)}.product-thumb img{width:100%;height:100%;object-fit:cover;display:block}.product-meta{display:flex;flex-direction:column;gap:2px;min-width:0}.product-title-row{display:flex;gap:4px;align-items:center}.product-name{font-size:12px;line-height:1.25;font-weight:500}.product-sub,.muted{font-size:11px;color:var(--muted)}.product-sku{font-size:10px;color:var(--muted);font-family:var(--mono);font-variant-numeric:tabular-nums}.product-price{font-size:12px;color:var(--text);font-weight:700;font-variant-numeric:tabular-nums;font-family:var(--mono)}.product-detail{margin-bottom:10px;display:flex;flex-direction:column;gap:4px}.store-badge{display:inline-flex;align-items:center;width:fit-content;font-size:10px;font-weight:700;letter-spacing:.02em;padding:2px 6px;border-radius:4px}.store-ikea{background:var(--ikea);color:var(--ikea-fg)}.store-castorama{background:var(--castorama);color:#ecfdf5}.store-brw{background:var(--brw);color:#fee2e2}.store-chip.store-ikea.active{background:var(--ikea);border-color:var(--ikea);color:var(--ikea-fg)}.store-chip.store-castorama.active{background:var(--castorama);border-color:var(--castorama);color:#fff}.store-chip.store-brw.active{background:var(--brw);border-color:var(--brw);color:#fff}.badge{font-size:10px;padding:1px 5px;border-radius:999px;background:#e8f0fe;color:var(--chart)}.swatch{width:18px;height:18px;border-radius:4px;border:1px solid var(--border-strong);display:inline-block}.cart-count{margin-left:2px;background:var(--chart);color:#fff;border-radius:999px;padding:0 6px;font-size:11px;font-weight:600;font-variant-numeric:tabular-nums}.buy-link{color:var(--chart);font-size:12px;font-weight:600;text-decoration:none}.buy-link:hover{text-decoration:underline}.mono{font-variant-numeric:tabular-nums;font-family:var(--mono);font-size:12px}.empty-inline{padding:12px;text-align:center;color:var(--muted);font-size:12px;border:1px dashed var(--border);border-radius:var(--radius)}.material-picker{margin-bottom:10px}.material-current{display:flex;align-items:center;gap:8px;margin-bottom:8px;font-size:13px}.material-grid{display:grid;grid-template-columns:1fr 1fr;gap:4px}.material-grid button{display:flex;align-items:center;gap:6px;padding:5px 6px;height:auto;min-height:32px;text-align:left;font-size:11px}.mat-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn-row{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}.btn-row button{height:32px}.nudge-pad button{min-width:44px}.rotation-slider{display:flex;align-items:center;gap:8px;margin-bottom:8px}.rotation-slider input[type=range]{flex:1}.design-scan{margin-bottom:12px;padding:10px;border:1px solid var(--border);border-radius:var(--radius);background:var(--panel-2)}.design-scan.ok{border-color:#86efac;background:#f0fdf4}.design-scan h3{margin:0;color:var(--text);font-size:13px;font-weight:600}.design-scan-head{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:4px}.scan-autofix{flex-shrink:0;font-size:11px;padding:0 10px;height:32px;border-color:var(--accent);background:var(--accent);color:#fff}.scan-autofix:disabled{opacity:.5}.scan-err{color:var(--negative);font-weight:600}.scan-warn{color:#b45309;font-weight:600}.issue-list{list-style:none;margin:0;padding:0;max-height:220px;overflow:auto}.issue-row{display:flex;flex-direction:column;gap:4px;margin-bottom:6px}.issue-row button{width:100%;text-align:left;display:flex;flex-direction:column;gap:2px;padding:8px 10px;font-size:11px;min-height:44px;height:auto;justify-content:center;background:var(--panel)}.issue-row .issue-other{min-height:32px;font-size:10px;opacity:.9}.issue-row.error>button:first-child{border-color:#fecaca;background:#fff5f5}.issue-row.warn>button:first-child{border-color:#fde68a;background:#fffbeb}.issue-row.active>button:first-child{outline:2px solid var(--chart);outline-offset:0}.issue-kind{color:var(--muted);text-transform:uppercase;letter-spacing:.04em;font-size:10px}.issue-msg{color:var(--text)}.scene-error{height:100%;min-height:200px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:16px;background:var(--canvas);color:var(--text);text-align:center}.scene-error .hint{max-width:36rem;word-break:break-word;opacity:.75;font-size:11px}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--modal-scrim);z-index:45;display:flex;align-items:center;justify-content:center;padding:16px;animation:fadeIn .15s ease}.modal-card{width:min(560px,100%);max-height:min(80vh,720px);overflow:auto;background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:16px;display:flex;flex-direction:column;gap:12px;box-shadow:0 24px 48px #0a0a0a1f}.modal-head{display:flex;justify-content:space-between;align-items:center;gap:12px}.modal-head h2{margin:0;font-size:18px;font-weight:600}.library-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}.library-row{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:10px;border:1px solid var(--border);border-radius:var(--radius);background:var(--panel-2)}.library-row .hint{display:block;font-size:11px;margin-top:2px}.drawer-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0a0a0a59;z-index:40;display:flex;justify-content:flex-end;animation:fadeIn .15s ease}.shopping-drawer{width:min(560px,100%);height:100%;background:var(--panel);border-left:1px solid var(--border);padding:16px;display:flex;flex-direction:column;gap:12px;box-shadow:-16px 0 40px #0a0a0a1a;animation:slideIn .18s ease}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}@keyframes slideIn{0%{transform:translate(24px)}to{transform:translate(0)}}.shopping-header{display:flex;justify-content:space-between;gap:12px;align-items:flex-start}.shopping-header h2{margin:0 0 4px;font-size:18px;font-weight:600}.shopping-table-wrap{flex:1;overflow:auto;border:1px solid var(--border);border-radius:var(--radius)}.shopping-table{width:100%;border-collapse:collapse;font-size:12px}.shopping-table th,.shopping-table td{padding:8px 10px;border-bottom:1px solid var(--rule);text-align:left;vertical-align:top}.shopping-table th{position:sticky;top:0;background:var(--panel-2);color:var(--muted);font-weight:500}.shopping-footer{display:flex;justify-content:space-between;align-items:center;padding-top:8px;border-top:1px solid var(--border);font-size:14px}.mobile-tabs{display:none}@media (max-width: 1100px){.topbar-label,.app-logo-author{display:none}}@media (max-width: 980px){.left-panel{width:200px;flex-basis:200px}.right-panel{width:240px;flex-basis:240px}.topbar{height:auto;min-height:var(--topbar-h);grid-template-columns:1fr;padding:8px 12px}.topbar-center,.topbar-right{justify-content:flex-start;flex-wrap:wrap}.app-logo-sub{display:none}.main{padding:0 6px 6px;gap:6px}}@media (max-width: 720px){.main{flex-direction:column;padding:0;gap:0}.left-panel,.right-panel{width:100%;flex:0 0 auto;max-height:none;border-radius:0;border-left:0;border-right:0;display:none}.app.mobile-tab-tools .panel-tools{display:block;max-height:42vh;order:1}.app.mobile-tab-plan .panel-plan{display:flex;order:1;min-height:50vh;border-radius:0}.app.mobile-tab-props .panel-props{display:block;max-height:48vh;min-height:38vh;order:1;border-top:1px solid var(--border);overflow:auto}.canvas-area{order:2;min-height:280px;border-radius:0;border-left:0;border-right:0}.app.mobile-tab-plan .canvas-area{order:1;flex:1}.canvas-area.split{flex-direction:column}.canvas-area.split>*:first-child{border-right:0;border-bottom:1px solid var(--border)}.shopping-drawer{width:100%}.mobile-tabs{display:grid;grid-template-columns:1fr 1fr 1fr;gap:0;border-top:1px solid var(--border);background:var(--panel);flex-shrink:0}.mobile-tabs button{border:0;border-radius:0;height:44px;font-size:12px;background:transparent}.mobile-tabs button.active{box-shadow:inset 0 -2px 0 var(--chart);background:transparent;color:var(--text)}}@media (prefers-reduced-motion: reduce){.spin,.drawer-backdrop,.shopping-drawer,.modal-backdrop{animation:none}}
