/* 智悠树 · 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:#047857; --warn:#B45309; --danger:#B91C1C; --info:var(--primary);
  --bg:#F8FAFC; --bg-card:#FFFFFF; --text:#1E293B; --text-secondary:#475569;
  --text-muted:#64748B; --text-light:#64748B; --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;align-items:baseline;gap:6px;min-width:0}
/* 右上角只有一个控件：头像 + 姓名 + 当前岗位 + ▾ 的账号按钮，点开是岗位/个人中心菜单。
   以前这里还并着一个岗位下拉框，岗位名重复两遍、两个控件高度还不齐。 */
.user-chip{display:flex;align-items:center;gap:8px;height:36px;padding:0 10px;border:1px solid var(--border);border-radius:8px;background:#fff;color:var(--text-secondary);font-family:inherit;cursor:pointer;transition:border-color .15s,color .15s}
.user-chip:hover,.user-chip[aria-expanded=true]{border-color:var(--primary);color:var(--primary)}
.user-chip .user-name{color:var(--text)}
.user-chip:hover .user-name{color:var(--primary)}
/* 姓名与岗位并排一行、中间一个点：叠成两行会把这颗按钮顶到 44px 以上，看着就像文字换行 */
.user-chip .user-role::before{content:'·';margin-right:6px;color:var(--text-light);font-weight:400}
.user-chip:hover .user-role::before{color:inherit}
.user-caret{flex:none;font-size:11px;line-height:1;color:var(--text-light)}
#userZone{display:flex;align-items:center;flex:none}
#userZone .user-chip{margin-left:0;flex:none;white-space:nowrap;max-width:250px}
#userZone .user-chip .user-meta{flex:0 1 auto;overflow:hidden}
#userZone .user-chip .user-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#userZone .user-chip .user-role{flex:none;white-space:nowrap}
.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:min(var(--canvas-min),100%);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}
/* 详情弹窗的概览卡（学员操作中心 / 员工档案共用）：弹窗在 .main 之外，
   上面那套 .card-grid 规则不生效，这里给一份同口径的：一行三张卡并排。 */
