:root{--paper:#f5f2ea;--surface:#fff;--ink:#24231f;--muted:#77736a;--line:#d8d2c7;--accent:#315f54;--soft:#dfe9e5}*{box-sizing:border-box}html,body{margin:0;min-height:100%;font-family:Inter,ui-sans-serif,system-ui,sans-serif;color:var(--ink);background:var(--paper)}button,input,select,textarea{font:inherit}button{cursor:pointer}.app{min-height:100vh;display:flex;flex-direction:column}header{height:76px;padding:14px 22px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;background:rgba(245,242,234,.96)}header small{font-size:10px;font-weight:800;letter-spacing:.13em;color:var(--muted)}h1{margin:1px 0 0;font:600 28px/1 Inter,ui-sans-serif,system-ui,sans-serif}nav{display:flex;gap:4px;padding:4px;border:1px solid var(--line);border-radius:12px;background:#fff}.tab{border:0;background:transparent;padding:9px 14px;border-radius:8px;font-size:12px;font-weight:700}.tab.active{background:var(--accent);color:#fff}main{flex:1;min-height:0;display:grid;grid-template-columns:205px minmax(0,1fr) 230px}.catalog,.inspector{padding:18px 16px;background:#fff}.catalog{border-right:1px solid var(--line)}.inspector{border-left:1px solid var(--line)}aside h2,.dimensions h2{font:600 22px/1.1 Inter,ui-sans-serif,system-ui,sans-serif;margin:0 0 8px}aside p,.dimensions p{color:var(--muted);font-size:12px;line-height:1.45}.catalog-item{width:100%;margin:5px 0;padding:10px 11px;border:1px solid var(--line);border-radius:9px;background:#faf9f5;text-align:left}.catalog-item strong{display:block;font-size:12px}.catalog-item span{font-size:10px;color:var(--muted)}hr{border:0;border-top:1px solid var(--line);margin:16px 0}label{font-size:12px;color:var(--muted);display:flex;gap:7px;align-items:center}.secondary,.danger,.row button{width:100%;margin-top:12px;padding:9px;border:1px solid var(--line);border-radius:8px;background:#fff}.danger{color:#963c34}.stage{min-width:0;padding:16px;display:flex}.view{display:none;position:relative;flex:1;min-height:520px;border:1px solid var(--line);border-radius:14px;overflow:hidden;background:#dad7ce;box-shadow:0 14px 36px rgba(40,36,30,.07)}.view.active{display:block}canvas{width:100%;height:100%;display:block;touch-action:none}#three-canvas{background:linear-gradient(#e9efec 0 68%,#ddd8cd 68%)}.hint{position:absolute;bottom:12px;left:50%;transform:translateX(-50%);padding:5px 8px;border:1px solid var(--line);border-radius:999px;background:rgba(255,255,255,.9);font-size:10px;color:var(--muted);display:flex;gap:8px;align-items:center;white-space:nowrap}.hint button{border:0;border-radius:999px;padding:5px 8px;background:var(--accent);color:#fff;font-size:10px;font-weight:700}.dimensions{overflow:auto;background:#fff;padding:24px}.chip{display:inline-block;padding:3px 7px;border-radius:999px;font-size:10px;font-weight:700}.chip.direct{background:#e3f2e7;color:#255b38}.chip.inferred{background:#e5edf7;color:#315679}.dim-row{display:grid;grid-template-columns:90px 1fr auto;gap:12px;align-items:center;padding:10px 0;border-bottom:1px solid #eee9df;font-size:12px}.dim-row strong{font-variant-numeric:tabular-nums}.inspector dl{border-top:1px solid var(--line);margin-top:14px}.inspector dl div{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--line);font-size:12px}.inspector dd{margin:0;font-weight:700}.row{display:grid;grid-template-columns:1fr 1fr;gap:6px}footer{min-height:40px;padding:9px 16px;border-top:1px solid var(--line);display:flex;justify-content:space-between;gap:14px;background:#fff;color:var(--muted);font-size:10px}@media(max-width:900px){main{grid-template-columns:170px 1fr}.inspector{grid-column:1/-1;border-left:0;border-top:1px solid var(--line)}.view{min-height:450px}}@media(max-width:650px){header{height:auto;align-items:flex-start;gap:12px;flex-direction:column}nav{width:100%}.tab{flex:1}main{display:block}.catalog,.inspector{border:0;border-bottom:1px solid var(--line)}.stage{height:65vh}.view{min-height:0}.inspector{display:none}footer{flex-direction:column}}
.tool-grid{display:grid;grid-template-columns:1fr 1fr;gap:6px}.tool{padding:9px 8px;border:1px solid var(--line);border-radius:8px;background:#fff;font-size:11px;font-weight:700}.tool.active{background:var(--accent);color:#fff;border-color:var(--accent)}.inspector label{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:center;margin:10px 0}.inspector input,.inspector select{width:92px;padding:7px;border:1px solid var(--line);border-radius:7px;background:#fff}

:root{--canvas:#ebe8df;--wall:#2f312e;--glass:#86aab3}.catalog h2{margin-top:2px}.tool-grid{margin:8px 0}.tool{transition:background .12s ease,border-color .12s ease,transform .12s ease}.tool:active{transform:translateY(1px)}.view{background:var(--canvas)}.inspector small{letter-spacing:.12em;color:var(--muted);font-weight:800}.window-note{font-size:10px;color:var(--muted)}

.catalog{overflow:auto;max-height:calc(100vh - 116px)}.catalog-item{transition:border-color .12s ease,background .12s ease}.catalog-item:hover{border-color:#aba499;background:#fff}

.camera-hint{left:12px;right:12px;transform:none;justify-content:center;flex-wrap:wrap;white-space:normal}.camera-hint span{min-width:140px;text-align:center}.camera-hint button{width:auto;margin:0}.camera-hint[hidden]{display:none}#three-canvas{cursor:grab}#three-canvas:active{cursor:grabbing}

.level-row{grid-template-columns:1fr auto 1fr;align-items:center}.level-row strong{min-width:40px;text-align:center;font-variant-numeric:tabular-nums}#label-text{width:150px}.inspector #display-level{margin-top:16px;padding-top:12px;border-top:1px solid var(--line)}

.field-note{display:block;margin:-3px 0 10px;color:var(--muted);font-size:10px}.inspector label strong{margin-left:auto;font-variant-numeric:tabular-nums}

.secondary.active{background:var(--accent);color:#fff;border-color:var(--accent)}#position-lock{margin-top:16px;padding-top:12px;border-top:1px solid var(--line)}

.lighting-controls{display:grid;gap:8px}.lighting-controls label{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:11px;color:var(--muted)}.lighting-controls input[type=number]{width:66px}.lighting-controls input[type=color]{width:46px;height:28px;padding:2px;border:1px solid var(--line);border-radius:7px;background:#fff}.lighting-controls small{font-size:10px;line-height:1.35;color:var(--muted)}#light-selection input[type=color]{width:54px;height:30px;padding:2px}

#cabinet-vertical{margin-top:8px;padding-top:8px;border-top:1px solid var(--line)}#cabinet-vertical label{margin-bottom:8px}

.catalog-section>h2{margin-bottom:10px}.catalog-actions{display:grid;gap:2px}.catalog-actions .catalog-item{margin:3px 0;padding:10px 11px;font-weight:400;background:#faf9f5}.catalog-actions .catalog-item.active{background:#faf9f5;border-color:var(--line);color:var(--ink)}.inspector{display:flex;flex-direction:column;min-height:0;overflow:auto}.controls-panel{margin-top:auto;padding-top:18px;border-top:1px solid var(--line)}.controls-panel h2{margin-bottom:10px}.control-button{display:block;width:100%;margin:5px 0;padding:9px 10px;border:1px solid var(--line);border-radius:8px;background:#fff;text-align:left;font-size:11px;font-weight:700}.control-button:hover:not(:disabled){border-color:#aaa398;background:#faf9f5}.control-button.active{background:var(--accent);border-color:var(--accent);color:#fff}.control-button:disabled{cursor:default;opacity:.42}.controls-panel hr{margin:10px 0}.furniture-section{margin-top:0}



/* Brand lives in the left rail so the viewport can use the full screen height. */
.catalog-brand{position:sticky;top:-18px;z-index:12;margin:-18px -16px 16px;padding:14px 16px 12px;border-bottom:1px solid var(--line);background:rgba(255,255,255,.97);backdrop-filter:blur(4px)}
.catalog-brand .brand-line{display:block;font-size:9px;font-weight:800;letter-spacing:.13em;line-height:1.18;color:#000}
.catalog>.catalog-section>h2{font-size:16.5px;font-weight:800;letter-spacing:.13em;text-transform:uppercase}

/* Fixed application shell: only menus scroll. */
html,body{width:100%;height:100%;min-height:0;overflow:hidden}
.app{width:100%;height:100dvh;min-height:0;overflow:hidden}
main{flex:1 1 auto;min-width:0;min-height:0;overflow:hidden}
footer{display:none}
.catalog{min-height:0;max-height:none;overflow:auto}
.inspector{min-height:0;overflow:hidden;display:flex;flex-direction:column}
.inspector-body{flex:1 1 auto;min-height:0;overflow:auto;padding-right:2px}
.stage{position:relative;width:100%;height:100%;min-width:0;min-height:0;overflow:hidden}
.view{height:100%;min-height:0}

/* Furniture catalog is intentionally one compact line per item. */
.furniture-section #catalog{display:grid;gap:2px}
.catalog-item.furniture-button{height:28px;min-height:28px;margin:0;padding:5px 9px;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:700;line-height:16px}

/* Controls remain visible at the bottom of the right rail. */
.controls-panel{flex:0 0 auto;margin-top:8px;padding-top:8px;background:#fff}
.controls-panel h2{margin:0 0 5px;font-size:19px}
.control-button{margin:2px 0;padding:5px 8px;min-height:27px;font-size:10px;line-height:15px}
.controls-panel hr{margin:5px 0}

/* View switching and 2D navigation live on the viewer itself. */
.viewer-toolbar{position:absolute;z-index:20;top:26px;right:26px;display:flex;flex-direction:column;align-items:flex-end;gap:7px;pointer-events:none}
.viewer-toolbar button{pointer-events:auto}
.view-switch{display:flex;gap:3px;padding:3px;border:1px solid var(--line);border-radius:10px;background:rgba(255,255,255,.94);box-shadow:0 4px 16px rgba(40,36,30,.08)}
.view-switch .tab{padding:6px 10px;font-size:10px;border-radius:7px}

@media(max-width:900px){main{grid-template-columns:170px minmax(0,1fr) 205px}.inspector{grid-column:auto;border-left:1px solid var(--line);border-top:0}.view{min-height:0}}
@media(max-width:650px){html,body{overflow:hidden}.app{height:100dvh;min-height:0}header{height:64px;min-height:64px;flex-direction:row;align-items:center}.catalog{width:150px}.inspector{display:none}main{display:grid;grid-template-columns:150px minmax(0,1fr)}.stage{height:auto;min-height:0}.viewer-toolbar{top:22px;right:22px}footer{display:none}}

.three-loading{position:absolute;inset:0;z-index:18;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;background:rgba(238,234,224,.82);backdrop-filter:blur(2px);color:var(--ink);text-align:center}.three-loading[hidden]{display:none}.three-loading span{font-size:10px;color:var(--muted)}.loading-spinner{width:28px;height:28px;border:3px solid rgba(49,95,84,.18);border-top-color:var(--accent);border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}

/* Compact object inspector above the pinned Controls section. */
.inspector-body{font-size:10px}.inspector-body h2{font-size:17px;margin:3px 0 8px}.inspector-body>div>small{font-size:8px;letter-spacing:.08em}.inspector-body label{margin:5px 0;font-size:9px;gap:5px}.inspector-body input,.inspector-body select{padding:5px 6px;font-size:10px;min-height:26px}.inspector-body button{padding:6px 8px;margin:3px 0;font-size:10px;min-height:27px}.inspector-body dl{margin:5px 0}.inspector-body dl div{padding:3px 0}.inspector-body .row{gap:4px}.inspector-body .field-note{font-size:8px}.inspector-remove{width:100%;margin-top:8px!important}.inspector-body button:disabled,.inspector-body input:disabled,.inspector-body select:disabled{opacity:.42;cursor:not-allowed}#lamp-light-controls,#bed-mattress{margin-top:6px;padding-top:6px;border-top:1px solid var(--line)}

.catalog-actions .compact-catalog-item{height:28px;min-height:28px;margin:0;padding:5px 9px;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;font-weight:700;line-height:16px;background:#faf9f5}.lighting-controls .compact-toggle{min-height:28px;height:28px;margin:0;padding:5px 9px;font-size:11px;line-height:16px;text-align:left}.mirror-dialog{max-width:360px;border:1px solid var(--line);border-radius:12px;padding:0;box-shadow:0 18px 50px rgba(40,36,30,.18);color:var(--ink)}.mirror-dialog::backdrop{background:rgba(25,24,21,.28)}.mirror-dialog form{display:grid;gap:8px;padding:18px}.mirror-dialog h2{margin:0;font-size:20px}.mirror-dialog p{margin:0 0 4px;color:var(--muted);font-size:11px;line-height:1.4}.mirror-dialog button{padding:9px 10px;text-align:left}
#object-height{margin-top:6px;padding-top:6px;border-top:1px solid var(--line)}

/* Left-rail workspace layout. */
main{grid-template-columns:230px minmax(0,1fr)}
.catalog{border-right:1px solid var(--line)}
.controls-panel{margin:0;padding:0;border-top:0;flex:none;background:#fff}
.controls-panel h2{margin:0 0 7px;font-size:22px}
.selection-panel .inspector-body{overflow:visible;padding-right:0}
.selection-panel label{display:grid;grid-template-columns:1fr auto;gap:8px;align-items:center;margin:6px 0}
.selection-panel input,.selection-panel select{width:92px;padding:5px 6px;border:1px solid var(--line);border-radius:7px;background:#fff}
.selection-panel dl{border-top:1px solid var(--line);margin-top:8px}
.selection-panel dl div{display:flex;justify-content:space-between;padding:4px 0;border-bottom:1px solid var(--line);font-size:10px}
.selection-panel dd{margin:0;font-weight:700}
.selection-panel small{letter-spacing:.12em;color:var(--muted);font-weight:800}
.selection-panel #display-level{margin-top:10px;padding-top:8px;border-top:1px solid var(--line)}
.selection-panel label strong{margin-left:auto;font-variant-numeric:tabular-nums}
.selection-panel #empty h2{font:600 11px/1.45 Inter,ui-sans-serif,system-ui,sans-serif;margin:0 0 5px}
.selection-panel #empty p{margin:0;font-size:10px;line-height:1.45}
#toggle-lengths,#hide-lights,#hide-cameras{width:100%;margin-top:8px}
@media(max-width:900px){main{grid-template-columns:205px minmax(0,1fr)}}
@media(max-width:650px){main{display:grid;grid-template-columns:170px minmax(0,1fr)}.catalog{width:auto}}

/* One consistent button language for the entire left rail. */
.catalog button{
  width:100%;
  min-height:28px;
  height:28px;
  margin:0;
  padding:5px 9px;
  border:1px solid var(--line);
  border-radius:9px;
  background:#faf9f5;
  color:var(--ink);
  text-align:left;
  font-size:11px;
  font-weight:700;
  line-height:16px;
  transition:border-color .12s ease,background .12s ease;
}
.catalog button:hover:not(:disabled){border-color:#aba499;background:#fff}
.catalog button.active{background:#faf9f5;border-color:var(--line);color:var(--ink)}
.catalog button:disabled{cursor:default;opacity:.42}

#plan-canvas{touch-action:none;overscroll-behavior:contain}

/* Full-bleed viewport and selection focus. */
.stage{padding:0}
.view{border:0;border-radius:0;box-shadow:none}
.selection-panel{scroll-margin-top:44px}
/* The section title is the only SELECTED eyebrow; item editors do not repeat a type eyebrow. */
#wall-selection>small,#door-selection>small,#window-selection>small,#light-selection>small,#camera-selection>small,#label-selection>small,#railing-selection>small{display:none}

#furniture-style{margin-top:6px;padding-top:6px;border-top:1px solid var(--line)}
