/* ===== 平台统一导航壳 · .wb-* 命名空间（自包含，零外部依赖） ===== */
:root{
  /* ---- 设计令牌：色板 ---- */
  --wb-bg:#ffffff;
  --wb-bg2:#f5f6f8;
  --wb-bg3:#eef0f3;
  /* 语义化表面层（推荐使用；--wb-bg* 为历史别名，明暗模式下语义会反转） */
  --wb-surface-page:#f5f6f8;    /* 页面底色 */
  --wb-surface-card:#ffffff;    /* 卡片/浮层 */
  --wb-surface-sunken:#eef0f3;  /* 内凹区/表头/代码块 */
  --wb-line:#e4e6eb;
  --wb-line2:#d4d8de;
  --wb-text:#1f2329;
  --wb-muted:#646a73;
  --wb-sub:#6e747d;             /* 4.71:1 on #fff（原 #8f959e 仅 2.8:1，不达 AA） */
  --wb-sub-deco:#a8aeb6;        /* 纯装饰用（分隔线/占位图形），不得承载文本 */
  --wb-accent:#0891b2;
  --wb-accent-soft:#e2f4fa;
  --wb-green:#34a853;
  --wb-green-soft:#e6f4ea;
  --wb-red:#f5222d;
  --wb-red-soft:#fff1f0;
  --wb-amber:#f59e0b;
  --wb-amber-soft:#fef3c7;
  --wb-orange:#fa8c16;
  --wb-orange-soft:#fff7e6;
  --wb-purple:#722ed1;          /* 分类语义专用（问题类型/标签），禁止用于工单状态 */
  --wb-purple-soft:#f3e8ff;
  --wb-cyan:#0891b2;
  --wb-cyan-soft:#e0f2fe;
  --wb-shadow:0 4px 16px rgba(31,35,41,.08);
  --wb-shadow-lg:0 8px 32px rgba(31,35,41,.12);

  /* ---- 工单状态语义色（SSOT · 三元组 bg/ink/dot）----
     ink 为文本色，均已按 WCAG 2.1 AA（≥4.5:1）核算过对比度。
     状态机：待受理→待派单→已派单→施工中→已完成 ／ 待受理→已驳回 */
  --wb-st-review-bg:#fff7e6;   --wb-st-review-ink:#b45309;   --wb-st-review:#fa8c16;
  --wb-st-pending-bg:#fef3c7;  --wb-st-pending-ink:#92400e;  --wb-st-pending:#f59e0b;
  --wb-st-assigned-bg:#e8f0fe; --wb-st-assigned-ink:#1d4ed8; --wb-st-assigned:#3370ff;
  --wb-st-working-bg:#e0f2fe;  --wb-st-working-ink:#0e7490;  --wb-st-working:#0891b2;
  --wb-st-done-bg:#e6f4ea;     --wb-st-done-ink:#166534;     --wb-st-done:#34a853;
  --wb-st-rejected-bg:#fff1f0; --wb-st-rejected-ink:#c00d1e; --wb-st-rejected:#f5222d;

  /* ---- 设计令牌：字体 ---- */
  --wb-font: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
  --wb-font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  --wb-text-xs: 11px; --wb-text-sm: 13px; --wb-text-base: 15px;
  --wb-text-lg: 18px; --wb-text-xl: 22px; --wb-text-2xl: 28px;

  /* ---- 设计令牌：间距 (4px base) ---- */
  --wb-space-1:4px; --wb-space-2:8px; --wb-space-3:12px;
  --wb-space-4:16px; --wb-space-5:20px; --wb-space-6:24px;
  --wb-space-8:32px; --wb-space-10:40px; --wb-space-12:48px;

  /* ---- 设计令牌：圆角 ---- */
  --wb-radius-xs:4px; --wb-radius-sm:6px; --wb-radius:10px; --wb-radius-lg:14px; --wb-radius-xl:20px;

  /* UI 2.0 圆角语义（渐进式补齐；新组件优先用，旧组件保持兼容） */
  --wb-radius-button:8px;     /* 按钮/输入框 */
  --wb-radius-card:12px;      /* 卡片 */
  --wb-radius-panel:16px;     /* 大面板/弹窗 */

  /* ---- 状态色点（UI 2.0 工单状态语义）---- */
  --wb-st-pending:#f59e0b;        /* 待处理 / 待派单 */
  --wb-st-assigned:#3370ff;      /* 已派单 / 施工中 */
  --wb-st-done:#34a853;          /* 已完成 */
  --wb-st-rejected:#f5222d;      /* 驳回/失败（红，与三元组 --wb-st-rejected 语义一致） */
  --wb-st-overdue:#f5222d;       /* 超期/紧急 */
  --wb-st-urgent:#f5222d;        /* 紧急（与超期同色） */

  /* ---- 尺寸 ---- */
  --wb-nav-h:56px;
  body:has(#wb-nav) { padding-top: var(--wb-nav-h); }  /* 仅当页面渲染全局导航(#wb-nav)才预留 56px；无导航页(画廊/要闻等自带 topbar)不再出现顶部空白 */
  @media (max-width: 1024px) { body:has(#wb-nav) { padding-top: var(--wb-nav-h); } }  /* 移动端同规则 */
  --wb-container: 960px;
  --wb-touch:44px;              /* WCAG 2.5.5 最小触控目标 */
}
:root.wb-dark, html[data-theme="dark"]{
  --wb-bg:#12151b;
  --wb-bg2:#1a1e25;
  --wb-bg3:#22262f;
  --wb-surface-page:#12151b;
  --wb-surface-card:#1a1e25;
  --wb-surface-sunken:#22262f;
  --wb-line:#2a3038;
  --wb-line2:#353b45;
  --wb-text:#e8ecf1;
  --wb-muted:#b0b8c4;
  --wb-sub:#7d8894;             /* 5.15:1 on #12151b（原 #6b7682 仅 4.0:1） */
  --wb-sub-deco:#5a6470;
  --wb-accent:#22d3ee;
  --wb-accent-soft:rgba(34,211,238,.16);
  --wb-green:#4ade80;
  --wb-green-soft:rgba(74,222,128,.14);
  --wb-red:#f87171;
  --wb-red-soft:rgba(248,113,113,.14);
  --wb-amber:#fbbf24;
  --wb-amber-soft:rgba(251,191,36,.14);
  --wb-orange:#fb923c;
  --wb-orange-soft:rgba(251,146,60,.14);
  --wb-purple:#a78bfa;
  --wb-purple-soft:rgba(167,139,250,.14);
  --wb-cyan:#38bdf8;
  --wb-cyan-soft:rgba(56,189,248,.14);
  --wb-shadow:0 4px 20px rgba(0,0,0,.35);
  --wb-shadow-lg:0 8px 36px rgba(0,0,0,.50);

  --wb-st-review-bg:rgba(250,140,22,.16);   --wb-st-review-ink:#fbbf24;   --wb-st-review:#fb923c;
  --wb-st-pending-bg:rgba(245,158,11,.16);  --wb-st-pending-ink:#fcd34d;  --wb-st-pending:#fbbf24;
  --wb-st-assigned-bg:rgba(79,157,255,.16); --wb-st-assigned-ink:#8ec0ff; --wb-st-assigned:#4f9dff;
  --wb-st-working-bg:rgba(56,189,248,.16);  --wb-st-working-ink:#6dd3fa;  --wb-st-working:#38bdf8;
  --wb-st-done-bg:rgba(74,222,128,.16);     --wb-st-done-ink:#7ceaa4;     --wb-st-done:#4ade80;
  --wb-st-rejected-bg:rgba(248,113,113,.16);--wb-st-rejected-ink:#fca5a5; --wb-st-rejected:#f87171;
}

/* ---- 全局基础样式：引用 ui.css 的页面自动获得干净基底 ---- */
body.wb-base, body:has(#wb-nav){
  margin:0; padding:0;
  min-height:100vh;
  font-family:var(--wb-font);
  font-size:var(--wb-text-base);
  color:var(--wb-text);
  background:var(--wb-bg2);
  -webkit-font-smoothing:antialiased;
}
/* ── 全局焦点可见性 ── */
:focus-visible{
  outline:2px solid var(--wb-accent);
  outline-offset:2px;
  border-radius:4px;
}
button:focus-visible, a:focus-visible, input:focus-visible, textarea:focus-visible,
select:focus-visible, [tabindex]:focus-visible{
  outline:2px solid var(--wb-accent);
  outline-offset:2px;
  border-radius:4px;
}

/* ── 降低动态效果偏好（WCAG 2.3.3）：全站一次性兜底 ── */
@media (prefers-reduced-motion: reduce){
  *, *::before, *::after{
    animation-duration:.01ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.01ms !important;
    scroll-behavior:auto !important;
  }
}

/* ── 仅供屏幕阅读器 ── */
.wb-sr-only{
  position:absolute;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;
}

/* ── 工单状态标签（跨页统一组件）── */
.wb-status{
  display:inline-flex;align-items:center;gap:5px;
  padding:3px 10px;border-radius:999px;
  font-size:var(--wb-text-xs);font-weight:600;line-height:1.7;
  border:1px solid transparent;white-space:nowrap;
  background:var(--wb-bg3);color:var(--wb-muted);
}
.wb-status::before{content:'';width:6px;height:6px;border-radius:50%;background:currentColor;flex:none}
.wb-status[data-st="待受理"]{background:var(--wb-st-review-bg);  color:var(--wb-st-review-ink);  border-color:var(--wb-st-review)}
.wb-status[data-st="待派单"]{background:var(--wb-st-pending-bg); color:var(--wb-st-pending-ink)}
.wb-status[data-st="已派单"]{background:var(--wb-st-assigned-bg);color:var(--wb-st-assigned-ink)}
.wb-status[data-st="已接单"]{background:rgba(109,40,217,.12);color:#6d28d9}
.wb-status[data-st="施工中"]{background:var(--wb-st-working-bg); color:var(--wb-st-working-ink)}
.wb-status[data-st="已完成"]{background:var(--wb-st-done-bg);    color:var(--wb-st-done-ink)}
.wb-status[data-st="已驳回"]{background:var(--wb-st-rejected-bg);color:var(--wb-st-rejected-ink)}

/* 普遍可用的卡片 + 容器 */
.wb-card{
  background:var(--wb-bg); border:1px solid var(--wb-line);
  border-radius:var(--wb-radius-lg); padding:var(--wb-space-6);
}
.wb-container{
  max-width:var(--wb-container); margin:0 auto;
  padding:var(--wb-space-8) var(--wb-space-5);
}
/* 统一 section 标题 */
.wb-section-title{
  font-size:var(--wb-text-sm); font-weight:600;
  color:var(--wb-sub); text-transform:uppercase;
  letter-spacing:.5px; margin:var(--wb-space-6) 0 var(--wb-space-2);
}
/* 数字排版：等宽数字，仪表盘数值对齐（Financial Dashboard 模式） */
.wb-num{ font-variant-numeric:tabular-nums; letter-spacing:-.02em; }

/* —— 顶部导航（全局公共顶栏组件：由 ui.js 渲染进 #wb-nav 容器） ——
 * fixed 定位：滚动保持置顶；ui.js 渲染后自动测量高度并给 body 加 padding-top 补偿，
 * 并设置 html scroll-padding-top，锚点滚动自动避让（不遮挡内容）。 */
.wb-nav{
  position:fixed; top:0; left:0; right:0; z-index:200;
  display:flex; align-items:center; gap:14px;
  height:var(--wb-nav-h); padding:0 18px;
  background:color-mix(in srgb, var(--wb-bg) 82%, transparent);
  backdrop-filter:blur(14px) saturate(160%);
  -webkit-backdrop-filter:blur(14px) saturate(160%);
  border-bottom:1px solid var(--wb-line);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  color:var(--wb-text);
}
/* —— 左侧栏（桌面端主导航，UI 2.0） —— */
.wb-side{
  position:fixed; top:var(--wb-nav-h); left:0; bottom:0;
  width:220px; z-index:150;
  background:#f6f7f9;
  border-right:1px solid var(--wb-line);
  display:flex; flex-direction:column;
  padding:14px 10px;
  box-sizing:border-box;  /* UI2.0 左上角重叠修复：220 含 padding，避免实际宽 241 与内容区 220 让位重叠 */
  overflow-y:auto;
  font-family:var(--wb-font);
  transition:transform .25s cubic-bezier(.16,1,.3,1), background .2s;
}
:root.wb-dark .wb-side, html[data-theme="dark"] .wb-side{
  background:var(--wb-surface-card);
}
:root.wb-dark .wb-side-link:hover, html[data-theme="dark"] .wb-side-link:hover{
  background:var(--wb-bg3);
}
.wb-side-section{margin-bottom:14px}
.wb-side-section-h{
  display:flex; align-items:center; justify-content:space-between;
  padding:6px 12px 4px;
  font-size:11px; font-weight:600; color:var(--wb-sub);
  letter-spacing:.04em; text-transform:none;
}
.wb-side-section-h .wb-side-collapse{
  border:none; background:transparent; color:var(--wb-sub);
  font-size:14px; cursor:pointer; padding:0; line-height:1; display:none;
}
.wb-side-link{
  display:flex; align-items:center; gap:9px;
  padding:8px 12px; margin:1px 0;
  border-radius:var(--wb-radius-button);
  color:var(--wb-text); text-decoration:none;
  font-size:13.5px; font-weight:500;
  transition:background .12s, color .12s;
}
.wb-side-link:hover{background:#eceef1;color:var(--wb-accent)}
.wb-side-link.active{background:transparent;color:var(--wb-accent);font-weight:600}
.wb-side-link.active::before{
  content:''; position:absolute; left:0; width:3px; height:18px;
  background:var(--wb-accent); border-radius:0 2px 2px 0;
}
.wb-side-link{position:relative}
.wb-side-link svg{flex:none; opacity:.8}
.wb-side-link.active svg{opacity:1}
.wb-side-link .wb-side-badge{
  margin-left:auto; min-width:18px; height:18px; padding:0 6px;
  border-radius:9px; background:var(--wb-red); color:#fff;
  font-size:11px; font-weight:600; display:inline-flex; align-items:center; justify-content:center;
}
/* 主内容区：给左侧栏腾出 220px（含 .main/.wrap/.wo-detail/.room-main/.qt-main 等历史容器类，避免内容被侧栏压盖） */
main, #main-content, .wb-container, .main, .wrap, .wo-detail, .q-main, .i-main, .st-main, .room-main, .qt-main{padding-top:8px}  /* 顶栏下紧贴，减少顶部空白 */
body.wb-side-on main, body.wb-side-on .wb-container, body.wb-side-on #main-content,
body.wb-side-on .main, body.wb-side-on .wrap, body.wb-side-on .wo-detail, body.wb-side-on .q-main, body.wb-side-on .i-main,
body.wb-side-on .room-main, body.wb-side-on .qt-main{margin-left:220px}
/* 移动端隐藏侧栏 */
@media(max-width:1024px){
  .wb-side{display:none}
  body.wb-side-on main, body.wb-side-on .wb-container, body.wb-side-on #main-content,
  body.wb-side-on .main, body.wb-side-on .wrap, body.wb-side-on .wo-detail, body.wb-side-on .q-main, body.wb-side-on .i-main,
  body.wb-side-on .room-main, body.wb-side-on .qt-main{margin-left:0}
}

/* 顶部条精简：移除链接区，actions 紧凑 */
.wb-nav.simplified .wb-links{display:none}
.wb-nav.simplified .wb-nav-ext{display:none}  /* 顶条不再放业务扩展按钮（移到页面内工具栏） */
.wb-nav .wb-brand{display:flex;align-items:center;gap:9px;font-weight:600;font-size:15px;white-space:nowrap;text-decoration:none;color:inherit}
.wb-nav .wb-dot{width:11px;height:11px;border-radius:50%;background:linear-gradient(135deg,var(--wb-accent),var(--wb-green));flex:none}
.wb-nav .wb-brand small{font-weight:400;font-size:12px;color:var(--wb-sub);margin-left:2px}
.wb-nav .wb-links{display:flex;align-items:center;gap:2px;flex:1;overflow:visible;flex-wrap:wrap}
.wb-link{
  display:inline-flex;align-items:center;gap:6px;
  padding:7px 12px;border-radius:9px;font-size:13.5px;
  color:var(--wb-muted);text-decoration:none;white-space:nowrap;
  border:none;background:transparent;font-family:inherit;cursor:pointer;
  transition:background .15s,color .15s;
}
.wb-link:hover{background:var(--wb-accent-soft);color:var(--wb-text)}
.wb-link.active{background:var(--wb-accent-soft);color:var(--wb-accent);font-weight:600}
.wb-nav .wb-actions{display:flex;align-items:center;gap:8px;flex:none}
.wb-search{
  display:inline-flex;align-items:center;gap:8px;
  padding:7px 12px;border-radius:9px;border:1px solid var(--wb-line);
  background:var(--wb-bg2);color:var(--wb-muted);font-size:13px;cursor:pointer;
  transition:border-color .15s;
}
/* 搜索按钮触控热区扩到 44px（WCAG 2.5.5） */
.wb-search::after{
  content:'';position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
  width:var(--wb-touch);height:var(--wb-touch);
}
.wb-search{position:relative}
.wb-search:hover{border-color:var(--wb-accent)}
.wb-search kbd{font-family:inherit;font-size:11px;padding:1px 6px;border:1px solid var(--wb-line2);border-radius:5px;background:var(--wb-bg);color:var(--wb-sub)}
.wb-icon-btn{
  position:relative;
  width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;
  border-radius:9px;border:1px solid var(--wb-line);background:var(--wb-bg2);
  color:var(--wb-text);cursor:pointer;font-size:16px;transition:border-color .15s,background .15s;
}
/* 视觉保持 36px，触控热区扩展到 44px（WCAG 2.5.5 AAA / 移动端可用性） */
.wb-icon-btn::after{
  content:'';position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
  width:var(--wb-touch);height:var(--wb-touch);
}
.wb-icon-btn:hover{border-color:var(--wb-accent);background:var(--wb-accent-soft)}

/* —— 骨架屏（共享壳工具类，供各页统计卡/列表复用） —— */
@keyframes wb-skl-pulse{0%,100%{opacity:.4}50%{opacity:.85}}
.wb-skl{display:inline-block;border-radius:6px;background:var(--wb-line);animation:wb-skl-pulse 1.5s ease-in-out infinite}
.wb-skl-lg{height:30px;min-width:64px}
.wb-skl-md{height:18px;min-width:48px}
.wb-skl-sm{height:12px;min-width:36px}
.stat-card.loading .value,.stat-card.loading .sub,.stat-card.loading .label{color:transparent}
.stat-card.loading .value{font-size:0;height:30px}
.stat-card.loading .value::after{content:'';display:inline-block;width:70px;height:30px;border-radius:6px;background:var(--wb-line);animation:wb-skl-pulse 1.5s ease-in-out infinite}
.stat-card.loading .sub::after{content:'';display:inline-block;width:110px;height:12px;border-radius:4px;background:var(--wb-line);animation:wb-skl-pulse 1.5s ease-in-out infinite;margin-top:6px}
@media (prefers-reduced-motion:reduce){.wb-skl,.stat-card.loading .value::after,.stat-card.loading .sub::after{animation:none}}
.wb-user{display:inline-flex;align-items:center;gap:8px;font-size:13px;color:var(--wb-text)}
.wb-user .wb-avatar{width:28px;height:28px;border-radius:50%;background:linear-gradient(135deg,var(--wb-accent),var(--wb-green));color:#fff;display:inline-flex;align-items:center;justify-content:center;font-size:12px;font-weight:700}
.wb-btn{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:var(--wb-radius-button);border:1px solid var(--wb-line);background:var(--wb-bg2);color:var(--wb-text);font-size:13px;cursor:pointer;text-decoration:none;transition:border-color .15s,background .15s}
.wb-btn:hover{border-color:var(--wb-accent)}
.wb-btn.primary{background:linear-gradient(135deg,var(--wb-accent),color-mix(in srgb,var(--wb-accent) 70%,var(--wb-green)));border:none;color:#fff;font-weight:600}
/* UI 2.0 按钮四类补齐：Secondary（默认）/ Primary / Ghost / Danger */
.wb-btn.ghost{background:transparent;border-color:transparent;color:var(--wb-text)}
.wb-btn.ghost:hover{background:var(--wb-accent-soft);color:var(--wb-accent);border-color:transparent}
.wb-btn.danger{background:var(--wb-red);border-color:var(--wb-red);color:#fff;font-weight:600}
.wb-btn.danger:hover{background:color-mix(in srgb,var(--wb-red) 85%,#000);border-color:color-mix(in srgb,var(--wb-red) 85%,#000)}

/* —— 分组下拉（桌面 hover/click） —— */
.wb-dd{position:relative}
.wb-dd .wb-caret{width:0;height:0;border-left:4px solid transparent;border-right:4px solid transparent;border-top:5px solid currentColor;margin-left:2px;transition:transform .2s cubic-bezier(.16,1,.3,1)}
.wb-dd.open .wb-caret{transform:rotate(180deg)}
.wb-dd-menu{position:absolute;top:calc(100% + 8px);left:0;min-width:172px;background:var(--wb-surface-card);border:1px solid var(--wb-line);border-radius:12px;box-shadow:var(--wb-shadow-lg);padding:6px;display:none;z-index:300}
.wb-dd.open .wb-dd-menu{display:block;animation:wb-pop .18s cubic-bezier(.16,1,.3,1)}
.wb-dd-item{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:8px;font-size:13.5px;color:var(--wb-text);text-decoration:none;white-space:nowrap;position:relative}
.wb-dd-item:hover{background:var(--wb-accent-soft)}
.wb-dd-item.active{background:var(--wb-accent-soft);color:var(--wb-accent);font-weight:600}
.wb-dd-item.active::before{content:'';position:absolute;left:0;top:22%;bottom:22%;width:3px;border-radius:2px;background:var(--wb-accent)}

/* —— 汉堡按钮（≤820px 显示） —— */
.wb-burger{display:none;flex-direction:column;justify-content:center;gap:4px;width:40px;height:40px;padding:9px;border:none;background:transparent;cursor:pointer;flex:none;border-radius:9px}
.wb-burger span{display:block;height:2px;border-radius:1px;background:var(--wb-text)}
.wb-burger:hover{background:var(--wb-accent-soft)}

/* —— 移动端抽屉（完整栏目树 + 手风琴） —— */
.wb-drawer-back{position:fixed;inset:0;z-index:400;background:rgba(15,17,21,.5);backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);display:none}
.wb-drawer-back.open{display:block}
.wb-drawer{position:fixed;top:0;left:0;bottom:0;width:min(320px,86vw);background:var(--wb-surface-card);border-right:1px solid var(--wb-line);box-shadow:var(--wb-shadow-lg);display:flex;flex-direction:column;transform:translateX(-102%);transition:transform .28s cubic-bezier(.16,1,.3,1);z-index:401}
.wb-drawer-back.open .wb-drawer{transform:none}
.wb-drawer-head{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:14px 16px;border-bottom:1px solid var(--wb-line);font-size:15px;font-weight:600;color:var(--wb-text)}
.wb-drawer-head .wb-dot{width:11px;height:11px;border-radius:50%;background:linear-gradient(135deg,var(--wb-accent),var(--wb-green));flex:none}
.wb-drawer-body{flex:1;overflow:auto;padding:10px 12px}
.wb-dgrp{margin-bottom:2px}
.wb-dgrp-h{display:flex;align-items:center;justify-content:space-between;width:100%;padding:11px 12px;border:none;background:transparent;font-size:14px;font-weight:600;color:var(--wb-text);cursor:pointer;border-radius:10px}
.wb-dgrp-h:hover{background:var(--wb-accent-soft)}
.wb-dgrp .wb-caret{border-left:4px solid transparent;border-right:4px solid transparent;border-top:5px solid currentColor;transition:transform .2s}
.wb-dgrp.open .wb-caret{transform:rotate(180deg)}
.wb-dgrp-list{display:none;padding:2px 0 6px 10px}
.wb-dgrp.open .wb-dgrp-list{display:block}
.wb-dgrp-direct{display:block;padding:11px 12px;font-size:14px;font-weight:600;border-radius:10px}
.wb-drawer-foot{padding:14px 16px;border-top:1px solid var(--wb-line)}
.wb-drawer-foot .wb-btn{width:100%;justify-content:center}
.wb-drawer-foot-row{display:flex;gap:8px;margin-bottom:8px}
.wb-drawer-foot-row .wb-btn{flex:1;min-height:var(--wb-touch)}

/* —— 通知铃 + 未读红点 —— */
.wb-bell{position:relative}
.wb-bell.has-dot::after{content:'';position:absolute;top:5px;right:5px;width:8px;height:8px;border-radius:50%;background:var(--wb-red);border:2px solid var(--wb-surface-card)}
.wb-bell-panel{position:absolute;top:calc(100% + 8px);right:0;min-width:236px;background:var(--wb-surface-card);border:1px solid var(--wb-line);border-radius:12px;box-shadow:var(--wb-shadow-lg);padding:12px 14px;z-index:300;font-size:13px;text-align:left}
.wb-bell-title{font-weight:600;font-size:13.5px;color:var(--wb-text);margin-bottom:4px;word-break:break-word}
.wb-bell-date{font-size:12px;color:var(--wb-sub);margin-bottom:8px}
.wb-bell-panel .wb-btn{margin-top:4px}

/* —— 用户菜单 —— */
.wb-user{position:relative;display:inline-flex;align-items:center}
.wb-user-btn{display:inline-flex;align-items:center;gap:7px;padding:4px 8px;border:none;background:transparent;cursor:pointer;font-size:13px;color:var(--wb-text);border-radius:9px}
.wb-user-btn:hover{background:var(--wb-accent-soft)}
.wb-user-name{max-width:76px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wb-user-menu{position:absolute;top:calc(100% + 8px);right:0;min-width:150px;background:var(--wb-surface-card);border:1px solid var(--wb-line);border-radius:12px;box-shadow:var(--wb-shadow-lg);padding:6px;display:none;z-index:300}
.wb-user-menu.open{display:block;animation:wb-pop .18s cubic-bezier(.16,1,.3,1)}
.wb-user-role{font-size:12px;color:var(--wb-sub);padding:7px 10px 4px}
.wb-user-item{display:block;padding:8px 10px;border-radius:8px;font-size:13px;color:var(--wb-text);text-decoration:none}
.wb-user-item:hover{background:var(--wb-accent-soft)}

/* —— 顶栏滚动加深毛玻璃 —— */
.wb-nav-scrolled{background:color-mix(in srgb,var(--wb-bg) 92%,transparent);box-shadow:0 1px 8px rgba(0,0,0,.06)}
/* —— 面包屑（深度≥2 页面） —— */
.wb-crumb{max-width:1280px;margin:0 auto;padding:12px 24px 0;display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--wb-sub);flex-wrap:wrap}
/* 导航折叠修复（真因）：面包屑插入 body 顶层为全宽 static，需给侧栏让位 220px，否则左侧被 fixed 侧栏(z150)遮住 */
body.wb-side-on .wb-crumb{margin-left:220px;max-width:calc(1280px - 220px)}
@media(max-width:1024px){body.wb-side-on .wb-crumb{margin-left:0;max-width:1280px}}
.wb-crumb a{color:var(--wb-sub);text-decoration:none;transition:color .15s}
.wb-crumb a:hover{color:var(--wb-accent)}
.wb-crumb .wb-crumb-cur{color:var(--wb-text);font-weight:600}
.wb-crumb-sep{opacity:.5}
@media(max-width:768px){.wb-crumb{padding:10px 14px 0}}
@media (prefers-reduced-motion:reduce){.wb-drawer{transition:none}.wb-dd-menu,.wb-user-menu{animation:none}}

/* —— 移动端底部 tabbar —— */
.wb-tabbar{display:none}
@media(max-width:1024px){
  .wb-nav .wb-links{display:none}
  .wb-nav .wb-actions{display:none} /* 搜索/主题/铃/用户收进抽屉，消除 375px 横向溢出 */
  .wb-nav .wb-nav-ext{margin-left:auto} /* 业务扩展按钮移动端保留可见，靠右 */
  .wb-nav .wb-brand small{display:none} /* 副标题隐藏，让出空间给扩展按钮（避免 390px 溢出） */
  .wb-burger{display:flex}
  .wb-tabbar{
    position:fixed;bottom:0;left:0;right:0;z-index:200;
    display:flex;justify-content:space-around;align-items:stretch;
    background:color-mix(in srgb,var(--wb-bg) 90%,transparent);
    backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
    border-top:1px solid var(--wb-line);
    padding:6px 4px calc(6px + env(safe-area-inset-bottom));
  }
  .wb-tab{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;font-size:11px;color:var(--wb-muted);text-decoration:none;padding:4px 8px;border-radius:10px;min-width:56px;min-height:var(--wb-touch)}
  .wb-tab.active{color:var(--wb-accent)}
  .wb-tab .wb-ti{font-size:18px}
  body{padding-bottom:64px}
}

/* —— ⌘K 启动器（无 #wb-nav 的页面） —— */
.wb-kbd-launch{
  position:fixed;right:18px;bottom:18px;z-index:180;
  display:inline-flex;align-items:center;gap:8px;
  padding:10px 14px;border-radius:999px;border:1px solid var(--wb-line);
  background:color-mix(in srgb,var(--wb-bg) 90%,transparent);
  backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);
  color:var(--wb-text);font-size:13px;cursor:pointer;box-shadow:var(--wb-shadow);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
}
.wb-kbd-launch kbd{font-family:inherit;font-size:11px;padding:1px 6px;border:1px solid var(--wb-line2);border-radius:5px;background:var(--wb-bg2)}

/* —— 命令面板 —— */
.wb-cmd-back{position:fixed;inset:0;z-index:300;background:rgba(15,17,21,.5);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);display:none;align-items:flex-start;justify-content:center;padding-top:12vh}
.wb-cmd-back.open{display:flex}
.wb-cmd{
  width:min(640px,92vw);max-height:70vh;display:flex;flex-direction:column;
  background:var(--wb-bg);border:1px solid var(--wb-line);border-radius:16px;
  box-shadow:var(--wb-shadow);overflow:hidden;color:var(--wb-text);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
  animation:wb-pop .18s cubic-bezier(.16,1,.3,1);
}
@keyframes wb-pop{from{opacity:0;transform:translateY(-8px) scale(.98)}to{opacity:1;transform:none}}
.wb-cmd input{
  width:100%;border:none;outline:none;background:transparent;color:var(--wb-text);
  font-size:16px;padding:18px 20px;border-bottom:1px solid var(--wb-line);font-family:inherit;
}
.wb-cmd .wb-cmd-list{overflow:auto;padding:8px}
.wb-cmd .wb-group{font-size:11px;text-transform:uppercase;letter-spacing:1px;color:var(--wb-sub);padding:10px 12px 4px}
.wb-cmd .wb-item{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:10px;cursor:pointer;font-size:14px;color:var(--wb-text)}
.wb-cmd .wb-item .wb-ic{width:30px;height:30px;border-radius:8px;display:flex;align-items:center;justify-content:center;background:var(--wb-accent-soft);color:var(--wb-accent);font-size:15px;flex:none}
.wb-cmd .wb-item .wb-sub{font-size:12px;color:var(--wb-sub);margin-left:auto}
.wb-cmd .wb-item.active,.wb-cmd .wb-item:hover{background:var(--wb-accent-soft)}
.wb-cmd .wb-empty{padding:26px;text-align:center;color:var(--wb-sub);font-size:14px}
/* UI 2.0 S5：⌘K 房号跨域聚合卡片 */
.wb-cmd .wb-room-card{
  margin:4px 6px 2px;padding:12px 14px;border-radius:12px;
  background:linear-gradient(135deg,var(--wb-accent-soft),transparent 70%);
  border:1px solid var(--wb-line);border-left:3px solid var(--wb-accent);
}
.wb-cmd .wb-room-card .wb-rc-head{display:flex;align-items:center;gap:8px;font-size:15px;font-weight:700;margin-bottom:8px}
.wb-cmd .wb-room-card .wb-rc-head .wb-dot{width:10px;height:10px;border-radius:50%;background:linear-gradient(135deg,var(--wb-accent),var(--wb-green));flex:none}
.wb-cmd .wb-room-card .wb-rc-stats{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:8px}
.wb-cmd .wb-room-card .wb-rc-chip{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--wb-sub);background:var(--wb-bg2);border:1px solid var(--wb-line);border-radius:14px;padding:3px 10px}
.wb-cmd .wb-room-card .wb-rc-chip b{font-size:14px;color:var(--wb-text);font-variant-numeric:tabular-nums}
.wb-cmd .wb-room-card .wb-rc-links{display:flex;gap:14px}
.wb-cmd .wb-room-card .wb-rc-links a{font-size:12.5px;color:var(--wb-accent);text-decoration:none}
.wb-cmd .wb-room-card .wb-rc-links a:hover{text-decoration:underline}

/* —— 画廊批量 FAB + 弹窗 —— */
.wb-fab{
  position:fixed;right:18px;bottom:78px;z-index:170;
  display:inline-flex;align-items:center;gap:8px;
  padding:12px 16px;border-radius:999px;border:none;cursor:pointer;
  background:linear-gradient(135deg,var(--wb-accent),color-mix(in srgb,var(--wb-accent) 70%,var(--wb-green)));
  color:#fff;font-size:14px;font-weight:600;box-shadow:var(--wb-shadow);
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;
}
.wb-batch-back{position:fixed;inset:0;z-index:300;background:rgba(15,17,21,.5);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);display:none;align-items:center;justify-content:center;padding:20px}
.wb-batch-back.open{display:flex}
.wb-batch{width:min(720px,94vw);max-height:84vh;display:flex;flex-direction:column;background:var(--wb-bg);border:1px solid var(--wb-line);border-radius:16px;box-shadow:var(--wb-shadow);overflow:hidden;color:var(--wb-text);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif}
.wb-batch header{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--wb-line)}
.wb-batch header h3{margin:0;font-size:16px}
.wb-batch .wb-batch-body{overflow:auto;padding:8px 12px}
.wb-batch .wb-room{border:1px solid var(--wb-line);border-radius:12px;margin:8px 0;overflow:hidden}
.wb-batch .wb-room-h{display:flex;align-items:center;gap:10px;padding:10px 12px;background:var(--wb-bg2);cursor:pointer}
.wb-batch .wb-room-h .wb-rn{font-weight:600;font-size:14px}
.wb-batch .wb-room-h .wb-rc{font-size:12px;color:var(--wb-sub)}
.wb-batch .wb-imgs{display:none;padding:6px 8px 10px}
.wb-batch .wb-room.open .wb-imgs{display:block}
.wb-batch label.wb-img{display:flex;align-items:center;gap:10px;padding:7px 8px;border-radius:8px;font-size:13px;cursor:pointer}
.wb-batch label.wb-img:hover{background:var(--wb-accent-soft)}
.wb-batch label.wb-img input{width:16px;height:16px;accent-color:var(--wb-accent);flex:none}
.wb-batch label.wb-img .wb-v{font-size:11px;color:var(--wb-green);margin-left:auto}
.wb-batch label.wb-img .wb-fn{color:var(--wb-sub);font-size:12px;margin-left:8px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
.wb-batch footer{display:flex;align-items:center;gap:10px;padding:14px 20px;border-top:1px solid var(--wb-line);flex-wrap:wrap}
.wb-batch footer .wb-sel{font-size:13px;color:var(--wb-muted);margin-right:auto}
.wb-batch .wb-batch-msg{font-size:13px}
.wb-batch .wb-batch-msg.ok{color:var(--wb-green)}
.wb-batch .wb-batch-msg.err{color:var(--wb-red)}

/* ── 全局 Toast ── */
.wb-toast{
  position:fixed;bottom:24px;left:50%;transform:translateX(-50%) translateY(20px);
  padding:10px 22px;border-radius:10px;font-size:13px;font-weight:500;
  color:#fff;background:rgba(31,35,41,.92);backdrop-filter:blur(8px);
  box-shadow:0 8px 30px rgba(0,0,0,.35);z-index:9999;
  opacity:0;transition:all .35s cubic-bezier(.16,1,.3,1);
  max-width:90vw;text-align:center;pointer-events:none;
}
.wb-toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.wb-toast-ok{background:linear-gradient(135deg,#16a34a,#22c55e)}
.wb-toast-err{background:linear-gradient(135deg,#dc2626,#ef4444)}
.wb-toast-warn{background:linear-gradient(135deg,#d97706,#f59e0b);color:#1f2329}
.wb-toast-info{background:rgba(31,35,41,.92)}

/* ── 全局 Confirm 弹窗 ── */
.wb-confirm-back{
  position:fixed;inset:0;display:flex;align-items:center;justify-content:center;
  background:rgba(0,0,0,.5);z-index:9998;opacity:0;transition:opacity .2s;
}
.wb-confirm-back.show{opacity:1}
.wb-confirm{
  background:var(--wb-bg);border:1px solid var(--wb-line);border-radius:14px;
  padding:24px 28px;max-width:380px;width:90vw;box-shadow:var(--wb-shadow-lg);
  font-size:14px;color:var(--wb-text);text-align:center;
}
.wb-confirm p{line-height:1.6;margin:0 0 18px}
.wb-confirm-actions{display:flex;gap:10px;justify-content:center}
.wb-confirm-actions .wb-btn{min-width:80px}

/* ════════════════════════════════════════════════════════════════
   UI 2.0 v1.0 公共组件（方案 §7/§8 Design Token 语义化别名 + 通用组件）
   前缀 .w2-*（Work 2.0），页面可直接引用，与 .wb-* 并存
   ════════════════════════════════════════════════════════════════ */

/* ── Design Token 语义化别名（映射方案 §8，供新组件/页面引用） ── */
:root{
  --color-primary:#0891b2;
  --color-success:#16a34a;
  --color-warning:#f59e0b;
  --color-danger:#f5222d;
  --bg-page:#f5f7fa;
  --bg-card:#ffffff;
  --text-primary:#1f2329;
  --text-secondary:#6b7280;
  --border-color:#e5e7eb;
  --radius-card:12px;
  --radius-button:8px;
}

/* ── PageHeader（方案 §4 三层结构第一层：面包屑+标题+说明+右侧操作） ── */
.w2-page-h{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:18px;flex-wrap:wrap;position:relative;z-index:160}  /* z-index 高于侧栏 150，确保顶部不被侧栏盖 */
.w2-page-h-left{min-width:0;flex:1 1 auto}  /* UI2.0 折叠修复 v2：left 占据剩余宽度，避免横排时 left/actions 各占窄列 + 中间空白 */
.w2-page-crumb{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--wb-muted);margin-bottom:6px}
.w2-page-crumb a{color:var(--wb-accent);text-decoration:none}
.w2-page-crumb a:hover{text-decoration:underline}
.w2-page-crumb .sep{opacity:.5}
.w2-page-title{font-size:22px;font-weight:700;color:var(--wb-text);line-height:1.25;margin:0}
.w2-page-sub{font-size:13px;color:var(--wb-muted);margin-top:4px}
.w2-page-count{font-size:12px;color:var(--wb-muted);margin-left:10px;font-weight:400}
.w2-page-actions{display:flex;gap:10px;align-items:center;flex:none;flex-wrap:wrap}
@media(max-width:768px){.w2-page-h{flex-direction:column;align-items:stretch}.w2-page-actions{justify-content:flex-start}}
/* UI2.0 §6 折叠修复 v2：≤1024 强制 column 换行（left 在上、actions 下一行整宽左对齐）；>1024 横排时 left flex:1 占满剩余空间，消除横排中间空白 */
@media(max-width:1024px){
  .w2-page-h{flex-direction:column;align-items:stretch}
  .w2-page-actions{justify-content:flex-start;width:100%;margin-top:12px;padding-top:12px;border-top:1px dashed var(--wb-line,#e4e6eb)}
}

/* ── StatCard（KPI 卡：方案 §7.3 Card 统一） ── */
.w2-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;margin-bottom:20px}
.w2-stat{background:var(--wb-bg);border:1px solid var(--wb-line);border-radius:var(--radius-card);padding:16px 18px;box-shadow:var(--wb-shadow);min-width:0}
.w2-stat .w2-st-label{font-size:12px;color:var(--wb-muted);display:flex;align-items:center;gap:6px}
.w2-stat .w2-st-label .d{width:8px;height:8px;border-radius:50%;flex:none}
.w2-stat .w2-st-num{font-size:26px;font-weight:700;color:var(--wb-text);line-height:1.2;margin:8px 0 2px;font-variant-numeric:tabular-nums}
.w2-stat .w2-st-sub{font-size:11px;color:var(--wb-sub);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.w2-stat.ok .w2-st-label .d{background:var(--color-success)}
.w2-stat.warn .w2-st-label .d{background:var(--color-warning)}
.w2-stat.overdue .w2-st-label .d{background:var(--color-danger)}
.w2-stat.work .w2-st-label .d{background:var(--color-primary)}
.w2-stat.info .w2-st-label .d{background:var(--color-primary)}
.w2-stat.ok .w2-st-num{color:var(--color-success)}
.w2-stat.warn .w2-st-num{color:var(--color-warning)}
.w2-stat.overdue .w2-st-num{color:var(--color-danger)}
.w2-stat.work .w2-st-num{color:var(--color-primary)}
@media(max-width:768px){.w2-kpis{grid-template-columns:repeat(2,1fr);gap:10px}.w2-stat .w2-st-num{font-size:22px}}

/* ── LoadingSkeleton（方案 §15：KPI/列表/图表骨架） ── */
.w2-skel{background:linear-gradient(90deg,#eef0f3 25%,#f7f8fa 50%,#eef0f3 75%);background-size:200% 100%;animation:w2sh 1.2s infinite;border-radius:8px}
@keyframes w2sh{0%{background-position:200% 0}100%{background-position:-200% 0}}
.w2-skel-num{width:60%;height:26px;margin:8px 0 4px}
.w2-skel-line{height:12px;margin:6px 0}
.w2-skel-btn{width:80px;height:32px;border-radius:8px}

/* ── EmptyState（方案 §7.5：图标+标题+说明+操作） ── */
.w2-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:44px 20px;color:var(--wb-muted);text-align:center}
.w2-empty .w2-empty-ic{width:44px;height:44px;border-radius:50%;background:var(--wb-bg3);display:flex;align-items:center;justify-content:center;color:var(--wb-sub-deco);font-size:22px;margin-bottom:4px}
.w2-empty b{font-size:14px;color:var(--wb-text)}
.w2-empty p{font-size:12px;margin:0}
.w2-empty .wb-btn{margin-top:6px}

/* ── ErrorState（方案 §7.6：标题+说明+重试） ── */
.w2-error{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:44px 20px;color:var(--wb-muted);text-align:center}
.w2-error .w2-empty-ic{width:44px;height:44px;border-radius:50%;background:var(--wb-red-soft);display:flex;align-items:center;justify-content:center;color:var(--color-danger);font-size:22px;margin-bottom:4px}
.w2-error b{font-size:14px;color:var(--wb-text)}
.w2-error p{font-size:12px;margin:0}
.w2-error .wb-btn{margin-top:6px}

/* ── Breadcrumb 独立（PageHeader 已含，单独用也支持） ── */
.w2-breadcrumb{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--wb-muted);margin-bottom:10px;flex-wrap:wrap}
.w2-breadcrumb a{color:var(--wb-accent);text-decoration:none}
.w2-breadcrumb .sep{opacity:.5}

/* ── FilterBar（方案 §6.2：搜索 + 4 列筛选下拉） ── */
.w2-filter{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:14px 0}
.w2-filter .w2-f-search{flex:1 1 220px;min-width:180px;display:flex;align-items:center;gap:8px;background:var(--wb-bg);border:1px solid var(--wb-line);border-radius:8px;padding:7px 12px}
.w2-filter .w2-f-search input{border:none;outline:none;background:transparent;font-size:13px;width:100%;color:var(--wb-text)}
.w2-filter select{background:var(--wb-bg);border:1px solid var(--wb-line);border-radius:8px;padding:7px 12px;font-size:13px;color:var(--wb-text);cursor:pointer;min-width:110px}
.w2-filter select:focus{border-color:var(--wb-accent);outline:none}

/* ── DataTable 统一（方案 §7.4：表头/行高/Hover/操作列） ── */
.w2-table{width:100%;border-collapse:collapse;font-size:13px;background:var(--wb-bg)}
.w2-table th{background:var(--wb-bg2);color:var(--wb-muted);font-weight:600;text-align:left;padding:10px 12px;border-bottom:1px solid var(--wb-line2);white-space:nowrap;font-size:12px}
.w2-table td{padding:10px 12px;border-bottom:1px solid var(--wb-line);color:var(--wb-text);vertical-align:middle}
.w2-table tbody tr:hover{background:var(--wb-bg2)}
.w2-table .c-id{font-family:var(--wb-font-mono);font-size:12px;white-space:nowrap}
.w2-table .c-num{font-variant-numeric:tabular-nums}
.w2-table-wrap{overflow-x:auto;border:1px solid var(--wb-line);border-radius:var(--radius-card);background:var(--wb-bg)}
@media(max-width:768px){.w2-table th,.w2-table td{padding:8px 10px;white-space:nowrap}}}

/* ── 2026-08-13 UI 整改合并追加（增量迁移自本地工作区，服务器版为基线）── */
:root{
  --wb-space-7:28px; --wb-space-8:32px; --wb-space-10:40px; --wb-space-12:48px; --wb-space-15:60px;
  --wb-leading-tight:1.3; --wb-leading-normal:1.5; --wb-leading-relaxed:1.6;
}
.wb-btn.success{background:linear-gradient(135deg,var(--wb-green),color-mix(in srgb,var(--wb-green) 80%,#000));border:none;color:#fff;font-weight:600}
.wb-btn.ghost{border-color:var(--wb-line2);background:var(--wb-surface-card);color:var(--wb-text)}
.wb-btn.danger{border:1px solid var(--wb-red);background:var(--wb-red-soft);color:var(--wb-red)}
.wb-btn.sm{padding:4px 12px;font-size:12px;border-radius:7px}
.wb-btn.active{background:var(--wb-accent-soft);border-color:var(--wb-accent);color:var(--wb-accent)}
.wb-btn:disabled{opacity:.5;cursor:not-allowed;pointer-events:none}
.wb-btn.loading{background:var(--wb-muted)!important;color:transparent!important;pointer-events:none;opacity:.8}
.wb-btn.loading::after{
  content:'';position:absolute;left:50%;top:50%;width:14px;height:14px;
  margin:-7px 0 0 -7px;border:2px solid #fff;border-radius:50%;
  border-top-color:transparent;animation:wb-spin .7s linear infinite;
}
@keyframes wb-spin{to{transform:rotate(360deg)}}
.wb-modal{
  position:fixed;inset:0;display:none;align-items:center;justify-content:center;
  background:rgba(0,0,0,.45);z-index:200;padding:20px;
}
.wb-modal.show{display:flex}
.wb-modal-box{
  background:var(--wb-surface-card);border:1px solid var(--wb-line);
  border-radius:var(--wb-radius-lg);padding:var(--wb-space-6);
  width:100%;max-width:520px;max-height:90vh;overflow-y:auto;
  box-shadow:var(--wb-shadow-lg);
}
.wb-modal-actions{display:flex;gap:10px;justify-content:flex-end;margin-top:var(--wb-space-5)}
.wb-empty{text-align:center;padding:var(--wb-space-8) var(--wb-space-4);color:var(--wb-sub);font-size:14px}
.wb-empty .wb-empty-icon,
.wb-empty .icon,
.wb-empty .empty-icon{font-size:40px;margin-bottom:var(--wb-space-2);display:block;line-height:1}
.wb-empty .wb-empty-cta{margin-top:var(--wb-space-4)}
.wb-empty .wb-empty-title{color:var(--wb-text);font-weight:600;margin-bottom:var(--wb-space-1)}
.wb-field-error{color:var(--wb-red);font-size:12px;margin-top:var(--wb-space-1);display:none}
.wb-field-error.show{display:block}
[aria-invalid="true"]{border-color:var(--wb-red)!important}
.wb-card{
  background:var(--wb-surface-card); border:1px solid var(--wb-line);
  border-radius:var(--wb-radius-lg); padding:var(--wb-space-6);
}

/* ── P1-4 统计卡精简：3 个次要 stat-card 视觉降级（次焦点）── */
#stImagesCard,#stRecordsCard,#stReportsCard{padding:var(--wb-space-3) 14px;opacity:.78}
#stImagesCard .value,#stRecordsCard .value,#stReportsCard .value{font-size:22px}

/* ── P1-5 加载态：spinner（与 .wb-empty 语义分离，避免混用）── */
.wb-loading{text-align:center;padding:var(--wb-space-8) var(--wb-space-4);color:var(--wb-sub);font-size:14px}
.wb-loading::before{content:'';display:block;width:24px;height:24px;margin:0 auto var(--wb-space-2);border:2px solid var(--wb-line);border-top-color:var(--wb-accent);border-radius:50%;animation:wb-spin .8s linear infinite}

/* ── P2-3 页脚公共类（备案号悬挂，统一三处内联样式）── */
.wb-footer{text-align:center;padding:14px 12px;color:var(--wb-sub);font-size:12px;line-height:1.6}
.wb-footer a{color:inherit;text-decoration:none}

/* ── 滚动条主题适配（webkit，自动跟随 light/dark 令牌）── */
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-track{background:var(--wb-surface-sunken)}
::-webkit-scrollbar-thumb{background:var(--wb-line2);border-radius:4px;border:2px solid var(--wb-surface-sunken)}
::-webkit-scrollbar-thumb:hover{background:var(--wb-line)}
* { scrollbar-width: thin; scrollbar-color: var(--wb-line2) var(--wb-surface-sunken); }

/* 子业务导航项（挂在主业务下，缩进显示） */
.wb-dd-child{ padding-left:30px; font-size:12.5px; color:var(--wb-sub); }
.wb-dd-child.active{ color:var(--wb-accent); }
.wb-side-child{ padding-left:34px; font-size:12.5px; color:var(--wb-sub); }
.wb-side-child:hover{ color:var(--wb-accent); }
.wb-side-child.active{ color:var(--wb-accent); font-weight:600; }