.detail-cards{display:grid;grid-template-columns:repeat(24,minmax(0,1fr));gap:14px;margin-bottom:14px}
.detail-cards>.card,.detail-cards>.card[style]{grid-column:span 8;min-width:0;margin-bottom:0}
@media(max-width:1100px){.detail-cards>.card,.detail-cards>.card[style]{grid-column:span 12}}
@media(max-width:850px){.detail-cards>.card,.detail-cards>.card[style]{grid-column:span 24}}
.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}
/* 顶栏最外侧的到店登记大屏入口：琥珀底+签到屏图标，和普通灰图标一眼分开（老板 2026-10-20 挪到最外层） */
.topbar .icon-btn.kiosk-ico{background:rgba(217,119,6,.14);color:#b45309;border:1px solid rgba(217,119,6,.35)}
.topbar .icon-btn.kiosk-ico:hover{background:rgba(217,119,6,.22);color:#92400e;border-color:rgba(217,119,6,.5)}
.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:#047857}
.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:120px;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=checkbox],.search-bar input[type=radio]{min-width:0;width:15px;height:15px;padding:0;flex:0 0 auto;accent-color:var(--primary);cursor:pointer}
/* 筛选栏搜索框：固定窄宽度（:not 只为提高优先级，覆盖下方 input 通用 width:100%） */
.search-bar input[type=text]:not([type=checkbox]):not([type=radio]):not([type=file]),.search-bar input[type=search]:not([type=checkbox]):not([type=radio]):not([type=file]){width:200px;min-width:120px}
/* ★ 筛选栏折叠：一行放不下时，右上角"展开/收起"常驻第一排右侧 */
.filter-toggle{display:inline-flex;align-items:center;justify-content:center;gap:5px;position:absolute;top:20px;right:20px;min-height:36px;height:36px;padding:0 12px;border:1px solid var(--border);background:#fff;box-shadow:none;color:var(--text-secondary);font-size:13px;line-height:normal;white-space:nowrap;cursor:pointer}
.filter-toggle svg{width:13px;height:13px;flex:none}
.filter-toggle:hover{color:var(--primary);border-color:var(--primary);background:#fff}
.filter-toggle .chev{transition:transform .16s}
.search-bar.filters-expanded .filter-toggle .chev{transform:rotate(180deg)}
.filter-dot{position:absolute;top:-3px;right:-7px;min-width:14px;height:14px;padding:0 3px;border-radius:999px;background:var(--primary);color:#fff;font-size:10px;font-style:normal;line-height:14px;text-align:center}
/* ★ 筛选快捷按钮组（今日/本周/本月/清空日期）：带边框可点击、间距与所在筛选栏一致 */
.filter-quick{display:inline-flex;align-items:center;gap:inherit;flex:0 0 auto}
.filter-quick .btn-sm{border:1px solid var(--border);background:#fff;color:var(--text-secondary);padding:0 10px}
.filter-quick .btn-sm:hover{background:var(--primary-light);border-color:var(--primary);color:var(--primary)}
.filter-quick .btn-sm:active{background:var(--primary);border-color:var(--primary);color:#fff}
/* ★ 表头点击排序 */
.data-table th.th-sortable{cursor:pointer;user-select:none}
.data-table th.th-sortable:focus-visible{outline:2px solid var(--primary);outline-offset:-2px;border-radius:4px}
.data-table th.th-sortable:hover{color:var(--primary);background:var(--primary-light)}
.data-table th .sort-arrow{margin-left:4px;font-size:10px;color:var(--text-light);opacity:.6}
.data-table th.th-sortable.sorted .sort-arrow{color:var(--primary);opacity:1}
/* ★ 筛选折叠：被标记的筛选项"原地"隐藏/显示（不搬迁 DOM），展开时保持原顺序与标签配对 */
.search-bar.filter-collapsible{position:relative;padding-right:var(--fbar-pad,86px)}
.search-bar:not(.filters-expanded) .filter-adv-item{display:none!important}
.search-bar>.filter-reset{margin-left:auto}
/* 折叠态：清除筛选与展开/收起并排固定在第一排右侧（清除筛选在左），尺寸与其他页面的按钮一致、与第一行控件上下对齐 */
.search-bar.filter-collapsible>.filter-reset{position:absolute;top:20px;right:var(--fbar-reset-x,100px);margin-left:0}
.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:min-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)}
/* 勾选框留在首格；保留原生 table-cell，确保多行内容或附件撑高整行时首格仍等高。 */
.data-table .row-select{width:15px;height:15px;margin:0 8px 0 0;flex:0 0 auto;vertical-align:middle;cursor:pointer;accent-color:var(--primary)}
.data-table .row-select:disabled{cursor:not-allowed;opacity:.4}
.data-table td.sel-cell,.data-table th.sel-cell{display:table-cell;vertical-align:middle}
.data-table .sel-cell>div{display:inline-block;vertical-align:middle}
.data-table .sel-cell>.row-select{vertical-align:middle}
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}

/* 批量导出 · 字段选择弹窗 */
.export-field-scroll{max-height:52vh;overflow-y:auto;margin-top:10px}
.export-field-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px}
.export-field{display:flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid var(--border);border-radius:var(--r-sm);background:#fff;font-size:13px;color:var(--text-secondary);cursor:pointer;min-width:0}
.export-field:hover{border-color:var(--primary);background:var(--primary-light)}
.export-field span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.export-field input{cursor:pointer;flex:none}
.export-field-all{background:var(--bg);font-weight:600;color:var(--text);margin-bottom:2px}
.export-field-all span{font-weight:600}
.export-sheet{margin-bottom:16px}
.export-sheet .export-field-grid{margin-top:8px}

/* ============== 表单 ============== */
.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-grid>.form-row:has(.attachment-field),.form-grid>.form-row:has(.attachment-uploader){grid-column:1/-1!important}
.form-row{gap:8px;display:flex;flex-direction:column}
/* 表单分组块：新增流水 / 新增学员 / 新增缴费 统一排版与间距 */
.form-grid>.form-block,.form-grid>.form-note,.form-grid>.form-hint{grid-column:1/-1!important}
.form-block{border:1px solid var(--border);border-radius:8px;padding:12px 14px;background:#fff}
.form-block>legend{font-weight:600;font-size:13px;color:var(--text-secondary);padding:0 6px}
.form-block .form-grid{gap:16px}
.form-note{background:var(--bg);border:1px solid var(--border);border-radius:8px;padding:10px 12px;font-size:13px}
.form-hint{padding:9px 12px;border-radius:8px;background:var(--blue-bg);font-size:12px;line-height:1.6;color:var(--text-secondary)}
.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;overflow-x:auto;-webkit-overflow-scrolling:touch}
/* 历史上页面里两种写法并存（.tab-btn / .tab），统一按同一套高度与配色渲染 */
.tab-btn,.tabs>.tab{min-height:40px;flex:0 0 auto;color:var(--text-muted);font-size:14px;background:transparent;border:0;border-bottom:2px solid transparent;padding:0 12px;cursor:pointer;white-space:nowrap}
.tab-btn.active,.tabs>.tab.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)}

/* 顶栏工具图标：手机上已经排满，导出/导入走「系统管理 → 导入向导」，那里同样能一键全量导出 */
@media(max-width:850px){.topbar #exportBtn,.topbar #importBtn,.topbar #resetBtn{display:none}}
/* ============== 全局搜索面板（匹配 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:relative;width:52px;height:52px;border-radius:50%;background:linear-gradient(135deg,#6D5AF8 0%,#4F46E5 100%);color:#fff;border:0;cursor:grab;display:flex;align-items:center;justify-content:center;box-shadow:0 8px 24px rgba(79,70,229,.35),inset 0 1px 0 rgba(255,255,255,.28);transition:box-shadow .15s,transform .15s}
.ai-fab:hover{box-shadow:0 10px 28px rgba(79,70,229,.45),inset 0 1px 0 rgba(255,255,255,.28);transform:translateY(-2px)}
.ai-fab:active{cursor:grabbing;transform:scale(.96)}
/* 面板打开时悬浮球保持可见，用双层光环表示「正在对话」 */
.ai-open .ai-fab{box-shadow:0 0 0 3px #fff,0 0 0 7px var(--primary-light),0 8px 24px rgba(79,70,229,.3)}
.ai-fab svg{width:26px;height:26px;filter:drop-shadow(0 1px 1.5px rgba(49,46,129,.35))}
.ai-panel{position:absolute;right:0;bottom:64px;width:384px;max-width:calc(100vw - 16px);height:560px;max-height:calc(100vh - 96px);background:#fff;border:1px solid var(--border);border-radius:16px;box-shadow:0 24px 64px rgba(15,23,42,.22);z-index:100001;flex-direction:column;overflow:hidden}
.ai-head{display:flex;align-items:center;gap:9px;padding:10px 12px;background:#fff;border-bottom:1px solid var(--border);color:var(--text);flex:0 0 auto;user-select:none}
.ai-head .ai-avatar{width:30px;height:30px;border-radius:50%;background:linear-gradient(135deg,#6D5AF8,#4F46E5);display:flex;align-items:center;justify-content:center;overflow:hidden;flex:none;color:#fff}
.ai-head .ai-avatar svg{width:17px;height:17px}
.ai-head .ai-title{display:flex;flex-direction:column;line-height:1.25;min-width:0}
.ai-head .ai-title b{font-size:13.5px;font-weight:650}
.ai-head .ai-title small{font-size:11px;color:var(--text-light);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ai-head span{margin-left:auto;display:flex;gap:6px}
.ai-icon-btn{background:transparent;border:0;color:var(--text-light);width:28px;height:28px;border-radius:8px;cursor:pointer;font-size:15px;line-height:1;display:flex;align-items:center;justify-content:center}
.ai-icon-btn:hover{background:var(--bg);color:var(--text)}
.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:18px 16px 10px;flex:0 0 auto}
.ai-hello{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.ai-hello-avatar{width:38px;height:38px;border-radius:50%;background:linear-gradient(135deg,#6D5AF8,#4F46E5);color:#fff;display:flex;align-items:center;justify-content:center;flex:none;box-shadow:0 4px 12px rgba(79,70,229,.3)}
.ai-hello-avatar svg{width:21px;height:21px}
.ai-welcome p{margin:0;font-size:14px;color:var(--text);font-weight:600;line-height:1.5}
.ai-welcome small{display:block;margin-top:3px;font-size:12px;color:var(--text-light);font-weight:400}
.ai-quick{display:flex;flex-wrap:wrap;gap:8px}
.ai-quick button{border:1px solid var(--border);background:var(--bg);color:var(--text-secondary);font-size:12px;padding:6px 12px;border-radius:999px;cursor:pointer;transition:all .15s}
.ai-quick button:hover{background:var(--primary-light);color:var(--primary);border-color:var(--primary)}
.ai-msgs{flex:1;overflow:auto;padding:14px 16px 6px;display:flex;flex-direction:column;gap:12px;background:#fff}
.ai-msg{font-size:13.5px;line-height:1.7;white-space:pre-wrap;word-break:break-word}
.ai-msg.user{align-self:flex-end;max-width:82%;background:var(--primary);color:#fff;padding:9px 14px;border-radius:18px 18px 4px 18px}
.ai-msg.ai{align-self:stretch;max-width:100%;color:var(--text)}
.ai-composer{margin:8px 12px 12px;border:1px solid var(--border);border-radius:16px;background:#fff;display:flex;flex-direction:column;transition:border-color .15s,box-shadow .15s;flex:0 0 auto}
.ai-composer:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-light)}
.ai-composer textarea{border:0;resize:none;background:transparent;font:inherit;font-size:13.5px;line-height:1.6;padding:11px 14px 4px;max-height:132px;outline:none;color:var(--text);font-family:inherit}
.ai-composer textarea::placeholder{color:var(--text-light)}
.ai-composer-foot{display:flex;align-items:center;gap:8px;padding:6px 8px 8px 10px}
.ai-model-pill{appearance:none;-webkit-appearance:none;font:inherit;font-size:11px;color:var(--text-light);border:1px solid var(--border);border-radius:999px;padding:3px 20px 3px 10px;background:#fff url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 24 24' fill='none' stroke='%2394A3B8' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E") no-repeat right 8px center;cursor:pointer;outline:none;max-width:170px;text-overflow:ellipsis}
.ai-model-pill:hover{color:var(--primary);border-color:var(--primary)}
.ai-model-pill:disabled{opacity:.6;cursor:not-allowed}
.ai-send{width:32px;height:32px;border-radius:50%;border:0;background:var(--primary);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;flex:none;margin-left:auto;transition:opacity .15s,transform .15s}
.ai-send:hover:not(:disabled){transform:scale(1.06)}
.ai-send:disabled{opacity:.4;cursor:not-allowed}
.ai-send svg{width:16px;height:16px}

/* ============== 登录遮罩 ============== */
#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-panel{width:calc(100vw - 16px)}
  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}
  /* 手机端把 24 列工作室栅格收成单列：否则卡片/快捷按钮会被挤进 ~176px 的窄轨道并被横幅裁掉 */
  .main .card-grid:not(:has(>.stat-card)),.main .split-2,.main .campus-grid,.main .tpl-compare,.main .dual-store,.main .welcome-banner{grid-template-columns:minmax(0,1fr)!important;gap:14px!important}
  .main .card-grid:not(:has(>.stat-card))>*,.main .split-2>*,.main .campus-grid>*,.main .tpl-compare>*,.main .dual-store>*,.main .welcome-banner>*{grid-column:1/-1!important;grid-row:auto!important}
  /* 校区卡的四格统计在 390px 实测只剩 67px 宽（数字被挤成两行），收成两列 */
  .main .campus-stats{grid-template-columns:repeat(2,minmax(0,1fr))!important}
  .workspace-quick{max-width:100%!important;justify-content:flex-start}
}

/* ============== 打印 ============== */
@media(prefers-reduced-motion:reduce){*,*::before,*::after{transition:none!important;animation:none!important}}
@media print{
  .sidebar,.topbar,#ai-assistant-root{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}
}
.sidebar .nav-item[hidden],.sidebar .nav-group[hidden]{display:none!important}
.leave-period-table{width:100%;border-collapse:collapse}.leave-period-table td,.leave-period-table th{padding:12px 8px;text-align:left;border-bottom:1px solid var(--border)}.leave-period-table input,.leave-period-table select{width:100%;min-width:110px}.leave-period-table th{font-size:12px;color:var(--text-secondary);font-weight:500}.leave-period-scroll{overflow:auto;border:1px solid var(--border);border-radius:12px;margin:16px 0}.leave-total{background:var(--primary-light);padding:14px 16px;border-radius:10px;color:var(--primary)}
/* 请休假表单：区块内自带边框的表格不再套第二层边框，间距与其余信息采集页一致 */
.form-block .leave-period-scroll{margin:0}
.form-block .leave-total{margin:12px 0 0}
.form-block .table-wrap{border:0;box-shadow:none;border-radius:0;background:transparent}

/* ===== 排班日历 ===== */
.cal-wrap{margin:4px 0 18px}
.cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}
.cal-dow{text-align:center;font-size:12px;color:var(--text-muted);padding:4px 0;font-weight:600}
.cal-cell{position:relative;min-height:78px;border:1px solid var(--border);border-radius:10px;background:#fff;padding:6px 8px;cursor:pointer;transition:box-shadow .15s,border-color .15s;display:flex;flex-direction:column;gap:3px}
.cal-cell:hover{border-color:var(--primary);box-shadow:var(--shadow)}
.cal-cell.empty-cell{border:0;background:transparent;cursor:default}
.cal-cell.empty-cell:hover{box-shadow:none}
.cal-day{font-size:13px;font-weight:600;color:var(--text)}
.cal-tag{align-self:flex-start;font-size:11px;padding:1px 7px;border-radius:999px;background:var(--bg);color:var(--text-muted)}
.cal-time{font-size:11px;color:var(--text-light)}
.cal-work .cal-tag{background:var(--primary-light);color:var(--primary)}
.cal-rest{background:#fbfcfe}
.cal-rest .cal-day{color:var(--text-light)}
.cal-rest .cal-tag{background:#F1F5F9;color:#94A3B8}
.cal-override{border-color:#C7D2FE;border-style:dashed}
.cal-vacation .cal-tag{background:#FEF3C7;color:#92400E}
.cal-today{border-color:var(--primary);box-shadow:0 0 0 2px var(--primary-light)}
.cal-sel{border-color:var(--primary);background:#F5F7FF;box-shadow:0 0 0 2px var(--primary-light)}
.cal-legend{border:1px solid var(--border);border-radius:999px;padding:1px 9px;font-size:11px}
.cal-legend.cal-work{background:var(--primary-light);color:var(--primary)}
.cal-legend.cal-rest{background:#F1F5F9;color:#94A3B8}
.cal-shift-daytime .cal-tag,.cal-legend.cal-shift-daytime{background:#e0f2fe;color:#075985}
.cal-shift-weekday .cal-tag,.cal-legend.cal-shift-weekday{background:#ede9fe;color:#5b21b6}
.cal-shift-full .cal-tag,.cal-legend.cal-shift-full{background:#ffedd5;color:#9a3412}
.cal-shift-rest .cal-tag,.cal-legend.cal-shift-rest{background:#f1f5f9;color:#475569}
.redemption-search-results{display:grid;gap:8px;max-height:240px;overflow:auto;margin:8px 0}
.redemption-student{display:flex;align-items:center;justify-content:space-between;gap:12px;text-align:left;padding:12px;border:1px solid var(--border);border-radius:8px;background:var(--surface,#fff);color:var(--text);min-height:48px}
.redemption-student[aria-pressed="true"]{border-color:var(--primary);background:var(--primary-light)}
/* 学员搜索即选（UI.studentSearch）：已选条 + 清除叉，六个录入页共用同一套版式 */
.stu-picked{display:flex;align-items:center;gap:6px;font-size:12px;line-height:1.5;color:var(--text-secondary);background:var(--primary-light,#eef4ff);border:1px solid var(--border);border-radius:6px;padding:4px 8px}
.stu-picked-x{width:auto;min-height:0;height:auto;padding:0 3px;border:0;border-radius:4px;background:none;color:var(--text-muted);font-size:15px;line-height:1;cursor:pointer}
.stu-picked-x:hover{color:var(--danger);background:rgba(0,0,0,.06)}
.stu-search input[type=search]{width:100%}
/* 缴费起止日期：永远两个一排，窄屏靠压缩而不是掉成两排 */
.pay-date-row{grid-column:1/-1;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
@media(max-width:520px){.pay-date-row{gap:8px}}
.cal-legend.cal-override{border-style:dashed}
.cal-legend.cal-vacation{background:#FEF3C7;color:#92400E}
.cal-legend.cal-today{border-color:var(--primary)}
@media(max-width:768px){.cal-cell{min-height:62px;padding:4px}.cal-time{display:none}}

/* ===== 线索跟进时间线 ===== */
.follow-log{border:1px solid var(--border);border-radius:10px;padding:6px 10px 10px;background:#fff}
.follow-log .table-wrap{border:0;box-shadow:none}

/* ===== 招生转化漏斗 ===== */
.funnel{display:flex;flex-direction:column;gap:8px;margin:12px 0 4px}
.funnel-step{position:relative;display:flex;align-items:center;gap:10px;min-height:44px;padding:6px 12px;border:1px solid var(--border);border-radius:10px;background:#fff;overflow:hidden}
.funnel-bar{position:absolute;left:0;top:0;bottom:0;background:var(--primary-light);border-radius:10px 0 0 10px;transition:width .2s ease}
.funnel-name{position:relative;flex:none;width:72px;font-size:13px;font-weight:600;color:var(--text)}
.funnel-num{position:relative;flex:none;min-width:44px;font-size:18px;color:var(--primary)}
.funnel-rate{position:relative;font-size:12px;color:var(--text-muted);margin-left:auto;text-align:right}
@media(max-width:768px){.funnel-step{padding:5px 10px}.funnel-name{width:56px;font-size:12.5px}.funnel-num{font-size:16px}.funnel-rate{font-size:11.5px}}

/* ===== 班制时间（逐时段钟点，时间选择器） ===== */
.shift-time-row{display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px;padding:10px 0;border-bottom:1px solid var(--border)}
.shift-time-row:last-child{border-bottom:0}
.shift-time-name{flex:none;min-width:76px;font-size:13px;font-weight:600;color:var(--text)}
.shift-time-slot{display:inline-flex;align-items:center;gap:5px}
.shift-time-slot-name{font-size:12px;color:var(--text-muted)}
.shift-time-dash{color:var(--text-muted)}
.shift-time-row input[type=time]{height:34px;border:1px solid var(--border);border-radius:8px;padding:0 6px;font-size:13px;background:#fff;color:var(--text)}
.shift-time-row input[type=time]:focus{border-color:var(--primary);outline:none;box-shadow:0 0 0 2px var(--primary-light)}
@media(max-width:768px){.shift-time-slot{width:100%}.shift-time-slot input[type=time]{flex:1}}

/* ===== 学情报告 ===== */
.stat-card.clickable{cursor:pointer;transition:border-color .15s,box-shadow .15s}
.stat-card.clickable:hover{border-color:var(--primary);box-shadow:var(--shadow)}
.report-pick{max-height:216px;overflow:auto;border:1px solid var(--border);border-radius:10px;padding:6px;display:flex;flex-direction:column;gap:2px;background:#fff;margin:6px 0}
.report-pick-item{display:flex;align-items:center;gap:8px;padding:5px 8px;border-radius:6px;cursor:pointer;font-size:13px}
.report-pick-item:hover{background:var(--bg)}
.report-pick-item .muted{font-size:12px;margin-left:auto;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:46%}
.report-pick input,.report-dims input{width:16px;height:16px;accent-color:var(--primary);flex:none}
.report-dims{display:grid;grid-template-columns:repeat(auto-fill,minmax(148px,1fr));gap:6px 12px;border:1px solid var(--border);border-radius:10px;padding:10px 12px;margin:6px 0}
.report-custom{display:flex;align-items:center;gap:8px}
.report-custom input{flex:1;min-width:0;height:34px;border:1px solid var(--border);border-radius:8px;padding:0 8px;background:#fff;color:var(--text)}
.report-progress{min-height:20px;font-size:12px;color:var(--primary);line-height:1.7}
.report-view{border:1px solid var(--border);border-radius:12px;padding:16px 18px;background:#fff;max-height:52vh;overflow:auto}
.report-view .rp-meta{font-size:12px;color:var(--text-muted);margin-bottom:10px;line-height:1.7}
.report-view h4{margin:16px 0 6px;font-size:14px;color:var(--text)}
.report-view p{margin:6px 0;font-size:13.5px;line-height:1.85;color:var(--text)}
.report-view .rp-li{padding-left:16px;position:relative}
.report-view .rp-li:before{content:"·";position:absolute;left:4px;color:var(--primary);font-weight:700}
.report-edit{width:100%;box-sizing:border-box;border:1px solid var(--border);border-radius:10px;padding:12px;font-size:13px;line-height:1.85;font-family:inherit;color:var(--text);resize:vertical}
.report-edit:focus{border-color:var(--primary);outline:none;box-shadow:0 0 0 2px var(--primary-light)}
.report-aicmp{margin-top:10px}
.report-aicmp summary{cursor:pointer;font-size:12px;color:var(--text-muted)}
.report-aicmp .report-view{margin-top:8px;max-height:190px;font-size:12px}
@media(max-width:768px){.report-dims{grid-template-columns:1fr 1fr}.report-view{padding:12px;max-height:46vh}}

/* 账号菜单（顶栏头像 / 抽屉岗位行共用）：岗位单选 + 个人中心 + 改密码 + 退出 */
.user-menu{position:fixed;z-index:2600;min-width:246px;max-width:min(320px,calc(100vw - 16px));padding:8px;border:1px solid var(--border);border-radius:12px;background:#fff;box-shadow:var(--shadow-hover)}
.user-menu[hidden]{display:none}
.user-menu-head{display:flex;align-items:center;gap:10px;padding:6px 8px 10px}
.user-menu-head-txt{display:flex;flex-direction:column;gap:2px;min-width:0}
.user-menu-name{font-size:14px;font-weight:700;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.user-menu-sub{font-size:12px;color:var(--text-light);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.user-menu-cap{padding:0 8px 4px;font-size:11px;color:var(--text-light)}
.user-menu-roles{display:flex;flex-direction:column;gap:2px}
.user-menu-role,.user-menu-item{display:flex;align-items:center;gap:8px;width:100%;min-height:36px;padding:0 8px;border:0;border-radius:8px;background:none;color:var(--text-secondary);font-family:inherit;font-size:13px;text-align:left;cursor:pointer;transition:background .12s,color .12s}
.user-menu-role:hover,.user-menu-item:hover{background:var(--bg);color:var(--primary)}
.user-menu-role.on{background:var(--primary-light);color:var(--primary);font-weight:600}
.user-menu-tick{flex:none;width:14px;font-size:12px;line-height:1}
.user-menu-role-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.user-menu-tag{flex:none;font-size:11px;color:var(--primary);background:#fff;border-radius:6px;padding:1px 6px}
.user-menu-sep{height:1px;background:var(--border);margin:8px 0}
.user-menu-item.danger{color:var(--danger)}
.user-menu-item.danger:hover{background:var(--red-bg);color:var(--danger)}
.user-menu-role:focus-visible,.user-menu-item:focus-visible{outline:2px solid var(--primary);outline-offset:-2px}
/* 流程示意条（请休假 / 审批 / 信息更新）：横向环节 + 当前环节高亮 */
.flow-strip{display:flex;align-items:flex-start;flex-wrap:wrap;gap:0;padding:12px 4px 4px}
.flow-node{display:flex;flex-direction:column;align-items:center;gap:4px;flex:0 0 auto;min-width:56px}
.flow-dot{width:24px;height:24px;border-radius:50%;border:1.5px solid var(--border);background:#fff;color:var(--text-muted);font-size:12px;font-weight:600;display:flex;align-items:center;justify-content:center}
.flow-step.done{border-color:var(--primary);background:var(--primary);color:#fff}
.flow-step.current{border-color:var(--primary);color:var(--primary);box-shadow:0 0 0 3px var(--primary-light,#e6f2ee)}
.flow-label{font-size:11px;color:var(--text-secondary);white-space:nowrap}
.flow-line{flex:1 1 24px;min-width:16px;height:1.5px;background:var(--border);margin:11px 4px 0}
.flow-line.done{background:var(--primary)}
.flow-warn .flow-step.current{border-color:var(--warning,#b7791f);color:var(--warning,#b7791f);box-shadow:0 0 0 3px rgba(183,121,31,.14)}
.flow-bad .flow-step.current{border-color:var(--danger);color:var(--danger);box-shadow:0 0 0 3px rgba(217,70,70,.12)}
.flow-muted .flow-step.current{border-color:var(--border);color:var(--text-muted);box-shadow:none}
/* 窄屏：顶栏放不下，校区 / 岗位切换入口放在导航抽屉顶部（默认隐藏，≤850px 由 responsive.css 显示） */
.drawer-context{display:none;flex-direction:column;gap:8px;padding:10px 14px 12px;border-bottom:1px solid var(--border);background:#fff}
.drawer-context[hidden]{display:none!important}
.drawer-swap{display:flex;align-items:center;gap:8px;width:100%;min-height:38px;padding:0 10px;border:1px solid var(--border);border-radius:8px;background:#fff;color:var(--text-muted);font-size:12px;cursor:pointer;text-align:left;font-family:inherit}
.drawer-swap:hover,.drawer-swap:active{border-color:var(--primary);color:var(--primary)}
.drawer-swap svg{flex:0 0 auto}
.drawer-swap-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;color:var(--text)}
.drawer-swap-caret{flex:none;font-size:11px}

/* ===== 班制配色补充（schedule.js 按班制标识哈希出淡色并内联上色；以下只做外观统一与窄屏防溢出，不改既有班制色规则） ===== */
select.shift-colored{font-weight:600}
.cal-legend.shift-legend{border:0;font-weight:500}
.cal-legend-label{flex:0 0 auto}
/* 390px：班制下拉与图例芯片保持弹性，配色不得撑出横向滚动条 */
@media(max-width:768px){
  .shift-time-name{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  select.shift-colored{max-width:100%;min-width:0}
  .cal-legend.shift-legend{max-width:100%}
}

/* ===== 学习规划周表（pages/study_plan.js）=====
   窄屏靠 .plan-grid-wrap 横向滚动，而不是把七列压成一团：压下去每个格子只剩 40px，
   计划内容一个字都读不出来。学员列与表头钉住，滚动时不会认不出是哪个人。 */
.plan-grid-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:12px;background:#fff;overflow-anchor:none}
.main[data-page="study_plan"]{overflow-anchor:none}
/* 页头：标题块允许收缩，四个操作按钮始终贴右。
   之前副标题是一整行长文本，flex 行内张到满宽，把按钮挤到第二行并左对齐（老板 2026-10-30）。 */
.main[data-page="study_plan"] .page-head{align-items:flex-start}
.main[data-page="study_plan"] .page-head>div:first-child{flex:1 1 420px;min-width:0}
.main[data-page="study_plan"] .page-actions{flex:0 0 auto;margin-left:auto}
.data-table.plan-grid{width:100%;min-width:1080px;border-collapse:collapse;table-layout:fixed}
.data-table.plan-grid th{font-size:12px;text-align:left;padding:8px 10px;border-bottom:1px solid var(--border);background:#f7f8fc;white-space:nowrap}
.data-table.plan-grid td{vertical-align:top;padding:6px;border-bottom:1px solid var(--border);border-left:1px solid var(--border);overflow:hidden}
.data-table.plan-grid th.plan-col-stu,.data-table.plan-grid td.plan-col-stu{position:sticky;left:0;z-index:2;background:#fff;border-left:none;min-width:132px;width:132px}
.data-table.plan-grid th.plan-col-stu{z-index:3}
.data-table.plan-grid .plan-col-today{background:#eef2ff}
.plan-cell,.plan-add{display:block;width:100%;box-sizing:border-box;text-align:left;font-size:11.5px;line-height:1.45;padding:4px 6px;margin:0 0 4px;border-radius:8px;border:1px solid var(--border);background:transparent;cursor:pointer;color:inherit;overflow:hidden}
.plan-add{color:var(--text-muted);border-style:dashed}
.plan-cell:hover,.plan-add:hover{border-color:var(--primary)}
.plan-top{display:flex;align-items:center;gap:5px;width:100%}
.plan-slot{flex:0 0 auto;color:var(--text-muted);font-size:10.5px}
.plan-subject{flex:0 0 auto;font-weight:600}
.plan-state{flex:0 0 auto;margin-left:auto;font-size:10.5px;padding:0 4px;border-radius:6px;background:#eef0f4;color:#4b5563}
/* 计划内容单独占一行：一列只有 142px，挤在同一行里就只剩一个字，等于没写 */
.plan-text{display:block;width:100%;margin-top:2px;font-size:11.5px;color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.plan-cell.done .plan-state{background:#dcfce7;color:#166534}
.plan-cell.missed .plan-state{background:#fee2e2;color:#991b1b}
.plan-cell.ongoing .plan-state{background:#fef3c7;color:#92400e}
.plan-cell.future{opacity:.72}
.plan-none{display:block;font-size:11px;color:var(--text-light);padding:4px 6px}
/* 任务拖拽排序（老板 2026-10-26）：卡片本身就是拖拽把手，拖起时半透明、落点高亮 */
.plan-cell[draggable]{cursor:grab;user-select:none;-webkit-user-drag:element}
.plan-cell.is-drag{opacity:.35;border-style:dashed}
.plan-cell.is-over{border-color:var(--primary);background:var(--primary-light)}
.plan-cell.is-over-before{box-shadow:inset 0 3px 0 var(--primary)}
.plan-cell.is-over-after{box-shadow:inset 0 -3px 0 var(--primary)}
.data-table.plan-grid td.day-over{outline:2px dashed var(--primary);outline-offset:-3px;border-radius:8px}
.plan-grip{flex:0 0 auto;color:var(--text-light);font-size:12px;line-height:1}
.plan-task-no{font-weight:600;color:var(--primary);padding:6px 0}
/* 伴学服务里被点绑定的那条任务：一眼看出这条服务记的是哪一项 */
.plan-ref.on{border-color:var(--primary);background:var(--primary-light);box-shadow:inset 3px 0 0 var(--primary)}
.plan-share{margin-top:5px;padding:2px 9px;font-size:11px;line-height:1.7}
/* 编辑规划弹窗右上角：录入伴学服务并自动带上 plan_id（老板 2026-10-30） */
.plan-svc-quick-wrap{display:flex;align-items:center;gap:10px;margin-left:auto}
.plan-svc-quick{display:inline-flex;align-items:center;gap:4px;border:0;border-radius:8px;background:var(--primary);color:#fff;font-size:12.5px;font-weight:600;padding:7px 12px;cursor:pointer;box-shadow:0 2px 6px rgba(37,99,235,.22)}
.plan-svc-quick:hover{filter:brightness(.94)}
.plan-svc-quick:disabled{opacity:.6;cursor:default}
/* 服务列表：写了计划内容却没挂到规划的「游离」记录，整行浅黄 + 标签，等老师补绑定 */
.data-table tbody tr.svc-unlinked td{background:#fffbe6}
.data-table tbody tr.svc-unlinked td.sticky-first,.data-table tbody tr.svc-unlinked td.sticky-last{background:#fffbe6}
.data-table tbody tr.svc-unlinked:hover td{background:#fff4c2}
.svc-unlinked-tag{margin-left:4px;font-size:10px;padding:0 4px;border-radius:6px}
/* 收支流水详情（财务透明化）：分段折叠，每段一张表；沿用全站 .form-section 外观，只补段内边距与表格密度 */
.io-detail .form-section.io-sec{margin:10px 0;background:var(--surface,#fff)}
.io-detail .io-sec>.io-sec-body{padding:4px 14px 14px}
.io-detail .io-sec .table-wrap{border:1px solid var(--border);border-radius:8px}
.io-detail .io-sec .data-table th{font-size:12px}
.io-detail .io-sec .data-table td{font-size:12.5px;white-space:normal;word-break:break-word}
.io-detail .io-sec .data-table + .data-table,.io-detail .io-sec .table-wrap + .table-wrap{margin-top:10px}
/* 姓名下方那行（年级 · 班级 · 完成度）以前 nowrap，被 132px 固定学名列裁掉；
   改为自然换行，行高按正文节奏，不用加大行高去遮。 */
.data-table.plan-grid .plan-stu-sub{font-size:11px;line-height:1.45;color:var(--text-light);white-space:normal;overflow-wrap:anywhere}
/* 伴学服务录入弹窗里的"本周计划"卡：把要对照的那条计划摆在填实际内容的手边 */
.plan-ref{grid-column:1/-1;border:1px solid var(--primary-light,#c7cdf5);background:#f6f7ff;border-radius:10px;padding:8px 10px;margin:2px 0 4px}
.plan-ref-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:12px;font-weight:600;color:var(--text-secondary)}
.plan-ref-head .btn-sm{margin-left:auto}
.plan-ref-body{margin-top:4px;font-size:12.5px;line-height:1.6;color:var(--text-secondary);word-break:break-word}

/* ── 到店登记大屏（老师端）：深色高对比、卡片大按钮，电视/笔记本都看得清 ──
   层级在 UI.modal(10000) 之下，弹「改时间」时模态能正常盖住大屏 */
.ck-screen{position:fixed;inset:0;z-index:9990;background:#0e1726;color:#e8edf6;display:flex;flex-direction:column;gap:12px;padding:14px 18px;overflow:hidden}
.ck-head{display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.ck-title{flex:none}
.ck-title h2{margin:0;font-size:22px;letter-spacing:.4px}
.ck-sub{font-size:12.5px;color:#8fa0bd;margin-top:2px}
.ck-tools{margin-left:auto;display:flex;align-items:center;gap:8px;flex-wrap:nowrap}
.ck-screen .ck-btn{height:40px;padding:0 14px;border-radius:10px;border:1px solid #2a3a55;background:#16233a;color:#dfe8f7;font-size:15px;cursor:pointer}
.ck-screen .ck-btn:hover{border-color:#3d5a86}
.ck-screen .ck-btn.is-on{background:#2563eb;border-color:#2563eb;color:#fff}
.ck-screen .ck-btn:disabled{opacity:.55;cursor:progress}
/* 本机草稿与同事改动冲突：大屏要看得见、点得到（2026-10-23 签退被保存冲突锁死） */
.ck-screen .ck-btn.ck-conflict{background:#7f1d1d;border-color:#dc2626;color:#fff;font-weight:700}
.ck-screen .ck-btn.ck-conflict:hover{background:#991b1b;border-color:#ef4444}
/* 深色浮层里的表单控件：relations/responsive/oa 等表在 design-system 之后加载且会把 input 拉成白底 100% 宽，
   所以这里一律带 .ck-screen .ck-tools 前缀抬权重，并把 flex 收成不换行的固定宽。 */
/* 亮色底是 relations/responsive/oa 等后加载表用 !important 打的，深色浮层只能同样用 !important 收回来自 */
.ck-screen .ck-tools input,.ck-screen .ck-tools select{height:40px!important;border-radius:10px!important;border:1px solid #2a3a55!important;background:#16233a!important;color:#eaf0fb!important;font-size:15px!important;padding:0 10px!important;color-scheme:dark;box-sizing:border-box;flex:0 0 auto}
.ck-screen .ck-tools .ck-date{width:152px!important;max-width:152px!important}
.ck-screen .ck-tools .ck-sel{width:126px!important;max-width:126px!important}
.ck-screen .ck-tools .ck-search{width:212px!important;max-width:212px!important}
.ck-screen .ck-btn-day{white-space:nowrap;padding:0 14px;flex:0 0 auto}
.ck-strip{display:flex;align-items:center;gap:16px;flex-wrap:wrap;background:#131f33;border:1px solid #22334d;border-radius:12px;padding:10px 14px}
.ck-stat{min-width:92px}
.ck-stat-v{font-size:26px;font-weight:700;line-height:1.1;font-variant-numeric:tabular-nums}
.ck-stat-l{font-size:12px;color:#93a6c4}
.ck-stat-s{font-size:11.5px;color:#7f92b1}
.ck-stat.is-warn .ck-stat-v{color:#fbbf24}
.ck-tabs{margin-left:auto;display:flex;gap:6px;flex-wrap:wrap}
/* 大屏是站着/用手指点的，筛选标签与工具条按钮同高（40px），别做成 32px 的鼠标尺寸 */
.ck-tab{height:40px;padding:0 14px;border-radius:999px;border:1px solid #2a3a55;background:#16233a;color:#a9bcd9;font-size:14px;cursor:pointer}
.ck-tab.is-on{background:#274067;border-color:#3f6098;color:#fff}
.ck-clock{font-size:26px;font-weight:700;font-variant-numeric:tabular-nums;color:#cfe0ff;min-width:110px;text-align:right}
.ck-grid{flex:1;overflow:auto;display:grid;grid-template-columns:repeat(auto-fill,minmax(252px,1fr));gap:12px;align-content:start;padding-bottom:10px}
.ck-card{background:#182642;border:1px solid #27395a;border-radius:14px;padding:12px 14px;display:flex;flex-direction:column;gap:8px}
.ck-card.is-open{border-color:#f59e0b}
/* 已离校不再只是灰掉：青绿底和"在店"的琥珀形成鲜明对比，一眼分清谁走了谁没走 */
.ck-card.is-closed{border-color:#14b8a6;background:#122b2e;opacity:1}
.ck-card.is-closed .ck-avatar{background:#115e59;color:#ccfbf1}
.ck-card.is-closed .ck-t{color:#5eead4}
/* 未过关就签退的：玫红描边 + 徽标，在一堆青绿里直接跳出来 */
.ck-card.is-closed.is-nopass{border-color:#fb7185;background:#2d1622}
.ck-card.is-closed.is-nopass .ck-avatar{background:#9f1239;color:#ffe4e6}
.ck-card.is-closed.is-nopass .ck-t{color:#fda4af}
.ck-nopass{font-size:12.5px;color:#fda4af;background:rgba(251,113,133,.14);border-radius:8px;padding:4px 8px}
.ck-card-head{display:flex;align-items:center;gap:10px}
.ck-avatar{width:44px;height:44px;border-radius:50%;background:#2a3d63;color:#dbe7ff;font-size:20px;font-weight:700;display:flex;align-items:center;justify-content:center;flex:none}
.ck-id{min-width:0;flex:1}
.ck-name-row{display:flex;align-items:center;gap:8px;min-width:0}
.ck-name-row .ck-name{min-width:0}
.ck-name{font-size:19px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ck-meta{font-size:12px;color:#93a6c4;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* 卡面状态与学员档案同一口径（Calc.calcStudentStatus），用一枚小标签直接亮出来 */
.ck-status{flex:none;font-size:11px;line-height:18px;padding:0 6px;border-radius:6px;white-space:nowrap;background:#223149;color:#a9bcd8;border:1px solid #33496b}
.ck-status.is-on{background:#163425;color:#86efac;border-color:#2f6b4a}
.ck-status.is-warn{background:#33280f;color:#fcd34d;border-color:#6b5423}
.ck-status.is-info{background:#1b2f4d;color:#93c5fd;border-color:#31527d}
.ck-status.is-off{background:#33202a;color:#fca5a5;border-color:#6b3545}
.ck-status.is-none{background:#242b38;color:#b6c2d6;border-color:#3a465c}
.ck-times{display:flex;flex-direction:column;gap:4px}
.ck-line{display:flex;align-items:baseline;gap:8px}
.ck-k{font-size:12px;color:#93a6c4;min-width:28px}
.ck-t{font-size:17px;font-variant-numeric:tabular-nums}
.ck-t.is-open{color:#fbbf24}
.ck-dur{margin-left:auto;font-size:12px;color:#8fa3c2}
.ck-flag{font-size:12.5px;color:#fca5a5;background:rgba(248,113,113,.12);border-radius:8px;padding:4px 8px}
.ck-screen .ck-btn-in{width:100%;height:52px;font-size:19px;font-weight:700;background:#2563eb;border-color:#2563eb;color:#fff}
.ck-screen .ck-btn-out{width:100%;height:52px;font-size:19px;font-weight:700;background:#f97316;border-color:#f97316;color:#fff}
.ck-screen .ck-btn-in.is-again{background:#16233a;color:#dbe7ff;border-color:#2a3a55;font-size:15px;height:44px;font-weight:600}
/* 已标记不到店：签到按钮置灰不可点，等取消标记（老板 2026-10-20） */
.ck-screen .ck-btn-in.is-blocked{background:#2a3342;border-color:#3a4657;color:#98a6bb;font-size:14px;height:48px;font-weight:600;cursor:not-allowed}
/* 过关键（老板 2026-10-20 推翻重做）：一颗胶囊只放「勾 + 岗位名」——
   没过 = 暗底灰字「伴学师」，过了 = 绿底白字「✓ 伴学师」。
   状态只靠"那颗勾 + 有没有填实"表达，键上不写"已过关/未过关/时间"，组名「过关」在左边只写一次；
   谁点的、几点、为什么点不动都收进悬停提示。之前的空心圈 ○ 去掉。
   没有对应子权限的岗位照样看得懂状态，但键是禁用的，撤不掉同事刚点的过关。 */
.ck-pass{display:grid;grid-template-columns:1fr 1fr;align-items:center;gap:8px}
.ck-screen .ck-pass-btn{display:inline-flex;align-items:center;justify-content:center;gap:3px;min-width:0;height:38px;
  padding:0 9px;border-radius:999px;border:1.5px solid #2e4062;background:#111e33;color:#8ea4c4;
  font-size:13px;font-weight:700;line-height:1;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ck-screen .ck-pass-btn .ck-pass-tick{font-size:13.5px;font-weight:900}
.ck-screen .ck-pass-btn .ck-pass-tick:empty{display:none}
/* 过关时间贴在岗位名后面，字号小一档、颜色淡一档，不跟岗位名抢视线 */
.ck-screen .ck-pass-btn .ck-pass-at{font-size:11px;font-weight:600;opacity:.82;font-variant-numeric:tabular-nums}
.ck-screen .ck-pass-btn.is-mentor{border-color:#2f4a76}
.ck-screen .ck-pass-btn.is-manager{border-color:#41356a}
.ck-screen .ck-pass-btn.is-on{background:#17934d;border-color:#33d077;color:#fff;box-shadow:0 0 12px rgba(46,204,113,.22)}
.ck-screen .ck-pass-btn:hover{border-color:#6d8fc9;color:#d6e6ff}
.ck-screen .ck-pass-btn.is-on:hover{filter:brightness(1.07)}
.ck-screen .ck-pass-btn.is-locked,.ck-screen .ck-pass-btn:disabled{cursor:default;opacity:.94}
.ck-screen .ck-pass-btn.is-locked:hover{color:#8ea4c4;border-color:#2e4062}
.ck-screen .ck-pass-btn.is-locked.is-on:hover{color:#fff;border-color:#33d077;filter:none}
.ck-mini{display:flex;gap:4px;justify-content:center;flex-wrap:wrap}
/* 卡面上的次要动作也是手指点的：字保持小，但给足 34px 命中区，别做成 20px 的细链接 */
.ck-link{min-height:34px;padding:0 10px;border:1px solid transparent;border-radius:8px;background:none;color:#8fa3c2;font-size:13px;cursor:pointer;text-decoration:underline;text-underline-offset:2px}
.ck-link:hover{border-color:#2a3a55;background:#16233a}
.ck-link.is-flag{color:#fca5a5}
.ck-svc{font-size:12px;color:#8fa3c2;border-top:1px dashed #27395a;padding-top:6px;line-height:1.45}
.ck-empty{grid-column:1/-1;padding:42px;text-align:center;color:#8fa3c2;font-size:15px}
/* 大屏分块渲染的“继续加载”占位：滚动靠近时自动追加下一块（点击也可），避免千人名单一次铺满 DOM */
.ck-more{grid-column:1/-1;display:flex;align-items:center;justify-content:center;padding:14px;border:1px dashed #2a3a55;border-radius:12px;background:#131f33;color:#8fa3c2;font-size:13px;cursor:pointer}
.ck-more:hover{border-color:#3d5a86;color:#cfe0ff}
@media (max-width:1180px){
  .ck-tools{flex-wrap:wrap;justify-content:flex-end}
}
@media (max-width:760px){
  .ck-screen{padding:10px 12px}
  .ck-grid{grid-template-columns:repeat(auto-fill,minmax(168px,1fr))}
  .ck-search{width:150px}
  .ck-stat{min-width:76px}
  .ck-stat-v{font-size:21px}
  .ck-clock{font-size:20px;min-width:84px}
}
@media print{.ck-screen{display:none}}

.ck-filters{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr));gap:10px;flex:none}.ck-filters>label{display:flex;align-items:center;gap:8px;margin:0;min-width:0;color:#cbd5e1}.ck-filters select{flex:1;min-width:0;width:100%;height:38px;background:#16233a;color:#eaf0fb;border:1px solid #2a3a55;border-radius:8px;color-scheme:dark}.ck-grid{min-height:100px}.ck-head,.ck-tools{min-width:0}
@media(max-width:650px){.ck-screen{gap:8px}.ck-head{gap:6px}.ck-title .ck-sub{display:none}.ck-screen .ck-tools{display:flex;flex-wrap:wrap;margin:0;gap:6px}.ck-screen .ck-tools input,.ck-screen .ck-tools select{flex:1 1 100px!important;width:auto!important;max-width:100%!important;min-width:0}.ck-screen .ck-tools .ck-search{flex-basis:160px!important}.ck-filters{gap:6px}.ck-filters>label{display:grid;gap:3px;font-size:12px}.ck-filters select{height:44px;font-size:12px;padding:0 3px}.ck-strip{gap:6px}.ck-stat{padding:6px!important}.ck-stat-s{display:none}.ck-stat-v{font-size:20px!important}.ck-stat-l{font-size:11px!important}.ck-tabs{flex-basis:100%}.ck-grid{min-height:120px}}
/* 手机端大屏重排（2026-10-20 老板反馈顶部太占地）：顶部收成一行（日期+搜索+筛选+退出），筛选进抽屉，
   统计只留在店/今日到店/待处理，页签横排，列表吃满剩余高度；卡片单列、触控区加大 */
.ck-mfilter{display:none}
@media(max-width:650px){
  .ck-screen{padding:8px 10px;gap:8px;height:100dvh}
  .ck-head{flex-wrap:nowrap;gap:0}
  .ck-title{display:none}
  .ck-screen .ck-tools{width:100%;margin-left:0;flex-wrap:nowrap!important;gap:6px}
  .ck-screen .ck-tools .ck-btn-day{display:none}
  .ck-screen .ck-tools .ck-date{width:116px!important;max-width:116px!important;flex:0 0 116px!important;height:44px!important;padding:0 6px!important}
  .ck-screen .ck-tools .ck-search{flex:1 1 auto!important;width:auto!important;max-width:none!important;min-width:0!important;height:44px!important}
  .ck-mfilter{display:inline-flex!important;align-items:center;justify-content:center;flex:0 0 auto;height:44px!important;padding:0 10px!important;font-size:13px!important}
  .ck-screen .ck-tools .ck-btn-quit{height:44px;padding:0 10px;font-size:12.5px;flex:0 0 auto}
  .ck-filters{display:none!important}
  .ck-screen.mf-open .ck-filters{display:grid!important;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;padding:8px;background:#131f33;border:1px solid #22334d;border-radius:12px}
  .ck-screen .ck-filters select{height:42px;font-size:13.5px;width:100%}
  .ck-strip{gap:8px 12px;padding:8px 10px;flex-wrap:wrap;overflow:visible}
  .ck-stat{min-width:60px;padding:0!important}
  .ck-stat-v{font-size:20px!important}
  .ck-stat:nth-of-type(4),.ck-stat:nth-of-type(5){display:none}
  .ck-tabs{margin-left:0;flex:1 1 100%;gap:6px;flex-wrap:nowrap;justify-content:space-between}
  .ck-tab{height:40px;padding:0 8px;font-size:13px;flex:1 1 auto;min-width:0}
  .ck-clock{display:none}
  .ck-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:8px;padding-bottom:calc(10px + env(safe-area-inset-bottom))}
  .ck-card{padding:10px 12px;gap:6px}
  .ck-avatar{width:38px;height:38px;font-size:17px}
  .ck-name{font-size:17px}
  .ck-t{font-size:16px}
  .ck-screen .ck-btn-in,.ck-screen .ck-btn-out{height:48px;font-size:17px}
  .ck-screen .ck-pass-btn{height:36px;font-size:12px;padding:0 6px}
  .ck-svc{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .ck-mini .ck-link{min-height:36px}
  .ck-live-tools{margin-left:0;flex:1 1 100%;justify-content:flex-end;gap:6px}
  .ck-live{display:none}
  .ck-screen .ck-live-tools .ck-btn{height:36px;font-size:12px}
  .ck-screen .ck-mark{min-height:38px;font-size:13px}
}

.ck-card.is-absent{border-color:#eab308;background:#302b1c}.ck-absence{color:#fde68a;font-weight:600;margin-bottom:4px}
/* 「标记不到店」按老板截图放回卡片最下方：居中纯文字，琥珀色，无下划线/无边框 */
.ck-markrow{display:flex;justify-content:center}
.ck-screen .ck-mark{margin:0;min-height:38px;padding:0 14px;border:0;background:none;color:#fde68a!important;font-size:13px;font-weight:600;text-decoration:none}
.ck-screen .ck-mark:hover{color:#fde68a!important;background:none;text-decoration:none}
/* 刷新工具：和到店大屏的统计条一排，自动刷新状态用小绿点表达 */
.ck-live-tools{display:flex;align-items:center;gap:8px;margin-left:auto;flex:none}
.ck-live{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:#93a6c4;white-space:nowrap}
.ck-live i{width:7px;height:7px;border-radius:50%;background:#64748b}
.ck-live.is-on{color:#7fd8b7}
.ck-live.is-on i{background:#34d399;box-shadow:0 0 0 3px rgba(52,211,153,.15)}
.ck-screen .ck-live-tools .ck-btn{height:34px;padding:0 10px;font-size:12px}
.ck-screen .ck-live-tools .ck-btn.is-on{background:rgba(37,99,235,.35);border-color:#3b82f6;color:#dbeafe}

.checkin-open .modal-backdrop{z-index:10020}

.stu-picker-head{display:flex;gap:6px;min-width:0}.stu-picker-head>input{flex:1;min-width:0}.stu-picker-toggle{flex:0 0 36px;padding:0;min-height:36px}.stu-picker-filters{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;padding:6px}.stu-picker-filters select{min-width:0;width:100%;font-size:13px;height:36px;min-height:36px;line-height:1.4;padding:0 8px;box-sizing:border-box}.stu-search>.redemption-search-results{max-height:340px;overflow:auto;padding:4px;border:1px solid var(--border);border-radius:8px;background:var(--surface,#fff)}@media(max-width:650px){.stu-picker-toggle,.stu-picker-filters select{min-height:44px}.stu-search{max-width:100%}}

.stu-picker-grid [data-group]{grid-template-columns:repeat(auto-fill,minmax(170px,1fr))}.stu-picker-grid [data-group]>.form-hint{grid-column:1 / -1}

.stu-search .redemption-student>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.stu-search .redemption-student>strong{flex:0 0 auto;white-space:nowrap;font-size:12px}.stu-search .stu-picked>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

.stu-picker-head{align-items:center}@media(max-width:650px){.stu-search button[data-sid]{min-height:44px}}

/* Selection and sort controls retain native table-cell sizing. */
.table-header-label{display:inline-flex;align-items:center;gap:6px;vertical-align:middle;white-space:nowrap;line-height:1.4}
.table-header-label>div{display:inline-flex;align-items:center}
.table-header-label>.row-select{flex:0 0 15px;margin:0 2px 0 0}
.selection-cell-inner{display:inline-flex;align-items:flex-start;gap:8px;line-height:1.5;vertical-align:middle;white-space:nowrap}
.selection-cell-label{display:block;min-width:0;line-height:1.5}
.selection-cell-inner>.row-select{flex:0 0 15px;width:15px;height:15px;margin:calc((1.5em - 15px)/2) 0 0}
.modal.modal-form{width:min(860px,calc(100vw - 48px))}
.employee-name-cell{display:inline-flex;align-items:flex-start;gap:10px;white-space:nowrap;line-height:1.5}
.employee-name-cell>input{flex:0 0 16px;width:16px;height:16px;margin:calc((1.5em - 16px)/2) 0 0}

/* Shared student picker: integrated input + chevron, compact candidate cards. */
.stu-search{max-width:100%;align-content:start}
.search-bar>.stu-search,.filter-bar>.stu-search{flex:0 1 260px}
.form-row>.stu-search,.form-row>div>.stu-search{width:100%!important}
.stu-picker-head{display:flex;align-items:center;gap:8px}
.stu-picker-input-wrap{position:relative;display:flex;flex:1;min-width:0}
.stu-picker-input-wrap>input{height:36px;min-height:36px;padding-right:38px!important;border-radius:8px;box-sizing:border-box}
.stu-picker-input-wrap>.stu-picker-toggle{position:absolute;right:1px;top:1px;bottom:1px;display:grid;place-items:center;width:34px;min-height:0!important;height:auto;padding:0!important;border:0!important;border-radius:0 7px 7px 0;background:transparent!important;color:var(--text-muted);box-shadow:none}
.stu-picker-toggle svg{display:block;transition:transform .15s ease}
.stu-picker-toggle[aria-expanded=true] svg{transform:rotate(180deg)}
.stu-search>.redemption-search-results{background:#fff;border:1px solid var(--border);box-shadow:0 4px 14px #0f172a0a;padding:8px;max-height:360px;gap:8px}
/* 空的面板/空容器不占位：学员选择器收起后若残留一个空框，会变成一大块空白（老板 2026-10-22 截图） */
.stu-search>.redemption-search-results:empty{display:none!important;border:0;padding:0;box-shadow:none}
.form-grid>div:empty{display:none!important}
.form-grid>div:not(.form-row):not(:has(*)){display:none!important}
.stu-search [data-group]{display:grid;grid-template-columns:repeat(auto-fill,minmax(118px,1fr))!important;gap:7px!important}
.stu-search [data-group]>.form-hint{grid-column:1/-1;padding:3px 2px!important;color:var(--text-muted);font-size:11px}
.stu-search .redemption-student{display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:3px;min-height:64px;padding:9px 10px;border-radius:8px;min-width:0;overflow:hidden;transition:background .15s,border-color .15s}
.stu-search .redemption-student:hover{border-color:#b8b4ff;background:#f8f7ff}
.stu-search .student-option-name{font-size:13px;font-weight:600;color:var(--text)}
.stu-search .student-option-meta,.stu-search .student-option-contact{font-size:11px;font-weight:400;color:var(--text-muted);width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.stu-picker-filters{padding:0!important;gap:6px}

/* 与同一控件里的输入框、展开按钮（36px）齐平。这条原来把上面那条 36px 又压回 30px，
   老板 2026-10-18 说还是有点窄、和其它地方不协调 —— 就是这条后写的规则赢了。 */
.stu-picker-filters select{height:36px;min-height:36px;font-size:13px}
.stu-search .stu-picked{margin:0;min-height:26px;padding:3px 8px;font-size:12px;border-radius:6px}
@media(max-width:650px){.stu-picker-input-wrap>input{height:44px;min-height:44px}.stu-picker-input-wrap>.stu-picker-toggle{width:40px}.stu-search [data-group]{grid-template-columns:repeat(auto-fill,minmax(125px,1fr))!important}.stu-picker-filters select{min-height:36px}}

/* 列表首格（勾选框）上下居中：老板 2026-10-18 两次点到——学员档案以及所有带勾选列的列表，
   复选框都偏上/偏下。首格与格内内容统一按中线对齐，去掉原来那个把框往下推的 margin 计算。 */
.data-table th.sel-cell,.data-table td.sel-cell{vertical-align:middle}   /* 只管上下居中；左右位置保持原样（老板 2026-10-18 纠正） */
.data-table td.sel-cell>.row-select{display:inline-block;vertical-align:middle}
.data-table .selection-cell-inner{display:flex;align-items:center;justify-content:center;gap:6px;min-height:100%}
.data-table .selection-cell-inner>.row-select{margin:0}
.data-table th.sel-cell .row-select{vertical-align:middle}

/* ===== 复选框一列整齐（老板 2026-10-18：要的是上下居中，左右位置本来就对，别动） =====
   表头与每一行的勾框都按各自格子的垂直中线对齐，横向偏移统一，纵向看是一条直线。 */
.data-table th.sel-cell,.data-table td.sel-cell{vertical-align:middle}
.data-table th.sel-cell>.row-select,.data-table td.sel-cell>.row-select{
  display:inline-block;vertical-align:middle;margin:0 8px 0 0}
.data-table .selection-cell-inner{display:inline-flex;align-items:center;gap:8px;vertical-align:middle}
.data-table .selection-cell-inner>.row-select{flex:0 0 15px;margin:0}
.data-table td.sel-cell>div,.data-table td.sel-cell>span{vertical-align:middle}

/* ===== 权限页·记录范围（可多选）：行间距压到与右侧内容一致 ===== */
.perm-scope{display:flex;align-items:center;gap:8px;margin:0;line-height:1.25}
.perm-scope>span{font-size:12px;line-height:1.4;padding:0}
.permission-ranges{row-gap:4px}
.permission-ranges>label{gap:6px;line-height:1.4}
.perm-chips{gap:5px}
.perm-chip{padding:2px 8px;line-height:1.2}
.permission-setting{padding:7px 0}
.permission-setting>b{padding-top:6px;line-height:1.35}

/* 更新日志面板（顶栏「🆕 更新日志」）：一条版本/通知一块，标题行带日期与类型标签 */
.rn-wrap{max-height:62vh;overflow:auto;padding-right:4px}
.rn-item{border:1px solid var(--border);border-radius:10px;padding:12px 14px;margin-bottom:10px;background:var(--surface,#fff)}
.rn-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:6px}
.rn-head b{font-size:14px}
.rn-date{font-size:12px;color:var(--text-muted,#64748b)}
.rn-head .btn-sm{margin-left:auto}
.rn-list{margin:0;padding-left:18px}
.rn-list li{font-size:13px;line-height:1.75;color:var(--text-secondary,#475569)}

/* =====================================================================
   成绩分析工作台 v4（2026-10-20 推翻重做）
   深色驾驶舱质感，但栅格重做：所有卡片走 auto-fit 网格，不再有 8 列定宽把日期框挤歪；
   日期控件用 color-scheme:dark 跟随深色（上一版是白底日期框落在深色面板上）。
   ★ 作用域纪律：页面内的深色样式一律挂在 .sa-page 下；弹窗挂在 document.body 上、
     不在 .sa-page 里，所以弹窗内用到的 .sa-f / .sa-check / .sa-textarea 等都另给一份
     浅色默认值 —— 上一版就是漏了这条，「恢复默认 / 保存布局」变成深灰字压浅底，几乎看不见。
   ===================================================================== */
:root{
  --sa-bg:#0f1a2e; --sa-bg2:#131f35; --sa-line:rgba(148,163,184,.18);
  --sa-ink:#e2e8f0; --sa-mut:#94a3b8; --sa-dim:#7f93b4;
  --sa-cy:#22d3ee; --sa-vi:#a78bfa; --sa-ok:#34d399; --sa-warn:#fbbf24; --sa-bad:#fb7185;
}
/* ---------- 页面骨架 ---------- */
.sa-page{color-scheme:dark;background:#0b1220;border-radius:16px;padding:16px 18px 18px;
  display:flex;flex-direction:column;gap:12px;color:var(--sa-ink);font-variant-numeric:tabular-nums}
.sa-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;flex-wrap:wrap}
.sa-title h2{margin:0;font-size:21px;letter-spacing:.01em}
.sa-title p{margin:5px 0 0;font-size:12.5px;color:var(--sa-mut)}
.sa-actions{display:flex;gap:8px;flex-wrap:wrap}
.sa-page .btn-ghost{height:36px;background:var(--sa-bg2);border:1px solid var(--sa-line);color:#cfe0f5}
.sa-page .btn-ghost:hover{background:#1a2942;border-color:#3d5578;color:#fff}
.sa-page .btn-primary{height:36px;background:linear-gradient(120deg,#0ea5e9,#6366f1);border:1px solid #38bdf8;color:#fff;font-weight:600;
  box-shadow:0 0 16px rgba(34,211,238,.22)}
/* ---------- 筛选区：一行快捷时间 + 自适应网格，窄屏自动折行，不再定宽挤歪 ---------- */
.sa-filters{background:var(--sa-bg);border:1px solid var(--sa-line);border-radius:14px;padding:12px 14px;display:flex;flex-direction:column;gap:10px}
.sa-frow{display:flex;gap:8px;align-items:flex-end;flex-wrap:wrap}
.sa-fgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(158px,1fr));gap:9px 10px}
.sa-page .sa-f{display:flex;flex-direction:column;gap:5px;min-width:0;margin:0}
.sa-page .sa-f>span{font-size:11.5px;color:var(--sa-dim);line-height:1}
/* 选择器要压过全局那条 input:not([type=checkbox])…:not([type=file])（它的优先级是 0,3,1），
   所以这里多带一层 .sa-filters 类，否则日期框又是白底落在深色面板上 */
.sa-page .sa-filters .sa-f>select,.sa-page .sa-filters .sa-f>input,
.sa-page .sa-pivot-bar .sa-f>select,.sa-page .sa-pivot-bar .sa-f>input{height:34px;min-width:0;width:100%;box-sizing:border-box;padding:0 8px;font-size:13px;
  background:var(--sa-bg2);color:var(--sa-ink);border:1px solid var(--sa-line);border-radius:8px}
.sa-page .sa-filters .sa-f>select:hover,.sa-page .sa-filters .sa-f>input:hover,
.sa-page .sa-pivot-bar .sa-f>select:hover{border-color:#3d5578}
.sa-page .sa-filters .sa-f>input[type=date]{max-width:160px}
.sa-page .sa-filters .sa-f>select:focus-visible,.sa-page .sa-filters .sa-f>input:focus-visible,
.sa-page .sa-pivot-bar .sa-f>select:focus-visible{outline:2px solid var(--sa-cy);outline-offset:1px}
.sa-chip{height:30px;padding:0 12px;border-radius:999px;border:1px solid var(--sa-line);background:var(--sa-bg2);
  color:#b9c7dd;font-size:12.5px;cursor:pointer;white-space:nowrap}
.sa-chip:hover{border-color:#3d5578;color:#e6eefb}
.sa-chip.is-on{background:rgba(34,211,238,.16);border-color:var(--sa-cy);color:#a5f3fc;font-weight:700}
/* ---------- 页签与方案切换 ---------- */
.sa-tabs{display:flex;gap:6px;align-items:center;flex-wrap:wrap}
.sa-tab{height:34px;padding:0 15px;border-radius:999px;border:1px solid var(--sa-line);background:transparent;color:#b9c7dd;font-size:13px;cursor:pointer}
.sa-tab.is-on{background:rgba(167,139,250,.18);border-color:var(--sa-vi);color:#e9d5ff;font-weight:700}
.sa-schemes{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-left:10px;padding-left:10px;border-left:1px solid var(--sa-line)}
.sa-hint{margin-left:auto;font-size:11.5px;color:var(--sa-dim)}
/* ---------- 看板网格与卡片 ---------- */
.sa-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(330px,1fr));gap:12px;align-items:start}
.sa-w-heat,.sa-w-table,.sa-w-alerts{grid-column:1/-1}
.sa-card{background:var(--sa-bg);border:1px solid var(--sa-line);border-radius:14px;padding:12px 14px;
  display:flex;flex-direction:column;gap:10px;min-width:0}
.sa-card-t{display:flex;align-items:center;gap:8px;font-size:13px;color:#cddcf2}
.sa-card-t b{font-weight:700}
.sa-drag{cursor:grab;color:#5f7091;font-size:15px;letter-spacing:-2px}
.sa-card-act{margin-left:auto;display:flex;gap:4px}
.sa-ico{width:26px;height:26px;line-height:1;border-radius:7px;border:1px solid var(--sa-line);background:var(--sa-bg2);color:#b9c7dd;cursor:pointer;font-size:13px}
.sa-ico:hover{border-color:#3d5578;color:#fff}
.sa-card.is-drag{opacity:.45}
.sa-card.is-over{outline:2px dashed var(--sa-cy);outline-offset:2px}
.sa-addbar{display:flex;gap:6px;align-items:center;flex-wrap:wrap;padding-top:2px}
/* ---------- KPI ---------- */
.sa-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(118px,1fr));gap:10px}
.sa-kpi{background:var(--sa-bg2);border:1px solid var(--sa-line);border-radius:12px;padding:10px 12px;display:flex;flex-direction:column;gap:2px;min-width:0}
.sa-kpi>span{font-size:11.5px;color:var(--sa-dim)}
.sa-kpi>b{font-size:23px;line-height:1.18;color:var(--sa-ink)}
.sa-kpi>i{font-style:normal;font-size:11px;color:#6f83a3;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sa-kpi.is-up>b{color:var(--sa-ok)}
.sa-kpi.is-down>b{color:var(--sa-bad)}
.sa-kpi.is-dim{opacity:.5}
/* ---------- 图表 ---------- */
.sa-chart svg{width:100%;height:auto;display:block;max-height:250px}
.sa-chart.sa-radar svg{max-height:280px}
.sa-lgrow{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:4px}
.sa-lg{display:inline-flex;align-items:center;gap:5px;font-size:11.5px;color:var(--sa-mut)}
.sa-lg i{width:9px;height:9px;border-radius:3px;display:inline-block}
.sa-bars{display:flex;flex-direction:column;gap:7px}
.sa-bar-row{display:grid;grid-template-columns:minmax(56px,26%) 1fr auto auto;align-items:center;gap:8px;min-width:0}
.sa-bar-row.is-click{cursor:pointer}
.sa-bar-row.is-click:hover .sa-bar-name{color:#fff}
.sa-bar-name{font-size:12.5px;color:#c3d2e8;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sa-bar-track{height:9px;border-radius:6px;background:rgba(148,163,184,.14);overflow:hidden;min-width:40px}
.sa-bar-fill{display:block;height:100%;border-radius:6px;transition:width .35s ease}
.sa-bar-val{font-size:12.5px;color:var(--sa-ink);min-width:44px;text-align:right}
.sa-bar-sub{font-size:11px;color:var(--sa-dim);min-width:52px}
.sa-empty{padding:26px 12px;text-align:center;color:var(--sa-dim);font-size:13px;border:1px dashed var(--sa-line);border-radius:12px}
.sa-empty.is-ok{color:var(--sa-ok);border-color:rgba(52,211,153,.4)}
.sa-mut{font-size:11.5px;color:var(--sa-dim);line-height:1.7}
/* ---------- 表格与热力 ---------- */
.sa-scroll{overflow:auto;max-height:420px;border-radius:10px}
.sa-tbl{border-collapse:collapse;width:100%;font-size:12.5px}
.sa-tbl th,.sa-tbl td{padding:7px 9px;text-align:right;white-space:nowrap;border-bottom:1px solid var(--sa-line)}
.sa-tbl th:first-child,.sa-tbl td:first-child{text-align:left;position:sticky;left:0;background:var(--sa-bg)}
.sa-tbl thead th,.sa-tbl tr:first-child th{color:var(--sa-dim);font-weight:600;background:var(--sa-bg2)}
.sa-tbl .sa-rowh{cursor:pointer;color:#bfdbfe}
.sa-tbl .sa-rowh:hover{color:#fff;text-decoration:underline}
.sa-tbl td.is-up{color:var(--sa-ok)}
.sa-tbl td.is-down{color:var(--sa-bad)}
.sa-tbl td i{font-style:normal;font-size:10.5px;margin-left:5px;opacity:.85}
.sa-tbl .sa-sub{color:var(--sa-mut);background:rgba(148,163,184,.06)}
.sa-heat{border-collapse:separate;border-spacing:4px;font-size:12px}
.sa-heat th{color:var(--sa-dim);font-weight:600;padding:2px 6px;text-align:center}
.sa-heat .sa-heat-rh{text-align:right;color:#c3d2e8;max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sa-heat-cell{display:block;min-width:44px;padding:6px 4px;border-radius:7px;text-align:center;color:#0b1220;font-weight:700}
/* ---------- 预警清单 ---------- */
.sa-alerts{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:10px}
.sa-agroup{border:1px solid var(--sa-line);border-left-width:3px;border-radius:10px;padding:8px 10px;display:flex;flex-direction:column;gap:5px;background:var(--sa-bg2)}
.sa-agroup.tone-bad{border-left-color:var(--sa-bad)}
.sa-agroup.tone-warn{border-left-color:var(--sa-warn)}
.sa-agroup.tone-info{border-left-color:var(--sa-cy)}
.sa-ah{font-size:12px;font-weight:700;color:#dbe7f7}
.sa-arow{display:grid;grid-template-columns:auto 1fr;gap:2px 8px;text-align:left;background:none;border:0;padding:3px 0;cursor:pointer;color:var(--sa-mut);font-size:11.5px}
.sa-arow b{color:#eaf2ff;font-size:12.5px}
.sa-arow i{font-style:normal;grid-column:1/-1;color:var(--sa-dim)}
.sa-arow:hover b{color:var(--sa-cy)}
/* ---------- 组合区 / 画像区 ---------- */
.sa-pivot-bar{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap;background:var(--sa-bg);border:1px solid var(--sa-line);border-radius:14px;padding:12px 14px}
.sa-pivot-bar .sa-f{min-width:150px;flex:0 1 auto}
.sa-grow{flex:1 1 auto;min-width:120px;font-size:12px;color:var(--sa-dim)}
.sa-two{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:12px}
.sa-tag{display:inline-block;font-size:11.5px;padding:3px 9px;border-radius:999px;border:1px solid var(--sa-line);background:var(--sa-bg2);color:#cbd5e1}
.sa-tag.tone-bad{border-color:rgba(251,113,133,.5);color:#fecdd3}
.sa-tag.tone-warn{border-color:rgba(251,191,36,.5);color:#fde68a}
.sa-tag.tone-info{border-color:rgba(34,211,238,.45);color:#a5f3fc}
.sa-chips{display:flex;gap:8px;flex-wrap:wrap}
/* ---------- 弹窗内（浅色主题，必须与 .sa-page 分开写） ---------- */
.sa-textarea{width:100%;min-height:150px;box-sizing:border-box;padding:9px 10px;font-size:12.5px;font-family:ui-monospace,Consolas,monospace;
  border:1px solid var(--border,#dbe2ec);border-radius:10px;background:#fff;color:#1e293b;resize:vertical}
.sa-errs{margin-top:8px;max-height:150px;overflow:auto;font-size:12px;color:#b91c1c;background:#fef2f2;border:1px solid #fecaca;border-radius:8px;padding:8px 10px}
.sa-import-bar{display:flex;gap:8px;align-items:center;margin:8px 0}
.sa-form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:10px}
.sa-form-grid .sa-f.is-wide{grid-column:1/-1}
/* ---------- 响应式 ---------- */
@media(max-width:1100px){
  .sa-grid{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
  .sa-w-heat,.sa-w-table,.sa-w-alerts{grid-column:1/-1}
}
@media(max-width:760px){
  .sa-page{padding:12px;border-radius:12px}
  .sa-head{align-items:stretch}
  .sa-actions{width:100%}
  .sa-actions .btn-ghost,.sa-actions .btn-primary{flex:1 1 auto;justify-content:center}
  .sa-schemes{margin-left:0;padding-left:0;border-left:0;width:100%}
  .sa-hint{display:none}
  .sa-grid{grid-template-columns:1fr}
  .sa-bar-row{grid-template-columns:minmax(48px,30%) 1fr auto}
  .sa-bar-sub{display:none}
}

/* ===== 成绩挂墙大屏：大字号、远距离可读、自动刷新开关（2026-10-20 重做） ===== */
.sb-screen{position:fixed;inset:0;z-index:9990;background:#0b1220;color:#e6edf7;display:flex;flex-direction:column;gap:12px;
  padding:16px 20px;overflow:auto;font-variant-numeric:tabular-nums}
.sb-head{display:flex;align-items:flex-end;gap:14px;flex-wrap:wrap}
.sb-head h1{margin:0;font-size:clamp(22px,2.4vw,34px);letter-spacing:.04em}
.sb-head p{margin:4px 0 0;font-size:clamp(12px,1.1vw,15px);color:#8ea3c0}
.sb-tools{margin-left:auto;display:flex;align-items:center;gap:8px}
.sb-clock{font-size:clamp(18px,1.8vw,26px);font-weight:700;color:var(--sa-cy);min-width:96px;text-align:right}
.sb-btn{height:34px;padding:0 12px;border-radius:9px;border:1px solid var(--sa-line);background:var(--sa-bg2);color:#cfe0f5;font-size:13px;cursor:pointer}
.sb-btn:hover{border-color:#3d5578;color:#fff}
.sb-btn.is-x{border-color:rgba(251,113,133,.45);color:#fecdd3}
.sb-kpi{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px}
.sb-k{background:var(--sa-bg);border:1px solid var(--sa-line);border-radius:14px;padding:14px 16px;display:flex;flex-direction:column;gap:4px}
.sb-k>span{font-size:clamp(12px,1vw,15px);color:#8ea3c0}
.sb-k>b{font-size:clamp(28px,3.4vw,50px);line-height:1.08;color:#f1f5f9}
.sb-main{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:12px;flex:1 1 auto;min-height:0}
.sb-panel{background:var(--sa-bg);border:1px solid var(--sa-line);border-radius:14px;padding:14px 16px;min-width:0;display:flex;flex-direction:column;gap:8px}
.sb-panel h2{margin:0 0 4px;font-size:clamp(13px,1.2vw,17px);color:#c7d6ea;font-weight:600}
.sb-bars{display:flex;flex-direction:column;gap:10px}
.sb-row{display:grid;grid-template-columns:minmax(60px,22%) 1fr auto auto;gap:10px;align-items:center;font-size:clamp(13px,1.1vw,16px)}
.sb-nm{color:#cfe0f5;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sb-tr{height:12px;border-radius:7px;background:rgba(148,163,184,.16);overflow:hidden;min-width:40px}
.sb-tr>span{display:block;height:100%;border-radius:7px;background:linear-gradient(90deg,var(--sa-cy),var(--sa-vi))}
.sb-row b{color:#f8fafc;min-width:52px;text-align:right}
.sb-row i{font-style:normal;color:#8ea3c0;font-size:.85em;min-width:64px}
.sb-line{flex:1 1 auto;min-height:0;display:flex}
/* 折线要跟着面板长高：以前写死 max-height:230px，挂墙时下面空一大块，像没加载完 */
.sb-line svg{width:100%;height:100%;min-height:180px}
.sb-focus-panel{display:flex;flex-direction:column;gap:10px}
.sb-focus{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:12px;border:1px solid var(--sa-line);
  border-left:4px solid var(--sa-cy);background:var(--sa-bg2);animation:sbFade .45s ease}
.sb-focus.tone-bad{border-left-color:var(--sa-bad)}
.sb-focus.tone-warn{border-left-color:var(--sa-warn)}
.sb-focus.tone-info{border-left-color:var(--sa-cy)}
.sb-focus b{font-size:clamp(18px,1.8vw,26px)}
.sb-focus span{font-size:13px;color:#a9bcd8;border:1px solid var(--sa-line);border-radius:999px;padding:2px 9px}
.sb-focus i{font-style:normal;margin-left:auto;font-size:clamp(13px,1.2vw,17px);color:#e2e8f0}
.sb-list{display:flex;gap:8px;flex-wrap:wrap}
.sb-list span{font-size:12px;color:#a9bcd8;background:var(--sa-bg2);border:1px solid var(--sa-line);border-radius:999px;padding:3px 10px}
.sb-empty{padding:22px;text-align:center;color:#7f93b4;font-size:14px}
@keyframes sbFade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
@media(max-width:980px){
  .sb-screen{padding:10px 12px}
  .sb-tools{width:100%;margin-left:0}
  .sb-main{grid-template-columns:1fr}
  .sb-focus i{margin-left:0;width:100%}
}


/* 变更差异：原信息红色、申请信息绿色（老板 2026-10-20；审批详情与操作记录共用） */
.diff-legend{display:flex;align-items:center;gap:4px;flex-wrap:wrap;margin:0 0 10px;font-size:12px;color:#64748B}
.diff-old,.diff-new{display:inline-block;padding:1px 7px;border-radius:6px;font-weight:600;line-height:1.6;overflow-wrap:anywhere}
.diff-old{background:#fef2f2;color:#b91c1c;border:1px solid #fecaca}
.diff-new{background:#ecfdf5;color:#047857;border:1px solid #a7f3d0}
.diff-arrow{color:#94a3b8;margin:0 4px}
.approval-changes .diff-old,.approval-changes .diff-new{max-width:100%}
/* =====================================================================
   成绩分析驾驶舱 v3（2026-10-20）：深色科技风，自由组合 + 可拖拽布局
   作用域全部限定在 .sx-page 内，不影响其它页面浅色主题
   ===================================================================== */
.sx-page{
  --sx-line:rgba(148,163,184,.16);
  --sx-ink:#e2e8f0;
  --sx-muted:#94a3b8;
  --sx-cyan:#22d3ee;
  --sx-violet:#a78bfa;
  color-scheme:dark;
  position:relative;overflow:hidden;
  padding:18px;border-radius:18px;
  color:var(--sx-ink);
  background:
    radial-gradient(1100px 380px at 8% -12%,rgba(34,211,238,.16),transparent 60%),
    radial-gradient(900px 340px at 92% -4%,rgba(167,139,250,.15),transparent 55%),
    radial-gradient(700px 420px at 50% 115%,rgba(16,185,129,.08),transparent 60%),
    linear-gradient(158deg,#0b1220 0%,#0d1628 52%,#0a1120 100%);
  border:1px solid rgba(148,163,184,.18);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.04),0 18px 50px rgba(2,6,23,.18);
}
.sx-page::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background-image:linear-gradient(rgba(148,163,184,.05) 1px,transparent 1px),linear-gradient(90deg,rgba(148,163,184,.05) 1px,transparent 1px);
  background-size:44px 44px;
  mask-image:radial-gradient(720px 420px at 30% 0%,#000 0%,transparent 78%);
  -webkit-mask-image:radial-gradient(720px 420px at 30% 0%,#000 0%,transparent 78%);
}
.sx-page>*{position:relative;z-index:1}

/* 头部 */
.sx-head{display:flex;justify-content:space-between;align-items:flex-end;gap:14px;flex-wrap:wrap;margin-bottom:14px}
.sx-eyebrow{font-size:10px;font-weight:700;letter-spacing:.3em;color:var(--sx-cyan);text-shadow:0 0 14px rgba(34,211,238,.45)}
.sx-title{margin:5px 0 4px;font-size:26px;line-height:1.15;font-weight:750;letter-spacing:.02em;
  background:linear-gradient(92deg,#f8fafc 0%,#a5f3fc 52%,#c4b5fd 100%);
  -webkit-background-clip:text;background-clip:text;color:transparent;filter:drop-shadow(0 0 18px rgba(34,211,238,.18))}
.sx-sub{font-size:12px;color:var(--sx-muted)}
.sx-actions{display:flex;gap:8px;flex-wrap:wrap}
.sx-btn{display:inline-flex;align-items:center;gap:6px;padding:8px 13px;border-radius:10px;font-size:12px;cursor:pointer;
  color:#cbd5e1;background:rgba(30,41,59,.66);border:1px solid rgba(148,163,184,.28);transition:all .18s ease}
.sx-btn:hover{border-color:rgba(34,211,238,.5);color:#e0f2fe;background:rgba(30,41,59,.9)}
.sx-btn.is-primary{color:#fff;border-color:transparent;background:linear-gradient(135deg,#0891b2 0%,#6d28d9 100%);box-shadow:0 8px 22px rgba(34,211,238,.22)}
.sx-btn.is-primary:hover{filter:brightness(1.1);box-shadow:0 10px 28px rgba(124,58,237,.35)}
.sx-btn:disabled{opacity:.4;cursor:not-allowed}
.sx-btn-mini{padding:2px 8px;font-size:11px;border-radius:6px}

/* 筛选区 */
.sx-filters{background:rgba(15,23,42,.55);border:1px solid var(--sx-line);border-radius:14px;padding:10px 12px;display:flex;flex-direction:column;gap:9px;backdrop-filter:blur(8px)}
.sx-quick{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.sx-chip-btn{border:1px solid rgba(148,163,184,.28);background:rgba(2,6,23,.4);color:#94a3b8;border-radius:99px;padding:5px 12px;font-size:11px;cursor:pointer;transition:all .16s ease}
.sx-chip-btn:hover{color:#e2e8f0;border-color:rgba(34,211,238,.45)}
.sx-chip-btn.is-on{color:#67e8f9;border-color:rgba(34,211,238,.7);background:rgba(34,211,238,.14);box-shadow:0 0 14px rgba(34,211,238,.18)}
.sx-filter-grid{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:8px}
.sx-f{display:flex;flex-direction:column;gap:3px;font-size:10px;color:#94a3b8;min-width:0}
.sx-f select,.sx-f input[type=date]{width:100%;min-width:0;padding:6px 8px;border-radius:8px;font-size:12px;color:var(--sx-ink);
  background:rgba(2,6,23,.62);border:1px solid rgba(148,163,184,.22);outline:none;transition:border-color .16s ease}
.sx-f select:focus,.sx-f input[type=date]:focus{border-color:rgba(34,211,238,.6);box-shadow:0 0 0 3px rgba(34,211,238,.10)}

/* 标签页 */
.sx-tabs{display:flex;align-items:center;gap:5px;margin:12px 0;padding:4px;border-radius:12px;
  background:rgba(15,23,42,.55);border:1px solid var(--sx-line);overflow-x:auto}
.sx-tab{padding:7px 16px;border-radius:9px;border:1px solid transparent;background:transparent;color:#94a3b8;font-size:13px;cursor:pointer;white-space:nowrap;transition:all .16s ease}
.sx-tab:hover{color:#e2e8f0}
.sx-tab.is-on{color:#e0f2fe;border-color:rgba(34,211,238,.4);
  background:linear-gradient(135deg,rgba(34,211,238,.16),rgba(167,139,250,.16));box-shadow:inset 0 0 18px rgba(34,211,238,.08)}
.sx-tab-action{margin-left:auto;padding:6px 12px;border-radius:8px;border:1px solid rgba(148,163,184,.22);background:rgba(2,6,23,.35);color:#94a3b8;font-size:11px;cursor:pointer;white-space:nowrap}
.sx-tab-action:hover{color:#e2e8f0;border-color:rgba(34,211,238,.4)}
.sx-hint{font-size:10px;color:#64748b;margin-left:auto;padding-right:4px;white-space:nowrap}
.sx-tabs .sx-hint{margin-left:10px}

/* 驾驶舱网格 */
.sx-dash{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
.sx-card{position:relative;min-width:0;padding:12px;border-radius:14px;border:1px solid var(--sx-line);
  background:linear-gradient(180deg,rgba(15,23,42,.84),rgba(15,23,42,.6));backdrop-filter:blur(8px);transition:border-color .18s ease,box-shadow .18s ease}
.sx-card::before{content:"";position:absolute;left:12px;right:12px;top:0;height:1px;
  background:linear-gradient(90deg,transparent,rgba(34,211,238,.5),transparent);opacity:.55;pointer-events:none}
.sx-card:hover{border-color:rgba(34,211,238,.32);box-shadow:0 12px 30px rgba(2,6,23,.35)}
.sx-card[draggable="true"]{cursor:grab}
.sx-card[draggable="true"]:active{cursor:grabbing}
.sx-card.is-dragging{opacity:.45;transform:scale(.99)}
.sx-card-t{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:8px;font-size:12px;font-weight:600;color:#cbd5e1;letter-spacing:.02em}
.sx-span2{grid-column:span 2}
.sx-muted{font-size:11px;color:#64748b;line-height:1.7}

/* KPI */
.sx-kpi-grid{grid-column:1/-1;display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:10px}
.sx-kpi{padding:11px 13px;border-radius:12px;border:1px solid rgba(148,163,184,.18);min-width:0;
  background:radial-gradient(130% 130% at 0% 0%,rgba(34,211,238,.10),transparent 55%),rgba(15,23,42,.66)}
.sx-kpi-l{font-size:11px;color:#94a3b8}
.sx-kpi-v{margin-top:3px;font-size:25px;line-height:1.15;font-weight:750;color:#f8fafc;font-variant-numeric:tabular-nums;text-shadow:0 0 20px rgba(34,211,238,.25)}
.sx-kpi-s{margin-top:2px;display:flex;align-items:center;gap:6px;font-size:10px;color:#64748b}
.sx-kpi-d{font-size:10px;font-variant-numeric:tabular-nums}
.sx-kpi-d.up{color:#34d399}
.sx-kpi-d.down{color:#fb7185}

/* 图表 */
.sx-chart{width:100%;min-width:0}
.sx-chart svg{display:block;width:100%;height:auto}
.sx-legend-row{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:5px}
.sx-legend{display:inline-flex;align-items:center;gap:5px;font-size:10px;color:#94a3b8}
.sx-legend i{width:9px;height:9px;border-radius:3px;display:inline-block;box-shadow:0 0 8px rgba(34,211,238,.30)}

/* 横向条形 */
.sx-bar-row{display:flex;align-items:center;gap:8px;padding:5px 0;border-bottom:1px dashed rgba(148,163,184,.08);min-width:0}
.sx-bar-row:last-child{border-bottom:0}
.sx-bar-name{flex:none;font-size:11px;color:#cbd5e1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sx-bar-track{flex:1;min-width:26px;height:8px;border-radius:99px;background:rgba(148,163,184,.12);overflow:hidden}
.sx-bar-fill{height:100%;border-radius:99px;box-shadow:0 0 10px rgba(34,211,238,.35);transition:width .3s ease}
.sx-bar-val{min-width:38px;text-align:right;font-size:11px;color:#f1f5f9;font-variant-numeric:tabular-nums}
.sx-bar-sub{min-width:44px;text-align:right;font-size:9px;color:#64748b;font-variant-numeric:tabular-nums}

/* 分数段 */
.sx-dist{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:11px;color:#cbd5e1}
.sx-dist>span:first-child{flex:none;width:44px;color:#94a3b8}
.sx-dist-track{flex:1;height:8px;border-radius:99px;background:rgba(148,163,184,.12);overflow:hidden}
.sx-dist-track i{display:block;height:100%;border-radius:99px;transition:width .3s ease}
.sx-dist b{min-width:26px;text-align:right;font-variant-numeric:tabular-nums;color:#e2e8f0}
.sx-dist .sx-muted{min-width:34px;text-align:right}

/* 关注榜 / 进步榜 */
.sx-focus-row{display:flex;align-items:center;gap:7px;padding:6px 0;border-bottom:1px dashed rgba(148,163,184,.08);font-size:11px;color:#e2e8f0;min-width:0}
.sx-focus-row:last-child{border-bottom:0}
.sx-focus-row b{max-width:90px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sx-chip{flex:none;padding:2px 7px;border-radius:99px;font-size:9px;border:1px solid}
.sx-chip.is-risk{color:#fda4af;border-color:rgba(251,113,133,.5);background:rgba(251,113,133,.12)}
.sx-chip.is-ok{color:#6ee7b7;border-color:rgba(52,211,153,.5);background:rgba(52,211,153,.12)}
.sx-delta{margin-left:auto;font-variant-numeric:tabular-nums;font-weight:600}
.sx-delta.up{color:#34d399}
.sx-delta.down{color:#fb7185}
.sx-rank{flex:none;min-width:14px;font-size:10px;color:#64748b;text-align:center}

/* 热力表 */
.sx-heat-wrap{max-height:330px;overflow:auto;border-radius:8px}
.sx-heat{width:100%;border-collapse:separate;border-spacing:3px}
.sx-heat th{padding:2px 4px;font-size:10px;font-weight:500;color:#94a3b8;white-space:nowrap;text-align:center}
.sx-heat td{padding:0}
.sx-heat-rowh{max-width:110px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-right:4px!important;font-size:10px;color:#cbd5e1;text-align:right}
.sx-heat-cell{display:flex;align-items:center;justify-content:center;min-width:34px;height:24px;border-radius:5px;font-size:10px;font-weight:600;color:#0b1220}

/* 透视 / 自由组合 */
.sx-pivot-view{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:12px}
.sx-pivot-view>.sx-card:first-child{grid-column:1/-1}
.sx-presets{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}
.sx-slots{display:grid;grid-template-columns:1fr 1fr 170px;gap:8px}
.sx-slot{min-width:0;padding:8px;border-radius:10px;border:1px dashed rgba(148,163,184,.24);background:rgba(2,6,23,.42)}
.sx-slot-t{margin-bottom:6px;font-size:10px;color:#64748b}
.sx-slot-body{display:flex;flex-wrap:wrap;align-items:center;gap:5px}
.sx-dim-chip{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:99px;font-size:11px;color:#a5f3fc;border:1px solid rgba(34,211,238,.35);background:rgba(34,211,238,.12)}
.sx-dim-x{padding:0;border:0;background:none;color:#67e8f9;font-size:12px;line-height:1;cursor:pointer}
.sx-dim-x:hover{color:#fda4af}
.sx-dim-add{max-width:100%;padding:4px 6px;border-radius:7px;font-size:11px;color:#cbd5e1;background:rgba(2,6,23,.62);border:1px solid rgba(148,163,184,.22);outline:none}
.sx-pivot-wrap{max-height:460px;overflow:auto;border-radius:8px;border:1px solid rgba(148,163,184,.14)}
.sx-pivot{width:100%;border-collapse:separate;border-spacing:0;font-size:11px}
.sx-pivot th{position:sticky;top:0;z-index:2;padding:7px 9px;text-align:right;white-space:nowrap;font-weight:600;color:#94a3b8;background:#0f172a;border-bottom:1px solid rgba(148,163,184,.2)}
.sx-pivot td{padding:6px 9px;text-align:right;white-space:nowrap;color:#e2e8f0;font-variant-numeric:tabular-nums;border-bottom:1px solid rgba(148,163,184,.07)}
.sx-pivot th:first-child,.sx-pivot td:first-child{text-align:left}
.sx-pivot tbody tr:hover td,.sx-pivot tr:hover td{background:rgba(34,211,238,.05)}
.sx-pivot-rowh{position:sticky;left:0;z-index:1;font-weight:500;color:#cbd5e1;background:rgba(15,23,42,.94)}
.sx-pivot .is-total{font-weight:650;color:#67e8f9;background:rgba(8,145,178,.10)}

/* 画像 */
.sx-profile-pick{display:flex;flex-wrap:wrap;gap:6px;max-height:160px;overflow:auto}
.sx-summary{font-size:12px;line-height:1.9;color:#cbd5e1}

/* 导入 */
.sx-textarea{width:100%;min-height:150px;padding:8px 10px;border-radius:10px;resize:vertical;font-size:11px;line-height:1.6;
  font-family:ui-monospace,Consolas,"Courier New",monospace;color:#e2e8f0;background:rgba(2,6,23,.62);border:1px solid rgba(148,163,184,.22);outline:none}
.sx-textarea:focus{border-color:rgba(34,211,238,.55);box-shadow:0 0 0 3px rgba(34,211,238,.10)}
.sx-import-tip{margin-bottom:8px;font-size:11px;line-height:1.7;color:#94a3b8}
.sx-import-actions{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:8px}
.sx-errs{max-height:140px;overflow:auto;margin-top:6px;padding:6px 8px;border-radius:8px;font-size:11px;color:#fda4af;background:rgba(251,113,133,.08);border:1px solid rgba(251,113,133,.25)}

/* 布局设置弹窗（弹窗是浅色主题，这里保持可读） */
.sx-layout-list{display:flex;flex-direction:column;gap:6px;max-height:52vh;overflow:auto}
.sx-layout-row{display:flex;align-items:center;gap:8px;padding:6px 8px;border:1px solid rgba(148,163,184,.28);border-radius:8px;font-size:12px;color:#334155}
.sx-layout-row .sx-btn{color:#475569;background:#f8fafc;border-color:#cbd5e1}
.sx-layout-row .sx-btn:hover{color:#0f172a;background:#e2e8f0;border-color:#94a3b8}

/* 深色页面内的通用表格 / 按钮，避免浅色主题打架 */
#main .sx-page .table-wrap{max-height:420px;overflow:auto;background:transparent!important;border-color:rgba(148,163,184,.14)!important;box-shadow:none!important}
#main .sx-page .data-table thead th{background:#0f172a!important;color:#94a3b8!important;border-color:rgba(148,163,184,.16)!important}
#main .sx-page .data-table tbody tr:nth-child(n) td,#main .sx-page .data-table td{color:#e2e8f0!important;border-color:rgba(148,163,184,.08)!important;background:transparent!important}
#main .sx-page .data-table tbody tr:nth-child(n):hover td,#main .sx-page .data-table tbody tr:hover td{background:rgba(34,211,238,.06)!important}
.sx-page .btn-sm{color:#cbd5e1;background:rgba(30,41,59,.55);border-color:rgba(148,163,184,.3)}
.sx-page .btn-sm:hover{color:#f8fafc;background:rgba(30,41,59,.85)}
.sx-page .btn-danger-ghost{color:#fda4af;border-color:rgba(251,113,133,.42);background:rgba(251,113,133,.08)}
.sx-page .btn-danger-ghost:hover{color:#fff;background:rgba(251,113,133,.2)}

/* 响应式 */
@media(max-width:1400px){.sx-filter-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media(max-width:1100px){
  .sx-dash{grid-template-columns:repeat(2,minmax(0,1fr))}
  .sx-kpi-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
  .sx-pivot-view{grid-template-columns:1fr}
  .sx-pivot-view>.sx-card:first-child{grid-column:auto}
  .sx-slots{grid-template-columns:1fr 1fr}
  .sx-slots>.sx-slot:last-child{grid-column:1/-1}
}
@media(max-width:760px){
  .sx-page{padding:12px;border-radius:12px}
  .sx-head{align-items:flex-start}
  .sx-title{font-size:20px}
  .sx-actions{width:100%}
  .sx-actions .sx-btn{flex:1 1 auto;justify-content:center}
  .sx-filter-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .sx-tabs{gap:4px;padding:3px}
  .sx-tab{padding:7px 11px;font-size:12px}
  .sx-tabs .sx-hint{display:none}
  .sx-dash{grid-template-columns:1fr}
  .sx-span2{grid-column:auto}
  .sx-kpi-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .sx-kpi-v{font-size:21px}
  .sx-slots{grid-template-columns:1fr}
  .sx-slots>.sx-slot:last-child{grid-column:auto}
  .sx-tab-action{margin-left:0}
  .sx-bar-name{max-width:92px}
}
