
  /* ============================================================
   *  方案 A v2（深色三栏 + 顶栏 + 底栏），已接真实 Three.js
   *  左1=5大分类图标；左2=子分类tabs + 二级标签 + 3列网格
   *  中央=3D Canvas；右栏=动态参数面板；底栏=视角/人鸟瞰/重置全屏保存
   * ============================================================ */
  :root{
    --bg:#0f172a; --panel:#1e293b; --panel-2:#273449; --panel-3:#334155; --panel-4:#3b4a63;
    --line:#2d3b52; --line-2:#3b4a63;
    --txt:#e2e8f0; --txt-2:#94a3b8; --txt-3:#64748b;
    --accent:#3b82f6; --accent-2:#60a5fa; --accent-soft:rgba(59,130,246,.18);
    --ok:#10b981; --warn:#f59e0b; --danger:#ef4444;
  }
  *{box-sizing:border-box;margin:0;padding:0}
  html,body{height:100%;font-family:-apple-system,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;background:var(--bg);color:var(--txt);overflow:hidden;-webkit-font-smoothing:antialiased}
  button{cursor:pointer;font-family:inherit;border:none;background:none;color:inherit}
  .icon{width:16px;height:16px;display:inline-block;vertical-align:middle}

  /* 顶栏 */
  .topbar{height:52px;background:linear-gradient(180deg,#1e293b,#172033);border-bottom:1px solid var(--line);display:flex;align-items:center;padding:0 18px;gap:18px;position:relative;z-index:50}
  .topbar .logo{font-size:18px;font-weight:700;color:#fff;display:flex;align-items:center;gap:8px}
  .topbar .logo .badge{font-size:11px;background:linear-gradient(135deg,#3b82f6,#8b5cf6);padding:2px 8px;border-radius:8px}
  .topbar .breadcrumb{font-size:13px;color:var(--txt-2);margin-left:12px}
  .topbar .breadcrumb b{color:var(--txt);margin:0 4px}
  .topbar .spacer{flex:1}
  .topbar .actions{display:flex;gap:8px;align-items:center}
  .btn{padding:8px 14px;border-radius:8px;background:var(--panel-2);color:var(--txt);font-size:13px;display:flex;align-items:center;gap:6px;transition:.15s}
  .btn:hover{background:var(--panel-3)}
  .btn.primary{background:linear-gradient(135deg,#3b82f6,#2563eb);color:#fff;font-weight:600}
  .btn.primary:hover{filter:brightness(1.1)}
  .btn.danger{background:var(--danger);color:#fff}
  .btn.outline{background:transparent;border:1px solid var(--line-2)}
  .btn-icon{width:34px;height:34px;border-radius:8px;background:var(--panel-2);display:flex;align-items:center;justify-content:center;color:var(--txt-2);transition:.15s}
  .btn-icon:hover{background:var(--panel-3);color:var(--txt)}

  /* 主体三栏 */
  .main{display:grid;grid-template-columns:64px 284px 1fr 300px;height:calc(100% - 52px - 56px)}

  /* 左1 分类图标 */
  .cat-bar{background:#162033;border-right:1px solid var(--line);display:flex;flex-direction:column;align-items:center;padding:14px 0;gap:6px;overflow-y:auto}
  .cat-bar::-webkit-scrollbar{width:0}
  .cat-item{width:56px;padding:10px 4px;border-radius:10px;display:flex;flex-direction:column;align-items:center;gap:4px;color:var(--txt-2);font-size:11px;transition:.15s;cursor:pointer}
  .cat-item:hover{background:var(--panel-2);color:var(--txt)}
  .cat-item.active{background:linear-gradient(180deg,var(--accent),#1d4ed8);color:#fff;box-shadow:0 4px 12px rgba(59,130,246,.3)}
  .cat-item .ic{width:24px;height:24px;display:flex;align-items:center;justify-content:center}
  .cat-item .ic svg{width:22px;height:22px}

  /* 左2 子目录 */
  .sub-panel{background:#1a2538;border-right:1px solid var(--line);display:flex;flex-direction:column;overflow:hidden}
  .sub-panel .head{padding:14px 16px 10px;border-bottom:1px solid var(--line)}
  .sub-panel .head h3{font-size:14px;font-weight:600;color:#fff}
  .sub-panel .head .desc{font-size:11px;color:var(--txt-2);margin-top:2px}
  .sub-tabs{display:flex;flex-wrap:wrap;gap:6px;padding:10px 12px;border-bottom:1px solid var(--line);overflow-x:hidden}
  .sub-tabs::-webkit-scrollbar{height:0}
  .sub-tabs button{padding:5px 10px;border-radius:5px;font-size:12px;color:var(--txt-2);white-space:nowrap;background:var(--panel-2)}
  .sub-tabs button:hover{color:var(--txt)}
  .sub-tabs button.active{background:var(--accent);color:#fff;font-weight:500}
  .sub-tags{display:flex;flex-wrap:wrap;gap:6px;padding:10px 12px;border-bottom:1px solid var(--line)}
  .sub-tags button{padding:4px 8px;border-radius:4px;font-size:11px;color:var(--txt-2);background:var(--panel-2);border:1px solid var(--line)}
  .sub-tags button.active{background:var(--accent-soft);color:var(--accent-2);border-color:var(--accent)}
  .sub-grid{flex:1;overflow-y:auto;padding:12px;display:grid;grid-template-columns:repeat(3,1fr);gap:8px;align-content:start}
  .sub-grid::-webkit-scrollbar{width:6px}
  .sub-grid::-webkit-scrollbar-thumb{background:var(--line);border-radius:3px}
.grid-cell{border-radius:8px;background:var(--panel-2);border:2px solid transparent;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;padding:5px;position:relative;transition:.15s;overflow:visible}
.grid-cell:hover{border-color:var(--line-2);transform:translateY(-1px)}
.grid-cell.active{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}
.grid-cell .thumb{width:100%;aspect-ratio:1;border-radius:6px;background-size:cover;background-position:center;position:relative;overflow:hidden}
.grid-cell .label{position:static;width:100%;margin-top:5px;color:var(--txt-2);font-size:11px;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.grid-cell .badge{position:absolute;top:6px;right:6px;background:var(--accent);color:#fff;font-size:9px;padding:1px 5px;border-radius:8px;z-index:2}
.grid-cell .info-icon{position:absolute;top:4px;right:4px;width:18px;height:18px;border-radius:50%;background:rgba(15,23,42,.75);color:#fff;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .15s;z-index:5;cursor:help}
.grid-cell:hover .info-icon{opacity:1}
.grid-cell .info-icon svg{width:12px;height:12px}
.mat-popup{display:none;position:fixed;z-index:200;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px;width:220px;box-shadow:0 10px 30px rgba(0,0,0,.5);pointer-events:none}
.mat-popup .pop-img{width:100%;aspect-ratio:1;border-radius:6px;background-size:cover;background-position:center;margin-bottom:8px;border:1px solid var(--line)}
.mat-popup .pop-title{font-size:13px;font-weight:600;color:#fff;margin-bottom:6px}
.mat-popup .pop-row{font-size:11px;color:var(--txt-2);display:flex;justify-content:space-between;margin-bottom:3px}
.mat-popup .pop-row span:last-child{color:var(--txt);text-align:right;max-width:120px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

  /* 中央 Canvas */
  .stage{position:relative;background:radial-gradient(ellipse at center,#1f2a3f 0%,#0f172a 80%);overflow:hidden}
  .stage canvas{display:block;width:100%;height:100%}
  .stage .floating-toolbar{position:absolute;top:14px;left:50%;transform:translateX(-50%);display:flex;gap:6px;background:rgba(15,23,42,.85);backdrop-filter:blur(12px);padding:6px;border-radius:10px;border:1px solid var(--line);z-index:10}
  .stage .floating-toolbar button{padding:7px 12px;border-radius:6px;font-size:12px;color:var(--txt-2)}
  .stage .floating-toolbar button.active{background:var(--accent);color:#fff}
  .stage .selection-label{position:absolute;top:14px;left:14px;background:rgba(59,130,246,.92);color:#fff;padding:8px 12px;border-radius:8px;font-size:12px;display:flex;align-items:center;gap:8px;font-weight:500;z-index:10}
  .stage .selection-label::before{content:"";width:8px;height:8px;background:#fff;border-radius:50%;animation:pulse 1.5s infinite}
  @keyframes pulse{50%{opacity:.4}}
  .stage .scale-tag{position:absolute;bottom:14px;left:14px;background:rgba(15,23,42,.7);color:var(--txt-2);padding:6px 10px;border-radius:6px;font-size:11px;font-family:monospace;backdrop-filter:blur(8px);z-index:10}
  .stage .grid-hint{position:absolute;bottom:14px;right:14px;color:var(--txt-3);font-size:11px;z-index:10}
  .loading{position:absolute;inset:0;display:grid;place-items:center;background:radial-gradient(ellipse at center,#1f2a3f 0%,#0f172a 80%);color:var(--txt-2);font-size:14px;z-index:30;transition:opacity .5s}
  .loading.hide{opacity:0;pointer-events:none}

  /* 右栏 */
  .side{background:#1a2538;border-left:1px solid var(--line);display:flex;flex-direction:column;overflow-y:auto}
  .side::-webkit-scrollbar{width:6px}
  .side::-webkit-scrollbar-thumb{background:var(--line);border-radius:3px}
  .side .section{border-bottom:1px solid var(--line)}
  .side .section .hd{padding:11px 16px;font-size:12px;font-weight:600;color:var(--txt);display:flex;align-items:center;justify-content:space-between;background:#1e2a3e;cursor:pointer;position:sticky;top:0}
  .side .section .hd .chev{color:var(--txt-3);transition:.2s}
  .side .section.collapsed .hd .chev{transform:rotate(-90deg)}
  .side .section.collapsed .bd{display:none}
  .side .section .bd{padding:12px 16px}
  .cam-mini{width:100%;height:140px;background:#0f172a;border-radius:8px;border:1px solid var(--line);display:flex;align-items:center;justify-content:center;color:var(--txt-3);font-size:11px;position:relative;overflow:hidden}
  .cam-mini .label{position:absolute;top:6px;left:8px;font-size:10px;background:rgba(0,0,0,.4);padding:2px 6px;border-radius:4px;color:#fff;z-index:2}
  .cam-mini .compass{position:absolute;bottom:6px;right:8px;font-size:10px;color:var(--txt-2);z-index:2}
  #mini-map{width:100%;height:100%;display:block;border-radius:8px}
  .param-row{display:flex;align-items:center;justify-content:space-between;padding:7px 0;font-size:12px;gap:8px}
  .param-row .lbl{color:var(--txt-2);flex-shrink:0}
  .param-row .val{display:flex;align-items:center;gap:6px}
.param-row .val input{width:62px;padding:4px 6px;border-radius:5px;background:var(--panel-2);border:1px solid var(--line);color:var(--txt);font-size:12px;outline:none;text-align:right}
.param-row .val input:focus{border-color:var(--accent)}
.param-row .val .unit{color:var(--txt-3);font-size:11px}
.param-row .val .unit.prefix{font-size:10px;margin-right:-2px}
.param-row .val .lock-btn{width:22px;height:22px;padding:0;display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid var(--line);border-radius:5px;color:var(--txt-3);cursor:pointer;transition:.15s}
.param-row .val .lock-btn:hover{color:var(--txt);border-color:var(--txt-3)}
.param-row .val .lock-btn.locked{color:var(--accent);border-color:var(--accent);background:var(--accent-soft)}
  .param-row .val .chip{background:var(--panel-3);padding:3px 8px;border-radius:4px;font-size:11px;color:var(--txt-2)}
  .param-row .val .out{color:var(--txt);font-size:12px;min-width:44px;text-align:right}
  .slider{width:100%;-webkit-appearance:none;height:4px;background:var(--panel-2);border-radius:2px;margin:6px 0}
  .slider:disabled{opacity:.45;cursor:not-allowed}
  .slider:disabled::-webkit-slider-thumb{background:var(--txt-3);cursor:not-allowed}
  .sun-row.disabled .lbl{color:var(--txt-3)}
  .sun-params{margin-top:8px;padding-top:8px;border-top:1px dashed var(--line)}
  .slider::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;background:var(--accent);border-radius:50%;cursor:pointer}

  /* 太阳参数折叠区块 */
  .sun-section{margin-top:8px}
  .sun-hd{display:flex;align-items:center;justify-content:space-between;padding:10px 0;cursor:pointer}
  .sun-hd .chev{transition:.2s;color:var(--txt-3)}
  .sun-section.collapsed .sun-hd .chev{transform:rotate(-90deg)}
  .sun-section.collapsed .sun-bd{display:none}
  .sun-bd{padding-bottom:4px}
  .sun-title{font-size:12px;font-weight:600;color:var(--txt)}
  .sun-toggle{position:relative;display:inline-flex;width:34px;height:18px;cursor:pointer;flex-shrink:0}
  .sun-toggle input{opacity:0;width:0;height:0}
  .sun-toggle-track{position:absolute;inset:0;background:var(--panel-3);border-radius:18px;transition:.2s}
  .sun-toggle-track::before{content:"";position:absolute;left:2px;top:2px;width:14px;height:14px;background:#fff;border-radius:50%;transition:.2s}
  .sun-toggle input:checked + .sun-toggle-track{background:var(--accent)}
  .sun-toggle input:checked + .sun-toggle-track::before{transform:translateX(16px)}
  .param-divider{border-top:1px solid var(--line);width:calc(100% + 32px);margin:8px -16px}
  .sun-reset{width:22px;height:22px;padding:0;display:flex;align-items:center;justify-content:center;background:transparent;border:1px solid var(--line);border-radius:5px;color:var(--txt-3);cursor:pointer;transition:.15s}
  .sun-reset:hover:not(:disabled){color:var(--txt);border-color:var(--txt-3)}
  .sun-reset:disabled{opacity:.35;cursor:not-allowed}
  .sun-reset svg{width:13px;height:13px}
  input.sun-num{width:58px;padding:3px 6px;border-radius:5px;background:var(--panel-2);border:1px solid var(--line);color:var(--txt);font-size:12px;outline:none;text-align:right}
  input.sun-num:disabled{opacity:.45;cursor:not-allowed;background:var(--panel-3)}
  input.sun-num:focus{border-color:var(--accent)}
  .slider.temp-gradient{background:linear-gradient(90deg,#ff8c00 0%,#ffe4b5 35%,#ffffff 50%,#c7d2ff 65%,#3b82f6 100%)}
  .slider.temp-gradient::-webkit-slider-runnable-track{background:transparent}
  .slider.temp-gradient::-moz-range-track{background:transparent}
  .light-preset-row{flex-direction:column;align-items:stretch;gap:8px;padding:8px 0;border-bottom:1px solid var(--line)}
  .light-preset-row .seg-lbl{width:100%}
  .light-preset-row .seg-options{justify-content:flex-start;max-width:none;width:100%;flex-wrap:nowrap}
  .light-preset-row .seg-options button{padding:5px 8px;min-width:0;white-space:nowrap}
.mini-tabs{display:flex;gap:4px;background:var(--panel-2);padding:3px;border-radius:6px;margin-bottom:10px;flex-wrap:wrap}
.mini-tabs button{flex:1;padding:5px 0;font-size:11px;color:var(--txt-2);border-radius:4px;min-width:42px}
.mini-tabs button.active{background:var(--panel-3);color:var(--txt);font-weight:500}
.seg-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 0;border-bottom:1px solid var(--line)}
.seg-row:last-child{border-bottom:none}
.seg-lbl{font-size:12px;color:var(--txt-2);white-space:nowrap}
.seg-options{display:flex;gap:4px;flex-wrap:wrap;justify-content:flex-end}
.seg-options button{padding:5px 10px;border-radius:5px;font-size:11px;color:var(--txt-2);background:var(--panel-2);border:1px solid var(--line)}
.seg-options button.active{background:var(--accent);color:#fff;border-color:var(--accent)}
.seg-options button:hover:not(.active){background:var(--panel-3)}
.material-preview{display:flex;align-items:center;gap:10px;padding:8px;background:var(--panel-2);border-radius:8px;margin-bottom:10px}
  .material-preview .sw{width:40px;height:40px;border-radius:6px;border:1px solid var(--line);background-size:cover;background-position:center}
  .material-preview .info{flex:1}
  .material-preview .info .n{font-size:13px;font-weight:500;color:var(--txt)}
  .material-preview .info .s{font-size:11px;color:var(--txt-3)}

  /* 底栏 */
  .bottom-bar{height:56px;background:linear-gradient(180deg,#1a2538,#162033);border-top:1px solid var(--line);display:flex;align-items:center;padding:0 14px;gap:10px;position:relative;z-index:40}
  .bottom-bar .view-mode{display:flex;gap:4px;background:var(--panel-2);padding:3px;border-radius:8px}
  .bottom-bar .view-mode button{padding:7px 14px;border-radius:5px;font-size:12px;color:var(--txt-2);font-weight:500;min-width:56px}
  .bottom-bar .view-mode button.active{background:var(--accent);color:#fff}
  .bottom-bar .views{display:flex;gap:4px;background:var(--panel-2);padding:3px;border-radius:8px}
  .bottom-bar .views button{padding:7px 12px;border-radius:5px;font-size:12px;color:var(--txt-2);font-weight:500;min-width:64px}
  .bottom-bar .views button.active{background:var(--accent);color:#fff}
  .bottom-bar .views button:hover:not(.active){background:var(--panel-3);color:var(--txt)}
  .bottom-bar .height-input{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--txt-2);background:var(--panel-2);padding:4px 10px;border-radius:6px}
  .bottom-bar .height-input input{width:50px;padding:4px 6px;border-radius:4px;background:var(--panel);border:1px solid var(--line);color:var(--txt);font-size:12px;text-align:center}
  .bottom-bar .spacer{flex:1}
  .bottom-bar .meta{font-size:11px;color:var(--txt-3);display:flex;align-items:center;gap:14px}
  .bottom-bar .big-actions{display:flex;gap:8px;align-items:center}

  /* 弹窗 */
  .modal{display:none;position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:200;align-items:center;justify-content:center;backdrop-filter:blur(4px)}
  .modal.show{display:flex}
  .modal-card{background:var(--panel);border-radius:12px;width:540px;max-width:92%;max-height:92%;border:1px solid var(--line);box-shadow:0 20px 60px rgba(0,0,0,.5);display:flex;flex-direction:column;overflow:hidden}
  .modal-card .hd{padding:16px 20px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;background:#1e2a3e}
  .modal-card .hd h3{font-size:15px;font-weight:600;color:#fff}
  .modal-card .hd .close{width:28px;height:28px;border-radius:6px;background:var(--panel-2);color:var(--txt-2);display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:18px}
  .modal-card .hd .close:hover{background:var(--panel-3);color:var(--txt)}
  .modal-card .bd{padding:20px;overflow-y:auto}
  .preview-img{width:100%;height:280px;background:var(--panel-2);border-radius:8px;border:1px solid var(--line);display:flex;align-items:center;justify-content:center;color:var(--txt-3);font-size:12px;overflow:hidden;position:relative}
  .preview-img img{width:100%;height:100%;object-fit:contain}
  .summary{margin-top:16px;background:var(--panel-2);border-radius:8px;padding:14px}
.summary .row{padding:6px 0;font-size:13px;border-bottom:1px solid var(--line);text-align:left;line-height:1.5}
.summary .row:last-child{border-bottom:none}
.summary .row b{color:var(--txt-2);font-weight:500;margin-right:4px}
  .modal-card .ft{padding:14px 20px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:10px;background:#1e2a3e}
  .alert-text{font-size:13px;color:var(--txt-2);line-height:1.6;padding:6px 0}

  .toast{position:fixed;top:70px;left:50%;transform:translateX(-50%);background:var(--ok);color:#fff;padding:10px 18px;border-radius:8px;font-size:13px;z-index:300;box-shadow:0 6px 18px rgba(0,0,0,.3);opacity:0;pointer-events:none;transition:opacity .25s}
  .toast.show{opacity:1}

  /* 移动端 */
  @media (max-width: 980px){
    .main{grid-template-columns:60px 1fr;grid-template-rows:1fr auto;height:calc(100% - 52px - 56px)}
    .cat-bar{width:60px}
    .sub-panel{grid-column:1 / -1;grid-row:2;border-right:none;border-top:1px solid var(--line);max-height:42vh}
    .sub-grid{grid-template-columns:repeat(3,1fr)}
    .stage{grid-column:1 / -1;grid-row:1;min-height:0}
    .side{display:none}
    .bottom-bar .views button{min-width:48px;padding:7px 8px;font-size:11px}
    .bottom-bar .meta{display:none}
  }

  /* 单项目编辑器容器：沉浸全屏，尽量隔离主题默认样式 */
  .lubao-villa-editor{height:100vh;overflow:hidden}
  .lubao-villa-editor .main{height:calc(100vh - 52px - 56px)}
  body.lubao-villa-active{overflow:hidden}
  .lubao-villa-active #content, .lubao-villa-active .site-content, .lubao-villa-active .content-area{padding:0 !important;margin:0 !important;max-width:100% !important}

  /* 归档/列表页 */
  .lubao-villa-archive{max-width:1100px;margin:0 auto;padding:32px 20px}
  .lubao-archive-title{font-size:24px;margin-bottom:8px}
  .lubao-archive-desc{color:#64748b;margin-bottom:20px}

