*{box-sizing:border-box} :root{--ink:#183630;--muted:#6d7d78;--green:#285d4c;--line:#dfe6e1;--bg:#f4f6f2;--amber:#956125}body{margin:0;font:14px/1.45 'Segoe UI',Arial,sans-serif;color:var(--ink);background:var(--bg)}button,input,select{font:inherit}button{cursor:pointer;border:1px solid var(--line);border-radius:7px;background:white;color:var(--ink);padding:9px 12px}button:hover{background:#edf3ed;border-color:#9eb7a8}button:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid #8caf9c;outline-offset:2px}button:disabled{opacity:.45;cursor:not-allowed}header{height:78px;background:#fff;display:flex;align-items:center;gap:25px;border-bottom:1px solid var(--line);padding:0 25px}.brand{display:flex;align-items:center;gap:12px;font-size:19px;font-weight:600}.brand>b{background:var(--ink);color:#fff;font-size:16px;letter-spacing:1px;padding:12px;border-radius:8px}.brand span{display:block;font-size:11px;font-weight:400;color:var(--muted)}.header-actions{margin-left:auto;display:flex;gap:9px}.primary{background:var(--green);color:white;border-color:var(--green)}.primary:hover{background:#204a3d}.pill{font-size:11px;background:#e9efe8;padding:5px 10px;border-radius:20px}main{display:grid;grid-template-columns:270px minmax(400px,1fr) 270px;height:calc(100vh - 78px)}aside{padding:23px 19px;overflow:auto;background:white}.left{border-right:1px solid var(--line)}.right{border-left:1px solid var(--line)}h1{font-size:23px;font-weight:550;line-height:1.18;letter-spacing:-.6px;margin:14px 0 20px}.eyebrow{font-size:9px;font-weight:700;letter-spacing:1.2px;color:#7a8c80}.metrics{display:flex;gap:29px;border-bottom:1px solid var(--line);padding-bottom:20px;margin-bottom:18px}.metrics b{font-size:23px;font-weight:500;display:block}.metrics span{font-size:10px;color:var(--muted)}label{display:block;font-size:11px;color:var(--muted);margin:10px 0}select,input:not([type=checkbox],[type=range],[type=file]){width:100%;border:1px solid var(--line);background:#fff;border-radius:6px;padding:9px;color:var(--ink);margin-top:4px}select{margin-top:4px}.wide{width:100%;margin-top:6px;font-size:12px}.section-title{font-size:11px;font-weight:650;text-transform:uppercase;letter-spacing:.7px;margin:23px 0 11px}.room-list{max-height:220px;overflow:auto}.room{padding:8px 3px;border-bottom:1px solid #edf0ed;display:flex;gap:9px;cursor:pointer}.room i{font-style:normal;font-size:10px;min-width:21px;height:21px;display:grid;place-items:center;border:1px solid var(--line);border-radius:5px}.room span{font-size:11px}.room em{font-size:10px;color:var(--muted);font-style:normal;margin-left:auto;white-space:nowrap}.room:hover{background:#eef4ed}details{font-size:11px;margin-top:22px;border-top:1px solid var(--line);padding-top:15px;color:var(--muted)}summary{cursor:pointer;color:var(--ink)}.workspace{min-width:0;display:flex;flex-direction:column;overflow:hidden}.toolbar{display:flex;gap:6px;align-items:center;padding:15px 18px 8px;flex-wrap:wrap}.toolbar button{font-size:12px}.segmented{background:#e5eae3;border-radius:8px;padding:3px;display:flex;margin-right:auto}.segmented button{border:none;background:transparent;padding:7px 12px}.segmented .active{background:white;box-shadow:0 1px 3px #13332218}.tool-options{display:flex;align-items:center;flex-wrap:wrap;gap:18px;padding:0 20px 7px;min-height:40px}.tool-options label{margin:0;display:flex;gap:6px;align-items:center;font-size:11px}.tool-options input[type=range]{width:90px}.tool-options output{width:45px}#scene{position:relative;flex:1;min-height:280px;overflow:hidden;background:#f2f5ef}#plan,#three{position:absolute;inset:0;width:100%;height:100%;touch-action:none}#three{display:none}#three canvas{display:block}.scene-badge{position:absolute;top:15px;left:20px;font-size:10px;background:#fffffff0;box-shadow:0 2px 8px #193c2810;padding:7px 12px;border-radius:7px;pointer-events:none;display:flex;gap:7px;align-items:center}.scene-badge i{width:6px;height:6px;background:#598369;border-radius:50%}#hint{position:absolute;bottom:15px;left:20px;font-size:10px;color:#718074;background:#f7f9f3df;padding:6px 9px;border-radius:6px;pointer-events:none}.statusbar{font-size:10px;padding:8px 18px;display:flex;justify-content:space-between;border-top:1px solid var(--line);gap:10px}.bottom-panel{padding:17px 20px;background:#fff;border-top:1px solid var(--line);display:flex;align-items:center;gap:15px}.bottom-panel b{font-size:13px;display:block}.bottom-panel span{font-size:11px;color:var(--muted);display:block;margin-top:4px}.bottom-panel button{margin-left:auto;font-size:11px;white-space:nowrap}#issues{padding:12px 20px;max-height:150px;overflow:auto;background:#fff7e6;color:#75501c;font-size:12px}.catalog-button{width:100%;display:flex;align-items:center;gap:9px;text-align:left;margin-bottom:6px;font-size:12px;padding:9px}.catalog-button i{height:25px;width:25px;background:#eef4ee;border-radius:5px;display:grid;place-items:center;font-size:16px;font-style:normal}.object-item{padding:8px;border:1px solid var(--line);border-radius:6px;margin-bottom:5px;font-size:11px;cursor:pointer}.object-item.active{border-color:var(--green);background:#eff5ef}.object-list{max-height:180px;overflow:auto}.muted,.footnote{font-size:11px;color:var(--muted)}.fields{display:grid;grid-template-columns:1fr 1fr;gap:0 8px}.fields label{margin:4px 0}.fields input{font-size:12px;padding:6px!important}.fields .full{grid-column:1/-1}#inspector h3{font-size:14px;margin:0 0 8px}#inspector p{font-size:12px}#inspector .delete{color:#a34d42;margin-top:9px}#toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);background:var(--ink);color:#fff;padding:12px 20px;border-radius:8px;z-index:50;opacity:0;pointer-events:none;max-width:90vw;font-size:13px;transition:opacity .15s}#toast.show{opacity:1}dialog{border:1px solid var(--line);border-radius:10px;max-width:96vw;width:1500px;max-height:95vh;padding:16px}dialog::backdrop{background:#10282088}.dialog-head{display:flex;align-items:center;justify-content:space-between}dialog img{width:100%;margin-top:12px}#emptyMessage{position:absolute;inset:75px 35px auto;background:#fff;padding:22px;border-radius:10px;box-shadow:0 4px 20px #13251d15;font-size:14px;z-index:20}#layers label{font-size:12px;display:flex;align-items:center;gap:7px;margin:7px 0}.layer-dot{width:8px;height:8px;border-radius:50%}#sourceImage{background:#fff}@media(max-width:1150px){main{grid-template-columns:230px minmax(320px,1fr) 230px}aside{padding:17px 13px}.toolbar{padding-left:10px;padding-right:10px}.toolbar button{padding:7px 8px}header{padding:0 16px;gap:12px}}@media(max-width:850px){header{height:auto;min-height:72px;flex-wrap:wrap;padding:10px 13px;gap:8px}.brand{font-size:15px}.header-actions button{font-size:11px;padding:7px}.pill{font-size:9px}main{height:auto;min-height:calc(100vh - 90px);grid-template-columns:1fr}.workspace{order:0;height:70vh}.left{order:1;border-right:0;display:grid;grid-template-columns:1fr 1fr;gap:0 15px}.left h1,.left .eyebrow,.left .metrics{display:none}.left details{grid-column:1/-1}.right{order:2;border:0;border-top:1px solid var(--line)}#catalog{display:grid;grid-template-columns:1fr 1fr;gap:6px}.scene-badge{max-width:85%;font-size:9px}.bottom-panel{padding:10px}#cutLabel{display:none}}@media print{header,aside,.toolbar,.tool-options,.bottom-panel,.statusbar,#hint,#issues{display:none!important}main{display:block;height:auto}.workspace{height:85vh}#scene{height:85vh}.scene-badge{position:static;padding:12px}body{background:white}}

/* Shared editor: touch controls and compact phone panels. */
[hidden]{display:none!important}
.mobile-context,.mobile-nav,.panel-backdrop,.mobile-only{display:none}
.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.zoom-controls{position:absolute;right:14px;bottom:48px;display:flex;flex-direction:column;gap:6px;z-index:2}
.zoom-controls button{width:44px;height:44px;font-size:23px;padding:0;box-shadow:0 2px 8px #142b2210}
.route-bar{position:absolute;bottom:12px;left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:6px;padding:8px;background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 5px 22px #172c2526;z-index:5;white-space:nowrap}
.route-bar button{min-height:44px}.route-bar span{font-size:12px;padding:0 4px}
body.route-active #hint{display:none}
button{touch-action:manipulation}
@media(max-width:850px){
 body{height:100dvh;overflow:hidden}
 header{height:108px;min-height:108px;padding:8px 12px;gap:5px 10px;align-content:center}
 .brand{font-size:15px}.brand>b{padding:8px;font-size:14px}.brand span{font-size:9px}
 #access{margin-left:auto;font-size:10px;max-width:47%;text-align:right}
 .header-actions{width:100%;margin:0;display:flex;gap:8px;justify-content:flex-end}
 .header-actions button{min-height:40px;font-size:13px;padding:8px 14px}
 main{display:block;height:calc(100dvh - 176px - env(safe-area-inset-bottom));min-height:0}
 .workspace{height:100%;order:initial;min-height:0}
 .mobile-context{display:flex;gap:8px;align-items:center;padding:8px 12px 0}
 .mobile-context select{width:106px;margin:0;min-height:42px;font-size:16px}
 #mobileScenario{flex:1;min-width:0;min-height:42px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left;font-size:13px}
 .toolbar{padding:7px 10px;gap:6px;flex-wrap:nowrap;overflow-x:auto;flex-shrink:0;min-height:54px}
 .toolbar>*{flex-shrink:0}.toolbar button{min-height:40px;white-space:nowrap;font-size:12px}
 .segmented{margin:0}.segmented button{padding:8px 10px}
 .tool-options{padding:0 12px 6px;gap:8px;min-height:34px;flex-wrap:wrap}
 .tool-options label{min-height:30px;font-size:10px}
 .tool-options input[type=checkbox]{width:18px;height:18px;margin:0}
 .tool-options #cutLabel{display:flex;flex-basis:100%;justify-content:flex-start}
 #cutLabel input{flex:1;max-width:210px;min-height:24px}
 #scene{min-height:140px}
 .scene-badge{top:8px;left:10px;max-width:calc(100% - 20px);font-size:9px;padding:6px 8px}
 #hint{font-size:9px;left:8px;bottom:8px;max-width:calc(100% - 74px)}
 .statusbar{padding:5px 10px;font-size:10px;min-height:25px}#coords{display:none}
 .bottom-panel{padding:7px 10px;gap:5px;min-height:50px}
 .bottom-panel>div{min-width:0;flex:1}.bottom-panel b{font-size:12px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
 .bottom-panel span{display:none}.bottom-panel button{font-size:11px;min-height:40px;padding:8px}
 #check{display:none}.mobile-only{display:block}
 .left,.right{display:none;position:fixed;z-index:32;top:120px;bottom:calc(74px + env(safe-area-inset-bottom));left:8px;right:8px;border:1px solid var(--line);border-radius:15px;box-shadow:0 8px 35px #102c2533;padding:15px 18px;overflow:auto;overscroll-behavior:contain}
 body[data-mobile-panel="rooms"] .left{display:block}
 body[data-mobile-panel="catalog"] .right,body[data-mobile-panel="inspector"] .right{display:block}
 body[data-mobile-panel="catalog"] .inspector-section,body[data-mobile-panel="inspector"] .catalog-section{display:none}
 .right .section-title:first-child,.left>.section-title:first-child{margin-top:4px}
 .left .section-title{font-size:12px}.left label{font-size:13px}
 .left select,.left input:not([type=checkbox]),.fields input{font-size:16px!important;min-height:44px;padding:10px!important}
 .fields label{font-size:12px;margin:6px 0}.fields{gap:0 12px}
 .room-list,.object-list{max-height:none}.room{padding:12px 2px;align-items:center;min-height:48px}.room span{font-size:13px}.room em{font-size:12px}
 .object-item{font-size:13px;min-height:46px;padding:12px}
 #layers label{min-height:36px;font-size:13px}#layers input{width:20px;height:20px}
 #catalog{display:grid;grid-template-columns:1fr 1fr;gap:8px}.catalog-button{min-height:58px;margin:0;font-size:13px;padding:10px}
 .right button,.left button{min-height:44px}
 .mobile-nav{position:fixed;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:4px;bottom:0;left:0;right:0;z-index:40;background:#fff;border-top:1px solid var(--line);padding:8px 8px calc(8px + env(safe-area-inset-bottom));height:calc(68px + env(safe-area-inset-bottom))}
 .mobile-nav button{font-size:12px;min-height:48px;padding:5px;border:0;white-space:nowrap}
 .mobile-nav button[aria-pressed="true"]{background:#e5efe6;color:#20513d;font-weight:600}
 .panel-backdrop{position:fixed;inset:108px 0 calc(68px + env(safe-area-inset-bottom));background:#122d2333;border:0;border-radius:0;z-index:30}
 body:not([data-mobile-panel="plan"]) .panel-backdrop{display:block}
 #toast{bottom:calc(82px + env(safe-area-inset-bottom));width:max-content;max-width:calc(100vw - 24px);font-size:13px;padding:10px 14px;z-index:60}
 .route-bar{max-width:calc(100% - 14px);gap:4px;padding:5px;bottom:9px}
 .route-bar button{padding:8px;font-size:12px}.route-bar span{font-size:11px;padding:0}
 .zoom-controls{right:9px;bottom:70px;gap:5px}
 dialog{max-width:98vw;max-height:94dvh;padding:10px}.dialog-head{font-size:12px;gap:8px}
 .dialog-head button{min-height:44px}
 #emptyMessage{inset:55px 15px auto;padding:14px;font-size:13px}
}
@media(max-width:370px){.brand span{display:none}.mobile-nav button{font-size:11px}#catalog{grid-template-columns:1fr}.fields{gap:0 8px}}
@media(max-height:570px) and (max-width:850px){header{height:62px;min-height:62px;flex-wrap:nowrap}.brand span,#access,#export{display:none}.header-actions{width:auto;margin-left:auto}.mobile-context{padding-top:4px}.tool-options{display:none}.bottom-panel{display:none}main{height:calc(100dvh - 130px - env(safe-area-inset-bottom))}.left,.right{top:72px}.panel-backdrop{top:62px}}
@media print{.mobile-nav,.mobile-context,.panel-backdrop,.zoom-controls,.route-bar{display:none!important}body{height:auto;overflow:visible}}

/* Four persistent save controls, with reserved screen rails. */
body{padding-top:48px;padding-bottom:48px;height:100dvh;box-sizing:border-box}.corner-save{position:fixed;z-index:150;height:36px;min-width:106px;border-radius:10px;background:#126d55;color:white;border:1px solid #328b73;box-shadow:0 2px 9px #0002}.corner-save.tl{top:max(6px,env(safe-area-inset-top));left:8px}.corner-save.tr{top:max(6px,env(safe-area-inset-top));right:8px}.corner-save.bl{bottom:max(6px,env(safe-area-inset-bottom));left:8px}.corner-save.br{bottom:max(6px,env(safe-area-inset-bottom));right:8px}.corner-save:disabled{opacity:.45}.sound-toggle{white-space:nowrap}@media(max-width:800px){.corner-save{height:40px;min-width:106px}body{padding-top:52px;padding-bottom:52px}.mobile-nav{bottom:52px}main{min-height:0}.sound-toggle{font-size:12px;padding:7px}header{min-height:56px}.header-actions{flex-wrap:wrap}}@media print{.corner-saves,.sound-toggle{display:none}body{padding:0}}

.history-tools{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.history-tools output{font-size:12px;white-space:nowrap}@media(max-width:800px){.history-tools button{min-height:44px}.history-tools{flex-shrink:0}}

main{height:calc(100dvh - 174px)}@media(max-width:850px){body{padding-top:52px;padding-bottom:52px}header{height:108px;min-height:108px}main{height:calc(100dvh - 280px - env(safe-area-inset-bottom))}.mobile-nav{bottom:52px}.left,.right{top:168px;bottom:calc(126px + env(safe-area-inset-bottom))}.panel-backdrop{inset:160px 0 calc(120px + env(safe-area-inset-bottom))}#toast{bottom:calc(134px + env(safe-area-inset-bottom))}}@media(max-width:850px) and (max-height:560px){header{height:62px;min-height:62px}main{height:calc(100dvh - 234px - env(safe-area-inset-bottom))}.left,.right{top:122px}}
