/* ⚠️ [hidden] 必须全局生效: 作者样式里的 display:flex 会覆盖 UA 的 [hidden]{display:none}
   (2026-09 通知中心踩坑: .st-wrap{display:flex} 令工作台的 hidden 失效 → 首页工作台不隐藏、
    通知中心被推到页面底部 2548px, 用户以为"点了没反应") */
[hidden]{display:none !important}

/* ═══════════════════════════════════════════════════════════════
   艺道艺术 · 综合教务运营系统 — 首页定稿设计语言 (iOS 蓝)
   蓝本: Stitch 定稿 (brand #007AFF · Tailwind slate 灰阶 · 稿代码 token: surface #FAF9FE / brand-50 #F0F6FF / emerald·amber·rose)
   ═══════════════════════════════════════════════════════════════ */
@font-face{font-family:'HarmonyOS';src:url('../fonts/HarmonyOS-SC-Regular.woff2') format('woff2');font-weight:400;font-display:swap}
@font-face{font-family:'HarmonyOS';src:url('../fonts/HarmonyOS-SC-Medium.woff2') format('woff2');font-weight:500;font-display:swap}
@font-face{font-family:'HarmonyOS';src:url('../fonts/HarmonyOS-SC-Bold.woff2') format('woff2');font-weight:700;font-display:swap}
:root{
  --brand:#007AFF; --brand-dark:#0062CC; --brand-light:#F0F6FF; --brand-subtle:#F0F6FF; --brand-border:#BFDBFE;
  --s50:#FAF9FE; --s100:#F1F5F9; --s200:#E2E8F0; --s300:#CBD5E1; --s400:#94A3B8; --s500:#64748B;
  --s600:#475569; --s700:#334155; --s800:#1E293B; --s900:#0F172A;
  --ok:#10B981; --ok-soft:#ECFDF5; --warn:#F59E0B; --warn-soft:#FFFBEB; --danger:#E11D48; --danger-soft:#FFF1F2;
  --r-xl:16px; --r-lg:12px; --r-md:10px;
  --shadow-card:0 1px 3px rgba(15,23,42,.02);
  --shadow-hover:0 10px 24px -4px rgba(0,0,0,.05),0 2px 6px -1px rgba(0,0,0,.02);
  --sb-w:240px;
}
*{box-sizing:border-box;margin:0;padding:0}
html{-webkit-text-size-adjust:100%}
body{font-family:-apple-system,"SF Pro Text","SF Pro Display","PingFang SC","Hiragino Sans GB","HarmonyOS SC","Microsoft YaHei",sans-serif;
  font-size:14px;color:var(--s800);background:var(--s50);line-height:1.55;-webkit-font-smoothing:antialiased;
  font-feature-settings:"tnum" 1,"cv02" 1,"cv03" 1,"cv04" 1,"cv11" 1}
