:root{
  --bg:#f4f6f9; --panel:#ffffff; --ink:#1b2430; --muted:#5d6b7c; --line:#d9e0e8;
  --accent:#1f5fbf; --accent-soft:#e6eefb; --ok:#1e8a4c; --ok-soft:#e5f5ec;
  --bad:#c0392b; --bad-soft:#fbeaea; --warn:#b26a00; --warn-soft:#fff3df;
  --radius:10px; font-family: system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%;background:var(--bg);color:var(--ink)}
body{display:flex;flex-direction:column;overflow:hidden}
button,select,input{font:inherit;color:inherit}
button{cursor:pointer}

.topbar{display:flex;align-items:center;gap:12px;padding:8px 14px;background:#12325f;color:#fff}
.brand{font-weight:700;font-size:17px;letter-spacing:.2px;white-space:nowrap}
.logo{display:inline-block;margin-right:4px;color:#9cc3ff}
.viewswitch{display:flex;margin-left:auto;background:rgba(255,255,255,.12);border-radius:8px;padding:2px}
.viewswitch button{background:none;border:0;color:#dfe9f8;padding:5px 12px;border-radius:6px}
.viewswitch button.on{background:#fff;color:#12325f;font-weight:600}
.filemenu{min-width:0}.filemenu select{max-width:100%;background:rgba(255,255,255,.12);border:0;color:#fff;border-radius:8px;padding:6px 8px}
.filemenu option{color:#000}

.toolbar{display:flex;align-items:center;gap:4px;padding:6px 10px;background:var(--panel);border-bottom:1px solid var(--line);overflow-x:auto;scrollbar-width:none}
.toolbar button{display:flex;flex-direction:column;align-items:center;gap:1px;min-width:54px;padding:4px 6px;border:1px solid transparent;background:none;border-radius:8px;font-size:11px;color:var(--muted)}
.toolbar button b{font-size:17px;line-height:20px;color:var(--ink);font-weight:400}
.toolbar button:hover{background:var(--bg)}
.toolbar button.on{background:var(--accent-soft);border-color:#b9cdf0;color:var(--accent)}
.toolbar button.on b{color:var(--accent)}
.toolbar button.pulse{animation:pulse 1.4s infinite}
@keyframes pulse{0%,100%{box-shadow:0 0 0 0 rgba(31,95,191,.5)}50%{box-shadow:0 0 0 5px rgba(31,95,191,0)}}
.sep{width:1px;height:30px;background:var(--line);margin:0 4px;flex:none}
.walltype select{border:1px solid var(--line);border-radius:8px;padding:6px;background:#fff;font-size:13px}

.workspace{flex:1;display:grid;grid-template-columns:1fr 0 340px;min-height:0}
.workspace.view-split{grid-template-columns:1fr 1fr 340px}
.workspace.view-3d{grid-template-columns:0 1fr 340px}
.planpane,.viewpane{position:relative;min-width:0;min-height:0;overflow:hidden}
.view-3d .planpane,.view-plan .viewpane{visibility:hidden}
.viewpane{border-left:1px solid var(--line);background:#dfe8f2}
#plan{display:block;width:100%;height:100%;touch-action:none;background:#fff}
#view3d{position:absolute;inset:0}
.status{position:absolute;left:10px;bottom:10px;right:70px;background:rgba(18,50,95,.9);color:#fff;font-size:13px;padding:7px 11px;border-radius:8px;pointer-events:none;max-width:560px}
.status3d{position:absolute;left:10px;bottom:10px;background:rgba(255,255,255,.85);font-size:12px;padding:5px 9px;border-radius:6px;color:var(--muted)}
.zoom{position:absolute;right:10px;bottom:10px;display:flex;flex-direction:column;gap:4px}
.zoom button{width:38px;height:38px;border-radius:8px;border:1px solid var(--line);background:#fff;font-size:20px}

.sidebar{display:flex;flex-direction:column;min-width:0;overflow:hidden;background:var(--panel);border-left:1px solid var(--line);min-height:0}
.tabs{display:flex;border-bottom:1px solid var(--line)}
.tabs button{flex:1;border:0;background:none;padding:10px 4px;font-size:13px;color:var(--muted);border-bottom:2px solid transparent}
.tabs button.on{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}
.badge{display:inline-block;min-width:18px;padding:0 5px;border-radius:9px;font-size:11px;line-height:18px;background:var(--bad);color:#fff}
.badge:empty{display:none}
.badge.allok{background:var(--ok)}
.tabbody{flex:1;overflow-y:auto;padding:14px}

/* tutor */
.lessonpick{display:flex;gap:6px;align-items:center;margin-bottom:10px}
.lessonpick select{flex:1;min-width:0;width:100%;border:1px solid var(--line);border-radius:8px;padding:7px;background:#fff}
.progress{height:6px;background:var(--bg);border-radius:3px;overflow:hidden;margin-bottom:12px}
.progress i{display:block;height:100%;background:var(--accent);transition:width .3s}
.lesson h2{font-size:18px;margin:0 0 6px}
.lesson .intro{font-size:14px;line-height:1.5;color:#2b3645}
.lesson .intro p{margin:0 0 8px}
.steps{list-style:none;padding:0;margin:12px 0 0;display:flex;flex-direction:column;gap:8px}
.step{border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px;font-size:14px;line-height:1.45;background:#fff}
.step .num{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:50%;background:var(--bg);font-size:12px;font-weight:700;margin-right:6px;color:var(--muted)}
.step.done{background:var(--ok-soft);border-color:#bfe3cd;color:#2c4a39}
.step.done .num{background:var(--ok);color:#fff}
.step.current{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.step.current .num{background:var(--accent);color:#fff}
.step.todo{opacity:.55}
.step .why{margin-top:8px;font-size:13px;color:var(--muted);border-left:3px solid var(--accent-soft);padding-left:8px}
.step .hintbtn{margin-top:8px;border:1px solid var(--line);background:#fff;border-radius:6px;padding:3px 9px;font-size:12px}
.step .hint{margin-top:8px;font-size:13px;background:var(--warn-soft);border-radius:6px;padding:7px 9px}
.celebrate{margin-top:14px;padding:12px;border-radius:var(--radius);background:var(--ok-soft);font-size:14px;line-height:1.45}
.celebrate button,.primary{margin-top:8px;background:var(--accent);color:#fff;border:0;border-radius:8px;padding:8px 14px;font-weight:600}
.feedback{margin-top:12px;font-size:13px;padding:9px 11px;border-radius:8px;background:var(--warn-soft);line-height:1.45}
.feedback:empty{display:none}

/* check */
.checksum{font-size:14px;margin:0 0 10px;color:var(--muted)}
.rule{border:1px solid var(--line);border-radius:var(--radius);padding:9px 11px;margin-bottom:8px;font-size:13.5px;line-height:1.4}
.rule .head{display:flex;gap:8px;align-items:flex-start}
.rule .icon{flex:none;width:20px;height:20px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:12px;color:#fff;font-weight:700}
.rule.pass .icon{background:var(--ok)} .rule.fail .icon{background:var(--bad)} .rule.na .icon{background:#a9b4c2}
.rule.fail{background:var(--bad-soft);border-color:#efc6c1}
.rule .detail{color:var(--muted);margin-top:4px}
.rule details{margin-top:6px;color:#3a4757}
.rule summary{cursor:pointer;color:var(--accent);font-size:12.5px}
.rule .showme{margin-top:6px;border:1px solid var(--line);background:#fff;border-radius:6px;padding:2px 8px;font-size:12px}
.disclaimer{font-size:12px;color:var(--muted);margin-top:10px;line-height:1.4}

/* props */
.props label{display:block;font-size:12.5px;color:var(--muted);margin:10px 0 3px}
.props input,.props select{width:100%;border:1px solid var(--line);border-radius:8px;padding:7px;background:#fff}
.props .row{display:flex;gap:8px}.props .row>div{flex:1}
.props .readout{font-size:14px;background:var(--bg);border-radius:8px;padding:8px 10px;margin-top:10px;line-height:1.5}
.props .empty{color:var(--muted);font-size:14px;line-height:1.5}
.props .danger{margin-top:14px;background:var(--bad-soft);color:var(--bad);border:1px solid #efc6c1;border-radius:8px;padding:7px 12px}

/* ask */
.askform{display:flex;gap:6px}
.askform input{flex:1;border:1px solid var(--line);border-radius:8px;padding:8px}
.askform button{background:var(--accent);color:#fff;border:0;border-radius:8px;padding:0 14px;font-weight:600}
.answer{margin-top:12px;border:1px solid var(--line);border-radius:var(--radius);padding:11px 13px;font-size:14px;line-height:1.5}
.answer h3{margin:0 0 6px;font-size:15px}
.answer p{margin:0 0 6px}
.answer .tryit{font-size:13px;background:var(--accent-soft);border-radius:6px;padding:7px 9px;margin-top:6px}
.asktopics{margin-top:14px;display:flex;flex-wrap:wrap;gap:6px}
.asktopics button{border:1px solid var(--line);background:#fff;border-radius:14px;padding:4px 10px;font-size:12.5px}
.noanswer{margin-top:12px;font-size:14px;color:var(--muted)}

@media (max-width: 860px){
  .workspace,.workspace.view-split,.workspace.view-3d{grid-template-columns:1fr;grid-template-rows:minmax(0,1fr) 42%}
  .workspace.view-plan .viewpane,.workspace.view-3d .planpane{display:none}
  .workspace.view-split{grid-template-rows:minmax(0,1fr) minmax(0,1fr) 38%}
  .viewpane{border-left:0;border-top:1px solid var(--line)}
  .sidebar{border-left:0;border-top:1px solid var(--line)}
  .toolbar button{min-width:48px}
  .brand{font-size:15px}
  .brand .full{display:none}
  .viewswitch button{padding:5px 9px}
  .filemenu select{width:74px}
  .topbar{padding:6px 10px;gap:8px}
  .status{font-size:12px;right:58px}
}

/* demo videos */
.demobtn{background:#ffb703;color:#12325f;border:0;border-radius:8px;padding:6px 11px;font-weight:700;white-space:nowrap}
.demo{border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;margin-bottom:12px;background:#0d1b2e}
.demo video{display:block;width:100%;aspect-ratio:16/10;background:#0d1b2e;cursor:pointer}
.demo .dbar{display:flex;align-items:center;gap:6px;padding:6px 8px;background:#12325f;color:#fff;font-size:12.5px}
.demo .dbar span{flex:1}
.demo .dbar button{background:rgba(255,255,255,.15);color:#fff;border:0;border-radius:6px;padding:3px 8px;font-size:12px}
.demoshow{width:100%;margin-bottom:12px;border:1px dashed var(--line);background:#fff;border-radius:8px;padding:6px;font-size:12.5px;color:var(--accent)}
.vmodal{position:fixed;inset:0;background:rgba(8,18,34,.78);display:flex;align-items:center;justify-content:center;z-index:50;padding:16px}
.vmodal[hidden]{display:none}
.vbox{background:#0d1b2e;border-radius:12px;overflow:hidden;width:min(1100px,100%);box-shadow:0 20px 60px rgba(0,0,0,.4)}
.vhead{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;color:#fff;background:#12325f}
.vhead button{background:none;border:0;color:#fff;font-size:18px}
.vbox video{display:block;width:100%;max-height:80vh;background:#000}
@media (max-width:860px){ .demobtn{padding:5px 8px;font-size:13px} }
@media (max-width:480px){ .brand .word{display:none} .topbar{gap:6px} .viewswitch button{padding:5px 8px} }
.devtag{margin-left:8px;background:#ff7a00;color:#fff;font-size:11px;font-weight:800;letter-spacing:.5px;padding:2px 6px;border-radius:5px;vertical-align:middle}

/* furniture */
.catalog{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.catalog button{display:flex;flex-direction:column;align-items:flex-start;gap:2px;border:1px solid var(--line);background:#fff;border-radius:8px;padding:7px 8px;font-size:13px;text-align:left}
.catalog button i{display:block;width:100%;height:6px;border-radius:3px;margin-bottom:3px}
.catalog button small{color:var(--muted);font-size:11.5px}
.catalog button.on{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}
.cgroup{margin:12px 0 6px;font-size:12px;text-transform:uppercase;letter-spacing:.6px;color:var(--muted)}
.ptitle{margin:0 0 4px;font-size:16px}
.okmsg{margin-top:10px;font-size:13px;padding:8px 10px;border-radius:8px;background:var(--ok-soft)}
.itemcard{border:1px solid var(--line);border-radius:var(--radius);padding:10px 12px;background:#fbfcfe}
.itemcard .row{align-items:center}
