/* 智悠树 · B端设计规范 / authoritative presentation layer.
   Desktop canvas: 1200–1680px, 24 columns, 16px gutters; 8px baseline.
   整合自 workspace.css + console.css + foundation.css 的独有样式。 */
:root {
  --primary:#4F46E5; --primary-dark:#4338CA; --primary-light:#EEF2FF;
  --success:#10B981; --warn:#F59E0B; --danger:#EF4444; --info:var(--primary);
  --bg:#F8FAFC; --bg-card:#FFFFFF; --text:#1E293B; --text-secondary:#475569;
  --text-muted:#64748B; --text-light:#94A3B8; --border:#E2E8F0; --border-strong:#CBD5E1;
  --blue-bg:#EEF2FF; --green-bg:#ECFDF5; --yellow-bg:#FFFBEB; --red-bg:#FEF2F2;
  --orange-bg:var(--yellow-bg); --gold:var(--primary); --gradient:var(--primary); --gradient-soft:var(--bg);
  --space-1:8px; --space-2:16px; --space-3:24px; --space-4:32px;
  --r:12px; --r-lg:12px; --r-sm:8px;
  --shadow:0 1px 2px rgba(0,0,0,.05),0 4px 12px rgba(0,0,0,.04);
  --shadow-hover:0 2px 4px rgba(0,0,0,.05),0 8px 20px rgba(0,0,0,.06);
  --nav-width:240px; --canvas-min:1200px; --canvas-max:1680px; --grid-gap:16px;
}
*,*::before,*::after {box-sizing:border-box}
html,body {margin:0;background:var(--bg);font-size:14px;line-height:1.6;color:var(--text-secondary);height:100%;overflow:hidden;-webkit-font-smoothing:antialiased}
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI','PingFang SC','Microsoft YaHei',sans-serif}
button,a,input,select,textarea,summary,.card,.kpi-card,.stat-card,.nav-group-title {
  transition:color .15s ease,background-color .15s ease,box-shadow .15s ease,transform .15s ease!important;
}
button,a,summary {touch-action:manipulation}
button:focus-visible,a:focus-visible,summary:focus-visible {outline:2px solid var(--primary);outline-offset:2px}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit;font-size:inherit}
input,select,textarea{font:inherit}
a{color:var(--primary);text-decoration:none}
a:hover{text-decoration:underline}
button:disabled{opacity:.45;cursor:not-allowed}
button[aria-busy=true]{opacity:.65;cursor:wait}
body:has(.sidebar.collapsed) {--nav-width:64px}

