/* ══ 主题变量：白天 / 黑夜 / 护眼 ══
   light 核心令牌别名到 --wb-*（ui.css SSOT，值完全一致）；app 专属令牌（顶栏/公式/计数/阴影）保留。
   dark/eye 主题值与 --wb-* 有差异，暂保留独立，待视觉确认后统一。*/
:root,
[data-theme="light"]{
  --bg:var(--wb-surface-page);--side-bg:var(--wb-surface-sunken);--side-hov:#e2e5ea;
  --card:var(--wb-surface-card);--line:var(--wb-line);--line2:var(--wb-line2);
  --text:var(--wb-text);--muted:var(--wb-muted);--sub:var(--wb-sub);
  --topbar-bg:var(--wb-surface-card);
  --topbar-text:var(--wb-text);--topbar-muted:var(--wb-sub);
  --accent:var(--wb-accent);--accent-light:var(--wb-accent-soft);--blue-badge:var(--wb-accent);
  --green:var(--wb-green);--green-bg:var(--wb-green-soft);--orange:var(--wb-orange);--orange-bg:var(--wb-orange-soft);
  --img-bg:var(--wb-surface-sunken);
  --formula-bg:#fff7e6;--formula-text:#ad6800;--formula-border:#ffd591;--formula-term:#ad4e00;
  --cnt-grad1:#fff1b8;--cnt-grad2:#ffe58f;--cnt-text:#ad6800;
  --cnt-done-g1:#b7eb8f;--cnt-done-g2:#95de64;--cnt-done-t:#237804;
  --purple:var(--wb-purple);--red:var(--wb-red);--shadow:0 1px 4px rgba(31,35,41,.06);
  --shadow-hover:0 6px 24px rgba(31,35,41,.12);
  --radius:12px;--radius-sm:8px;--header-h:56px;
}
[data-theme="dark"]{
  --bg:var(--wb-surface-page);--side-bg:#1c1f25;--side-hov:#262a31;
  --card:var(--wb-surface-card);--line:var(--wb-line);--line2:var(--wb-line2);
  --text:var(--wb-text);--muted:var(--wb-muted);--sub:var(--wb-sub);
  --topbar-bg:linear-gradient(135deg,#0d0f12 0%,#1a1d22 100%);
  --topbar-text:#e6e8ec;--topbar-muted:#9aa1ad;
  --accent:var(--wb-accent);--accent-light:#1e2740;--blue-badge:var(--wb-accent);
  --green:var(--wb-green);--green-bg:#0f2a20;--orange:var(--wb-amber);--orange-bg:#2a2410;
  --img-bg:#1a1d22;
  --formula-bg:#2a2410;--formula-text:#fcd34d;--formula-border:#5c4f1a;--formula-term:var(--wb-amber);
  --cnt-grad1:#2d3a52;--cnt-grad2:#3b4a66;--cnt-text:#fcd34d;
  --cnt-done-g1:#0f3a28;--cnt-done-g2:#15543b;--cnt-done-t:var(--wb-green);
  --purple:var(--wb-purple);--red:var(--wb-red);--shadow:0 2px 12px rgba(0,0,0,.4);
  --shadow-hover:0 8px 28px rgba(0,0,0,.55);
}
[data-theme="eye"]{
  --bg:#c7edcc;--side-bg:#b9e3bf;--side-hov:#a9d9b0;
  --card:#e7f6ea;--line:#9ccaa3;--line2:#88bd90;
  --text:#2f3d33;--muted:#5a6b5e;--sub:#6f8174;
  --topbar-bg:linear-gradient(135deg,#3a5240 0%,#4a6b54 100%);
  --topbar-text:#eef5ee;--topbar-muted:#cfe0d2;
  --accent:#2f7d4f;--accent-light:#d6ecdf;--blue-badge:#2f7d4f;
  --green:#2f7d4f;--green-bg:#d6ecdf;--orange:#9a6b1f;--orange-bg:#e8e8c8;
  --img-bg:#b9e3bf;
  --formula-bg:#d9efdc;--formula-text:#3a5a40;--formula-border:#8fbf96;--formula-term:#2f7d4f;
  --cnt-grad1:#bfe3c4;--cnt-grad2:#a9d9b0;--cnt-text:#3a5a40;
  --cnt-done-g1:#bfe3c4;--cnt-done-g2:#a9d9b0;--cnt-done-t:#2f7d4f;
  --purple:#6b4f9a;--red:#c0533f;--shadow:0 2px 12px rgba(47,61,51,.12);
  --shadow-hover:0 8px 28px rgba(47,61,51,.2);
}
*{box-sizing:border-box;margin:0;padding:0;}
html{scroll-behavior:smooth;}
body{
  font-family:-apple-system,"PingFang SC","Microsoft YaHei",Segoe UI,Roboto,sans-serif;
  background:var(--bg);color:var(--text);line-height:1.5;
}

/* ── 顶栏 ── */
.topbar{
  background:var(--topbar-bg);
  color:var(--topbar-text);padding:0 var(--wb-space-6);height:var(--header-h);
  display:flex;align-items:center;gap:var(--wb-space-4);flex-wrap:wrap;
  position:sticky;top:0;z-index:100;box-shadow:0 2px 8px rgba(0,0,0,.15);
}
.back-home{
  display:flex;align-items:center;gap:var(--wb-space-1);padding:var(--wb-space-1) var(--wb-space-3);
  border-radius:8px;color:var(--topbar-muted);text-decoration:none;
  font-size:var(--wb-text-sm);transition:all .2s;white-space:nowrap;
}
.back-home:hover{
  background:rgba(255,255,255,.12);color:var(--topbar-text);
}
.back-home svg{flex-shrink:0;}
.topbar .logo{font-size:16px;font-weight:700;letter-spacing:.5px;white-space:nowrap;}
.topbar .logo small{font-weight:400;font-size:var(--wb-text-sm);color:var(--topbar-muted);margin-left:var(--wb-space-2);}
.topbar .stats{font-size:var(--wb-text-sm);color:var(--topbar-muted);white-space:nowrap;}
.topbar .stats b{color:var(--topbar-text);font-weight:600;}
.tb-search{
  flex:1;max-width:360px;min-width:200px;
  position:relative;
}
.tb-search input{
  width:100%;padding:var(--wb-space-2) var(--wb-space-4) var(--wb-space-2) var(--wb-space-8);
  border-radius:20px;border:none;background:rgba(255,255,255,.12);
  color:#fff;font-size:var(--wb-text-sm);outline:none;transition:background .2s;
}
.tb-search input::placeholder{color:var(--topbar-muted);}
.tb-search input:focus{background:rgba(255,255,255,.2);}
.tb-search .search-icon{
  position:absolute;left:12px;top:50%;transform:translateY(-50%);
  color:var(--topbar-muted);font-size:var(--wb-text-base);pointer-events:none;
}
.tb-right{display:flex;align-items:center;gap:var(--wb-space-3);margin-left:auto;}
.tb-total{
  font-size:var(--wb-text-sm);color:var(--topbar-muted);background:rgba(255,255,255,.08);
  padding:var(--wb-space-1) var(--wb-space-3);border-radius:16px;white-space:nowrap;
}
.tb-total b{color:#fbbf24;font-weight:600;}
.login-btn{
  font-size:var(--wb-text-sm);color:var(--topbar-text);background:rgba(79,110,240,.12);
  padding:var(--wb-space-1) var(--wb-space-4);border-radius:16px;cursor:pointer;border:1px solid rgba(79,110,240,.3);transition:.2s;
}
.login-btn:hover{background:rgba(79,110,240,.25);border-color:var(--wb-accent);color:var(--wb-accent);}

/* ── 工具栏 ── */
.toolbar{
  display:flex;align-items:center;gap:var(--wb-space-2);padding:var(--wb-space-3) var(--wb-space-6);
  background:var(--bg);border-bottom:1px solid var(--line);
  flex-wrap:wrap;position:sticky;top:var(--header-h);z-index:90;
}
/* buttons —— 已统一迁移到 .wb-btn/.wb-btn.sm（ui.css） */
.divider-v{width:1px;height:20px;background:var(--line);margin:0 var(--wb-space-1);}

/* ── 布局 ── */
.layout{display:flex;min-height:calc(100vh - var(--header-h) - 45px);}

/* ── 侧栏 ── */
.sidebar{
  width:210px;background:var(--side-bg);
  border-right:1px solid var(--line);
  overflow-y:auto;flex-shrink:0;
  position:sticky;top:calc(var(--header-h) + 45px);
  height:calc(100vh - var(--header-h) - 45px);
  transition:transform .3s ease;
}
.sb-header{
  padding:var(--wb-space-4) var(--wb-space-4) var(--wb-space-2);font-size:var(--wb-text-sm);font-weight:600;
  color:var(--text);display:flex;align-items:center;gap:var(--wb-space-2);
}
.sb-header svg{opacity:.5;}
.nav-room{
  display:block;padding:0;border:none;background:none;
  width:100%;text-align:left;cursor:pointer;
}
.nav-room .rn-row{
  display:flex;align-items:center;justify-content:space-between;
  padding:var(--wb-space-2) var(--wb-space-4) var(--wb-space-2) var(--wb-space-4);transition:background .12s;
  border-left:3px solid transparent;
}
.nav-room .rn-row:hover{background:var(--side-hov);}
.nav-room.expanded .rn-row{background:var(--side-hov);border-left-color:var(--accent);}
.nav-room .rn-row .rn-text{font-size:var(--wb-text-sm);color:var(--text);font-weight:500;}
.nav-room .rn-row .rn-arrow{
  font-size:10px;color:var(--sub);transition:transform .2s;width:14px;text-align:center;
}
.nav-room.expanded .rn-row .rn-arrow{transform:rotate(90deg);}
.nav-room .rn-row .cnt{
  font-size:11px;font-weight:700;color:var(--cnt-text);
  background:linear-gradient(135deg,var(--cnt-grad1),var(--cnt-grad2));
  border-radius:10px;padding:1px var(--wb-space-2);min-width:24px;text-align:center;
}
.nav-room.done .rn-row .cnt{
  background:linear-gradient(135deg,var(--cnt-done-g1),var(--cnt-done-g2));color:var(--cnt-done-t);
}
.badge-done-txt{
  font-size:10px;color:var(--green);margin-left:var(--wb-space-1);
}

/* ── 栋号分组 ── */
.bld-group{border-bottom:1px solid var(--line);}
.bld-group .bld-row{
  display:flex;align-items:center;justify-content:space-between;
  padding:var(--wb-space-2) var(--wb-space-4);cursor:pointer;background:rgba(0,0,0,.02);
  border-left:3px solid transparent;user-select:none;
  transition:background .12s,border-color .12s;
}
.bld-group .bld-row:hover{background:var(--side-hov);}
.bld-group.expanded .bld-row{background:var(--side-hov);border-left-color:var(--accent);}
.bld-group .bld-arrow{
  font-size:10px;color:var(--sub);transition:transform .2s;width:14px;text-align:center;display:inline-block;
}
.bld-group.expanded .bld-arrow{transform:rotate(90deg);}
.bld-group .bld-text{font-size:var(--wb-text-sm);font-weight:600;color:var(--text);}
.bld-group .bld-cnt{
  font-size:11px;font-weight:600;color:var(--muted);
  background:#f0f0f5;border-radius:8px;padding:1px var(--wb-space-2);
}
.bld-group .bld-rooms{display:none;}
.bld-group.expanded .bld-rooms{display:block;}

.sub-list{display:none;padding:0 0 var(--wb-space-1) var(--wb-space-7);}
.nav-room.expanded .sub-list{display:block;}
.sub-link{
  display:flex;align-items:center;justify-content:space-between;
  padding:var(--wb-space-1) var(--wb-space-3) var(--wb-space-1) var(--wb-space-2);font-size:var(--wb-text-sm);color:var(--muted);
  text-decoration:none;border-radius:6px;transition:background .1s;
}
.sub-link:hover{background:rgba(0,0,0,.05);color:var(--text);}
.sub-link .sl-cnt{
  font-size:10px;background:var(--card);border:1px solid var(--line2);
  border-radius:8px;padding:0 var(--wb-space-2);color:var(--sub);
}

/* ── 主内容 ── */
.main{flex:1;padding:var(--wb-space-2) var(--wb-space-7) var(--wb-space-15);min-width:0;}

/* ── 房间段 ── */
.room-section{margin-bottom:var(--wb-space-8);scroll-margin-top:var(--wb-space-3);content-visibility:auto;contain-intrinsic-size:auto 800px;}
.room-header{
  display:flex;align-items:center;gap:var(--wb-space-3);padding-bottom:var(--wb-space-3);
  border-bottom:2px solid var(--line);margin-bottom:var(--wb-space-4);
}
.room-name{font-size:var(--wb-text-lg);font-weight:700;color:var(--text);}
.room-badge{
  font-size:11px;font-weight:600;color:#fff;
  background:var(--blue-badge);border-radius:10px;padding:2px var(--wb-space-3);
}
.room-blocks{font-size:var(--wb-text-sm);color:var(--muted);}
.room-blocks b{color:var(--cnt-text);font-weight:600;}
.room-menu{margin-left:auto;color:var(--sub);cursor:pointer;font-size:16px;padding:2px var(--wb-space-2);border-radius:4px;}
.room-menu:hover{background:var(--line);}

.empty-note{
  color:var(--muted);font-size:var(--wb-text-sm);padding:var(--wb-space-4);background:var(--card);
  border-radius:var(--radius);border:1px dashed var(--line2);text-align:center;
}

/* ── 部位组 ── */
.loc-group{margin-bottom:var(--wb-space-6);}
.loc-header{
  display:flex;align-items:center;gap:var(--wb-space-2);margin-bottom:var(--wb-space-3);
}
.loc-icon{
  width:26px;height:26px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  font-size:11px;font-weight:700;color:#fff;flex-shrink:0;
}
.loc-title{font-size:var(--wb-text-base);font-weight:600;color:var(--text);}
.loc-tag{
  font-size:11px;color:var(--orange);background:var(--orange-bg);
  border:1px solid #fcd34d;border-radius:6px;padding:1px var(--wb-space-2);
}
.loc-count{margin-left:auto;font-size:var(--wb-text-sm);color:var(--muted);white-space:nowrap;}
.loc-count b{color:var(--text);font-weight:600;}

/* ── 卡片网格 ── */
.img-grid{
  display:grid;
  grid-template-columns:repeat(auto-fill,minmax(180px,1fr));
  gap:var(--wb-space-4);
}

/* ── 卡片 ── */
.img-card{
  background:var(--card);border-radius:var(--radius);
  border:1px solid var(--line);overflow:hidden;
  cursor:pointer;transition:transform .25s cubic-bezier(.16,1,.3,1),box-shadow .25s ease,border-color .25s ease;
  display:flex;flex-direction:column;
  will-change:transform,box-shadow;
}
.img-card:hover{
  transform:translateY(-4px);box-shadow:0 8px 30px rgba(31,35,41,.12);
  border-color:var(--accent);
}
.img-card:active{
  transform:translateY(-1px);transition-duration:.08s;
}
.img-card .img-wrap img{
  transition:transform .4s cubic-bezier(.16,1,.3,1);
}
.img-card:hover .img-wrap img{
  transform:scale(1.04);
}
.img-wrap{
  aspect-ratio:4/3;overflow:hidden;background:var(--img-bg);position:relative;
}
.img-wrap img{
  width:100%;height:100%;object-fit:cover;display:block;
  transition:transform .3s ease;
}
.img-card:hover .img-wrap img{transform:scale(1.03);}
.card-body{padding:var(--wb-space-2) var(--wb-space-3) var(--wb-space-3);}
.card-loc{
  font-size:11px;color:var(--muted);background:var(--bg);
  padding:2px var(--wb-space-2);border-radius:8px;display:inline-block;margin-bottom:var(--wb-space-2);
  max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}
.card-tile{
  display:flex;align-items:center;gap:3px;margin-bottom:2px;
}
.card-tile label{font-size:10px;color:var(--sub);white-space:nowrap;letter-spacing:.5px;}
.card-tile input{
  flex:1;min-width:0;padding:3px var(--wb-space-2);border:1px solid var(--line2);
  border-radius:6px;font-size:var(--wb-text-sm);color:var(--text);
  background:var(--card);outline:none;transition:border-color .2s;
}
.card-tile input:focus{border-color:var(--accent);}
.card-tile input:disabled{opacity:.55;cursor:not-allowed;background:var(--bg);}
.card-tile.flash{animation:tileFlash 1.6s ease;}
@keyframes tileFlash{0%,100%{box-shadow:none;background:transparent}30%{box-shadow:0 0 0 3px var(--accent,#5b9aff);background:rgba(91,154,255,.22)}}
.card-fn{
  font-size:10px;color:var(--sub);overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap;max-width:100%;
}

/* ── 部位公式 ── */
.tile-formula{
  font-size:var(--wb-text-sm);color:var(--formula-text);background:var(--formula-bg);
  border:1px dashed var(--formula-border);border-radius:var(--radius-sm);
  padding:var(--wb-space-2) var(--wb-space-4);margin-bottom:var(--wb-space-4);display:flex;flex-wrap:wrap;align-items:center;gap:var(--wb-space-1);
}
.tile-formula .tf-label{font-weight:700;margin-right:var(--wb-space-1);}
.tile-formula .tf-term b{color:var(--formula-term);font-weight:700;}
.tile-formula .tf-plus{color:var(--formula-term);}
.tile-formula .tf-eq{margin-left:var(--wb-space-1);font-weight:700;color:var(--formula-text);}

/* ── 灯箱 ── */
#lightbox{
  position:fixed;inset:0;background:rgba(0,0,0,.92);
  display:none;align-items:center;justify-content:center;
  z-index:1000;flex-direction:column;
}
#lightbox.show{display:flex;}
#lb-img{
  max-width:90vw;max-height:80vh;object-fit:contain;
  border-radius:8px;box-shadow:0 12px 48px rgba(0,0,0,.5);
  cursor:zoom-in;transition:transform .15s ease;
}
#lb-img.zoomed{cursor:zoom-out;}
#lb-zoom-hint{
  position:absolute;bottom:60px;left:50%;transform:translateX(-50%);
  color:rgba(255,255,255,.5);font-size:11px;pointer-events:none;
  opacity:0;transition:opacity .3s;
}
#lightbox.show #lb-zoom-hint{opacity:1;}
#lb-cap{
  color:#ddd;font-size:var(--wb-text-sm);margin-top:var(--wb-space-4);max-width:90vw;
  text-align:center;word-break:break-all;line-height:1.6;
}
#lb-nav{
  position:absolute;top:50%;transform:translateY(-50%);
  color:#fff;font-size:40px;cursor:pointer;user-select:none;
  padding:0 var(--wb-space-4);opacity:.6;transition:opacity .2s;
}
#lb-nav:hover{opacity:1;}
#lb-prev{left:8px;}#lb-next{right:8px;}
#lb-close{
  position:absolute;top:18px;right:24px;color:#fff;
  font-size:32px;cursor:pointer;opacity:.7;transition:opacity .2s;
  width:40px;height:40px;display:flex;align-items:center;justify-content:center;border-radius:50%;
}
#lb-close:hover{opacity:1;background:rgba(255,255,255,.1);}
#lb-counter{
  position:absolute;bottom:18px;left:50%;transform:translateX(-50%);
  color:#aaa;font-size:var(--wb-text-sm);background:rgba(0,0,0,.5);
  padding:var(--wb-space-1) var(--wb-space-4);border-radius:12px;
}