a{color:var(--brand);text-decoration:none}
b,strong{font-weight:600}
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-thumb{background:var(--s300);border-radius:8px}
::placeholder{color:var(--s400)}
.num{font-variant-numeric:tabular-nums}
@keyframes fadeUp{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@keyframes pingG{0%{transform:scale(.95);box-shadow:0 0 0 0 rgba(16,185,129,.5)}70%{transform:scale(1);box-shadow:0 0 0 5px rgba(16,185,129,0)}100%{transform:scale(.95);box-shadow:0 0 0 0 rgba(16,185,129,0)}}
@keyframes pingB{0%{transform:scale(.95);box-shadow:0 0 0 0 rgba(0,122,255,.45)}70%{transform:scale(1);box-shadow:0 0 0 5px rgba(0,122,255,0)}100%{transform:scale(.95);box-shadow:0 0 0 0 rgba(0,122,255,0)}}

/* 防「页面横向溢出 → 内容左移被固定侧栏(.sb)遮挡」(2026-09 报销台账踩到: 表格撑破容器 → 可横滚 → 左列被 .sb 盖住) */
/* 叠加: 给竖向滚动条预留固定空间 → 加载瞬间「内容变高有滚动条 / 变矮没滚动条」不再改变 .frame 宽度(实测 8px 跳动) */
body.app-shell{overflow-x:hidden;overflow-y:scroll}

/* ── 按钮（iOS 胶囊） ── */
.abtn{display:inline-flex;align-items:center;justify-content:center;gap:5px;min-height:30px;padding:0 14px;border-radius:999px;
  font-size:12px;font-weight:500;cursor:pointer;user-select:none;transition:all .15s cubic-bezier(.16,1,.3,1);
  border:1px solid var(--s200);background:#fff;color:var(--s700);white-space:nowrap;font-family:inherit}
.abtn:hover{color:var(--s900);background:var(--s50);border-color:var(--s300)}
.abtn:active{transform:scale(.95)}
.abtn.primary{background:var(--brand);color:#fff;border-color:transparent;box-shadow:0 2px 8px rgba(0,122,255,.25);font-weight:500}
.abtn.primary:hover{background:var(--brand-dark);color:#fff}
.abtn.ghost{border-color:transparent;background:transparent;color:var(--s500)}
.abtn.ghost:hover{background:var(--s100);color:var(--s900)}
.abtn.danger{color:var(--danger);border-color:#FECDD3;background:#fff}
.abtn.danger:hover{background:var(--danger-soft);color:var(--danger)}
.abtn.sm{min-height:27px;padding:0 12px;font-size:11.5px}
.abtn.xs{min-height:24px;padding:0 10px;font-size:11px}
.abtn:disabled{opacity:.5;cursor:not-allowed}
.abtn .ms{font-size:15px}

/* ── 输入 ── */
input,select,textarea{font-family:inherit;font-size:14px;color:var(--s800)}
.fc{width:100%;min-height:38px;padding:7px 12px;border:1px solid var(--s200);border-radius:10px;background:#fff;outline:none;transition:border .15s,box-shadow .15s}
.fc:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(0,122,255,.12)}
select.fc{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%23AEAEB2' stroke-width='1.6' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;padding-right:30px}
label.req{color:var(--danger)}

/* ── 徽章 ── */
.badge{display:inline-flex;align-items:center;gap:4px;padding:2px 10px;border-radius:999px;font-size:11px;font-weight:500;white-space:nowrap}
.st-ok,.st-done{background:var(--ok-soft);color:#059669}
.st-mid{background:var(--warn-soft);color:#92400E}
.st-work,.st-pending{background:var(--brand-light);color:var(--brand-dark)}
.st-bad{background:var(--danger-soft);color:#E11D48}
.st-gray{background:var(--s100);color:var(--s500)}
.chip{display:inline-flex;align-items:center;gap:5px;padding:2px 10px;border-radius:999px;font-size:11px;font-weight:500;white-space:nowrap;font-variant-numeric:tabular-nums}
.chip.blue{background:var(--brand-light);color:var(--brand)}
.chip.gray{background:var(--s100);color:var(--s600);border:1px solid rgba(229,229,234,.8)}
.chip.green{background:var(--ok-soft);color:#059669;border:1px solid rgba(52,199,89,.25)}
.pulse-g{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--ok);position:relative;flex:none;animation:pingG 2.2s infinite ease-in-out}
.pulse-b{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--brand);position:relative;flex:none;animation:pingB 2.2s infinite ease-in-out}
/* 首页「合作方账单未结清」呼吸红点提示(仅首页待办卡标题处使用; 红沿用系统状态红 #E11D48, 不新造色板; 纯 CSS 零库) */
.hw-settle-alert{display:inline-flex;align-items:center;gap:6px;font-weight:600;color:#E11D48;text-decoration:none;cursor:pointer;margin-right:2px}
.hw-settle-alert:hover{text-decoration:underline}
.hw-settle-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:#E11D48;position:relative;flex:none;animation:hwSettleDot 1.5s ease-in-out infinite}
@keyframes hwSettleDot{0%,100%{opacity:1;box-shadow:0 0 0 0 rgba(225,29,72,.42)}50%{opacity:.5;box-shadow:0 0 0 3px rgba(225,29,72,0)}}

/* ── Flash / Toast / Modal ── */
.flash-area{padding:16px 24px 0}
.flash{padding:9px 14px;border-radius:12px;font-size:13px;margin-bottom:10px}
.flash-success,.flash-ok{background:var(--ok-soft);color:#059669}
.flash-danger,.flash-error{background:var(--danger-soft);color:#E11D48}
.flash-warning{background:var(--warn-soft);color:#92400E}
.flash-info{background:var(--brand-light);color:var(--brand-dark)}
#toastBox{position:fixed;top:18px;left:50%;transform:translateX(-50%);z-index:9999;display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none}
.toast{padding:9px 20px;border-radius:999px;background:var(--s900);color:#fff;font-size:13px;font-weight:500;box-shadow:0 10px 30px rgba(0,0,0,.22);animation:fadeUp .2s ease}
.toast.ok{background:var(--ok)}
.toast.err{background:var(--danger)}
.toast.out{opacity:0;transition:opacity .3s}
/* z-index:2200 —— 必须高于全部页内弹层(exam 2009/2010、抽屉 2100、veil 2050;全站最高 2100),低于 toast(9999)。
   2026-09-17 修:原 2000 < exam 考试工具弹层 #mToolsBg(2009)/#mToolsBox(2010) → ytConfirm 二次确认被考试工具面板盖住(用户报「截图2 的弹窗在截图1 下面」)。 */
.modal-ov{position:fixed;inset:0;background:rgba(29,29,31,.45);z-index:2200;display:flex;align-items:center;justify-content:center;padding:20px;backdrop-filter:blur(2px)}
.modal-c{background:#fff;border-radius:18px;width:min(440px,100%);box-shadow:0 30px 80px rgba(0,0,0,.25);animation:fadeUp .16s ease}
.mc-head{display:flex;justify-content:space-between;align-items:center;padding:15px 20px;font-size:15px;font-weight:600;border-bottom:1px solid var(--s100)}
.mc-x{color:var(--s400);cursor:pointer;font-size:15px;padding:2px 6px}
.mc-body{padding:18px 20px;font-size:13.5px;line-height:1.8;color:var(--s600)}
.mc-foot{display:flex;justify-content:flex-end;gap:8px;padding:0 20px 16px}

/* ── 布局骨架：240px 侧栏 + 56px 顶栏 ── */
/* 伸缩: body.sb-min 折叠至 64px(仅图标), 桌面由顶栏汉堡切换, 移动端 sb-open 抽屉语义不变 */
body.sb-min{--sb-w:64px}
.sb{position:fixed;left:0;top:0;bottom:0;width:var(--sb-w);background:rgba(255,255,255,.95);backdrop-filter:blur(24px);
  border-right:1px solid rgba(229,229,234,.8);display:flex;flex-direction:column;justify-content:space-between;z-index:100;padding:16px}
.frame{margin-left:var(--sb-w);min-height:100vh;display:flex;flex-direction:column}
.tb{position:fixed;top:0;left:var(--sb-w);right:0;height:56px;background:rgba(255,255,255,.88);backdrop-filter:blur(20px);
  border-bottom:1px solid var(--s200);display:flex;align-items:center;justify-content:space-between;gap:16px;padding:0 24px;z-index:90}
/* ★ 壳层过渡只在「需要时」生效: body 无 sb-anim 时(加载/刷新首帧)一步到位, 不发生"滑一下";
   body.sb-anim 由 base.html 在首帧画完之后加上, 之后用户折叠侧栏/拉抽屉的动画与改动前逐字相同 */
body.sb-anim .sb{transition:width .22s cubic-bezier(.16,1,.3,1)}
body.sb-anim .frame{transition:margin-left .22s cubic-bezier(.16,1,.3,1)}
body.sb-anim .tb{transition:left .22s cubic-bezier(.16,1,.3,1)}
/* 折叠态内容: 隐藏文字与组标题, 图标居中 */
body.sb-min .sb{padding:16px 12px}
body.sb-min .sb-dots{display:none}
body.sb-min .sb-txt,body.sb-min .sb-item .txt,body.sb-min .sb-sec-title,
body.sb-min .campus-pill .l,body.sb-min .sb-status .l,body.sb-min .sb-status .v{display:none}
body.sb-min .sb-brand{justify-content:center;padding-left:0;padding-right:0}
body.sb-min .sb-campus .campus-pill{justify-content:center;padding:7px 0}
body.sb-min .campus-pill .ms{display:none}
body.sb-min .sb-item{justify-content:center;padding:10px 0}
body.sb-min .sb-item .ms{font-size:21px}
body.sb-min .sb-foot{padding-top:8px}
body.sb-min .sb-status{justify-content:center;padding:8px 0;background:none;border:none}
body.sb-min .sb-status .l{display:flex;justify-content:center}
.sb-dots{display:flex;gap:6px;padding:0 4px}
.sb-dots span{width:10px;height:10px;border-radius:50%;background:var(--s300);cursor:pointer;transition:background .15s}
.sb-dots span:nth-child(1):hover{background:#E11D48}.sb-dots span:nth-child(2):hover{background:#F59E0B}.sb-dots span:nth-child(3):hover{background:#10B981}
.sb-brand{display:flex;align-items:center;gap:10px;padding:14px 4px 16px}
.sb-logo{width:32px;height:32px;border-radius:10px;background:var(--brand);color:#fff;display:flex;align-items:center;justify-content:center;box-shadow:0 2px 8px rgba(0,122,255,.3)}
.sb-logo .ms{font-size:18px;color:#fff;font-weight:350}
.sb-txt{min-width:0;line-height:1.3}
.sb-txt b{display:block;font-size:14px;font-weight:600;letter-spacing:-.2px;color:var(--s900);white-space:nowrap}
.sb-txt em{display:block;font-style:normal;font-size:10px;color:var(--s400);letter-spacing:.16em;white-space:nowrap;font-feature-settings:"tnum" 1;text-transform:uppercase}
.sb-nav{flex:1;overflow-y:auto;display:flex;flex-direction:column;gap:2px;margin:0 -4px;padding:0 4px}
.sb-nav::-webkit-scrollbar{width:4px}
.sb-sec-title{padding:12px 10px 6px;font-size:13px;font-weight:600;color:var(--s600);letter-spacing:normal;white-space:nowrap}
.sb-sec-title{width:100%;display:flex;align-items:center;justify-content:space-between;gap:6px;background:none;border:none;font-family:inherit;cursor:pointer;transition:color .15s}
.sb-sec-title:hover{color:var(--s700)}
.sb-acc-body{transition:opacity .18s ease,transform .18s ease}
.sb-acc.closed .sb-acc-body{display:none}
.sb-acc .acc-x{font-size:15px;color:var(--s300);transition:transform .18s cubic-bezier(.16,1,.3,1)}
.sb-acc.closed .acc-x{transform:rotate(-90deg)}
.sb-acc.first .sb-sec-title{padding-top:6px}
.sb-acc + .sb-acc{border-top:1px solid rgba(229,229,234,.55);margin-top:2px;padding-top:2px}
.sb-item{display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:12px;color:var(--s600);font-size:13px;font-weight:400;cursor:pointer;transition:all .15s;white-space:nowrap}
.sb-item:hover{background:var(--s100);color:var(--s900)}
.sb-item .ms{font-size:19px;color:var(--s500)}
.sb-item:hover .ms{color:var(--s600)}
.sb-item.on{background:var(--brand-light);color:var(--brand);font-weight:500;box-shadow:0 1px 2px rgba(0,122,255,.06)}
.sb-item.on .ms{color:var(--brand)}
.sb-item span.txt{overflow:hidden;text-overflow:ellipsis}
/* ★ 2026-09-28: 侧栏数字角标(报销「被驳回」张数)。纯追加, 只用 margin-left:auto 靠右, 不改既有布局 */
.sb-badge{margin-left:auto;flex:none;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:#E5484D;
  color:#fff;font-size:11px;font-weight:600;line-height:18px;text-align:center;font-variant-numeric:tabular-nums}
.sb-foot{padding-top:12px}
.sb-status{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px;border-radius:12px;background:rgba(242,242,247,.92);border:1px solid rgba(229,229,234,.8)}
.sb-status .l{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--s600);font-weight:500}
.sb-status .v{font-size:11px;color:var(--s400);}
.tb-search{position:relative;width:min(400px,40vw);display:flex;align-items:center}
.tb-search .ms{position:absolute;left:12px;color:var(--s400);font-size:18px;pointer-events:none}
.tb-search input{width:100%;height:32px;border:1px solid transparent;outline:none;background:var(--s100);border-radius:999px;padding:0 46px 0 36px;font-size:12px;color:var(--s800);transition:all .2s}
.tb-search input:hover{background:rgba(242,242,247,.85)}
.tb-search input:focus{background:#fff;border-color:rgba(0,122,255,.4);box-shadow:0 0 0 4px rgba(0,122,255,.1)}
.tb-kbd{position:absolute;right:10px;top:50%;transform:translateY(-50%);display:flex;gap:1px;padding:2px 6px;border-radius:4px;background:rgba(229,229,234,.8);color:var(--s500);font-size:10px;pointer-events:none;}
.tb-right{display:flex;align-items:center;gap:12px}
.tb-pill{display:inline-flex;align-items:center;gap:6px;padding:5px 12px;border-radius:999px;background:var(--s100);border:1px solid rgba(229,229,234,.8);color:var(--s600);font-size:12px;white-space:nowrap}
.tb-pill .ms{font-size:15px;color:var(--s500)}
.tb-icon{position:relative;width:32px;height:32px;border:none;border-radius:50%;background:transparent;color:var(--s600);font-size:19px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .12s}
.tb-icon:hover{background:var(--s100)}
.tb-dot{position:absolute;top:6px;right:6px;width:6px;height:6px;border-radius:50%;background:var(--brand);animation:pingB 2.2s infinite}
.tb-sep{width:1px;height:16px;background:var(--s200)}
.tb-user{display:flex;align-items:center;gap:8px;padding:4px 8px;border-radius:10px;cursor:pointer;transition:background .12s}
.tb-user:hover{background:rgba(242,242,247,.85)}
.tb-user .ms{font-size:20px;color:var(--s500)}
.tb-user-txt{line-height:1.3}
.tb-user-txt .r1{display:flex;align-items:center;gap:6px}
.tb-user-txt .r1 b{font-size:12px;font-weight:500;color:var(--s900)}
.tb-user-txt .r1 em{font-style:normal;font-size:10px;font-weight:400;color:var(--s500);background:var(--s100);padding:0 6px;border-radius:4px;line-height:16px}
.tb-user-txt small{display:block;font-size:10px;color:var(--s400)}
.tb-burger{display:none}
@media (min-width:768px){ .tb-burger{display:inline-flex;border:none;background:none;color:var(--s700);cursor:pointer;padding:6px;font-size:18px} .tb-burger .ms{font-size:21px} }
.pg{padding:70px 24px 40px;flex:1;background:var(--s50)}
.st-wrap{width:min(1440px,100%);margin:0 auto;display:flex;flex-direction:column;gap:20px}

/* ── 页面头 ── */
.pg-head{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:space-between;gap:14px}
.pg-head h1{font-size:20px;font-weight:600;letter-spacing:-.03em;color:var(--s900);line-height:1.3;display:inline-flex;align-items:baseline;flex-wrap:wrap;gap:6px 10px}
.pg-head .sub{font-size:12px;color:var(--s500);font-weight:400;letter-spacing:0;margin-left:8px}
.pg-head-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-left:auto}
.seg{display:inline-flex;padding:2px;border-radius:999px;background:var(--s100);border:1px solid rgba(229,229,234,.75);gap:2px}
.seg-btn{padding:5px 12px;border-radius:999px;border:none;background:transparent;color:var(--s500);font-size:12px;font-weight:500;cursor:pointer;white-space:nowrap;transition:all .2s cubic-bezier(.16,1,.3,1);font-family:inherit}
.seg-btn:hover{color:var(--s900)}
.seg-btn.on{background:#fff;color:var(--s900);box-shadow:0 1px 3px rgba(0,0,0,.08);font-weight:500}
.hint-label{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--brand);font-weight:500;background:rgba(0,122,255,.04);padding:2px 8px;border-radius:6px;border:1px solid rgba(0,122,255,.18);white-space:nowrap}

/* ── 卡片通用 ── */
.card2{background:#fff;border:1px solid rgba(229,229,234,.9);border-radius:var(--r-xl);box-shadow:var(--shadow-card);position:relative;
  transition:transform .22s cubic-bezier(.16,1,.3,1),box-shadow .22s cubic-bezier(.16,1,.3,1),border-color .2s ease}
.card2:hover{transform:translateY(-2px);box-shadow:var(--shadow-hover)}
.c2-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.c2-t{display:flex;align-items:center;gap:8px;font-size:14px;font-weight:600;color:var(--s900);letter-spacing:-.01em}
.c2-s{font-size:12px;color:var(--s400);font-weight:400;margin-top:3px}
.c2-legend{display:flex;align-items:center;gap:12px;font-size:11px;color:var(--s500);white-space:nowrap;font-variant-numeric:tabular-nums}
.c2-legend .lg{display:inline-flex;align-items:center;gap:6px}
.c2-legend .lg i{width:8px;height:8px;border-radius:50%;display:inline-block}

/* ── KPI 卡 ── */
.kpi-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}
.kpi{display:flex;flex-direction:column;justify-content:space-between;min-height:148px;padding:16px;border-radius:var(--r-xl)}
.kpi-ic{display:flex;align-items:center;gap:8px;min-width:0}
.kpi-ic .ms{font-size:20px;color:var(--brand)}
.kpi-ic .kt{min-width:0}
.kpi-ic .kt b{display:block;font-size:12px;font-weight:500;color:var(--s800);line-height:1.35;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kpi-ic .kt small{display:block;font-size:11px;color:var(--s400);font-weight:400;margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kpi-chipr{margin-left:auto;display:flex;align-items:center;gap:6px;padding:2px 8px;border-radius:999px;font-size:11px;font-weight:500;white-space:nowrap;font-variant-numeric:tabular-nums}
.kpi-chipr.blue{background:var(--brand-light);color:var(--brand)}
.kpi-chipr.gray{background:var(--s100);color:var(--s600);border:1px solid rgba(229,229,234,.75)}
.kpi-mid{display:flex;align-items:baseline;gap:6px;margin-top:8px}
.kpi-mid b{font-size:30px;font-weight:600;letter-spacing:-.035em;line-height:1.1;font-variant-numeric:tabular-nums;color:var(--s900)}
.kpi-mid i{font-style:normal;font-size:12px;color:var(--s400);white-space:nowrap}
.kpi-mid .kpi-ring{margin-left:auto;flex:none}
.kpi-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:10px;padding-top:10px;border-top:1px solid var(--s100);font-size:12px;color:var(--s500)}
.kpi-foot .lf{display:flex;align-items:center;gap:4px;white-space:nowrap;overflow:hidden;min-width:0;font-variant-numeric:tabular-nums}
.kpi-foot b{color:var(--s800);font-weight:600}
.kpi-foot a{color:var(--brand);font-weight:500;display:inline-flex;align-items:center;gap:2px;white-space:nowrap}
.kpi-foot a .ms{font-size:14px}
.kpi-foot a:hover{text-decoration:underline}
.kpi-foot .lf .ms{font-size:14px;color:var(--brand)}

/* 拖拽 */
.drag-handle{position:absolute;top:12px;right:12px;color:var(--s400);opacity:.45;transition:opacity .2s,transform .15s;cursor:grab;user-select:none;z-index:3}
.drag-handle:hover{opacity:.95;transform:scale(1.12)}
.drag-handle:active{cursor:grabbing}
.card2:hover .drag-handle{opacity:.85}
.card2:hover .drag-handle .ms{font-size:18px}
.dragging-card{opacity:.55!important;transform:scale(1.01)!important;box-shadow:0 16px 32px -4px rgba(0,122,255,.18),0 4px 12px rgba(0,0,0,.06)!important;border-color:var(--brand)!important}
.drag-over-placeholder{outline:2px dashed var(--brand)!important;outline-offset:-2px!important;background-color:rgba(0,122,255,.035)!important}

/* ── 宫格 ── */
.quick-grid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:10px}
.qa{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:10px 4px;border-radius:12px;border:1px solid var(--s100);background:#fff;cursor:pointer;transition:all .2s cubic-bezier(.16,1,.3,1);color:var(--s700);text-align:center}
.qa:hover{transform:scale(1.02);background:#F8FAFC;border-color:var(--brand-border)}
.qa:active{transform:scale(.95)}
.qa .ms{font-size:22px;color:var(--s600);margin-bottom:2px;transition:color .15s}
.qa:hover .ms{color:var(--brand)}
.qa b{font-size:12px;font-weight:500;color:var(--s800);white-space:nowrap}
.qa small{font-size:10px;color:var(--s400);white-space:nowrap}

/* ── 待办任务 ── */
.task-list{display:flex;flex-direction:column;gap:10px}
.task-item{display:flex;flex-direction:row;align-items:center;justify-content:space-between;gap:10px;padding:12px;border-radius:12px;
  background:rgba(242,242,247,.85);border:1px solid rgba(229,229,234,.6);transition:all .2s;flex-wrap:wrap}
.task-item:hover{background:rgba(242,242,247,.95);border-color:var(--s300)}
.task-info{min-width:0;flex:1}
.task-r1{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:12px;color:var(--s800)}
.task-r1 b{font-weight:500;color:var(--s900)}
.task-r1 .gen{font-size:11px;color:var(--s500)}
.mini-chip{display:inline-flex;align-items:center;padding:1px 8px;border-radius:999px;font-size:10px;font-weight:500;white-space:nowrap}
.mini-chip.blue{background:var(--brand-light);color:var(--brand)}
.mini-chip.gray{background:rgba(229,229,234,.8);color:var(--s700)}
.mini-chip.warn{background:var(--warn-soft);color:#b45309}
.mini-chip.red{background:var(--danger-soft);color:#E11D48}
.mini-tag{padding:1px 5px;border-radius:4px;font-size:10px;background:rgba(229,229,234,.75);color:var(--s600);white-space:nowrap}
.mono{font-feature-settings:"tnum" 1}
.task-r2{display:flex;align-items:center;gap:12px;font-size:12px;color:var(--s500);flex-wrap:wrap;margin-top:4px}
.task-r2 strong{font-weight:500;color:var(--s800);font-variant-numeric:tabular-nums}
.task-r2 .hl{color:var(--brand);font-weight:500}
.task-ops{display:flex;align-items:center;gap:8px;flex:none}
.task-ops .abtn{min-height:26px;padding:0 12px;font-size:12px;border-radius:8px}
.ok-sign{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:8px;background:var(--ok-soft);color:#059669;font-size:12px;font-weight:500;border:1px solid rgba(52,199,89,.25)}
.ok-sign .ms{font-size:14px;color:#2ecc71}
.tab-row{display:flex;gap:2px;padding:3px;border-radius:999px;background:var(--s100);border:1px solid rgba(229,229,234,.75)}
.tab-pill{padding:5px 13px;border-radius:999px;border:none;background:transparent;color:var(--s500);font-size:12px;font-weight:500;cursor:pointer;white-space:nowrap;transition:all .2s;font-family:inherit}
.tab-pill:hover{color:var(--s800)}
.tab-pill.on{background:#fff;color:var(--s900);box-shadow:0 1px 3px rgba(0,0,0,.08)}
.subfoot{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:8px;margin-top:12px;padding-top:10px;border-top:1px solid var(--s100);font-size:12px;color:var(--s500)}
.subfoot a{font-weight:500;display:inline-flex;align-items:center;gap:3px}
.subfoot a .ms{font-size:14px}

/* ── 数据统计块 / 宫格 / 柱状 ── */
.stat4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;padding:12px;border-radius:12px;background:var(--s50);border:1px solid rgba(229,229,234,.75)}
.st4 span{display:block;font-size:11px;color:var(--s400);font-weight:400}
.st4 b{display:block;font-size:15px;font-weight:600;color:var(--s900);margin-top:3px;font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.st4 b.blue{color:var(--brand)}
.bar7{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px;align-items:end;padding:8px;border-radius:12px;background:rgba(242,242,247,.75);border:1px solid rgba(229,229,234,.5)}
.bar7 .day{display:flex;flex-direction:column;align-items:center;gap:5px;height:100%;justify-content:flex-end}
.bar7 .cols{display:flex;align-items:flex-end;justify-content:center;gap:3px;height:44px;width:100%}
.bar7 .cols i{width:7px;border-radius:3px 3px 0 0;display:block}
.bar7 .cols .in{background:var(--brand)}
.bar7 .cols .ex{background:var(--s300)}
.bar7 .day span{font-size:10px;color:var(--s400);font-variant-numeric:tabular-nums}
.bar7 .day.on span{color:var(--brand);font-weight:600}

/* ── 右侧列模块 ── */
.rstat2{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:8px;border-radius:12px;background:var(--s50);border:1px solid rgba(229,229,234,.6)}
.rs2 span{display:block;font-size:11px;color:var(--s400);font-weight:400;line-height:1.3}
.rs2 .rv{display:flex;align-items:baseline;gap:3px;margin-top:3px}
.rs2 .rv b{font-size:16px;font-weight:600;color:var(--s900);font-variant-numeric:tabular-nums;line-height:1.2}
.rs2 .rv b.blue{color:var(--brand)}
.rs2 .rv i{font-style:normal;font-size:10px;color:var(--s400)}
.room-row{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px;border-radius:10px;background:rgba(242,242,247,.75);border:1px solid rgba(229,229,234,.6);margin-top:6px}
.room-row .nm{display:flex;align-items:center;gap:6px;min-width:0}
.room-row .nm b{font-size:12px;font-weight:500;color:var(--s800);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.room-row .nm small{display:block;font-size:10px;color:var(--s400);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dot-i{width:6px;height:6px;border-radius:50%;flex:none}
.dot-i.g{background:var(--ok)}.dot-i.b{background:var(--brand)}.dot-i.gy{background:var(--s300)}.dot-i.o{background:var(--warn)}
.room-row .rt{text-align:right;flex-shrink:0}
.room-row .rt b{font-size:12px;font-weight:600;color:var(--s800);font-variant-numeric:tabular-nums}
.room-row .rt small{display:block;font-size:10px;color:var(--s400);font-variant-numeric:tabular-nums}
.lvl{display:flex;flex-direction:column;gap:10px;margin-top:6px}
.lvl-row{display:flex;flex-direction:column;gap:4px}
.lvl-row .lb{display:flex;justify-content:space-between;align-items:baseline;font-size:12px}
.lvl-row .lb span{color:var(--s800);font-weight:400}
.lvl-row .lb b{color:var(--s500);font-weight:500;font-variant-numeric:tabular-nums;font-size:11px}
.lvl-row .lb b i{font-style:normal;font-weight:400;color:var(--s400)}
.lvl-track{width:100%;height:6px;border-radius:999px;background:var(--s100);overflow:hidden}
.lvl-track i{display:block;height:100%;border-radius:999px;transition:width .9s cubic-bezier(.16,1,.3,1)}
.sched-row{display:flex;align-items:flex-start;gap:8px;padding:8px;border-radius:12px;background:var(--s50);border:1px solid rgba(229,229,234,.6);margin-top:6px}
.sched-row .dot-i{margin-top:5px}
.sched-row .sm{flex:1;min-width:0}
.sched-row .sm .t{display:flex;align-items:center;justify-content:space-between;gap:6px}
.sched-row .sm .t b{font-size:12px;font-weight:600;color:var(--s900);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sched-row .sm .t span{font-size:11px;color:var(--s500);flex-shrink:0;font-variant-numeric:tabular-nums}
.sched-row .sm small{font-size:10px;color:var(--s400);display:block;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sched-row .sm small b{color:var(--s700);font-weight:500}

/* ── iOS 开关 ── */
.switch{position:relative;display:inline-flex;align-items:center;cursor:pointer;flex-shrink:0}
.switch input{position:absolute;opacity:0;width:0;height:0}
.switch .trk{width:36px;height:20px;border-radius:999px;background:var(--s200);transition:background .18s;position:relative}
.switch .trk::after{content:'';position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.2);transition:left .18s cubic-bezier(.16,1,.3,1)}
.switch input:checked + .trk{background:var(--brand)}
.switch input:checked + .trk::after{left:18px}

/* ── 布局抽屉（右侧滑出） ── */
.drawer-bd{position:fixed;inset:0;background:rgba(29,29,31,.3);backdrop-filter:blur(2px);z-index:1500;opacity:0;pointer-events:none;transition:opacity .3s}
.drawer-bd.show{opacity:1;pointer-events:auto}
.layout-drawer{position:fixed;top:0;right:0;bottom:0;width:100vw;max-width:100vw;background:rgba(255,255,255,.97);backdrop-filter:blur(24px);
  border-left:1px solid rgba(229,229,234,.9);z-index:1501;box-shadow:-24px 0 60px rgba(0,0,0,.12);display:flex;flex-direction:column;
  transform:translateX(100%);transition:transform .3s cubic-bezier(.16,1,.3,1)}
.layout-drawer.open{transform:none}
.ld-body{flex:1;overflow-y:auto;padding:0 20px}
.ld-row{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px;border-radius:12px;background:rgba(242,242,247,.85);border:1px solid rgba(229,229,234,.6);margin-bottom:10px;transition:background .15s}
.ld-row:hover{background:var(--s50)}
.ld-row .l{display:flex;align-items:center;gap:10px;min-width:0}
.ld-row .l .ms{font-size:18px;color:var(--s500)}
.ld-row .l .tx{min-width:0}
.ld-row .l .tx b{display:block;font-size:12px;font-weight:500;color:var(--s800);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ld-row .l .tx small{display:block;font-size:10px;color:var(--s400);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-top:1px}
.ld-foot{padding:14px 20px;border-top:1px solid var(--s100);display:flex;gap:10px}

/* ── 图表 ── */
.chart-box{width:100%;height:208px}
.chart-foot{display:flex;justify-content:space-between;align-items:center;padding:10px 4px 0;border-top:1px solid var(--s100);font-size:11px;color:var(--s400);font-variant-numeric:tabular-nums}


/* ── 12列栅格 ── */
.grid-12{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:16px}
.col-8{grid-column:span 8}.col-4{grid-column:span 4}
.grid-12 .fl{display:flex;flex-direction:column;gap:16px}

/* ── 登录（品牌区 + 右卡片） ── */
body.auth-page{background:#fff}
.auth-wrap{display:flex;min-height:100vh}
.auth-left{flex:1.15;background:radial-gradient(1100px 600px at -10% -10%,#2f8bff,#0a4fd6 50%,#0638a8);color:#fff;display:flex;flex-direction:column;justify-content:space-between;padding:56px 64px;position:relative;overflow:hidden}
.auth-left::after{content:'';position:absolute;right:-160px;top:20%;width:420px;height:420px;border-radius:50%;background:radial-gradient(circle,rgba(0,122,255,.5),transparent 65%)}
.auth-left-inner{position:relative;z-index:1}
.auth-brand-lg{font-size:42px;font-weight:600;letter-spacing:5px;margin-bottom:14px;display:flex;align-items:center;gap:14px}
.auth-brand-lg .ms{font-size:34px}
.auth-slogan{font-size:18px;line-height:1.9;color:#BFDBFE;margin-bottom:44px;font-weight:500}
.auth-points{list-style:none}
.auth-points li{display:flex;align-items:center;gap:10px;font-size:14px;color:#BFDBFE;margin-bottom:12px}
.auth-points .ms{font-size:16px;color:#93C5FD}
.auth-copy{font-size:11.5px;color:#7f9ade;position:relative;z-index:1}
.auth-right{flex:1;min-width:0;display:flex;align-items:center;justify-content:center;background:#F8FAFC;padding:40px}
.auth-card{width:min(380px,100%);min-width:0;background:#fff;border:1px solid var(--s200);border-radius:22px;padding:36px 34px;box-shadow:0 24px 60px rgba(0,0,0,.06)}
.auth-card h1{font-size:23px;font-weight:600;margin-bottom:4px;letter-spacing:-.3px;color:var(--s900)}
.auth-sub{color:var(--s400);font-size:13px;margin-bottom:22px}
.auth-form .lg-fld{margin-bottom:16px}
.auth-form label{display:block;font-size:12px;font-weight:500;color:var(--s700);margin-bottom:6px}
.fld-box{display:flex;align-items:center;gap:10px;border:1px solid var(--s200);border-radius:12px;padding:0 13px;background:#fff;transition:border .15s,box-shadow .15s}
.fld-box:focus-within{border-color:var(--brand);box-shadow:0 0 0 3px rgba(0,122,255,.12)}
.fld-box .ms{color:var(--s400);font-size:17px}
.fld-box input{flex:1;min-height:44px;border:none;outline:none;font-size:14px;background:transparent;color:var(--s800)}
/* 登录页专属: 浏览器自动填充时盖掉自身默认浅蓝底(UA #E8F0FE), 并固定字色不随 UA 变黑. 底色取 .fld-box 白底(见上一条, input 自身为 transparent), 字色取 .fld-box input 的 var(--s800). 覆盖 hover/focus/active, 避免点进去又变蓝. 不写全局选择器. */
.auth-form .fld-box input:-webkit-autofill,.auth-form .fld-box input:-webkit-autofill:hover,.auth-form .fld-box input:-webkit-autofill:focus,.auth-form .fld-box input:-webkit-autofill:active{-webkit-box-shadow:0 0 0 1000px #fff inset;box-shadow:0 0 0 1000px #fff inset;-webkit-text-fill-color:var(--s800);transition:background-color 9999s ease-out 0s;caret-color:var(--s800)}
.auth-btn{width:100%;min-height:46px;border:none;border-radius:12px;background:var(--brand);color:#fff;font-size:15px;font-weight:500;cursor:pointer;box-shadow:0 10px 22px rgba(0,122,255,.28);margin-top:6px;transition:background .15s;font-family:inherit}
.auth-btn:hover{background:var(--brand-dark)}
.auth-btn:active{transform:scale(.99)}
.auth-tip{margin-top:18px;text-align:center;font-size:12px;color:var(--s400)}

/* 空态 */
.empty2{padding:26px 10px;text-align:center;color:var(--s400);font-size:12.5px}
@media (max-width:767px){ .auth-left{display:none} .auth-right{padding:24px} .auth-card{padding:26px 20px;box-shadow:none;border:none;background:transparent} }

/* ── 响应式 ── */
@media (max-width:1200px){ .kpi-grid{grid-template-columns:repeat(2,minmax(0,1fr))} .quick-grid{grid-template-columns:repeat(3,1fr)} .stat4{grid-template-columns:repeat(2,1fr)} }
@media (max-width:900px){ .grid-12 .col-8,.grid-12 .col-4{grid-column:span 12} }
@media (max-width:767px){
  .sb{transform:translateX(-100%);box-shadow:20px 0 60px rgba(0,0,0,.12)}
  body.sb-anim .sb{transition:transform .24s cubic-bezier(.16,1,.3,1)}   /* 抽屉滑动过渡: 同样只在 sb-anim 之后生效 */
  body.sb-open .sb{transform:none}
  body.sb-open::after{content:'';position:fixed;inset:0;background:rgba(29,29,31,.35);z-index:99}
  .frame{margin-left:0}
  .tb{left:0;height:54px;padding:0 12px;gap:10px}
  .tb-burger{display:inline-flex;border:none;background:none;color:var(--s700);cursor:pointer;padding:6px;font-size:18px}
  .tb-burger .ms{font-size:20px}
  .tb-search{flex:1;width:auto}
  .tb-kbd,.tb-pill,.tb-sep,.tb-user-txt{display:none}
  .pg{padding:66px 12px 32px}
  .pg-head h1{font-size:18px}
  .pg-head .sub{display:none}
  .kpi-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
  .kpi{min-height:132px;padding:13px}
  .kpi-mid b{font-size:25px}
  .stat4{grid-template-columns:repeat(2,1fr);gap:8px}
  .quick-grid{grid-template-columns:repeat(3,1fr)}
  .task-item{flex-direction:column;align-items:flex-start}
  .task-ops{width:100%;justify-content:flex-end}
}
@media (max-width:400px){ .kpi-grid{grid-template-columns:1fr} }

@media (min-width:640px){ .layout-drawer{width:380px} }

/* ── 扩展模块虚线卡内 mini 格 ── */
.grid-3-mini{display:grid;grid-template-columns:repeat(1,minmax(0,1fr));gap:10px}
@media (min-width:640px){ .grid-3-mini{grid-template-columns:repeat(3,minmax(0,1fr))} }
.mini-c{padding:12px;border-radius:12px;background:rgba(250,249,254,.9);border:1px solid rgba(229,229,234,.6);display:flex;flex-direction:column;justify-content:space-between;gap:6px}
.mini-c .mc-t{display:flex;align-items:center;justify-content:space-between;font-size:11px;color:var(--s400)}
.mini-c .mc-t .ms{font-size:16px;color:var(--brand)}
.mini-c b{font-size:14px;font-weight:600;color:var(--s700);font-variant-numeric:tabular-nums}
.mini-c small{font-size:10px;color:var(--s400);line-height:1.5}

/* ── 图卡粒度 tab（天/周/月） ── */
.gran-seg{display:inline-flex;align-items:center;padding:2px;border-radius:999px;background:var(--s100);border:1px solid rgba(229,229,234,.75);gap:2px}
.gran-btn{border:none;background:none;font-family:inherit;font-size:12px;color:var(--s500);padding:3px 14px;border-radius:999px;cursor:pointer;transition:all .15s;white-space:nowrap;line-height:1.6}
.gran-btn:hover{color:var(--s900)}
.gran-btn.on{background:#fff;color:var(--s900);font-weight:500;box-shadow:0 1px 3px rgba(0,0,0,.08)}

/* ── 校区切换器 ── */
.sb-campus{position:relative;margin:4px 0 2px}
.campus-pill{width:100%;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:7px 12px;
  border-radius:10px;background:var(--s100);border:1px solid rgba(229,229,234,.6);cursor:pointer;
  font-family:inherit;font-size:12px;font-weight:500;color:var(--s700);transition:background .15s}
.campus-pill:hover{background:var(--s200)}
.campus-pill .l{display:flex;align-items:center;gap:8px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.campus-menu{position:absolute;top:calc(100% + 6px);left:0;right:0;background:#fff;border:1px solid var(--s200);
  border-radius:12px;box-shadow:0 14px 34px rgba(0,0,0,.12);padding:6px;display:none;z-index:200;max-height:280px;overflow:auto}
.campus-menu.open{display:block}
.campus-menu .cm-item{display:flex;align-items:center;gap:9px;padding:8px 10px;border-radius:9px;font-size:12.5px;
  color:var(--s600);cursor:pointer;text-decoration:none;transition:background .12s}
.campus-menu .cm-item .ms{font-size:16px;color:var(--s400)}
.campus-menu .cm-item small{font-size:10px;color:var(--s400);margin-left:auto}
.campus-menu .cm-item:hover{background:var(--s50)}
.campus-menu .cm-item.on{background:var(--brand-light);color:var(--brand);font-weight:500}
.campus-menu .cm-item.on .ms{color:var(--brand)}

/* ── 入学登记页 ── */
.en-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
@media (min-width:900px){ .en-stats{grid-template-columns:repeat(6,minmax(0,1fr))} }
.es-card{border:1px solid rgba(229,229,234,.75);background:#fff;border-radius:14px;padding:12px 10px 10px;
  display:flex;flex-direction:column;align-items:flex-start;gap:3px;cursor:pointer;transition:all .15s;font-family:inherit;text-align:left}
.es-card:hover{border-color:rgba(0,122,255,.4)}
.es-card.on{border-color:rgba(0,122,255,.55);background:var(--brand-subtle);box-shadow:0 0 0 3px rgba(0,122,255,.08)}
.es-card .es-v{font-size:20px;font-weight:600;letter-spacing:-.03em;font-variant-numeric:tabular-nums;color:var(--s900);line-height:1.1}
.es-card .es-v.warn{color:#E11D48}.es-card .es-v.blue{color:var(--brand)}.es-card .es-v.gray{color:var(--s500)}
.es-card .es-l{font-size:10.5px;color:var(--s400);font-weight:500}
.en-search{display:flex;align-items:center;gap:8px;background:var(--s100);border-radius:999px;padding:0 14px;border:1px solid transparent;min-width:220px;flex:1;max-width:420px;transition:all .15s}
.en-search:focus-within{background:#fff;border-color:rgba(0,122,255,.4);box-shadow:0 0 0 4px rgba(0,122,255,.08)}
.en-search .ms{font-size:17px;color:var(--s400)}
.en-search input{flex:1;border:none;outline:none;background:transparent;font-size:13px;padding:8px 0;color:var(--s800);font-family:inherit;min-width:0}
.en-row{display:flex;flex-direction:column;gap:10px;padding:13px 14px;border-radius:14px;background:#fff;
  border:1px solid rgba(229,229,234,.75);transition:all .15s}
.en-row:hover{border-color:rgba(0,122,255,.35);box-shadow:0 6px 18px rgba(0,0,0,.04)}
@media (min-width:760px){ .en-row{flex-direction:row;align-items:center;justify-content:space-between} }
.en-info{min-width:0;display:flex;flex-direction:column;gap:5px}
.en-r1{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.en-r1 b{font-size:14px;font-weight:600;color:var(--s900)}
.en-r1 .gen{font-size:11px;color:var(--s500)}
.mini-tag{font-size:9.5px;color:var(--s400)}
.en-r2{display:flex;align-items:center;gap:14px;flex-wrap:wrap;font-size:11.5px;color:var(--s500)}
.en-r2 strong{color:var(--s800);font-weight:500;font-variant-numeric:tabular-nums}
.en-r3{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.en-r3 .fee{font-size:10.5px;color:var(--s500);background:var(--s50);border:1px solid rgba(229,229,234,.7);padding:2px 8px;border-radius:999px}
.en-r3 .fee.bad{color:#E11D48;background:#FFF1F2;border-color:#FECDD3}
.en-ops{display:flex;align-items:center;gap:8px;flex-shrink:0;flex-wrap:wrap}
.en-pager{display:flex;align-items:center;justify-content:center;gap:16px;padding:6px 0 4px}
.en-form .f-row{margin-bottom:12px}
.en-form label{display:block;font-size:12px;font-weight:500;color:var(--s600);margin-bottom:6px}
.en-form label i{color:var(--danger);font-style:normal}
.en-form input,.en-form select,.en-form textarea{width:100%;box-sizing:border-box;border:1px solid var(--s200);border-radius:10px;
  padding:9px 12px;font-size:13px;color:var(--s800);outline:none;background:#fff;font-family:inherit;transition:border .15s,box-shadow .15s}
.en-form input:focus,.en-form select:focus,.en-form textarea:focus{border-color:var(--brand);box-shadow:0 0 0 3px rgba(0,122,255,.12)}
.en-form textarea{resize:vertical}
.dl-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:9px 2px;border-bottom:1px solid var(--s100);font-size:13px}
.dl-row span{color:var(--s400);font-size:12px}
.dl-row b{color:var(--s800);font-weight:500;text-align:right}

/* ── 入学登记 5E(连续连击审核) ── */
.b3g{grid-template-columns:1fr !important}
@media (min-width:900px){ .b3g{grid-template-columns:repeat(3,minmax(0,1fr)) !important} }
.b3{background:#fff;border:1px solid rgba(0,0,0,.05);border-radius:14px;padding:15px;box-shadow:0 1px 3px rgba(0,0,0,.02)}
.flt{grid-template-columns:1fr !important}
@media (min-width:900px) and (max-width:1499px){ .flt{grid-template-columns:repeat(2,minmax(0,1fr)) !important} .btnz{grid-column:1/-1;justify-content:flex-end} }
@media (min-width:1500px){ .flt{grid-template-columns:3.4fr 2.2fr 2.6fr 1.3fr 1.6fr !important} }
.flt-sel{background:var(--s50);border:1px solid rgba(0,0,0,.05);border-radius:9px;font-size:12.5px;color:var(--s700);padding:8px 10px;outline:none;font-family:inherit;width:100%}
.flt-sel:focus{background:#fff;border-color:var(--brand);box-shadow:0 0 0 3px rgba(0,122,255,.1)}
.flt-date{flex:1;border:none;outline:none;background:transparent;font-size:12px;color:var(--s800);min-width:0;padding:8px 0}
.en5-list{background:#fff;border:1px solid rgba(0,0,0,.05);border-radius:14px;box-shadow:0 1px 3px rgba(0,0,0,.02);overflow:hidden}
.en5-table-w{overflow-x:auto}
table.en5-table{width:100%;border-collapse:collapse}
.en5-table thead th{background:#F8FAFC;border-bottom:1px solid rgba(0,0,0,.05);font-size:10.5px;font-weight:500;color:var(--s400);letter-spacing:.05em;text-transform:uppercase;padding:0 14px;height:40px;text-align:left;white-space:nowrap}
.en5-table tbody td{padding:0 14px;height:54px;font-size:12px;color:var(--s600);border-bottom:1px solid rgba(0,0,0,.03);white-space:nowrap}
.en5-table tbody tr:last-child td{border-bottom:none}
.en5-table tbody tr.en-tr{cursor:pointer;transition:background .12s}
.en5-table tbody tr.en-tr:hover{background:#F8FAFC}
.en5-table tbody tr.en-tr.cur td{background:#F0F6FF}
.en5-table tbody tr.en-tr.cur td:first-child{box-shadow:inset 3px 0 0 #007AFF}
.ava{width:32px;height:32px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:13px;font-weight:600;position:relative;flex-shrink:0;border:1px solid rgba(0,0,0,.05)}
.ava i{position:absolute;right:-3px;bottom:-3px;width:12px;height:12px;border-radius:50%;background:#fff;font-size:8px;font-style:normal;display:flex;align-items:center;justify-content:center}
.st5{display:inline-flex;align-items:center;gap:5px;padding:2.5px 10px;border-radius:999px;font-size:11px;font-weight:500;white-space:nowrap}
.st5::before{content:'';width:5px;height:5px;border-radius:50%}
.st5-pend{background:#FFFBEB;color:#B45309;border:1px solid rgba(255,149,0,.25)}
.st5-pend::before{background:#F59E0B;animation:pulseDot 1.6s infinite}
.st5-done{background:#EFF6FF;color:#0062CC;border:1px solid rgba(0,122,255,.2)}
.st5-done::before{background:#007AFF}
.st5-ok{background:#ECFDF5;color:#059669;border:1px solid rgba(52,199,89,.22)}
.st5-ok::before{background:#10B981}
.st5-gray{background:#F1F5F9;color:#64748B;border:1px solid rgba(0,0,0,.05)}
.st5-gray::before{background:#94A3B8}
@keyframes pulseDot{0%,100%{opacity:1}50%{opacity:.35}}
.fee5{display:inline-flex;padding:2px 9px;border-radius:999px;font-size:11px;font-variant-numeric:tabular-nums}
.fee5.ok{background:#ECFDF5;color:#059669}.fee5.bad{background:#FFF1F2;color:#E11D48}.fee5.none{background:#F1F5F9;color:#64748B}
.t-ok{border:none;background:none;color:#007AFF;font-weight:600;font-size:12px;cursor:pointer;margin-right:12px;font-family:inherit}
.t-ok:hover{color:#0062CC;text-decoration:underline}
.t-ghost{border:none;background:none;color:var(--s400);font-size:12px;cursor:pointer;font-family:inherit}
.t-ghost:hover{color:var(--s700)}
.cur-tag{display:inline-flex;align-items:center;gap:4px;padding:1px 8px;border-radius:999px;background:rgba(0,122,255,.12);color:#007AFF;font-size:10px;font-weight:500}
.cur-tag::before{content:'';width:5px;height:5px;border-radius:50%;background:#007AFF;animation:pulseDot 1.6s infinite}
.en5-foot{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;background:#fff;border:1px solid rgba(0,0,0,.05);border-top:none;border-radius:0 0 14px 14px;padding:12px 20px}
.pg-b{width:26px;height:26px;border-radius:7px;border:1px solid rgba(0,0,0,.08);background:#fff;color:var(--s600);cursor:pointer;font-size:14px;line-height:1}
.pg-b:hover{background:var(--s50)}
.pg-b:disabled{opacity:.3;cursor:default}
.en5c{background:#fff;border:1px solid rgba(0,0,0,.05);border-radius:14px;padding:13px 14px;margin-bottom:10px;cursor:pointer}
.en5c.cur{border-color:rgba(0,122,255,.45);box-shadow:0 0 0 3px rgba(0,122,255,.08)}

/* ── 新生入学登记页 (5E 表单) ── */
.en5n-top{background:#fff;border-bottom:1px solid rgba(0,0,0,.05);padding:22px 28px 18px}
.stepbar{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
@media (min-width:900px){ .stepbar{grid-template-columns:repeat(4,minmax(0,1fr))} }
.stepbar .st{display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:12px;background:#fff;border:1px solid rgba(0,0,0,.06);text-decoration:none;transition:all .15s}
.stepbar .st .no{width:24px;height:24px;border-radius:50%;background:var(--s100);color:var(--s600);display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:600;flex-shrink:0}
.stepbar .st .tx{min-width:0}
.stepbar .st b{display:block;font-size:12px;color:var(--s800);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.stepbar .st small{display:block;font-size:10px;color:var(--s400);margin-top:1px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.stepbar .st.on{background:rgba(0,122,255,.07);border-color:rgba(0,122,255,.35)}
.stepbar .st.on .no{background:var(--brand);color:#fff}
.stepbar .st.on b{color:var(--brand)}
.en5n-body{display:grid;grid-template-columns:1fr;gap:16px;padding:22px 28px 120px;max-width:1520px;margin:0 auto}
@media (min-width:1100px){ .en5n-body{grid-template-columns:8fr 4fr;align-items:start} }
.en5n-main{min-width:0}
.en5n-side{min-width:0;display:flex;flex-direction:column}
.bg-card{background:#fff;border:1px solid rgba(0,0,0,.05);border-radius:14px}
.fcard{background:#fff;border:1px solid rgba(0,0,0,.05);border-radius:14px;padding:20px;box-shadow:0 1px 3px rgba(0,0,0,.02)}
.fc-head{display:flex;align-items:center;gap:9px;flex-wrap:wrap;padding-bottom:14px;margin-bottom:16px;border-bottom:1px solid rgba(0,0,0,.04)}
.fc-head{font-size:14px;font-weight:600;color:var(--s900)}
.fc-head small{font-weight:400;color:var(--s400);font-size:11px}
.fc-head em{font-style:normal;font-size:10.5px;color:var(--s400);margin-left:auto}
.fc-head em.ok{color:#059669;background:#ECFDF5;border:1px solid rgba(52,199,89,.2);border-radius:999px;padding:2px 9px;font-family:inherit;font-size:11px}
.frow-basic{display:flex;flex-direction:column;gap:16px}
@media (min-width:800px){ .frow-basic{flex-direction:row;align-items:flex-start} }
.f-avatar{width:112px;height:144px;border:2px dashed var(--s300);border-radius:14px;background:var(--s50);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;cursor:pointer;flex-shrink:0;color:var(--s400);transition:all .15s;text-align:center}
.f-avatar:hover{border-color:var(--brand)}
.f-avatar .ms{font-size:26px;color:var(--brand)}
.f-avatar b{font-size:11px;color:var(--s700);font-weight:500}
.f-avatar small{font-size:9.5px;color:var(--s400)}
.fg2{flex:1;display:grid;grid-template-columns:1fr;gap:13px;width:100%}
.fg3{display:grid;grid-template-columns:1fr;gap:13px}
@media (min-width:640px){ .fg2{grid-template-columns:repeat(2,minmax(0,1fr))} .fg3{grid-template-columns:repeat(3,minmax(0,1fr))} }
.fld label{display:block;font-size:12px;font-weight:500;color:var(--s700);margin-bottom:6px}
.fld label i{color:#E11D48;font-style:normal}
.fld input,.fld select{width:100%;box-sizing:border-box;background:var(--s50);border:1px solid rgba(0,0,0,.08);border-radius:9px;padding:9px 12px;font-size:12.5px;color:var(--s900);outline:none;font-family:inherit;transition:all .15s}
.fld input:focus,.fld select:focus{background:#fff;border-color:var(--brand);box-shadow:0 0 0 3px rgba(0,122,255,.1)}
.fld select{appearance:auto}
.genbox{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.g-opt{display:flex;align-items:center;justify-content:center;gap:6px;border:1px solid rgba(0,0,0,.08);border-radius:9px;padding:9px;background:var(--s50);font-size:12.5px;color:var(--s600);cursor:pointer}
.g-opt input{display:none}
.g-opt.on{background:#FDF2F8;border-color:#F9A8D4;color:#BE185D;font-weight:500}
#gM.on{background:#EFF6FF;border-color:#93C5FD;color:#007AFF;font-weight:500}
.qf-row{font-size:12px}
.ck{display:flex;align-items:center;gap:6px;cursor:pointer;font-weight:500;color:var(--brand);background:rgba(0,122,255,.06);border:1px solid rgba(0,122,255,.18);border-radius:9px;padding:5px 10px;font-size:12px}
.ck input{accent-color:#007AFF}
.tip-note{display:flex;align-items:flex-start;gap:8px;background:rgba(0,122,255,.05);border:1px solid rgba(0,122,255,.14);border-radius:11px;padding:10px 12px;font-size:11.5px;color:var(--s500);line-height:1.7;margin-bottom:14px}
.tip-note .ms{color:var(--brand);font-size:16px;flex-shrink:0}
.rcard{background:#fff;border:1px solid rgba(0,0,0,.05);border-radius:14px;padding:18px;box-shadow:0 1px 3px rgba(0,0,0,.02)}
.rc-head{display:flex;align-items:center;gap:8px;font-size:12.5px;font-weight:600;color:var(--s900);padding-bottom:12px;margin-bottom:12px;border-bottom:1px solid rgba(0,0,0,.04)}
.rc-head .ms{color:var(--s400)}
.rc-head em{margin-left:auto;font-style:normal;font-size:9.5px;color:var(--s400);letter-spacing:.05em}
.preview-card{padding:14px;border-radius:14px;background:linear-gradient(180deg,#FAF9FE,#fff);border:1px solid rgba(0,0,0,.06)}
.pv-ava{width:46px;height:46px;border-radius:50%;background:var(--s100);color:var(--s500);display:inline-flex;align-items:center;justify-content:center;font-size:15px;font-weight:700;position:relative;flex-shrink:0}
.pv-ava i{position:absolute;right:-2px;bottom:-2px;width:15px;height:15px;border-radius:50%;background:#fff;border:1px solid rgba(0,0,0,.06);font-size:9px;font-style:normal;display:flex;align-items:center;justify-content:center}
.pv-rows{margin-top:12px;padding-top:10px;border-top:1px solid rgba(0,0,0,.04);display:flex;flex-direction:column;gap:7px}
.pv-rows div{display:flex;align-items:center;justify-content:space-between;font-size:12px}
.pv-rows span{color:var(--s400);font-size:11px}
.pv-rows b{color:var(--s800);font-weight:500;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:60%}
.en5n-bar{position:fixed;bottom:0;right:0;left:0;height:auto;min-height:60px;background:rgba(255,255,255,.92);backdrop-filter:blur(14px);border-top:1px solid rgba(0,0,0,.06);
  padding:10px 28px;display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;z-index:90}
@media (min-width:1024px){ .en5n-bar{left:var(--sb-w)} }

/* ── 学员档案页 ── */
.rk-bento{background:#fff;border:1px solid rgba(0,0,0,.05);border-radius:13px;padding:13px 14px;box-shadow:0 1px 3px rgba(0,0,0,.02);cursor:pointer;transition:all .15s}
.rk-bento:hover{transform:translateY(-1px);box-shadow:0 8px 18px rgba(0,0,0,.05)}
.rk-t{font-size:11.5px;color:var(--s500);font-weight:500;display:inline-flex;align-items:center;gap:6px}
.rk-badge{font-size:10px;padding:1.5px 8px;border-radius:999px;font-weight:500}
.rk-badge.blue{background:#EFF6FF;color:#0062CC}.rk-badge.gray{background:var(--s100);color:var(--s500)}
.rk-badge.green{background:#ECFDF5;color:#059669}.rk-badge.red{background:#FFF1F2;color:#E11D48;animation:badgeGlow 2s infinite}
@keyframes badgeGlow{0%,100%{opacity:1}50%{opacity:.72}}
.rk-link{border:none;background:none;color:#007AFF;font-size:11px;font-weight:600;cursor:pointer;font-family:inherit}
.rk-link:hover{text-decoration:underline}
.rk-tab{border:1px solid transparent;background:none;font-family:inherit;font-size:12px;color:var(--s500);padding:6px 12px;border-radius:9px;cursor:pointer;display:inline-flex;align-items:center;gap:6px}
.rk-tab:hover{background:var(--s50);color:var(--s800)}
.rk-tab.on{background:rgba(0,122,255,.07);border-color:rgba(0,122,255,.25);color:#007AFF;font-weight:600}
.rk-tab b{font-weight:600;font-variant-numeric:tabular-nums;font-size:11px;background:var(--s100);border-radius:999px;padding:1px 7px}
.rk-tab.on b{background:rgba(0,122,255,.14)}
.rk-in{display:flex;align-items:center;gap:6px;background:var(--s50);border:1px solid rgba(0,0,0,.06);border-radius:9px;padding:0 10px;min-width:150px;flex:1;max-width:220px}
.rk-in .ms{font-size:15px;color:var(--s400)}
.rk-in input{border:none;outline:none;background:transparent;font-size:12.5px;padding:8px 0;width:100%;color:var(--s800);font-family:inherit}
.rk-in:focus-within{background:#fff;border-color:rgba(0,122,255,.4);box-shadow:0 0 0 3px rgba(0,122,255,.08)}
.rk-sel{background:var(--s50);border:1px solid rgba(0,0,0,.06);border-radius:9px;font-size:12.5px;color:var(--s700);padding:8px 10px;outline:none;font-family:inherit}
.rk-sel:focus{background:#fff;border-color:var(--brand)}
.rk-tb{width:100%;border-collapse:collapse}
.rk-tb thead th{background:#F8FAFC;border-bottom:1px solid rgba(0,0,0,.05);font-size:10.5px;font-weight:500;color:var(--s400);text-transform:uppercase;letter-spacing:.04em;padding:0 14px;height:38px;text-align:left;white-space:nowrap}
.rk-tb tbody td{padding:0 14px;height:52px;font-size:12px;color:var(--s600);border-bottom:1px solid rgba(0,0,0,.03);white-space:nowrap}
.rk-tb tbody tr{cursor:pointer;transition:background .12s}
.rk-tb tbody tr:hover{background:#F8FAFC}
.rk-tb tbody tr:last-child td{border-bottom:none}
.rk-ava{width:30px;height:30px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:12.5px;font-weight:600;position:relative;flex-shrink:0}
.rk-ava i{position:absolute;right:-3px;bottom:-3px;width:11px;height:11px;border-radius:50%;background:#fff;border:1px solid rgba(0,0,0,.05);font-size:7.5px;font-style:normal;display:flex;align-items:center;justify-content:center}
.rk-ava.big{width:46px;height:46px;font-size:15px;border-radius:14px}
.rk-ava.big i{width:14px;height:14px;font-size:8.5px}
.c5{display:inline-flex;background:var(--s100);color:var(--s700);padding:2px 9px;border-radius:7px;font-size:11px;font-weight:500}
.d5{display:inline-flex;align-items:center;gap:5px;background:#F1F5F9;color:var(--s500);padding:2px 9px;border-radius:999px;font-size:11px}
.d5.on{background:#ECFDF5;color:#059669}
.d5 span{width:5px;height:5px;border-radius:50%;background:currentColor}
.rk-mod{background:#fff;border:1px solid rgba(0,0,0,.07);border-radius:14px;padding:13px 15px}
.rk-mh{font-size:12.5px;font-weight:700;color:var(--s800);padding-bottom:9px;margin-bottom:8px;border-bottom:1px solid var(--s100);display:flex;align-items:center;gap:7px}
.rk-mh::before{content:'';width:7px;height:7px;border-radius:50%;background:#007AFF;display:inline-block}
.rk-tag{display:inline-flex;padding:2.5px 10px;border-radius:999px;font-size:10.5px;font-weight:500}
.rk-tag.blue{background:rgba(0,122,255,.08);color:#0062CC}
.rk-tag.purple{background:#EEF2FF;color:#7A3FD1;border:1px solid rgba(122,63,209,.15)}
.rk-tag.amber{background:#FFFBEB;color:#B45309;border:1px solid rgba(255,149,0,.2)}
.rk-tag.gray{background:var(--s100);color:var(--s500)}
.rk-mc{background:#fff;border:1px solid rgba(0,0,0,.05);border-radius:14px;padding:12px 14px;margin-bottom:10px;cursor:pointer}

/* ── 抽屉防内容甩出 ── */
#rkPanel{overflow-y:auto !important;overflow-x:hidden !important;overflow-wrap:anywhere;word-break:break-word}
#rkPanel > div{min-width:0;max-width:100%}
#rkPanel .rk-mod{min-width:0}
#rkPanel .rk-tag{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#rkDr{min-width:0}
.rk-mod .kv2 b{max-width:68%;word-break:break-all;text-align:right}

/* ── 班级管理页 ── */
.cl-note{display:flex;align-items:center;gap:8px;background:var(--s50);border:1px solid rgba(0,0,0,.05);border-radius:10px;padding:8px 13px;font-size:11.5px;color:var(--s500);margin-top:10px}
.cl-note .ms{color:var(--s400)}
.cl-kpi{background:#fff;border:1px solid rgba(0,0,0,.05);border-radius:13px;padding:12px 14px;cursor:pointer;transition:all .15s}
.cl-kpi:hover{box-shadow:0 6px 16px rgba(0,0,0,.05)}
.cl-kpi.warn{background:rgba(255,149,0,.04);border-color:rgba(255,149,0,.25)}
.cl-quick{background:#fff;border:1px solid rgba(0,0,0,.05);border-radius:14px;padding:14px 16px;margin-top:14px}
.qc-grid{display:grid;grid-template-columns:1fr;gap:10px}
@media (min-width:900px){ .qc-grid{grid-template-columns:1.6fr 1fr 1fr auto} }
.cl-tab{border:none;background:none;font-family:inherit;font-size:12px;color:var(--s500);padding:5px 12px;border-radius:7px;cursor:pointer;white-space:nowrap}
.cl-tab:hover{color:var(--s800)}
.cl-tab.on{background:#fff;color:#007AFF;font-weight:600;box-shadow:0 1px 3px rgba(0,0,0,.07)}
.cl-grid{grid-template-columns:1fr !important}
@media (min-width:760px){ .cl-grid{grid-template-columns:repeat(2,minmax(0,1fr)) !important} }
@media (min-width:1200px){ .cl-grid{grid-template-columns:repeat(3,minmax(0,1fr)) !important} }
.cl-card{background:#fff;border:1px solid rgba(0,0,0,.06);border-radius:14px;display:flex;flex-direction:column;overflow:hidden;cursor:pointer;transition:all .16s;box-shadow:0 1px 3px rgba(0,0,0,.02)}
.cl-card:hover{border-color:rgba(0,122,255,.4);box-shadow:0 8px 22px rgba(0,0,0,.06);transform:translateY(-1px)}
.cl-mrow{display:flex;align-items:center;gap:10px;padding:7px 10px;border-radius:10px;border:1px solid rgba(0,0,0,.05);margin-bottom:6px;background:#fff;transition:background .12s}
.cl-mrow:hover{background:#F8FAFC}

/* ── 宿舍管理页 ── */
.dm-rooms{grid-template-columns:1fr !important}
.dm-cls2{grid-template-columns:1fr !important}
.dm-qgrid{grid-template-columns:1fr !important}
@media (min-width:560px){ .dm-rooms{grid-template-columns:repeat(2,minmax(0,1fr)) !important} }
@media (min-width:900px){ .dm-rooms{grid-template-columns:repeat(3,minmax(0,1fr)) !important} .dm-cls2{grid-template-columns:repeat(2,minmax(0,1fr)) !important} }
@media (min-width:1250px){ .dm-rooms{grid-template-columns:repeat(4,minmax(0,1fr)) !important} .dm-qgrid{grid-template-columns:1fr 1fr !important} }
.dm-room:hover{border-color:rgba(0,122,255,.4);box-shadow:0 4px 12px rgba(0,0,0,.05)}

/* 离校联合核验抽屉(leave)显隐 */
#drDrawer.dr-in,#attDrawer.dr-in{transform:translateX(0)!important;opacity:1!important}

/* 离校抽屉背景遮罩模糊 (#lvVeil 调轻: 暗化 .32→.18 / blur 4px→2px; 遮罩补回后它真的盖在台账表上, 故调轻) */
#lvVeil{position:fixed;inset:0;background:rgba(24,26,32,.18);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);z-index:2050;opacity:0;pointer-events:none;transition:opacity .25s ease}
/* #attVeil(点名页)与原来逐字一致: 本轮不动点名页任何观感 */
#attVeil{position:fixed;inset:0;background:rgba(24,26,32,.32);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);z-index:2050;opacity:0;pointer-events:none;transition:opacity .25s ease}
#lvVeil.on,#attVeil.on{opacity:1;pointer-events:auto}

/* 置顶独立项(首页): 与下方分组区分 */
.sb-item.sb-top{font-weight:600;margin:2px 0 8px;padding-bottom:11px;border-bottom:1px solid rgba(0,0,0,.06)}
.sb-acc.first .sb-sec-title{padding-top:6px}
body.sb-min .sb-item.sb-top{border-bottom:0;margin:2px 0 6px;padding:10px 0}

/* ═══ 顶部通知中心(首页新增) ═══ */
.nf-wrap{position:relative;display:inline-flex;align-items:center}
.nf-panel{position:absolute;right:0;top:40px;width:352px;background:#fff;border:1px solid var(--s200);border-radius:var(--r-xl);
  box-shadow:0 18px 40px -12px rgba(15,23,42,.18),0 4px 12px rgba(0,0,0,.04);padding:14px;z-index:80}
.nf-panel[hidden]{display:none}
.nf-panel-hd{display:flex;align-items:center;justify-content:space-between;padding-bottom:10px;border-bottom:1px solid var(--s100)}
.nf-link{background:none;border:none;padding:0;font-size:11px;color:var(--s400);cursor:pointer;font-family:inherit;transition:color .15s}
.nf-link:hover{color:var(--brand)}
.nf-link.brand{color:var(--brand);font-weight:500;display:inline-flex;align-items:center;gap:2px}
.nf-mini-list{display:flex;flex-direction:column;gap:8px;margin:10px 0;max-height:264px;overflow-y:auto}
.nf-mini{padding:10px;border-radius:var(--r-md);background:var(--s50);border:1px solid var(--s100);cursor:pointer;transition:background .15s}
.nf-mini:hover{background:var(--s100)}
.nf-mini-top{display:flex;align-items:center;justify-content:space-between;gap:6px}
.nf-mini-t{font-size:11.5px;font-weight:600;color:var(--s900);margin-top:2px;display:block}
.nf-mini-b{font-size:11px;color:var(--s500);margin-top:2px;display:block}
.nf-panel-ft{display:flex;align-items:center;justify-content:space-between;padding-top:10px;border-top:1px solid var(--s100)}
.nf-view{display:none}
.nf-view.on{display:flex}
.nf-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;flex-wrap:wrap}
.nf-kpis{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}
.nf-kpi{background:#fff;border:1px solid rgba(229,229,234,.9);border-radius:var(--r-xl);box-shadow:var(--shadow-card);padding:14px 16px;
  display:flex;flex-direction:column;justify-content:space-between;min-height:112px;transition:transform .22s cubic-bezier(.16,1,.3,1),box-shadow .22s}
.nf-kpi:hover{transform:translateY(-2px);box-shadow:var(--shadow-hover)}
.nf-kpi-hd{display:flex;align-items:center;justify-content:space-between;gap:6px}
.nf-kpi-hd .lb{display:flex;align-items:center;gap:6px;font-size:11.5px;font-weight:500;color:var(--s800);min-width:0}
.nf-kpi-hd .lb span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nf-kpi-num{display:flex;align-items:baseline;gap:5px;margin-top:6px}
.nf-kpi-num b{font-size:26px;font-weight:600;color:var(--s900);letter-spacing:-.02em;font-variant-numeric:tabular-nums;line-height:1}
.nf-kpi-num i{font-style:normal;font-size:11px;color:var(--s400)}
.nf-kpi-ft{display:flex;align-items:center;justify-content:space-between;padding-top:8px;margin-top:8px;border-top:1px solid var(--s100);font-size:11px;color:var(--s500)}
.nf-tabs{display:inline-flex;align-items:center;gap:2px;padding:3px;border-radius:999px;background:var(--s100);border:1px solid var(--s200);overflow-x:auto;max-width:100%}
.nf-tab{padding:5px 12px;border-radius:999px;border:none;background:transparent;color:var(--s500);font-size:12px;font-weight:500;cursor:pointer;
  white-space:nowrap;font-family:inherit;transition:all .2s cubic-bezier(.16,1,.3,1)}
.nf-tab.on{background:#fff;color:var(--s900);box-shadow:0 1px 2px rgba(15,23,42,.06)}
.nf-items{display:flex;flex-direction:column;gap:10px}
.nf-item{display:flex;flex-direction:column;gap:10px;padding:14px;border-radius:var(--r-lg);background:var(--s50);border:1px solid var(--s100);
  transition:background .15s}
.nf-item:hover{background:var(--s100)}
.nf-item.read{opacity:.62}
.nf-item-main{display:flex;align-items:flex-start;gap:12px;min-width:0}
.nf-ico{width:32px;height:32px;border-radius:var(--r-md);display:inline-flex;align-items:center;justify-content:center;flex:none}
.nf-ico.lv-danger{background:var(--danger-soft);color:var(--danger)}
.nf-ico.lv-brand{background:var(--brand-light);color:var(--brand)}
.nf-ico.lv-warn{background:var(--warn-soft);color:var(--warn)}
.nf-ico.lv-ok{background:var(--ok-soft);color:var(--ok)}
.nf-ico.lv-muted{background:var(--s200);color:var(--s600)}
.nf-tag{display:inline-flex;align-items:center;padding:1px 8px;border-radius:999px;font-size:10px;font-weight:500;white-space:nowrap}
.nf-tag.lv-danger{background:var(--danger-soft);color:var(--danger)}
.nf-tag.lv-brand{background:var(--brand-light);color:var(--brand)}
.nf-tag.lv-warn{background:var(--warn-soft);color:var(--warn)}
.nf-tag.lv-ok{background:var(--ok-soft);color:var(--ok)}
.nf-tag.lv-muted{background:var(--s200);color:var(--s600)}
.nf-title{font-size:12px;font-weight:600;color:var(--s900)}
.nf-body{font-size:11.5px;color:var(--s600);line-height:1.6;margin-top:3px}
.nf-meta{display:flex;align-items:center;gap:12px;font-size:11px;color:var(--s400);margin-top:5px;flex-wrap:wrap}
.nf-acts{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.nf-unread{width:7px;height:7px;border-radius:50%;background:var(--brand);flex:none}
@media (max-width:1100px){ .nf-kpis{grid-template-columns:repeat(2,minmax(0,1fr))} }
@media (max-width:640px){
  .nf-kpis{grid-template-columns:1fr}
  .nf-panel{position:fixed;left:12px;right:12px;top:64px;width:auto}
}

/* 顶栏通知下拉(定位在顶部图标正下方) */
.tb-notif{position:relative;display:inline-flex;align-items:center}
.tb-nf-panel{position:absolute;right:-6px;top:calc(100% + 12px);width:340px;z-index:90}
.tb-nf-panel:before{content:'';position:absolute;top:-6px;right:14px;width:12px;height:12px;background:#fff;border-left:1px solid var(--s200);border-top:1px solid var(--s200);transform:rotate(45deg)}
@media (max-width:640px){ .tb-nf-panel{position:fixed;left:12px;right:12px;top:62px;width:auto} .tb-nf-panel:before{display:none} }

/* 顶栏通知入口为 <a>(JS 失效时原生跳转可达) */
a.tb-icon{display:inline-flex;align-items:center;justify-content:center}

/* 通用输入弹层(app.js ytPrompt)输入框 */
.mp-in{margin-top:10px;width:100%;height:36px;border-radius:10px;border:1px solid var(--s200,#E5E5EA);background:#fff;
  padding:0 12px;font-size:14px;font-family:inherit;color:var(--s900,#1D1D1F);outline:none;transition:border-color .15s,box-shadow .15s}
.mp-in:focus{border-color:var(--brand,#007AFF);box-shadow:0 0 0 3px rgba(0,122,255,.1)}

/* ===== 宿舍房卡「专属归属 / 实住合作方」标签(共用: /dorm · /dorm_reserve · /dorm_patrol 房卡) =====
   用户: 「宿舍可以标注下 是哪个合作方学员入住在这个宿舍 方便管理 如果有2个合作方 就写2个标签」
   数据源 = dorm_floor_state() 的 partners / owner_name(与各页在住人数同一批行、同一口径)。
   规范: 统一浅蓝 = 浅蓝底 + 品牌蓝 #3478F7 + 圆角 + 无边框; 禁 emoji(多合作方用小圆点=内联 SVG);
   宁缺毋假: 空房不显示「实住」、无专属不显示「专属」, 绝不写「无」「混合」。 */
.dorm-tag-row{display:flex;flex-wrap:wrap;align-items:center;gap:4px;margin:5px 0 0;min-width:0}
.dorm-tag{display:inline-block;max-width:100%;font-size:9.5px;line-height:1.7;font-weight:600;color:#3478F7;
  background:#EAF2FE;border:0;border-radius:7px;padding:1px 7px;white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis;vertical-align:middle}
.dorm-tag.multi{background:#DCEAFE}
.dorm-tag-dot{display:inline-block;width:6px;height:6px;margin-right:4px;vertical-align:middle}

/* ═══════════════════════════════════════════════════════════════
   排课 · 「周历 / 月历」两个视图(P3b 新增, 用在 /schedule 的周课表区)
   类名一律 wk- 前缀 —— 已与本文件全文查重: 0 命中(模板里既有的 wk-paper* 是页内 <style>, 与这里不重名)。
   口径: 法定放假红 #e11d48 · 休息橙 #d97706 · 周末灰 · 今天蓝 #3478F7;
   窄屏一律放在横向滚动容器里看全(**不把内容压扁** —— 7 列挤成一团就没法读了)。
   三视图切换控件本身**复用本页既有 .seg 分段样式**(页内 <style> 里已有), 这里不重复定义。
   ═══════════════════════════════════════════════════════════════ */
.wk-vwrap, .wk-mwrap{padding-top:11px;max-width:100%}
.wk-vhint, .wk-mhint{font-size:10.5px;color:#8E8E93;line-height:1.7;margin:0 0 8px}
.wk-vhint.err, .wk-mhint.err{color:#FF3B30;font-weight:600}
.wk-vscroll, .wk-mscroll{overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%}

/* ── 周历: 行 = 班级 · 列 = 该周 7 天(含周日) ── */
.wk-vtb{width:100%;min-width:780px;border-collapse:separate;border-spacing:0;border:1px solid #E5E5EA;
  border-radius:12px;overflow:hidden;background:#fff;font-size:10.5px;table-layout:fixed}
.wk-vtb th, .wk-vtb td{border-right:1px solid #F0F0F2;border-bottom:1px solid #F0F0F2;padding:6px 5px;vertical-align:top}
.wk-vtb tr:last-child td{border-bottom:0}
.wk-vtb th:last-child, .wk-vtb td:last-child{border-right:0}
.wk-vth-cn, .wk-vtd-cn{width:74px;text-align:left;background:#FAFAFC}
.wk-vth-cn{font-weight:700;color:#636366;padding:7px 9px}
.wk-vtd-cn{font-weight:600;color:#1C1C1E;font-size:11px;padding:8px 9px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wk-vth-c{text-align:center;background:#F8F8FA;font-weight:600;color:#636366}
.wk-vth-n{width:62px;text-align:center;background:#F8F8FA;font-weight:700;color:#636366}
.wk-vtd-n{width:62px;text-align:center;font-weight:700;color:#1C1C1E;font-size:12.5px;vertical-align:middle}
.wk-vd{display:inline-block;font-size:11.5px;font-weight:700;color:#1C1C1E;line-height:1.35;padding:1px 6px;border-radius:99px}
.wk-vd.today{background:#3478F7;color:#fff}
.wk-vw{display:block;font-size:10px;font-weight:400;color:#8E8E93;line-height:1.5}
.wk-voff{display:block;margin-top:2px;line-height:1.45;overflow:hidden}
.wk-voff b{display:block;font-size:9.5px;font-weight:700}
.wk-voff i{display:block;font-style:normal;font-size:8.5px;font-weight:400;color:#8E8E93;
  max-height:2.9em;overflow:hidden;text-overflow:ellipsis}
.wk-voff.h b{color:#e11d48}
.wk-voff.r b{color:#d97706}
.wk-vth-c.h{background:#FEF2F2}
.wk-vth-c.r{background:#FFFBEB}
.wk-vth-c.we{background:#F2F2F7}
.wk-vtd.h, .wk-vtd.r{background:#F7F7F9}          /* 整日放假 / 休息的格子: 灰底 + 格内照实标注(服务端短句) */
.wk-vtd.we{background:#FAFAFC}                    /* 周末(没放假的六 / 日): 比放假浅一档 */
.wk-vtd.r .wk-vp, .wk-vtd.h .wk-vp{color:#8E8E93}
.wk-vp{display:block;padding:1px 3px;border-radius:6px;line-height:1.5;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
/* ★ P4b-1(新类, 已查重: 本文件 0 命中): 周历里**已排的那一节**改成按钮可点(点开「改这一条」抽屉)。
   形制沿用 .wk-vp(同一个格子里的同一行课, 观感不变), 只把按钮原生外观清掉; 悬停给一层浅灰以示可点。 */
.wk-vpbtn{display:block;width:100%;border:0;background:transparent;font-family:inherit;font-size:inherit;
          font-weight:inherit;color:inherit;text-align:left;cursor:pointer;-webkit-appearance:none;appearance:none}
.wk-vpbtn:hover{background:#F2F2F7}
.wk-vpl{font-style:normal;color:#AEAEB2;margin-right:3px}
.wk-vsubj{font-weight:600;color:#1C1C1E}
.wk-vdot{color:#C7C7CC;padding:0 1px}
.wk-vstaff{font-style:normal;color:#8E8E93}
.wk-vshort{font-weight:600;color:#A16207}
/* ★ 2026-09-24: 整天放假/休息的时段 —— 白天不留空, 合并成一句说清 */
.wk-vrest{font-weight:600;color:#8E8E93}
.wk-vp.off{background:#FFFBEB}
.wk-vp.blank .wk-vpl{margin-right:0}
/* ★ 2026-09-24 本单: 周历格里的「补课日」一句提醒 + 一键开关
   (判据与文案全部来自服务端下发的补课候选, 默认永远不补课; 类名 wk-mk* 已与 style.css / schedule.html 查重: 0 命中) */
.wk-mknote{display:block;font-size:9px;line-height:1.6;color:#0B57D0;background:#F0F6FF;border-radius:6px;
  padding:1px 4px;margin-top:2px;text-align:left;overflow-wrap:anywhere}
.wk-mkbtn{display:block;width:100%;margin-top:2px;border:1px solid #CDE0FE;background:#fff;color:#0B57D0;
  border-radius:6px;font-size:9px;padding:1px 4px;cursor:pointer;font-family:inherit;line-height:1.5}
.wk-mkbtn:hover{background:#F0F6FF}

/* ── 月历: 7 列 × 最多 6 行 ── */
.wk-mgrid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px;min-width:960px;align-items:stretch}
.wk-mhd{font-size:10px;font-weight:700;color:#636366;text-align:center;background:#F8F8FA;
  border:1px solid #E5E5EA;border-radius:8px;padding:5px 4px}
.wk-mcell{min-height:88px;border:1px solid #E5E5EA;border-radius:10px;padding:5px 6px;background:#fff;overflow:hidden}
.wk-mcell.h{background:#FEF2F2;border-color:#FBD5DC}     /* 法定放假: 红 */
.wk-mcell.r{background:#FFFBEB;border-color:#FBE7B8}     /* 全休(休息日): 橙 */
.wk-mcell.we{background:#F2F2F7}                          /* 周末: 灰 */
.wk-mcell.out{opacity:.42}                                /* 跨月的首尾几天: 淡显 */
.wk-mhead{display:flex;align-items:center;gap:5px;margin-bottom:3px;min-width:0;overflow:hidden}
.wk-mday{flex:0 0 auto;display:inline-block;font-size:11px;font-weight:700;color:#1C1C1E;line-height:1.3;padding:0 5px;border-radius:99px}
.wk-mday.today{background:#3478F7;color:#fff}             /* 今天: 蓝 */
.wk-mhead .wk-voff{margin:0;min-width:0;flex:1 1 auto;display:flex;flex-direction:column}
.wk-mhead .wk-voff b{white-space:nowrap;font-size:9px}
.wk-mhead .wk-voff i{max-height:1.5em;white-space:nowrap;font-size:8.5px}
.wk-mlist{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 8px}   /* 分两栏: 有 8 个班就 8 行都出 */
.wk-mrow{display:flex;gap:3px;min-width:0;font-size:9px;line-height:1.5}
.wk-mc{flex:0 0 auto;font-weight:700;color:#1C1C1E}
.wk-mseg{flex:1 1 auto;min-width:0;color:#636366;word-break:break-all}
.wk-mdot{color:#C7C7CC;padding:0 1px}

/* ---- 排课页「排几周」档位(2026-09-24): 页面内分段 chip, 默认「只排本周」= 改动前那套行为。
   类名带 sch- 页面前缀(已 grep 全库无同名); 只给这一个控件用, 不覆写任何既有类。 ---- */
.sch-apw{display:inline-flex;align-items:center;gap:4px;flex-wrap:wrap}
.sch-apw-l{font-size:10.5px;color:#636366}
.sch-apw-b{border:1px solid #E5E5EA;background:#fff;color:#636366;border-radius:8px;font-size:11px;font-weight:600;padding:6px 10px;cursor:pointer;white-space:nowrap}
.sch-apw-b.on{background:#3478F7;border-color:#3478F7;color:#fff}
.sch-apw-b[disabled]{cursor:default}
.sch-apw-h{font-size:10.5px;color:#8E8E93}

/* ══ 排课页「规则设置 ⚙」右侧抽屉(2026-09-24 · 用户要「抽屉展示模式」) ══════════════════════════
   原来那块「就地展开」的折叠区整个撤掉, 四块规则(学期 / 节假日 / 休息日 / 老师课量上限)整体搬进这里 ——
   字段一个没少、保存逻辑一字未改, 只换容器。右侧滑出 520px(手机 100vw 满屏); 底部操作区常驻
   (内容再长也只滚中间那一层, 按钮不跑出屏幕); 面板顶部只留标题 + ⓘ(说明进 title), 不写解释性文案。
   类名带 wk- 页面前缀(已 grep 全库无同名), 不覆写任何既有类; 开关只切 .on, 不刷新、不写库。 ══ */
.wk-dw{position:fixed;top:0;right:0;bottom:0;width:520px;max-width:100vw;display:flex;flex-direction:column;
  background:#fff;z-index:1600;box-shadow:-8px 0 28px rgba(0,0,0,.12);transform:translateX(102%);
  visibility:hidden;transition:transform .28s cubic-bezier(.16,1,.3,1),visibility .28s}
.wk-dw.on{transform:translateX(0);visibility:visible}
.wk-dw-bd{position:fixed;inset:0;background:rgba(29,29,31,.3);z-index:1550;opacity:0;pointer-events:none;transition:opacity .28s}
.wk-dw-bd.on{opacity:1;pointer-events:auto}
.wk-dw-hd{flex:0 0 auto;display:flex;align-items:center;gap:7px;padding:12px 16px;border-bottom:1px solid #F0F0F2;background:#FCFCFD}
.wk-dw-tt{font-size:13.5px;color:#1C1C1E}
.wk-dw-i{font-size:11px;color:#8E8E93;font-style:normal;cursor:help}
.wk-dw-x{margin-left:auto;border:0;background:none;color:#8E8E93;font-size:14px;line-height:1;padding:4px 7px;cursor:pointer;border-radius:8px;font-family:inherit}
.wk-dw-x:hover{background:#F2F2F7;color:#1C1C1E}
.wk-dw-scroll{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;padding:12px 16px}
.wk-dw-b2{padding:0}
.wk-dw-scroll .s2seg{margin-bottom:10px}
.wk-dw-saved{margin-top:10px;border-top:1px solid #F0F0F2;padding-top:9px;line-height:1.8}
.wk-dw-ft{flex:0 0 auto;display:flex;justify-content:flex-end;align-items:center;gap:8px;flex-wrap:wrap;
  padding:10px 16px;border-top:1px solid #F0F0F2;background:#FCFCFD;padding-bottom:calc(10px + env(safe-area-inset-bottom))}
.wk-dw-g2{display:grid;grid-template-columns:repeat(2,1fr);gap:10px;margin-top:10px}
.wk-dw-g4{display:grid;grid-template-columns:repeat(4,1fr);gap:9px;margin-top:9px}
.wk-dw-g4>div{min-width:0}
.wk-dw-gcal{display:grid;grid-template-columns:7fr 5fr;gap:12px}
.wk-dw-grest{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.wk-dw-fld{display:flex;flex-direction:column;gap:4px;margin-top:8px}
.wk-dw-fld>label{font-size:10.5px;color:#636366}
.wk-dw-note{font-size:9.5px;color:#8E8E93}
@media (max-width:640px){
  .wk-dw{width:100vw}                                     /* 手机: 100vw 全屏, 绝不比屏幕宽 */
  .wk-dw-g2,.wk-dw-g4{grid-template-columns:repeat(2,1fr)}
  .wk-dw-gcal,.wk-dw-grest{grid-template-columns:1fr}     /* 窄屏改单列, 内容不许横向顶出屏 */
}

/* ★ 本单(2026-09-24): 抽屉里那块**参考假期输入界面**(标题 + 说明 + 空虚线框 + 名称/两个日期框 +
   加入按钮 + 底部那句)已**整块删掉**, 连它自己那族样式(.wk-href / -hd / -tag / -note / -list /
   -row / -nm / -dt / -del / -empty / -add / -msg)一并清掉 ⇒ 不留空壳、不留多余间距。
   参考层功能没死: 数据仍从 /api/schedule/holiday_ref 读, 只落到**日历格子**里的一行小字(见下)。 */
/* 日历格子里参考假期的**淡色小字**: 只在「实际不放假」的格子上生成(放假那天仍按实际放假的红字+名称;
   两者都在时以实际放假为主), 非参考范围的格子**不生成这个 span** ⇒ 绝不留空行撑高。 */
.wk-href-min{display:block;font-size:7.5px;font-weight:400;line-height:1.15;color:#AEAEB2;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
/* ★ 本单(2026-09-24): **日常节日**(kind='day', 如 平安夜 / 圣诞节 / 除夕 / 春节 / 植树节)在日历格子上的
   一行小字。与「国家法定假期」的 `.wk-href-min`(#AEAEB2 淡色)**一眼分得开**: 更淡更灰(#C7C7CC)
   ⇒ 绝不跟「实际放假」的**红字**(.wk-cal-hn)抢眼。三层优先级: 实际放假(红) > 法定假期 > 日常节日,
   同一天只渲染**最高优先级那一个** span(不叠两行); 非相关日子不生成节点(不留空行撑高)。
   与 .wk-href-min 同一套排版(一行 / 省略号 / 不撑宽), 窄屏也不挤爆格子; title 里带全名。 */
.wk-href-day{display:block;font-size:7.5px;font-weight:400;line-height:1.15;color:#C7C7CC;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}

/* ── 「老师课量限制」那 9 张老师卡片(2026-09-24 本单): 原来挤成 4 列 ⇒ 每张卡比姓名还窄 ⇒ 姓名被压成逐字竖排
   (「张自贵」渲染成 张 / 自 / 贵 三行)。桌面抽屉里改 2 列、窄屏(≤640) 1 列; 姓名强制一行(放不下才省略号),
   卡片里其余信息(「教学 · 在职」+ 1 2 3 档位)的布局与语义一字未改。 ── */
.wk-dw-caps{display:grid;grid-template-columns:repeat(2,1fr);gap:9px;margin-top:9px}
.wk-dw-caps>div{min-width:0}                              /* 网格项不许被内容顶宽(否则姓名放不下也不省略) */
.wk-dw-cn{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
@media (max-width:640px){
  .wk-dw-caps{grid-template-columns:repeat(1,1fr)}
}

/* ── 规则设置抽屉里的 2 枚「页面内下拉」(2026-09-24 本单): 日课时制 #tDays / 休息日 #rD。
   全站既有的「页面内下拉」是一族同姿势的组件(att-vdrop / dup-vdrop / ex-vdrop / lr-vdrop /
   en-vdrop / rk-vdrop / cl-vdrop: {前缀}-vdrop = btn + cur + arrow + menu + opt, `-open` 修饰
   + 顶层 data-act 委托 + composedPath 判点内/点外 + Esc 收起) —— 本页照这一族来做, 落在本页的
   wk- 前缀族里(.wk-dw-* 同一族), 不另发明姿势。只新增类, 既有任何类一个不改。 ── */
.wk-vdrop{position:relative;display:block;width:100%;min-width:0}
.wk-vdrop-btn{display:flex;align-items:center;gap:7px;width:100%;text-align:left;border:1px solid #E5E5EA;border-radius:9px;background:#fff;padding:7px 9px;font-size:12px;color:#1C1C1E;cursor:pointer;font-family:inherit}
.wk-vdrop-btn:hover{background:#F7F7FA}
.wk-vdrop-cur{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wk-vdrop-arrow{flex:0 0 auto;width:6px;height:6px;border-right:1.5px solid #8E8E93;border-bottom:1.5px solid #8E8E93;transform:rotate(45deg) translate(-1px,-1px);transition:transform .18s}
.wk-vdrop.wk-vdrop-open .wk-vdrop-arrow{transform:rotate(-135deg) translate(-1px,-1px)}
.wk-vdrop-menu{position:absolute;z-index:60;top:calc(100% + 6px);left:0;min-width:100%;width:max-content;max-width:min(320px,calc(100vw - 36px));max-height:260px;overflow-y:auto;display:none;background:#fff;border:1px solid rgba(0,0,0,.08);border-radius:10px;box-shadow:0 8px 22px rgba(0,0,0,.10);padding:4px}
.wk-vdrop.wk-vdrop-open .wk-vdrop-menu{display:block}
.wk-vdrop-opt{display:block;width:100%;text-align:left;border:0;background:none;border-radius:7px;padding:7px 9px;font-size:12px;color:#1C1C1E;cursor:pointer;font-family:inherit;white-space:nowrap}
.wk-vdrop-opt:hover{background:#F2F2F7}
.wk-vdrop-opt.on{background:#E9F0FF;color:#0B57D0;font-weight:600}

/* ── 排课「生成即归档」+ 历史课表(2026-09-24 本单, 用户拍板「甲」): 只新增类, 既有任何类一个不改。
   ① .sch-arch = 「草稿 / 已归档」态 + 三个入口(确认生成本周课表 / 撤销归档 / 历史课表), 并入排课那一行已有的组;
   ② .sch-archov = 历史课表面板(遮罩 + 卡片), 姿势与页内既有的 .wk-offveil 一族一致(居中卡片、点外收起、Esc 收起);
   ③ 列表一条 = 周次 / 节数 / 归档时间, 一行读完。 ── */
.sch-arch{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap}
.sch-arch-st{font-size:10.5px;color:#636366;background:#F2F2F7;border:1px solid #E5E5EA;border-radius:8px;padding:5px 9px;white-space:nowrap}
.sch-arch-st.on{color:#0B57D0;background:#E8F1FE;border-color:#CDE0FE;font-weight:600}
.sch-archov{position:fixed;inset:0;z-index:120;display:none;align-items:center;justify-content:center;background:rgba(0,0,0,.35);padding:18px}
.sch-archov[data-open="1"]{display:flex}
.sch-archbox{width:min(520px,100%);max-height:min(72vh,560px);display:flex;flex-direction:column;background:#fff;border-radius:14px;box-shadow:0 18px 48px rgba(0,0,0,.22);overflow:hidden}
.sch-archhd{display:flex;align-items:center;gap:8px;padding:12px 14px;border-bottom:1px solid #F0F0F2}
.sch-archovt{font-size:13.5px;color:#1C1C1E}
.sch-archovs{font-size:10.5px;color:#8E8E93;flex:1 1 auto;min-width:0}
.sch-archx{border:0;background:none;color:#8E8E93;font-size:14px;line-height:1;cursor:pointer;padding:4px 6px;border-radius:7px}
.sch-archx:hover{background:#F2F2F7;color:#1C1C1E}
.sch-archbd{padding:10px 14px 14px;overflow-y:auto}
.sch-arch-none{font-size:11.5px;color:#8E8E93;line-height:1.8}
.sch-arch-i{display:flex;align-items:center;gap:9px;width:100%;text-align:left;border:1px solid #E5E5EA;border-radius:10px;background:#fff;padding:9px 11px;margin-bottom:7px;cursor:pointer;font-family:inherit}
.sch-arch-i:hover{background:#F7F7FA;border-color:#CDE0FE}
.sch-arch-iw{font-size:12px;color:#1C1C1E;flex:0 0 auto}
.sch-arch-in{font-size:10.5px;color:#0B57D0;background:#E8F1FE;border:1px solid #CDE0FE;border-radius:7px;padding:2px 7px;flex:0 0 auto}
.sch-arch-ia{font-size:10.5px;color:#8E8E93;flex:1 1 auto;min-width:0;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* 收入管理页(/income) 页内专属 —— ic- 前缀, 只本页用; 无 !important */
.ic-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(215px,1fr));gap:14px}
.ic-card{border-radius:16px;border:1px solid rgba(0,0,0,.05);padding:15px 17px;position:relative}
.ic-card-h{font-size:12px;color:#86868B;padding-right:42px;line-height:1.35}
.ic-card-ico{position:absolute;top:15px;right:16px;width:34px;height:34px;border-radius:11px;display:flex;align-items:center;justify-content:center}
.ic-card-num{margin-top:7px;display:flex;align-items:baseline;white-space:nowrap}
.ic-card-cur{font-size:13px;color:#86868B;margin-right:2px}
.ic-card-int{font-size:26px;font-weight:700;color:#1D1D1F;line-height:1.15}
.ic-card-dec{font-size:15px;font-weight:700;color:#3A3A3C;margin-left:1px}
.ic-card-ft{margin-top:8px;border-top:1px solid #F1F1F4;padding-top:7px;font-size:11.5px;color:#86868B;display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap}
.ic-card-ft b{color:#3A3A3C}
.ic-card-l,.ic-card-r{white-space:nowrap}
.ic-up{color:#059669}
.ic-down{color:#DC2626}
.ic-form{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr);gap:14px}
@media (max-width:760px){.ic-kpis{grid-template-columns:1fr}.ic-form{grid-template-columns:1fr}}

/* ── 页面内下拉(第①批: dorm / leave_apply / dorm_edit): 复用全站 .wk-vdrop 族, 只补尺寸与焦点可见;
   只新增类, 既有任何类一个不改; 无 !important。 ── */
.dm-vdrop,.ap-vdrop,.de-vdrop{position:relative;display:block;min-width:96px}
.dm-vdrop .wk-vdrop-btn,.ap-vdrop .wk-vdrop-btn,.de-vdrop .wk-vdrop-btn{height:32px;border:1px solid #E5E5EA;border-radius:9px;padding:0 10px;font-size:11.5px;color:#1D1D1F;background:#fff;width:100%}
.dm-vdrop .wk-vdrop-btn:hover,.ap-vdrop .wk-vdrop-btn:hover,.de-vdrop .wk-vdrop-btn:hover{background:#F7F7FA}
.dm-vdrop .wk-vdrop-btn:focus,.ap-vdrop .wk-vdrop-btn:focus,.de-vdrop .wk-vdrop-btn:focus{border-color:#3478F7;box-shadow:0 0 0 3px rgba(52,120,247,.08);outline:none}
.dm-vdrop .wk-vdrop-btn:focus-visible,.ap-vdrop .wk-vdrop-btn:focus-visible,.de-vdrop .wk-vdrop-btn:focus-visible{outline:2px solid #3478F7;outline-offset:2px}
.dm-vdrop .wk-vdrop-opt:focus-visible,.ap-vdrop .wk-vdrop-opt:focus-visible,.de-vdrop .wk-vdrop-opt:focus-visible{outline:2px solid #3478F7;outline-offset:1px}
.dm-vdrop .wk-vdrop-btn[disabled],.ap-vdrop .wk-vdrop-btn[disabled],.de-vdrop .wk-vdrop-btn[disabled]{opacity:.55;cursor:not-allowed}
.dm-vdrop .wk-vdrop-opt.on,.ap-vdrop .wk-vdrop-opt.on,.de-vdrop .wk-vdrop-opt.on{background:#E9F0FF;color:#3478F7}

/* ── 页面内下拉(第③批a: users / staff / att / dorm_reserve): 复用全站 .wk-vdrop 族, 只补尺寸与焦点可见;
      值载体 = 带同一批 <option> 的隐藏原生 select(DOM 里保留, 界面上不出现原生控件) ── */
.us-vdrop .wk-vdrop-btn,.st-vdrop .wk-vdrop-btn,.rc-vdrop .wk-vdrop-btn,.dp-vdrop .wk-vdrop-btn,.rs-vdrop .wk-vdrop-btn{height:32px;border:1px solid #E5E5EA;border-radius:9px;padding:0 10px;font-size:11.5px;color:#1D1D1F;background:#fff;width:100%}
.us-vdrop .wk-vdrop-btn:hover,.st-vdrop .wk-vdrop-btn:hover,.rc-vdrop .wk-vdrop-btn:hover,.dp-vdrop .wk-vdrop-btn:hover,.rs-vdrop .wk-vdrop-btn:hover{background:#F7F7FA}
.us-vdrop .wk-vdrop-btn:focus,.st-vdrop .wk-vdrop-btn:focus,.rc-vdrop .wk-vdrop-btn:focus,.dp-vdrop .wk-vdrop-btn:focus,.rs-vdrop .wk-vdrop-btn:focus{border-color:#3478F7;box-shadow:0 0 0 3px rgba(52,120,247,.08);outline:none}
.us-vdrop .wk-vdrop-btn:focus-visible,.st-vdrop .wk-vdrop-btn:focus-visible,.rc-vdrop .wk-vdrop-btn:focus-visible,.dp-vdrop .wk-vdrop-btn:focus-visible,.rs-vdrop .wk-vdrop-btn:focus-visible{outline:2px solid #3478F7;outline-offset:2px}
.us-vdrop .wk-vdrop-opt:focus-visible,.st-vdrop .wk-vdrop-opt:focus-visible,.rc-vdrop .wk-vdrop-opt:focus-visible,.dp-vdrop .wk-vdrop-opt:focus-visible,.rs-vdrop .wk-vdrop-opt:focus-visible{outline:2px solid #3478F7;outline-offset:1px}
.us-vdrop .wk-vdrop-opt.on,.st-vdrop .wk-vdrop-opt.on,.rc-vdrop .wk-vdrop-opt.on,.dp-vdrop .wk-vdrop-opt.on,.rs-vdrop .wk-vdrop-opt.on{background:#E9F0FF;color:#3478F7}
.us-vdrop .wk-vdrop-menu,.st-vdrop .wk-vdrop-menu,.rc-vdrop .wk-vdrop-menu,.dp-vdrop .wk-vdrop-menu,.rs-vdrop .wk-vdrop-menu{z-index:80}

/* ── 用户管理(+ staff/att 共用第③批a): 角色下拉「内置/自定义」分组。
   ★ 只加在本页前缀 .us-vdrop 下, 不动全站 .wk-vdrop-menu 的 260px(它会波及其它页面)。── */
.us-vdrop .wk-vdrop-menu{max-height:496px}
.us-vdrop-grp{font-size:10.5px;font-weight:600;color:#8E8E93;letter-spacing:.02em;
              padding:6px 9px 3px;cursor:default;-webkit-user-select:none;user-select:none}
.us-vdrop-grp:not(:first-child){margin-top:4px;border-top:1px solid #F1F0F5}
@media (max-width:520px){ .us-vdrop .wk-vdrop-menu{max-height:min(58vh,380px)} }

/* 值载体: resClsSel 的显示/隐藏由页面 JS 用 style.display 切换(外部下拉镜像), 故原生 select 常隐 */
.rs-vhide{display:none}

/* ── 第③批b · dorm_edit / settings 窄屏适配: 原内联栅格/按钮行搬到本类(桌面声明逐字不变 ⇒ 桌面像素表现不变),
      只在 ≤760px 追加换行/单列规则; 零 !important ── */
.de-cardrow{display:grid;grid-template-columns:repeat(4,1fr);gap:11px;margin-bottom:11px;align-items:stretch}
.st-pgk{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:14px}
@media (max-width:760px){
  .de-btns{flex-wrap:wrap}
  .de-cardrow{grid-template-columns:1fr}
  .st-pgk{grid-template-columns:1fr}
  .st-pgk .pk{flex-wrap:wrap;min-width:0}
}

/* ═══════════════════════════════════════════════════════════════
   2026-10-02 本单(系统设置「登录设置」): 登录页主题变体 + 设置页样式
   · 登录页变体类只在「主题与内置默认不同」时由模板加上 ⇒ 未配置过时外观与改动前一致;
   · 设置页类名一律 lths- 前缀(已 grep 本文件确认无同名); 零 CDN · 零强制声明
   ═══════════════════════════════════════════════════════════════ */

/* ── 登录页主题变体(与 templates/login.html 的类一一对应) ── */
.auth-left.auth-bg-solid{background:var(--brand)}
.auth-left.auth-bg-dark{background:#0B1120}
.auth-left.auth-noglow::after{display:none}
.auth-card.auth-blur{background:rgba(255,255,255,.82);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}
.auth-desc{font-size:13px;line-height:1.8;color:#BFDBFE;margin:-32px 0 34px;max-width:560px}

/* ── 登录设置页 ── */
.lths-root{display:flex;flex-direction:column;gap:16px;min-width:0}
.lths-head{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;
  background:#fff;border:1px solid var(--s200);border-radius:14px;padding:14px 18px}
.lths-crumb{display:flex;flex-direction:column;gap:3px;min-width:200px}
.lths-crumb b{font-size:16px;font-weight:600;color:var(--s900)}
.lths-crumb span{font-size:12px;color:var(--s500)}
.lths-tools{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.lths-note{font-size:12px;color:#059669;background:var(--ok-soft);border-radius:9px;padding:6px 12px}
.lths-note.bad{color:#E11D48;background:var(--danger-soft)}
.lths-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,420px);gap:16px;align-items:start;min-width:0}
@media (max-width:1080px){ .lths-grid{grid-template-columns:minmax(0,1fr)} }
.lths-form{display:flex;flex-direction:column;gap:14px;min-width:0}
.lths-sec{background:#fff;border:1px solid var(--s200);border-radius:14px;padding:16px 18px;min-width:0}
.lths-sec-h{display:flex;align-items:center;gap:8px;margin-bottom:12px}
.lths-sec-h .ms{font-size:18px;color:var(--brand)}
.lths-sec-h b{font-size:14px;font-weight:600;color:var(--s900)}
.lths-row{display:flex;flex-direction:column;gap:6px;margin-bottom:12px;min-width:0}
.lths-row:last-child{margin-bottom:0}
.lths-row>label{font-size:12px;font-weight:500;color:var(--s700)}
.lths-hint{font-size:11px;color:var(--s400)}
.lths-grid2{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:10px}
@media (max-width:640px){ .lths-grid2{grid-template-columns:minmax(0,1fr)} }
.lths-picks{display:flex;flex-wrap:wrap;gap:8px}
.lths-pick{border:1px solid var(--s200);background:#fff;color:var(--s600);font-family:inherit;font-size:12px;
  font-weight:500;border-radius:9px;padding:7px 13px;cursor:pointer;display:inline-flex;align-items:center;gap:6px}
.lths-pick:hover{border-color:var(--brand-border);color:var(--s900)}
.lths-pick.on{border-color:var(--brand);background:var(--brand-light);color:var(--brand)}
.lths-dot{width:14px;height:14px;border-radius:50%;flex:none;border:1px solid rgba(0,0,0,.08)}
.lths-feat-in{display:flex;align-items:center;gap:8px}
.lths-feat-in .ms{font-size:15px;color:var(--s400);flex:none}
.lths-prev{position:sticky;top:76px;min-width:0}
@media (max-width:1080px){ .lths-prev{position:static} }
.lths-prev-hd{font-size:12px;font-weight:600;color:var(--s600);margin-bottom:8px;display:flex;align-items:center;gap:6px}
.lths-prev-hd .ms{font-size:15px;color:var(--s400)}
.lths-prev-frame{border:1px solid var(--s200);border-radius:16px;overflow:hidden;background:#fff;box-shadow:var(--shadow-card)}
.lths-prev-frame .auth-wrap{min-height:460px}
.lths-prev-frame .auth-left{padding:26px 24px}
.lths-prev-frame .auth-left::after{width:220px;height:220px;right:-90px}
.lths-prev-frame .auth-brand-lg{font-size:21px;letter-spacing:2px;gap:8px;margin-bottom:8px}
.lths-prev-frame .auth-brand-lg .ms{font-size:19px}
.lths-prev-frame .auth-slogan{font-size:11.5px;line-height:1.7;margin-bottom:16px}
.lths-prev-frame .auth-desc{font-size:10.5px;margin:-10px 0 12px}
.lths-prev-frame .auth-points li{font-size:10.5px;margin-bottom:7px;gap:6px}
.lths-prev-frame .auth-points .ms{font-size:13px}
.lths-prev-frame .auth-copy{font-size:9.5px}
.lths-prev-frame .auth-right{padding:20px;background:#F8FAFC}
.lths-prev-frame .auth-card{width:100%;padding:20px 18px;border-radius:16px}
.lths-prev-frame .auth-card h1{font-size:17px}
.lths-prev-frame .auth-sub{font-size:11px;margin-bottom:14px}
.lths-prev-frame .auth-form .lg-fld{margin-bottom:11px}
.lths-prev-frame .auth-form label{font-size:10.5px;margin-bottom:4px}
.lths-prev-frame .fld-box{border-radius:10px}
.lths-prev-frame .fld-box input{min-height:34px;font-size:12px}
.lths-prev-frame .auth-btn{min-height:36px;font-size:13px}
/* 预览内窄屏: 与登录页同款媒体查询会把左栏藏掉 ⇒ 预览里改为上下堆叠(特异性高于媒体查询, 无需强制声明) */
@media (max-width:767px){
  .lths-prev-frame .auth-wrap{flex-direction:column}
  .lths-prev-frame .auth-left{display:flex}
}

/* ── 登录背景: 自定义大图 / 动态微粒子(2026-10-02 本单) ── */
.auth-left.auth-bg-image{background-image:var(--lg-bg);background-size:cover;background-position:center;background-repeat:no-repeat}
.auth-left.auth-bg-image::before{content:'';position:absolute;inset:0;background:linear-gradient(180deg,rgba(4,16,38,.52),rgba(4,16,38,.70));z-index:0}
.auth-left.auth-bg-particles{background:linear-gradient(160deg,#0b2a63,#0a4fd6 55%,#0638a8)}
.auth-bg-canvas{position:absolute;inset:0;display:block;z-index:0;pointer-events:none}
.lths-bgup{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.lths-bgprev{width:190px;height:96px;border:1px dashed var(--s300);border-radius:12px;background:var(--s50);display:flex;align-items:center;justify-content:center;overflow:hidden;position:relative}
.lths-bgprev-empty{color:var(--s400);font-size:12px}
.lths-bgprev img{width:100%;height:100%;object-fit:cover;display:block}
.lths-bgbtns{display:flex;gap:8px;flex-wrap:wrap}
.lths-file{display:none}
@media (max-width:767px){
  .auth-wrap.auth-particles .auth-left.auth-bg-particles{display:flex;position:fixed;left:0;right:0;top:0;bottom:0;z-index:0;padding:0}
  .auth-wrap.auth-particles .auth-left.auth-bg-particles .auth-left-inner,
  .auth-wrap.auth-particles .auth-left.auth-bg-particles .auth-copy{display:none}
  .auth-wrap.auth-particles .auth-left.auth-bg-particles::after{display:none}
  .auth-wrap.auth-particles .auth-right{position:relative;z-index:1;background:transparent}
  .auth-wrap.auth-particles .auth-card{background:#fff;border:1px solid var(--s200);box-shadow:0 24px 60px rgba(0,0,0,.18);padding:26px 20px}
}

/* ★ 2026-10-02 本单(㈠ 节假日主题 / ㈡ Logo·站点图标): 登录页节日配色 + 徽章 + 品牌 Logo; 设置页 Logo/图标预览。 */
.auth-left.auth-bg-particles.auth-holiday{background:linear-gradient(160deg,var(--lg-bg-from,#0b2a63),var(--lg-bg-to,#0a4fd6))}
.auth-holiday-badge{display:inline-block;margin-bottom:14px;padding:4px 14px;border:1px solid rgba(255,255,255,.5);border-radius:999px;
  font-size:13px;letter-spacing:3px;color:#fff;background:rgba(255,255,255,.14)}
.auth-brand-logo{height:52px;width:auto;max-width:220px;object-fit:contain;display:block}
.lths-prev-frame .auth-brand-logo{height:26px;max-width:120px}
.lths-logo-prev{width:190px;height:96px;border:1px dashed var(--s300);border-radius:12px;background:var(--s50);display:flex;align-items:center;justify-content:center;overflow:hidden}
.lths-logo-prev img{max-width:100%;max-height:100%;object-fit:contain;display:block}
.lths-logo-prev span{color:var(--s400);font-size:12px}
.lths-fav-prev{width:64px;height:64px;border:1px dashed var(--s300);border-radius:12px;background:var(--s50);display:flex;align-items:center;justify-content:center;overflow:hidden}
.lths-fav-prev img{width:40px;height:40px;object-fit:contain;display:block}
.lths-fav-prev span{color:var(--s400);font-size:10px;line-height:1.3;text-align:center;padding:0 4px}
.lths-hol-reset{margin-left:auto}
/* ★ 2026-10-02 修「登录设置」页宽屏右列整片空白: 右列预览卡此前固定 460px 高(见上 .lths-prev-frame .auth-wrap),
   而左列表单很长(1920 实测左列高 2326px) ⇒ 右列 420px 宽那条从预览卡底(≈692)往下一路空到页尾,
   就是宽屏下看到的"右侧一大条整片空白". ≥1081px(仍为两列)时让预览卡按可视高度铺满并随左列粘住顶栏;
   ≤1080px(窄屏单列)逐字不变。仅本页 .lths- 类, 不动任何共用容器/其它页。 */
@media (min-width:1081px){
  .lths-prev-frame{height:calc(100vh - 140px);min-height:520px}
  .lths-prev-frame .auth-wrap{height:100%;min-height:0}
}

/* ── 内联 SVG 图标 (2026-10-03 第一期: 图标字体 → 内联 SVG; 仅登录页 + 侧栏/顶栏/底栏) ──
   .ic = 宏 templates/_icons.html 输出的 <svg>(width/height 属性定尺寸, fill=currentColor 取色)。
   下面每条都与既有的 .ms(连字字体) 规则一一对应 —— 只**追加** .ic 规则, 不改动任何 .ms 规则,
   故其余仍在用字体图标的页面逐字不变。 */
.ic{display:inline-flex;align-items:center;justify-content:center;flex:none;line-height:1;vertical-align:middle}
.ic-ph{color:var(--s300)}
.sb-logo .ic{color:#fff}
.sb-item .ic{color:var(--s500)}
.sb-item:hover .ic{color:var(--s600)}
.sb-item.on .ic{color:var(--brand)}
.sb-item.sb-guard .ic{color:#1F5DD0}
body.sb-min .sb-item .ic{width:21px;height:21px}
body.sb-min .campus-pill .ic{display:none}
.campus-pill .ic{color:var(--s400)}
.campus-menu .cm-item .ic{color:var(--s400)}
.campus-menu .cm-item.on .ic{color:var(--brand)}
.sb-acc .sb-sec-title .ic{color:var(--s300);transition:transform .18s cubic-bezier(.16,1,.3,1)}
.sb-acc.closed .sb-sec-title .ic{transform:rotate(-90deg)}
.tb-search .ic{position:absolute;left:12px;color:var(--s400);pointer-events:none}
.tb-pill .ic{color:var(--s500)}
.tb-user .ic{color:var(--s500)}
.tb-acct-hd .ic{color:var(--s500)}
.tb-acct-out .ic{color:var(--s500)}
.auth-points .ic{color:#93C5FD}
.fld-box .ic{color:var(--s400)}
@media (min-width:768px){ .tb-burger .ic{width:21px;height:21px} }
@media (max-width:767px){ .tb-burger .ic{width:20px;height:20px} }