/* ============== 侧栏（Shell） ============== */
.sidebar,.sidebar.collapsed {position:fixed;inset:0 auto 0 0;width:var(--nav-width)!important;height:100dvh;transform:none!important;background:#fff;z-index:100;border-right:1px solid var(--border);box-shadow:none;display:flex;flex-direction:column;overflow:hidden;transition:width .15s ease}
.sidebar-header,.sidebar.collapsed .sidebar-header{display:flex;align-items:center;justify-content:flex-start;gap:12px;height:64px;min-height:64px;padding:0 14px;border-bottom:1px solid var(--border);background:#fff;position:relative;flex:none}
.sidebar.collapsed .sidebar-header{height:64px;min-height:64px;padding:0 8px;justify-content:center}
.brand-home {display:flex;align-items:center;gap:12px;width:100%;min-width:0;text-decoration:none;color:var(--text);padding:0;flex:1;overflow:hidden}
.sidebar.collapsed .brand-home{justify-content:center;gap:0;flex:none;width:auto;min-width:0;overflow:visible}
/* v22.1 logo 容器与 menu-toggle 等高(30px),图片缩到 30 内部 */
.sidebar .logo-icon{flex:none;width:38px;height:38px;background:linear-gradient(135deg,#EEF2FF 0%,#E0E7FF 100%);border:1px solid #E0E7FF;border-radius:10px;overflow:hidden;display:flex;align-items:center;justify-content:center;box-shadow:0 1px 2px rgba(79,70,229,.08)}
/* v22.1 折叠态:logo 保持 38,水平居中 */
.sidebar.collapsed .logo-icon{width:38px;height:38px;border-radius:9px;margin:0 auto;display:flex !important}
/* v22.1 折叠态:menu-toggle 已经在 sidebar-foot,顶部隐藏避免重复 */
.sidebar.collapsed .menu-toggle{display:none !important}
.sidebar .logo-icon img{display:block;width:100%;height:100%;max-height:none;object-fit:contain;border-radius:inherit;padding:2px}
.sidebar .brand,.sidebar.collapsed .brand{display:flex!important;flex-direction:column;align-items:flex-start;justify-content:center;line-height:1.25;flex:1;min-width:0;max-width:none;text-align:left;background:none;-webkit-text-fill-color:currentColor;font-size:16px;font-weight:700;color:var(--text);white-space:nowrap;overflow:hidden}
.sidebar.collapsed .brand{display:none!important}
.brand-subtitle{display:block;font-size:12px;font-weight:400;color:var(--text-muted);letter-spacing:.2px;margin-top:2px;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sidebar nav,.sidebar.collapsed nav{padding:12px 8px;flex:1;min-height:0;overflow:auto;scrollbar-width:thin}
.nav-group,.sidebar.collapsed .nav-group{margin:0 0 4px;padding:0;border:0}
.nav-group-top{margin-bottom:12px!important;padding-bottom:12px!important;border-bottom:1px solid var(--border)!important}
.sidebar .nav-group-title,.sidebar:not(.collapsed) .nav-group-title,.sidebar .nav-item,.sidebar .nav-group-top .nav-item{
  display:flex!important;align-items:center;justify-content:flex-start;gap:12px;width:100%;height:44px;min-height:44px;margin:0;padding:0 12px;border:0;border-radius:8px;background:transparent;color:var(--text-secondary);font-size:15px;font-weight:400;letter-spacing:0;text-align:left;
}
.sidebar .nav-icon,.sidebar .nav-icon svg{display:flex;width:20px;height:20px;min-width:20px;opacity:1;stroke-width:1.8}
.sidebar .nav-text,.sidebar .nav-parent-label{display:block!important}
.sidebar .nav-item:hover,.sidebar .nav-group-title:hover{background:var(--bg);color:var(--primary);text-decoration:none}
.sidebar .nav-item.active{background:var(--primary-light);color:var(--primary);font-weight:600}
.sidebar .nav-group-title.has-active{color:var(--primary);font-weight:600}
.sidebar .nav-group-title::after{font-size:16px;margin-left:auto;color:var(--text-light)}
.sidebar .nav-children{margin:4px 0 4px 12px;padding-left:10px;border-left:1px solid var(--border)}
.sidebar .nav-children .nav-icon{display:none}
.sidebar .nav-children .nav-item{margin:0 0 4px;padding:0 12px;height:40px;min-height:40px;font-size:14px}
.sidebar .nav-group.collapsed .nav-children{display:none!important}
.sidebar.collapsed .nav-parent-label,.sidebar.collapsed .nav-text,.sidebar.collapsed .nav-group-title::after,.sidebar.collapsed .nav-children,.sidebar.collapsed .nav-badge{display:none!important}
.sidebar.collapsed .nav-group-title,.sidebar.collapsed .nav-item{justify-content:center;padding:0;gap:0}
.nav-badge{border-radius:8px;background:var(--primary-light);color:var(--primary);padding:0 8px;font-size:12px;line-height:22px}
.sidebar .sidebar-foot,.sidebar.collapsed .sidebar-foot{position:static;display:flex!important;align-items:center;justify-content:space-between;gap:10px;width:100%;height:56px;min-height:56px;padding:10px 12px;border-top:1px solid var(--border);background:#fff;font-size:13px;flex:none}
.sidebar.collapsed .sidebar-foot{justify-content:center;padding:10px 8px}
.sidebar-foot .db-stats{flex:1;min-width:0;display:flex;align-items:center}
.sync-status{font-size:12px;color:var(--text-muted);gap:8px;display:inline-flex;align-items:center;background:transparent;border:0;padding:0;cursor:pointer}
.sidebar .menu-toggle,.sidebar.collapsed .menu-toggle{display:inline-flex!important;position:static;align-items:center;justify-content:center;flex:none;width:32px;height:32px;min-width:32px;border-radius:8px;background:#fff;border:1px solid var(--border);color:var(--text-muted);transform:none;padding:0;margin:0;cursor:pointer;transition:background .15s,color .15s,border-color .15s}
.sidebar .menu-toggle:hover,.sidebar.collapsed .menu-toggle:hover{background:var(--bg);color:var(--primary);border-color:var(--primary)}
.sidebar .menu-toggle svg,.sidebar.collapsed .menu-toggle svg{width:16px;height:16px;display:block}
.sidebar.collapsed .db-stats,.sidebar.collapsed .sidebar-foot .db-stats{display:none}
#navDrawerButton,.drawer-shade{display:none!important}

/* ============== 顶栏 ============== */
.topbar,body:has(.sidebar.collapsed) .topbar{position:fixed;left:var(--nav-width);right:0;top:0;height:64px;padding:0 24px;gap:14px;background:#fff;border-bottom:1px solid var(--border);box-shadow:none;overflow:visible;display:flex;align-items:center;z-index:90;color:var(--text)}
.topbar-title{font-size:14px;font-weight:600;color:var(--text);white-space:nowrap;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center;gap:8px}
.topbar-center{margin-left:auto;flex:none;display:flex;align-items:center}
.topbar-right{gap:6px;flex:none;display:flex;align-items:center}
.topbar .campus-btn,.topbar .period-dropdown{display:inline-flex;align-items:center;height:36px;padding:0 14px;background:#fff;border:1px solid var(--border);border-radius:8px;font-size:13px;color:var(--text-secondary);gap:8px;cursor:pointer;transition:border-color .15s,color .15s}
.topbar .period-dropdown:hover,.topbar .campus-btn:hover{border-color:var(--primary);color:var(--primary);background:#fff}
.topbar .icon-btn{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;background:transparent;border:0;border-radius:8px;color:var(--text-muted);cursor:pointer;position:relative}
.topbar .icon-btn:hover{background:var(--bg);color:var(--primary)}
.topbar .icon-btn svg,.period-icon svg{width:16px;height:16px;display:block}
.icon-btn{font-family:inherit;flex:none}
.period-icon{display:inline-flex;align-items:center;justify-content:center}
.period-range-display{display:none}
.user-meta{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:1px;min-width:0}
.user-chip{display:flex;align-items:center;gap:8px;margin-left:8px;cursor:pointer}
.user-name{font-size:13px;color:var(--text);font-weight:600;line-height:1.3}
.user-role{font-size:12px;color:var(--text-light);line-height:1.3}
.user-avatar,.avatar,.avatar-f{border-radius:50%;width:32px;height:32px;background:var(--primary-light);color:var(--primary);display:inline-flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;flex:none}
.avatar{border-radius:10px;font-size:12px}
.avatar-f{background:#f5eae7;color:#b68c80}
.notice-dot{position:absolute;right:2px;top:2px;border-radius:50%;font-size:10px;line-height:14px;min-width:14px;height:14px;padding:0 3px;background:var(--danger);color:white;text-align:center}

/* ============== 主内容区 ============== */
.main,body:has(.sidebar.collapsed) .main{position:fixed;inset:64px 0 0 var(--nav-width);width:auto;margin:0;padding:32px!important;display:block;background:var(--bg);overflow:auto;scroll-behavior:auto}
.main>*{width:100%;min-width:var(--canvas-min);max-width:var(--canvas-max);margin-left:auto!important;margin-right:auto!important;animation:studio-enter .2s ease}
.main>[hidden]{display:none}
.workspace-breadcrumb{font-size:13px;color:var(--text-light);margin-bottom:24px;line-height:24px}
.workspace-breadcrumb span{color:var(--text-muted)}
.main .page-head{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:32px;padding:0;position:static;flex-wrap:wrap}
.page-title,.welcome-title{font-size:24px!important;font-weight:600!important;line-height:1.5;color:var(--text);letter-spacing:0;margin:0}
.page-subtitle,.welcome-sub{font-size:13px!important;font-weight:400;color:var(--text-light);line-height:1.6;margin-top:8px}
.page-actions{display:flex;align-items:center;gap:8px;width:auto;flex-wrap:wrap;padding:0;justify-content:flex-end}
.page-actions .btn-primary{margin-left:0}
.page-tag{display:none}
.page-head,.page-actions{padding-top:0}

/* ============== 卡片栅格 / 卡片 ============== */
.main .card-grid,.main .split-2,.main .campus-grid,.main .tpl-compare,.main .dual-store{display:grid!important;grid-template-columns:repeat(24,minmax(0,1fr))!important;gap:24px 16px!important;align-items:stretch;margin-bottom:32px}
.card-grid>*{grid-column:span 6;min-width:0}
.card-grid:has(>:last-child:nth-child(3))>*{grid-column:span 8}
.card-grid:has(>:last-child:nth-child(2))>*{grid-column:span 12}
.card-grid:has(>:last-child:nth-child(1))>*{grid-column:span 24}
.card-grid:has(>:last-child:nth-child(5))>*{grid-column:span 4}
.card-grid:has(>:last-child:nth-child(5))>:nth-child(-n+2){grid-column:span 6}
/* 6 张卡片 → 每行 3 张（期间分析顶部汇总等），整齐对齐 */
.card-grid:has(>:last-child:nth-child(6))>*{grid-column:span 8}
.stat-card{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:8px}
.stat-card-label{font-size:13px!important;font-weight:500;color:var(--text-muted)}
.stat-card-value{font-size:24px!important;font-weight:600!important;line-height:1.5;margin:0!important;color:var(--text)}
.stat-card-sub{font-size:13px!important;margin:0!important;color:var(--text-light)}
.main .split-2>*,.main .campus-grid>*,.main .tpl-item,.main .tpl-compare>*{grid-column:span 12;min-width:0}
.main .dual-store>*{grid-column:span 8;min-width:0}
.card,.stat-card,.kpi-card,.main .card[style],.modal .card[style]{padding:24px!important;background:#fff;border:1px solid var(--border);border-radius:12px!important;box-shadow:var(--shadow);margin-bottom:32px;transition:box-shadow .15s,transform .15s,border-color .15s}
.card:hover,.stat-card:hover,.kpi-card:hover{background:#fff;box-shadow:var(--shadow-hover);border-color:var(--border);transform:translateY(-2px)}
.card-grid>*,.split-2>.card,.campus-grid>.card{margin-bottom:0}
.card-title{font-size:18px!important;font-weight:600;line-height:1.5;color:var(--text);margin-bottom:16px;gap:8px}
.card-title::before{display:none}
.card-subtitle{font-size:13px;color:var(--text-light);margin-bottom:24px;line-height:1.6}
.kpi-card{min-height:152px;position:relative;gap:16px;display:flex;flex-direction:column}
.kpi-icon,.kpi-icon.green,.kpi-icon.blue,.kpi-icon.yellow,.kpi-icon.purple,.kpi-icon.pink,.kpi-icon.teal,.kpi-icon.red,.kpi-icon.gray{display:flex!important;position:absolute;right:24px;top:24px;width:16px;height:16px;background:none!important;color:var(--text-light);border-radius:0}
.kpi-icon svg{width:16px;height:16px}
.kpi-label{font-size:14px;color:var(--text-muted);margin:0 24px 16px 0;font-weight:400}
.kpi-value{font-size:32px!important;line-height:1.25;font-weight:600;color:var(--text);font-variant-numeric:tabular-nums;letter-spacing:0}
.kpi-card:first-child .kpi-value{color:var(--primary)}
.kpi-sub,.kpi-delta,.kpi-card .kpi-delta{font-size:13px!important;color:var(--text-light);font-weight:400;margin-top:16px}

/* ============== 欢迎横幅 ============== */
.welcome-banner{display:grid;grid-template-columns:repeat(24,minmax(0,1fr));gap:8px 16px;align-items:center;min-height:0;padding:0;margin-bottom:32px;background:none;border:0;border-radius:0;box-shadow:none;isolation:auto;overflow:visible}
.welcome-banner::before,.welcome-banner::after{display:none}
.welcome-title,.welcome-sub{grid-column:1 / 13;margin:0}
.welcome-sub{font-size:13px;color:var(--text-light);line-height:1.6}
.workspace-quick{grid-column:13 / -1;grid-row:1 / 4;position:static;display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px;width:auto;max-width:none;margin:0}
.workspace-quick button{font-size:13px}
.home-section-heading{font-size:16px;font-weight:600;color:var(--text);margin-bottom:16px;display:flex;align-items:center;justify-content:space-between}
.home-section-heading span{font-size:13px;color:var(--text-light);font-weight:400}
.main[data-page=dashboard]>.card-grid>*{grid-column:span 6}
.main[data-page=dashboard]>.card-grid{row-gap:16px!important}

/* ============== 工作台双栏布局 ============== */
.console-workbench{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(280px,1fr);gap:24px;margin-bottom:32px;align-items:stretch}
.console-workbench>.card{margin:0;min-width:0}
.console-todo .todo-item{display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding:12px 0;border-bottom:1px solid #F1F5F9;background:none;font-size:14px;border-radius:0}
.console-todo .todo-list{max-height:288px;overflow:auto}
.todo-link{font-weight:400;color:var(--text);cursor:pointer}
.todo-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:16px}
.todo-actions button{font-size:13px;padding:0 12px}
.console-more>summary{display:flex;align-items:center;gap:16px;font-size:16px;font-weight:600;color:var(--text);cursor:pointer;padding:20px;background:#fff;border:1px solid var(--border);border-radius:12px;margin-bottom:32px;list-style:none}
.console-more>summary::after{content:'＋';margin-left:auto;font-size:18px;color:var(--text-muted)}
.console-more[open]>summary::after{content:'−'}
.console-more>summary span{font-size:13px;font-weight:400;color:var(--text-light)}
.console-detail-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px}
.console-detail-grid>*{min-width:0}

/* ============== 按钮系统 ============== */
.btn-primary,.btn-secondary,.btn-ghost,.btn-danger,.btn-danger-ghost,.btn-gold,.btn-success,.ai-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:36px;height:36px;padding:0 20px;border-radius:8px;border:1px solid var(--border);background:#fff;color:var(--text-secondary);font-size:14px;font-weight:400;line-height:1.5;box-shadow:none;white-space:nowrap;transform:none;font-family:inherit;cursor:pointer;transition:background-color .15s,border-color .15s,color .15s}
.btn-primary,.btn-success,.ai-btn{background:var(--primary);border-color:var(--primary);color:#fff}
.btn-primary:hover,.btn-success:hover,.ai-btn:hover{background:var(--primary-dark);border-color:var(--primary-dark);color:#fff}
.btn-secondary:hover,.btn-ghost:hover,.btn-danger:hover,.btn-danger-ghost:hover,.btn-gold:hover{background:#fff;border-color:var(--primary);color:var(--primary)}
.btn-danger,.btn-danger-ghost{color:var(--danger)}
.btn-danger{background:var(--danger);border-color:var(--danger);color:#fff}
.btn-danger:hover{background:var(--danger);border-color:var(--danger);color:#fff;opacity:.9}
.btn-gold{background:#f5efdf;border-color:#e8ddbe;color:#997b39}
.btn-gold:hover{background:#f5efdf;border-color:var(--primary);color:var(--primary)}
.btn-sm{height:32px;min-height:32px;padding:0 12px;font-size:13px;border-radius:8px;white-space:nowrap}
.btn-sm.btn-ghost{border-color:transparent;background:transparent;color:#64748B}
.btn-sm.btn-primary{background:var(--primary-light);border-color:transparent;color:var(--primary)}
.btn-sm.btn-primary:hover{background:var(--primary);color:#fff}
.btn-sm.btn-danger-ghost{border-color:transparent;background:transparent}
.btn-sm.btn-danger{background:transparent;border-color:transparent;color:var(--danger)}
.btn-link,.icon-btn{border:0;background:transparent;border-radius:8px;color:var(--text-muted);text-decoration:none}
.btn-link:hover,.icon-btn:hover{background:var(--bg);color:var(--primary);text-decoration:none}
.btn-primary svg,.btn-secondary svg,.btn-ghost svg{width:16px;height:16px;flex:none}

/* ============== 通用 btn-mini ============== */
.btn-mini{padding:5px 10px;background:var(--primary);color:#fff;border-radius:999px;font-size:12px;font-weight:600;display:inline-flex;align-items:center;gap:3px;line-height:1;border:none;cursor:pointer;transition:background .15s,box-shadow .15s,transform .15s}
.btn-mini:hover{background:var(--primary-dark);transform:translateY(-1px);box-shadow:0 2px 6px rgba(79,70,229,.3)}

/* ============== Tag / Avatar / Stage ============== */
.tag,.campus-mode-tag,.campus-badge-current{padding:2px 8px;line-height:22px;font-size:12px;font-weight:500;border-radius:6px;background:var(--bg);color:var(--text-muted);display:inline-block;white-space:nowrap;border:none;letter-spacing:.02em}
.tag.primary{background:var(--primary-light);color:var(--primary)}
.tag.success{background:var(--green-bg);color:#059669}
.tag.warn{background:var(--yellow-bg);color:#B45309}
.tag.danger,.tag.error{background:var(--red-bg);color:#DC2626}
.tag.info{background:var(--blue-bg);color:var(--primary)}
.tag.neutral{background:#F1F5F9;color:var(--text-muted)}
.stage-xx{background:#EEF2FF;color:#4F46E5}
.stage-cz{background:#F1F5F9;color:#475569}
.stage-gz{background:#FFFBEB;color:#B45309}
.text-danger{color:var(--danger)}
.text-success{color:var(--success)}
.text-warn{color:var(--warn)}
.text-right{text-align:right}
.text-center{text-align:center}
.flex{display:flex}
.flex-col{display:flex;flex-direction:column}
.gap-4{gap:4px}
.gap-8{gap:8px}
.gap-12{gap:12px}
.gap-16{gap:16px}
.mt-8{margin-top:8px}
.mt-16{margin-top:16px}
.mb-16{margin-bottom:16px}
.muted{color:var(--text-muted)}

/* ============== 体检徽章 / 生日提醒角标 ============== */
.health-badge{display:none}
.bd-badge{position:absolute;top:-7px;right:-7px;min-width:19px;height:19px;padding:0 5px;border-radius:10px;background:var(--danger);color:#fff;font-size:11px;font-weight:700;line-height:19px;text-align:center;box-sizing:border-box}

/* ============== 数据体检问题项（来自 foundation.css） ============== */
.health-issue{cursor:pointer;transition:background .15s,border-left-color .15s,transform .15s;display:block;padding:10px 14px;border-radius:8px;margin:6px 0;background:var(--bg);border-left:3px solid var(--border);text-decoration:none;color:inherit;font-size:13px}
.health-issue:hover{background:var(--primary-light);border-left-color:var(--primary);transform:translateX(4px);text-decoration:none}
.health-issue.error{border-left-color:var(--danger)}
.health-issue.warn{border-left-color:var(--warn)}
.health-issue.info{border-left-color:var(--info)}

/* ============== 表格（核心：去掉横向滚动、去掉 sticky 表头） ============== */
.search-bar{padding:20px;gap:12px;border:1px solid var(--border);border-radius:12px;background:#fff;margin-bottom:24px;box-shadow:none;align-items:center;display:flex;flex-wrap:wrap;font-size:13px;color:var(--text-muted)}
.search-bar>span{display:inline-flex;align-items:center;gap:8px}
.search-bar input,.search-bar select{width:auto;min-width:144px;flex:none;height:36px;font-size:14px;padding:0 12px;background:#fff;border:1px solid var(--border);border-radius:8px;color:var(--text-secondary);font-family:inherit}
.search-bar>input[type=text]{width:280px;min-width:240px}
.filter-toggle{display:inline-flex}
/* ★ 筛选折叠：被标记的筛选项"原地"隐藏/显示（不搬迁 DOM），展开时保持原顺序与标签配对 */
.search-bar:not(.filters-expanded) .filter-adv-item{display:none!important}
.search-bar>.filter-reset{margin-left:auto}
.filter-reset{font-size:13px!important;color:var(--text-muted)!important;background:#fff;border:1px solid var(--border)}
.filter-reset:hover{background:var(--bg);border-color:var(--primary);color:var(--primary)}

/* 表格容器：去掉横向滚动、去掉 sticky；表格自然换行 */
/* 表格容器：内容多时容器内出现横向滚动条，主页面不会出现横向滚动；表头不固定 */
.table-outer,.table-wrap{background:#fff;border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow);max-width:100%;min-width:0}
.table-outer>.table-wrap{border:0;box-shadow:none;border-radius:12px 12px 0 0}
.table-wrap{overflow-x:auto;overflow-y:visible;min-height:0;max-height:none;-webkit-overflow-scrolling:touch}
.data-table{width:100%;min-width:max-content;font-size:13px;border-collapse:separate;border-spacing:0;color:var(--text-secondary);table-layout:auto}
.data-table th{background:#F8FAFC;font-size:13px;font-weight:500;color:var(--text-muted);height:44px;padding:10px 14px;text-align:left;vertical-align:middle;border-bottom:1px solid var(--border);white-space:nowrap;position:static}
/* 行高放宽，便于两行内容（姓名 + 标签）显示 */
.data-table td{font-size:13px;min-height:64px;height:auto;padding:14px 14px;vertical-align:middle;color:var(--text-secondary);border-bottom:1px solid #F1F5F9;white-space:normal;word-break:break-word;line-height:1.55}
.data-table tbody tr:nth-child(n) td{background:#fff}
.data-table tbody tr:hover td{background:var(--bg)}
.data-table .num{text-align:right;font-variant-numeric:tabular-nums}
.data-table .center{text-align:center}
.data-table .sticky-first{position:sticky;left:0;z-index:3;background:#fff}
.data-table .sticky-last{position:sticky;right:0;z-index:3;background:#fff}
.data-table th.sticky-first,.data-table th.sticky-last{z-index:4;background:#F8FAFC}
.data-table td.empty{height:200px;white-space:normal;text-align:center;color:var(--text-light)}
td.calc-cell{background:var(--primary-light);color:var(--text);font-weight:500}
td.warn-cell{background:var(--red-bg)}
td.link-cell{background:var(--blue-bg);cursor:pointer}
.table-pager{padding:14px 20px;gap:8px;font-size:13px;color:var(--text-muted);display:flex;align-items:center;justify-content:flex-end;background:#fff;border-top:1px solid var(--border)}
.pager-btn{height:32px;min-width:32px;border:1px solid var(--border);border-radius:8px;font-size:13px;background:#fff;color:var(--text-secondary);cursor:pointer}
.pager-btn.active{background:var(--primary-light);color:var(--primary);border-color:#C7D2FE}
.pager-info{margin-right:auto}

/* ============== 表单 ============== */
.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:24px}
.form-grid>.form-row{grid-column:auto}
.form-grid>.form-row[style*='1 / -1']{grid-column:1/-1!important}
.form-row{gap:8px;display:flex;flex-direction:column}
.form-label,.form-row label,.form-row .form-label{font-size:13px;font-weight:400;color:var(--text-secondary);margin:0}
.req{color:var(--danger);margin-left:3px}
input:not([type=checkbox]):not([type=radio]):not([type=file]),select,textarea,.form-row input,.form-row select,.form-row textarea{border:1px solid var(--border);border-radius:8px;background:#fff;color:var(--text-secondary);font-size:13px;min-height:36px;padding:8px 12px;width:100%;font-family:inherit}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-light)}
input[readonly],input:disabled,select:disabled,textarea:disabled{background:var(--bg);color:var(--text-muted)}
input[type=checkbox],input[type=radio]{accent-color:var(--primary);height:16px;width:16px;padding:0;margin:0;flex:none;border:0;border-radius:0;min-height:0}
textarea{min-height:76px;resize:vertical;line-height:1.5}
.form-hint,.field-help{font-size:12px;color:var(--text-light)}
.form-error{padding:14px 16px;border:1px solid #FECACA;border-radius:8px;background:var(--red-bg);color:#B91C1C;font-size:13px;margin-bottom:16px}

/* ============== Modal ============== */
.modal-backdrop{position:fixed;inset:0;background:#0F172A66;backdrop-filter:none;z-index:2000;padding:24px;display:flex;align-items:center;justify-content:center;overflow:auto;animation:fade-in .12s ease}
.modal{border:1px solid var(--border);border-radius:12px;background:#fff;box-shadow:0 8px 32px #0F172A24;max-height:calc(100dvh - 48px);width:580px;max-width:100%;display:flex;flex-direction:column;overflow:hidden;position:relative}
.modal-wide{width:960px;max-width:100%}
.modal-head{padding:20px 24px;background:#fff;border-bottom:1px solid var(--border);flex:none;display:flex;align-items:center;justify-content:space-between}
.modal-head h3{font-size:17px;font-weight:600;color:var(--text);margin:0;line-height:1.5}
.modal-close{height:32px;min-width:32px;border:1px solid var(--border);background:#fff;color:var(--text-muted);border-radius:8px;font-size:18px;cursor:pointer;display:inline-flex;align-items:center;justify-content:center}
.modal-close:hover{background:var(--red-bg);color:var(--danger);border-color:var(--red-bg)}
.modal-body{padding:20px 24px;min-height:0;overflow:auto;overscroll-behavior:contain}
.modal>.form-actions{padding:14px 24px;gap:8px;background:#fff;border-top:1px solid var(--border);display:flex;align-items:center;justify-content:flex-end;flex:none;margin:0}
.modal>.form-actions button{flex:none;min-height:36px;font-size:14px}
.modal fieldset{border-radius:12px!important;padding:20px!important}

/* ============== 期间选择 ============== */
.period-picker{display:flex;align-items:center;background:transparent;border:0;border-radius:8px;padding:0;position:relative;color:var(--text-secondary)}
.period-dropdown{display:inline-flex;align-items:center;gap:8px}
.period-caret{font-size:10px;color:var(--text-light)}
.period-menu{position:fixed;inset:auto;margin:0;border:1px solid var(--border);border-radius:12px;padding:20px;background:#fff;box-shadow:var(--shadow-hover);color:var(--text-secondary);z-index:2147483000;overflow:auto;font-size:13px;opacity:1;transform:none;animation:none;box-sizing:border-box}
.period-menu[hidden]{display:none!important}
.period-menu-tabs{display:flex;background:var(--bg);padding:4px;gap:4px;border-radius:8px;margin-bottom:16px}
.period-tab{flex:1;background:transparent;border:0;border-radius:6px;color:var(--text-muted);font-size:13px;padding:8px 0;cursor:pointer}
.period-tab.active{background:var(--primary-light);color:var(--primary);box-shadow:none}
.period-row{display:grid;grid-template-columns:48px minmax(0,1fr);gap:12px;align-items:center;margin:10px 0}
.period-row label{font-size:13px;color:var(--text-muted)}
.period-select,.period-input{width:100%;height:36px;padding:7px 10px;background:#fff;border:1px solid var(--border);border-radius:8px;color:var(--text-secondary);font-size:13px}
.period-row-double{display:flex;gap:7px;align-items:center;min-width:0}
.period-row-double input{min-width:0;flex:1}
.period-menu-preview{background:var(--bg);color:var(--text-muted);padding:12px;margin-top:12px;font-size:12px;line-height:1.7;border-radius:8px}
.period-menu-foot{display:flex;gap:8px;justify-content:flex-end;padding-top:14px;margin-top:12px;border-top:1px solid var(--border)}
.period-menu-foot button{width:auto;height:auto;border-radius:8px;min-height:32px}

/* ============== 校区管理 ============== */
.campus-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:14px}
.campus-card{padding:16px 18px;display:flex;flex-direction:column;gap:12px}
.campus-card.current{border-color:#C7D2FE;box-shadow:0 0 0 1px rgba(79,70,229,.18)}
.campus-card-top{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;flex-wrap:wrap}
.campus-card-name{font-size:16px;font-weight:600;color:var(--text);display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.campus-badge-current{font-size:11px;font-weight:600;color:#fff;background:var(--primary);border-radius:6px;padding:1px 7px}
.campus-mode-tag{font-size:12px;font-weight:600;border-radius:6px;padding:2px 8px;white-space:nowrap;background:var(--primary-light);color:var(--primary)}
.campus-mode-tag.single{background:#EEF2FF;color:#4F46E5}
.campus-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
.campus-stat{padding:12px;background:var(--bg);border-radius:8px;text-align:center}
.campus-stat-num{font-size:22px;font-weight:600;color:var(--text)}
.campus-stat-label{font-size:12px;color:var(--text-muted);margin-top:6px}
.campus-desc,.tpl-item-body{font-size:13px;color:var(--text-secondary);line-height:1.6}
.campus-meta{font-size:12px;color:var(--text-light)}
.campus-card-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:auto;padding-top:12px;border-top:1px solid var(--border)}
.tpl-item{padding:18px;border:1px solid var(--border);border-radius:12px;background:#fff}
.tpl-item-title{font-size:16px;font-weight:600;color:var(--text);margin-bottom:12px}
.campus-option{border:1px solid var(--border);border-radius:12px;padding:14px;margin:8px 0;cursor:pointer}
.campus-option:hover,.campus-option.active{background:var(--primary-light);border-color:#C7D2FE}
.campus-option-name{font-size:13px;color:var(--text);font-weight:600}
.campus-option-mode,.campus-tip{font-size:12px;color:var(--text-muted);margin-top:4px}
.campus-manage-btn{width:100%;margin-top:10px}
.campus-tip{line-height:1.7}

/* ============== Tabs ============== */
.tabs{display:flex;gap:8px;border-bottom:1px solid var(--border);margin-bottom:24px}
.tab-btn{min-height:40px;color:var(--text-muted);font-size:14px;background:transparent;border:0;border-bottom:2px solid transparent;padding:0 12px;cursor:pointer}
.tab-btn.active{color:var(--primary);border-color:var(--primary)}

/* ============== 详情行 / 双店对比 ============== */
.detail-row{display:flex;justify-content:space-between;padding:14px 0;border-bottom:1px dashed var(--border);font-size:13px;gap:24px}
.detail-row:last-child{border-bottom:none}
.detail-row .label{color:var(--text-muted)}
.detail-row .value{font-weight:500;font-variant-numeric:tabular-nums;color:var(--text)}
.dual-store{display:grid;gap:16px;margin-bottom:12px}
.dual-store>*{padding:18px;background:#fff;border:1px solid var(--border);border-radius:12px}
.dual-store .sy,.dual-store .dm,.dual-store .total{padding:18px}
.dual-store-cell{border-radius:8px;padding:12px 14px;text-align:center}
.dual-store-cell .lbl{font-size:11px;font-weight:600;color:var(--text-muted)}
.dual-store-cell .val{font-size:18px;font-weight:700;margin-top:4px}

/* ============== 工具栏 / 链接列表 ============== */
.toolbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;gap:12px;flex-wrap:wrap}
.toolbar-left{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.toolbar-right{display:flex;gap:8px;flex-wrap:wrap}
.link-list{display:flex;flex-direction:column;gap:8px}
.link-item{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;background:var(--blue-bg);border-radius:8px;cursor:pointer;transition:background .15s;font-size:13px}
.link-item:hover{background:#bfdbfe}

/* ============== 同步状态 / 状态徽章 ============== */
.sync-status[data-state=saving]::before{background:var(--warn)}
.sync-status[data-state=error],.sync-status[data-state=conflict],.sync-status[data-state=offline]{color:var(--danger)}
.sync-status[data-state=error]::before,.sync-status[data-state=conflict]::before{background:var(--danger)}

/* ============== Loading 骨架 ============== */
.page-skeleton{display:grid;gap:24px}
.skeleton{height:144px;border-radius:12px;background:#E2E8F0;animation:skeleton-pulse 1.5s ease-in-out infinite}
.skeleton-title{width:32%;height:32px;border-radius:8px}
.skeleton-row{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
.skeleton-panel{height:320px}
.page-loading{height:240px;background:#E2E8F0;border-radius:12px;color:transparent;animation:skeleton-pulse 1.5s ease-in-out infinite;display:flex;align-items:center;justify-content:center}
.page-loading::before,.page-loading::after{display:none}

/* ============== Empty ============== */
.empty{padding:48px 24px;font-size:14px;text-align:center;color:var(--text-muted)}
.empty-icon{display:flex;align-items:center;justify-content:center;margin-bottom:12px}
.empty-icon svg{width:32px;height:32px;stroke:var(--text-light);fill:none}
.empty-title{font-size:16px;font-weight:600;color:var(--text);margin-bottom:6px}
.empty-hint{font-size:13px;color:var(--text-light)}

/* ============== Toast ============== */
.toast{position:fixed;top:80px;right:24px;z-index:9999;display:flex;flex-direction:column;gap:8px;pointer-events:none}
.toast-msg{background:var(--text);color:#fff;padding:10px 16px;border-radius:8px;font-size:13px;box-shadow:var(--shadow);pointer-events:auto;animation:toastIn .2s ease-out}
.toast-msg.success{background:var(--success)}
.toast-msg.error{background:var(--danger)}
.toast-msg.warn{background:var(--warn)}

/* ============== 全局搜索面板 ============== */
.utility-menu{position:fixed;inset:auto;margin:0;top:60px;right:24px;z-index:2000;border:1px solid var(--border);border-radius:12px;padding:8px;background:#fff;box-shadow:var(--shadow-hover);min-width:200px}
.utility-menu button{display:flex;align-items:center;width:100%;height:40px;justify-content:flex-start;gap:10px;border:0;border-radius:8px;color:var(--text-secondary);background:none;font-size:14px;line-height:1;padding:0 12px;cursor:pointer}
.utility-menu button svg{width:16px;height:16px;flex:none;display:block}
.utility-menu button:not(.utility-logout) svg{color:var(--text-muted);transition:color .15s}
.utility-menu button:hover{background:var(--bg);color:var(--primary)}
.utility-menu button:not(.utility-logout):hover svg{color:var(--primary)}
.utility-menu[hidden]{display:none}
/* v22.1 退出登录:去除多余横线、统一 40px、保持垂直居中、icon 与文字同色、hover 浅红警示 */
.utility-menu .utility-logout{
  justify-content:flex-start; align-items:center;
  gap:10px; color:var(--danger); font-weight:600;
  margin-top:4px; height:40px;
  border:0; border-radius:8px; background:none;
}
.utility-menu .utility-logout svg{ color:var(--danger); width:16px; height:16px; flex:none; }
.utility-menu .utility-logout span{ color:var(--danger); }
.utility-menu .utility-logout:hover{ background:var(--red-bg);color:var(--danger); }
.utility-sep{height:1px;background:var(--border);margin:4px 0}
/* ============== 全局搜索面板（匹配 js/search.js 的 DOM） ============== */
.gs-overlay{position:fixed;inset:0;z-index:2000;background:rgba(15,23,42,.40);display:none;justify-content:center;padding-top:12vh}
.gs-overlay.show{display:flex}
.gs-modal{width:600px;max-width:calc(100vw - 32px);max-height:72vh;background:#fff;border-radius:16px;box-shadow:var(--shadow-hover);display:flex;flex-direction:column;overflow:hidden}
.gs-input-wrap{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--border)}
.gs-input-icon{display:inline-flex;align-items:center;color:var(--text-muted);flex:none}
.gs-input{flex:1;min-width:0;border:0!important;outline:none;height:28px;padding:0;font-size:15px;color:var(--text);background:transparent}
.gs-esc{flex:none;font-size:11px;color:var(--text-light);border:1px solid var(--border);border-radius:6px;padding:2px 6px;background:var(--bg)}
.gs-results{overflow:auto;min-height:0;padding:8px;max-height:52vh}
.gs-hint{display:flex;align-items:center;justify-content:center;gap:8px;padding:32px 16px;color:var(--text-light);font-size:13px;text-align:center}
.gs-hint-ic{display:inline-flex;color:var(--border-strong)}
.gs-group{margin-bottom:6px}
.gs-group-title{display:flex;align-items:center;gap:8px;padding:8px 12px 4px;font-size:12px;font-weight:600;color:var(--text-muted)}
.gs-group-count{background:var(--bg);color:var(--text-light);border-radius:10px;padding:0 7px;font-size:11px;line-height:18px;font-weight:600}
.gs-item{display:flex;gap:12px;align-items:center;padding:9px 12px;border-radius:8px;cursor:pointer;transition:background .15s;text-decoration:none;color:inherit}
.gs-item:hover{background:var(--bg);text-decoration:none}
.gs-item-icon{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:8px;flex:none}
.gs-item-text{flex:1;min-width:0;display:flex;flex-direction:column}
.gs-item-title{font-size:14px;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gs-item-sub{font-size:12px;color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gs-item-tag{flex:none;font-size:11px;color:var(--text-light);background:var(--bg);border-radius:6px;padding:2px 8px}

/* ============== AI 助手 ============== */
.ai-fab{position:fixed;right:24px;bottom:24px;width:48px;height:48px;border-radius:12px;background:var(--primary);color:#fff;border:0;cursor:pointer;z-index:100000;display:flex;align-items:center;justify-content:center;box-shadow:var(--shadow-hover);transition:box-shadow .15s,transform .15s}
.ai-fab:hover{box-shadow:var(--shadow-hover);transform:translateY(-2px)}
.ai-fab svg{width:24px;height:24px}
.ai-panel{position:fixed;right:24px;bottom:88px;width:384px;max-width:calc(100vw - 48px);height:560px;max-height:calc(100vh - 130px);background:#fff;border:1px solid var(--border);border-radius:16px;box-shadow:0 20px 60px rgba(15,23,42,.18);z-index:100001;flex-direction:column;overflow:hidden}
.ai-head{display:flex;align-items:center;gap:10px;padding:14px 16px;background:var(--primary);color:#fff;font-size:15px;flex:0 0 auto;cursor:grab;user-select:none}
.ai-head:active{cursor:grabbing}
.ai-head .ai-avatar{width:32px;height:32px;border-radius:50%;background:rgba(255,255,255,.22);display:flex;align-items:center;justify-content:center;overflow:hidden;flex:none}
.ai-head .ai-avatar img{width:26px;height:26px;object-fit:contain}
.ai-head .ai-title{display:flex;flex-direction:column;line-height:1.25;min-width:0}
.ai-head .ai-title b{font-size:14px;font-weight:650}
.ai-head .ai-title small{font-size:12px;opacity:.75;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ai-head span{margin-left:auto;display:flex;gap:6px}
.ai-icon-btn{background:rgba(255,255,255,.16);border:0;color:#fff;width:28px;height:28px;border-radius:8px;cursor:pointer;font-size:14px;line-height:1;display:flex;align-items:center;justify-content:center}
.ai-icon-btn:hover{background:rgba(255,255,255,.3)}
.ai-settings{padding:16px;display:flex;flex-direction:column;gap:10px;flex:1;overflow:auto}
.ai-settings input{height:36px;border:1px solid var(--border);border-radius:8px;padding:0 12px;font-size:13px;color:var(--text)}
.ai-tip{font-size:12px;color:var(--text-light);line-height:1.5}
.ai-btn{font-family:inherit}
.ai-chat{display:flex;flex-direction:column;flex:1;min-height:0}
.ai-welcome{padding:14px 16px 8px;background:#fff;border-bottom:1px solid #F0F4F0;flex:0 0 auto}
.ai-welcome p{margin:0 0 9px;font-size:13px;color:var(--text-secondary);line-height:1.6}
.ai-quick{display:flex;flex-wrap:wrap;gap:7px}
.ai-quick button{border:1px solid #C7D2FE;background:var(--primary-light);color:var(--primary);font-size:12px;padding:5px 10px;border-radius:14px;cursor:pointer;transition:background .15s,border-color .15s}
.ai-quick button:hover{background:#E0E7FF;border-color:#A5B4FC}
.ai-msgs{flex:1;overflow:auto;padding:12px 16px;display:flex;flex-direction:column;gap:9px;background:#FAFBF8}
.ai-msg{max-width:86%;padding:9px 12px;border-radius:12px;font-size:13px;line-height:1.65;white-space:pre-wrap;word-break:break-word}
.ai-msg.user{align-self:flex-end;background:var(--primary);color:#fff;border-bottom-right-radius:4px}
.ai-msg.ai{align-self:flex-start;background:#fff;border:1px solid var(--border);border-bottom-left-radius:4px;color:var(--text)}
.ai-input-row{display:flex;gap:8px;padding:10px 12px;border-top:1px solid var(--border);background:#fff}
.ai-input-row input{flex:1;height:36px;border:1px solid var(--border);border-radius:8px;padding:0 12px;font-size:13px}
.ai-input-row input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-light)}

/* ============== 登录遮罩 ============== */
#loginMask{background:var(--bg)!important}
#loginMask>div:first-child,#loginMask>div:nth-child(2){opacity:0}
#loginMask>div:last-child{padding:32px!important;border-radius:12px!important;border:1px solid var(--border)!important;box-shadow:var(--shadow)!important;background:#fff!important}
#loginMask input{background:#fff!important;border-radius:8px!important;border:1px solid var(--border)!important;height:38px!important}
#loginBtn{border-radius:8px!important;background:var(--primary)!important;border-color:var(--primary)!important}

/* ============== 动画 / 滚动条 ============== */
@keyframes studio-enter{from{opacity:0}to{opacity:1}}
@keyframes console-enter{from{opacity:0}to{opacity:1}}
@keyframes fade-in{from{opacity:0}to{opacity:1}}
@keyframes toastIn{from{opacity:0;transform:translateX(20px)}to{opacity:1;transform:translateX(0)}}
@keyframes skeleton-pulse{50%{opacity:.45}}
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-thumb{background:#CBD5E1;border-radius:8px}
::-webkit-scrollbar-thumb:hover{background:#94A3B8}
::-webkit-scrollbar-track{background:transparent}

/* ============== 响应式：1100px ============== */
@media(max-width:1100px){
  .topbar-title,.user-meta{display:none}
  .topbar,.topbar-right{gap:8px}
  .topbar{padding:0 16px}
  .topbar .campus-btn{display:none}
  .topbar-right #globalSearchBtn,.topbar-right #quickServiceBtn{display:inline-flex}
  .main{padding:24px!important}
  .main .card-grid,.main .split-2,.main .campus-grid,.main .tpl-compare,.main .dual-store{gap:16px!important}
  .console-workbench,.console-detail-grid{grid-template-columns:1fr;gap:24px}
}

/* ============== 响应式：850px ============== */
@media(max-width:850px){
  .sidebar,.sidebar.collapsed{width:240px;transform:translateX(-100%);z-index:1600;transition:transform .15s ease}
  .sidebar-header,.sidebar.collapsed .sidebar-header{padding:16px}
  .sidebar.collapsed .sidebar-foot{padding:10px 8px}
  .topbar,body:has(.sidebar.collapsed) .topbar{left:0;height:64px;padding:0 16px;gap:8px}
  .main,body:has(.sidebar.collapsed) .main{left:0;top:64px;padding:24px 16px;margin:0}
  .main>*{min-width:0;max-width:none}
  .user-meta,.campus-btn{display:none}
  .topbar-title{font-size:14px}
  .topbar .icon-btn{width:32px;height:32px}
  #navDrawerButton{display:inline-flex!important}
  .ai-fab{right:16px;bottom:16px;width:48px;height:48px}
  .ai-panel{right:8px;bottom:76px;width:calc(100vw - 16px);height:60vh}
  body.drawer-open .sidebar{transform:translateX(0)}
  body.drawer-open .drawer-shade{display:block!important;position:fixed;inset:0;background:rgba(15,23,42,.40);z-index:1590}
}

/* ============== 响应式：650px ============== */
@media(max-width:650px){
  .topbar{overflow-x:auto;padding:0 12px;gap:8px}
  .topbar-center{margin-left:0}
  .topbar-right #globalSearchBtn,.topbar-right #quickServiceBtn{display:none}
  .main{padding:20px 14px!important}
  .modal-backdrop{padding:8px}
  .modal{max-height:calc(100dvh - 16px)}
  .modal .form-grid{grid-template-columns:1fr!important}
  .page-title,.welcome-title{font-size:22px!important}
  .card-title{font-size:16px!important}
}

/* ============== 打印 ============== */
@media(prefers-reduced-motion:reduce){*,*::before,*::after{transition:none!important;animation:none!important}}
@media print{
  .sidebar,.topbar,.ai-fab{display:none!important}
  .main{position:static!important;overflow:visible;padding:0!important}
  .main>*{min-width:0;max-width:none}
  .table-wrap,.table-outer{overflow:visible!important;max-height:none!important}
  .data-table th{position:static!important}
  .card:hover{transform:none}
}