/* ── 登录弹窗（遮罩基础由 ui.css .wb-modal 提供）── */
#loginModal{background:rgba(0,0,0,.5);z-index:1100}
.login-card{
  background:var(--card);border-radius:var(--radius);
  padding:var(--wb-space-6) 28px;width:320px;max-width:90vw;
  box-shadow:var(--shadow-hover);border:1px solid var(--line);
  transition:background-color .3s ease,color .3s ease,border-color .3s ease;
}
.login-card h3{font-size:16px;margin-bottom:var(--wb-space-1);color:var(--text);}
.login-card p{font-size:var(--wb-text-sm);color:var(--muted);margin-bottom:var(--wb-space-4);line-height:1.6;}
.login-card input{
  width:100%;padding:var(--wb-space-2) var(--wb-space-3);border:1px solid var(--line2);
  border-radius:8px;font-size:16px;margin-bottom:var(--wb-space-4);
  background:var(--bg);color:var(--text);outline:none;font-family:inherit;
}
.login-card input:focus{border-color:var(--accent);}
.login-card .lc-btns{display:flex;gap:var(--wb-space-2);justify-content:flex-end;}
.login-card .lc-btns button{
  padding:var(--wb-space-2) 18px;border-radius:8px;border:none;cursor:pointer;
  font-size:var(--wb-text-sm);font-family:inherit;transition:.15s;
}
.lc-ok{background:var(--accent);color:#fff;}
.lc-ok:hover{opacity:.9;}
.lc-cancel{background:var(--line);color:var(--text);}
.lc-cancel:hover{background:var(--line2);}
/* ── 轻提示 toast ── */

/* ── 移动端响应式 ── */
@media(max-width:768px){
  .topbar{padding:0 var(--wb-space-4);height:auto;min-height:48px;}
  .topbar .logo{font-size:var(--wb-text-base);}
  .topbar .logo small{display:none;}
  .back-home span{display:none;}
  .tb-search{max-width:none;order:3;flex-basis:100%;}
  .tb-right{order:-1;}
  .toolbar{padding:var(--wb-space-2) var(--wb-space-4);top:48px;}
  .sidebar{
    position:fixed;left:0;top:0;bottom:0;width:280px;z-index:200;
    transform:translateX(-100%);height:100vh;
    box-shadow:4px 0 20px rgba(0,0,0,.2);
  }
  .sidebar.open{transform:translateX(0);}
  .sb-overlay{
    display:none;position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:199;
  }
  .sb-overlay.show{display:block;}
  .main{padding:var(--wb-space-4) var(--wb-space-3) var(--wb-space-10);}
  .img-grid{grid-template-columns:repeat(auto-fill,minmax(145px,1fr));gap:var(--wb-space-3);}
  .room-name{font-size:16px;}
  .room-header{flex-wrap:wrap;}
  .layout{flex-direction:column;}
  /* 汉堡按钮 */
  .hamburger{
    display:flex;flex-direction:column;gap:var(--wb-space-1);cursor:pointer;
    padding:var(--wb-space-2) var(--wb-space-2);border-radius:6px; margin-right:var(--wb-space-2);
  }
  .hamburger span{width:18px;height:2px;background:#ddd;border-radius:2px;transition:.2s;}
  .hamburger:hover span{background:#fff;}

  /* 手机端砖数输入优化 */
  .card-tile{padding:var(--wb-space-2) var(--wb-space-2);gap:var(--wb-space-2);font-size:var(--wb-text-base);}
  .card-tile label{font-size:var(--wb-text-sm);}
  .card-tile input{
    width:64px!important;padding:var(--wb-space-2) var(--wb-space-3)!important;
    font-size:16px!important;border-radius:8px!important;
    text-align:center;
    -webkit-appearance:none;appearance:none;
  }
  .card-tile input:focus{
    border-color:var(--accent);box-shadow:0 0 0 3px rgba(79,110,240,.2);
  }
  /* 手机端卡片操作按钮增大 */
  .card-actions button{
    width:36px;height:36px;font-size:var(--wb-text-lg);
  }
  /* 手机端灯箱缩放按钮 */
  #lightbox .lb-btn{width:44px;height:44px;font-size:var(--wb-text-xl);}
}
@media(min-width:769px){
  .topbar{display:none;}  /* 桌面端汉堡隐藏后 topbar 无内容，隐藏整个栏消除空白 */
  .hamburger{display:none;}
  .sb-overlay{display:none !important;}
}

/* ── 动画 ── */
@keyframes fadeInUp{
  from{opacity:0;transform:translateY(12px);}
  to{opacity:1;transform:translateY(0);}
}
.room-section{animation:fadeInUp .3s ease both;}
.room-section:nth-child(1){animation-delay:0s;}
.room-section:nth-child(2){animation-delay:.04s;}
.room-section:nth-child(3){animation-delay:.08s;}

/* ── 快捷筛选栏 ── */
.filter-bar{
  display:inline-flex;gap:var(--wb-space-2);align-items:center;margin-left:var(--wb-space-2);
}
.filter-btn{
  padding:var(--wb-space-1) var(--wb-space-4);border:1px solid var(--line2);border-radius:20px;
  background:var(--bg);color:var(--muted);font-size:var(--wb-text-sm);cursor:pointer;
  transition:all .2s ease;white-space:nowrap;outline:none;
}
.filter-btn:hover{border-color:var(--accent);color:var(--accent);}
.filter-btn.active{
  background:var(--accent);color:#fff;border-color:var(--accent);
  box-shadow:0 2px 8px rgba(51,112,255,.3);
}
.filter-btn .cnt{
  font-size:11px;opacity:.75;margin-left:2px;
}

/* ── 操作动效 ── */
@keyframes fadeOut{
  from{opacity:1;transform:scale(1);}
  to{opacity:0;transform:scale(.92);}
}
@keyframes saveFlash{
  0%{box-shadow:0 0 0 0 rgba(52,168,83,.5);}
  70%{box-shadow:0 0 0 8px rgba(52,168,83,0);}
  100%{box-shadow:0 0 0 0 rgba(52,168,83,0);}
}
@keyframes verifiedPop{
  0%{transform:scale(.5);opacity:0;}
  50%{transform:scale(1.15);}
  100%{transform:scale(1);opacity:1;}
}
.card-deleting{animation:fadeOut .3s ease forwards;}
.card-saving{animation:saveFlash .6s ease;}
.verified-badge-anim{animation:verifiedPop .4s cubic-bezier(.16,1,.3,1);}

/* ── 砖数输入框高亮反馈 ── */
.card-tile input.tc-changed{
  border-color:var(--green);box-shadow:0 0 0 2px rgba(52,168,83,.15);
}

/* ── 侧栏导航行悬停增强 ── */
.nav-room .rn-row{
  transition:background .2s ease,padding-left .2s ease;
}
.nav-room .rn-row:hover{
  background:var(--side-hov);
}
.sub-link{
  transition:background .2s ease,color .2s ease;
}
.sub-link:hover{
  background:var(--accent-light);color:var(--accent);
}

/* ── 工具栏按钮微交互（wb-btn 已统一） ── */
.toolbar .wb-btn{
  transition:all .2s ease;position:relative;overflow:hidden;
}
.toolbar .wb-btn:hover{
  transform:translateY(-1px);box-shadow:0 3px 10px rgba(31,35,41,.1);
}
.toolbar .wb-btn:active{
  transform:translateY(0);transition-duration:.05s;
}

/* ── 房间标题增强 ── */
.room-header{
  transition:background .2s ease;
}
.room-header:hover{
  background:var(--accent-light);
}
.room-header .room-name{
  transition:color .2s ease;
}
.room-header:hover .room-name{
  color:var(--accent);
}

/* ── 主题切换过渡 ── */
body, .topbar, .toolbar, .sidebar, .main, .room-section, .loc-group,
.empty-note, .card-loc, .tile-formula, .nav-room .rn-row, .sub-link,
.room-header, .img-card, .loc-header{
  transition: background-color .3s ease, color .3s ease, border-color .3s ease;
}

/* ── 顶栏主题切换按钮组 ── */
.theme-switch{
  display:flex;align-items:center;gap:3px;
  background:rgba(255,255,255,.12);padding:3px;border-radius:20px;
}
.ts-btn{
  width:30px;height:30px;border:none;background:transparent;border-radius:50%;
  cursor:pointer;font-size:var(--wb-text-base);line-height:1;
  display:flex;align-items:center;justify-content:center;
  opacity:.55;transition:.2s;color:#fff;
}
.ts-btn:hover{opacity:1;background:rgba(255,255,255,.18);}
.ts-btn.active{
  opacity:1;background:rgba(255,255,255,.3);
  box-shadow:0 0 0 2px rgba(255,255,255,.45);
}
@media(max-width:768px){
  .theme-switch{margin-left:auto;}
}

/* ── 滚动条美化 ── */
::-webkit-scrollbar{width:6px;height:6px;}
::-webkit-scrollbar-track{background:transparent;}
::-webkit-scrollbar-thumb{background:var(--line2);border-radius:3px;}
::-webkit-scrollbar-thumb:hover{background:var(--sub);}

/* ===== 恢复功能样式 ===== */
/* 房间折叠 */
.room-section > .room-header{cursor:pointer;user-select:none;}
.room-section.collapsed > *:not(.room-header){display:none;}
/* 主区栋号分组 */
.bld-group-main{margin-bottom:30px;scroll-margin-top:84px;}
.bld-title{font-size:var(--wb-text-xl);font-weight:700;color:var(--accent,#4f6ef7);margin:var(--wb-space-2) 0 var(--wb-space-4);padding-left:var(--wb-space-3);border-left:5px solid var(--accent,#4f6ef7);}
.room-section.loc-mode > .room-header{background:rgba(79,110,247,.07);}
/* 砖数合计栏 */
.ts-detail{display:flex;gap:var(--wb-space-2);flex-wrap:wrap;padding:var(--wb-space-2) var(--wb-space-4);background:var(--bg,#fff);border-bottom:1px solid var(--line,#ddd);overflow-x:auto;}
.ts-detail.hidden{display:none;}
.ts-detail:empty{display:none;}
.ts-pill{font-size:var(--wb-text-sm);color:var(--text,#333);background:rgba(79,110,247,.08);border:1px solid rgba(79,110,247,.18);padding:var(--wb-space-1) var(--wb-space-3);border-radius:14px;white-space:nowrap;}
.ts-pill b{color:var(--accent,#4f6ef7);}
.ts-total{background:var(--accent,#4f6ef7);color:#fff;border-color:var(--accent,#4f6ef7);}
.ts-total b{color:#fff;}
/* 懒加载淡入 */
.img-wrap img{opacity:0;transition:opacity .35s ease;}
.img-wrap img.loaded{opacity:1;}
/* 灯箱缩略图条（窗口化） */
.lb-thumbs{position:absolute;bottom:54px;left:0;right:0;display:flex;gap:var(--wb-space-2);padding:var(--wb-space-2) var(--wb-space-3);overflow-x:auto;background:rgba(0,0,0,.35);z-index:1001;}
.lb-thumb{flex:0 0 auto;width:56px;height:40px;border-radius:4px;background-size:cover;background-position:center;opacity:.5;cursor:pointer;border:2px solid transparent;transition:.2s;}
.lb-thumb.active{opacity:1;border-color:#fff;}
.lb-thumb:hover{opacity:.85;}
.lb-actions{position:absolute;right:16px;bottom:14px;display:flex;gap:var(--wb-space-2);align-items:center;z-index:1002}
.lb-actions button{backdrop-filter:blur(8px);border-radius:16px;padding:var(--wb-space-2) var(--wb-space-4);font-size:var(--wb-text-sm);cursor:pointer;transition:all .15s;font-family:inherit}
.lb-autoplay{background:rgba(255,255,255,.12);color:#fff;border:1px solid rgba(255,255,255,.3)}
.lb-autoplay:hover{background:rgba(255,255,255,.22)}
/* 灯箱下载原图 */
#lb-dl{position:absolute;top:12px;left:16px;z-index:1002;background:rgba(255,255,255,.15);color:#fff;border:1px solid rgba(255,255,255,.3);border-radius:16px;padding:var(--wb-space-1) var(--wb-space-3);font-size:var(--wb-text-sm);cursor:pointer;text-decoration:none;}
#lb-dl:hover{background:rgba(255,255,255,.28);}
/* 编辑模式卡片操作 */
.img-card{position:relative;}
.card-actions{position:absolute;top:var(--wb-space-1);right:4px;display:none;gap:4px;z-index:5;}
.card-actions button{width:24px;height:24px;border:none;border-radius:50%;cursor:pointer;font-size:var(--wb-text-base);line-height:1;display:flex;align-items:center;justify-content:center;color:#fff;box-shadow:0 1px 4px rgba(0,0,0,.3);}
.ca-del{background:rgba(220,38,38,.9);}
.ca-rep{background:rgba(79,110,247,.9)}
body.editing .card-actions{display:flex!important;}
.img-card:hover .card-actions{display:flex!important;}
/* 砖数输入框 */
.card-tile{display:none;align-items:center;gap:var(--wb-space-1);padding:var(--wb-space-2) var(--wb-space-3);background:var(--card);border-top:1px solid var(--line);font-size:var(--wb-text-sm);}
.card-tile label{font-size:11px;color:var(--sub);white-space:nowrap;}
.card-tile input{width:44px;border:1.5px solid var(--line2);border-radius:6px;text-align:center;font-size:var(--wb-text-sm);padding:3px var(--wb-space-2);color:var(--text);background:var(--bg);outline:none;transition:border-color .2s;}
.card-tile input:focus{border-color:var(--accent);}
.card-tile input:disabled{opacity:.5;cursor:not-allowed;}
.card-tile.has-val{display:flex;}
body.editing .card-tile{display:flex!important;}
/* 编辑按钮 */
#btnEdit{transition:all .2s;}
#btnEdit.active{background:var(--accent,#4f6ef7)!important;color:#fff!important;border-color:var(--accent,#4f6ef7)!important;}
/* 回到顶部 */
#backTop{position:fixed;bottom:36px;right:20px;z-index:999;width:42px;height:42px;border-radius:50%;background:var(--accent,#4f6ef7);color:#fff;border:none;cursor:pointer;font-size:var(--wb-text-lg);display:none;align-items:center;justify-content:center;box-shadow:0 3px 12px rgba(0,0,0,.18);transition:opacity .3s;}
#backTop.show{display:flex;}
#backTop:hover{transform:scale(1.08);}
/* 搜索框 */
.toolbar .search-box{display:inline-flex;align-items:center;margin-left:var(--wb-space-2);}
.toolbar .search-box input{border:1px solid #ccc;border-radius:16px;padding:var(--wb-space-1) var(--wb-space-3);font-size:var(--wb-text-sm);width:120px;outline:none;transition:border-color .2s;}
.toolbar .search-box input:focus{border-color:var(--accent,#4f6ef7);}

/* ══ 从 app.html 提取：本机视图按钮（原内联 <style>） ══ */
.tbtn-local{background:var(--wb-line2);color:var(--wb-text);border-color:var(--wb-line);}

/* ══ 从 app.html 提取：上传弹窗 #uploadModal ══ */
#uploadModal{position:fixed;inset:0;background:rgba(0,0,0,.55);display:flex;align-items:center;justify-content:center;z-index:9999;}
#uploadModal.modal-hidden{display:none;}
.upload-card{width:min(460px,92vw);background:var(--wb-surface-card);color:var(--wb-text);border-radius:16px;padding:var(--wb-space-5);box-shadow:0 20px 60px rgba(0,0,0,.35);}
.uc-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:var(--wb-space-3);}
.uc-head h3{margin:0;font-size:var(--wb-text-lg);}
.uc-close{border:none;background:none;font-size:var(--wb-text-xl);cursor:pointer;color:inherit;line-height:1;}
.uc-row{display:flex;align-items:center;gap:var(--wb-space-3);margin:var(--wb-space-3) 0;}
.uc-row label{width:48px;flex:none;color:var(--wb-muted);}
.uc-row select,.uc-row input{flex:1;padding:var(--wb-space-2) var(--wb-space-3);border:1px solid var(--wb-line2);border-radius:8px;background:var(--wb-bg2);color:inherit;}
.up-drop{border:2px dashed var(--wb-line2);border-radius:12px;padding:var(--wb-space-6);text-align:center;color:var(--wb-muted);margin:var(--wb-space-3) 0;cursor:pointer;transition:.2s;}
.up-drop.drag{border-color:var(--wb-accent);background:var(--wb-accent-soft);}
.up-pick{border:none;background:var(--wb-accent);color:#fff;padding:var(--wb-space-2) var(--wb-space-3);border-radius:8px;cursor:pointer;margin-left:var(--wb-space-1);}
.up-list{display:flex;flex-wrap:wrap;gap:var(--wb-space-2);max-height:140px;overflow:auto;margin:var(--wb-space-2) 0;}
.up-item{background:var(--wb-bg3);color:var(--wb-text);padding:var(--wb-space-1) var(--wb-space-2);border-radius:6px;font-size:var(--wb-text-sm);max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.uc-actions{display:flex;justify-content:flex-end;gap:var(--wb-space-3);margin-top:var(--wb-space-2);}
.uc-cancel{border:1px solid var(--wb-line2);background:var(--wb-bg3);color:var(--wb-text);padding:var(--wb-space-2) var(--wb-space-4);border-radius:8px;cursor:pointer;}
.uc-ok{border:none;background:var(--wb-green);color:#fff;padding:var(--wb-space-2) var(--wb-space-4);border-radius:8px;cursor:pointer;}
.uc-ok:disabled{opacity:.5;cursor:not-allowed;}
.up-prog{margin-top:var(--wb-space-2);font-size:var(--wb-text-sm);color:var(--wb-accent);}

/* ══ 从 app.html 提取：标注模式 #lb-anno / .anno-* ══ */
#lb-wrap{position:relative;display:inline-block;line-height:0;transition:transform .15s ease;transform-origin:center}
#lb-anno{background:rgba(20,30,45,.55);color:#fff;border:1px solid rgba(255,255,255,.35)}
#lb-anno:hover{background:rgba(46,117,182,.75)}
#lb-anno.active{background:#1d9e75;border-color:#1d9e75}
#anno-layer{position:absolute;inset:0;pointer-events:none;z-index:4}
#lightbox.annoing #anno-layer{display:block;pointer-events:none}
#lightbox.annoing #lb-img{cursor:crosshair}
.anno-box{position:absolute;border:2px solid #2fd494;background:rgba(31,158,117,.12);pointer-events:none;cursor:pointer}
#lightbox.annoing .anno-box{pointer-events:auto}
.anno-box.sel{border-color:var(--accent,#5b9aff);background:rgba(91,154,255,.15)}
.atag{position:absolute;top:-19px;left:-2px;font-size:11px;font-weight:600;color:#fff;background:#1d9e75;padding:0 var(--wb-space-2);border-radius:4px;white-space:nowrap}
.anno-box.sel .atag{background:#2e75b6}
.anno-draw{border:2px dashed #2fd494;background:rgba(31,158,117,.08);position:absolute;pointer-events:none}
/* 标注提示：视觉复用 ui.css .wb-toast，此处仅保留位置差异 */
#anno-toast{bottom:70px}

/* ── 房间部位分类色（P0-1 步骤4：内联 style→class 自动生成）── */
.loc-icon.ic-06b6d4{background:#06b6d4}
.loc-icon.ic-0891b2{background:#0891b2}
.loc-icon.ic-0e7490{background:#0e7490}
.loc-icon.ic-14b8a6{background:#14b8a6}
.loc-icon.ic-16a34a{background:#16a34a}
.loc-icon.ic-6366f1{background:#6366f1}
.loc-icon.ic-65a30d{background:#65a30d}
.loc-icon.ic-7c3aed{background:#7c3aed}
.loc-icon.ic-84cc16{background:#84cc16}
.loc-icon.ic-8b5cf6{background:#8b5cf6}
.loc-icon.ic-9333ea{background:#9333ea}
.loc-icon.ic-94a3b8{background:#94a3b8}
.loc-icon.ic-a78bfa{background:#a78bfa}
.loc-icon.ic-c4b5fd{background:#c4b5fd}
.loc-icon.ic-ca8a04{background:#ca8a04}
.loc-icon.ic-d97706{background:#d97706}
.loc-icon.ic-db2777{background:#db2777}
.loc-icon.ic-dc2626{background:#dc2626}
.loc-icon.ic-ea580c{background:#ea580c}
.loc-icon.ic-eab308{background:#eab308}
.loc-icon.ic-f97316{background:#f97316}

.ic-svg{vertical-align:-2px;margin-right:3px}
