/* ============================================================
   百川系统 · 设计系统(与工作台原型同一份:藍 / 朱 / 生成り)
   来源:proto/baichuan.html 的 <style>,原样搬过来;改这里等于改原型
   ============================================================ */
:root{
  --paper:#F6F5F1;        /* 生成り — 底 */
  --card:#FFFFFF;
  --card-2:#FBFAF7;
  --line:#DFDCD3;
  --line-soft:#EBE8E1;
  --ink:#1A1F2B;          /* 墨 */
  --ink-2:#4A5261;
  --ink-3:#7C8494;
  --ai:#2C4A73;           /* 藍 — 结构色 */
  --ai-2:#3E6B9E;         /* 浅藍 — 可交互 */
  --ai-wash:#EAEFF6;
  --shu:#B8433A;          /* 朱 — 只用于需要处理 */
  --shu-wash:#F8EAE8;
  --kihada:#9A6E24;       /* 黄檗 — 提醒 */
  --kihada-wash:#F7F0DF;
  --matsu:#3F6B4F;        /* 松 — 正常 */
  --matsu-wash:#E8F0EA;
  --murasaki:#5D4A78;     /* 紫 — 中性标记 */
  --murasaki-wash:#EFEBF5;
  --shadow:0 1px 2px rgba(26,31,43,.06), 0 4px 12px rgba(26,31,43,.04);
  --sans:"Noto Sans SC","Hiragino Sans GB",system-ui,sans-serif;
  --ui:"Zen Kaku Gothic New","Noto Sans SC",system-ui,sans-serif;
  --mono:"IBM Plex Mono","SFMono-Regular",Consolas,monospace;
  --r:6px;
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --paper:#12161E; --card:#191E28; --card-2:#1E242F;
    --line:#2E3644; --line-soft:#252C38;
    --ink:#E6E8EC; --ink-2:#A9B0BE; --ink-3:#767E8E;
    --ai:#7FA3CC; --ai-2:#9CBBDE; --ai-wash:#1E2938;
    --shu:#E0837A; --shu-wash:#33211F;
    --kihada:#D4A855; --kihada-wash:#2C2617;
    --matsu:#7FB08F; --matsu-wash:#1B2820;
    --murasaki:#A996C6; --murasaki-wash:#241E30;
    --shadow:0 1px 2px rgba(0,0,0,.3), 0 4px 12px rgba(0,0,0,.2);
  }
}
:root[data-theme="dark"]{
  --paper:#12161E; --card:#191E28; --card-2:#1E242F;
  --line:#2E3644; --line-soft:#252C38;
  --ink:#E6E8EC; --ink-2:#A9B0BE; --ink-3:#767E8E;
  --ai:#7FA3CC; --ai-2:#9CBBDE; --ai-wash:#1E2938;
  --shu:#E0837A; --shu-wash:#33211F;
  --kihada:#D4A855; --kihada-wash:#2C2617;
  --matsu:#7FB08F; --matsu-wash:#1B2820;
  --murasaki:#A996C6; --murasaki-wash:#241E30;
  --shadow:0 1px 2px rgba(0,0,0,.3), 0 4px 12px rgba(0,0,0,.2);
}

*{box-sizing:border-box}
[hidden]{display:none!important}
body{
  margin:0; background:var(--paper); color:var(--ink);
  font-family:var(--sans); font-size:14px; line-height:1.6;
  -webkit-font-smoothing:antialiased;
}
h1,h2,h3,h4{font-family:var(--ui); font-weight:500; margin:0; text-wrap:balance}
button{font-family:inherit; font-size:inherit; cursor:pointer}
:focus-visible{outline:2px solid var(--ai-2); outline-offset:2px; border-radius:3px}
@media (prefers-reduced-motion:reduce){*{transition:none!important; animation:none!important}}

/* ---------- 顶栏 ---------- */
.top{
  position:sticky; top:0; z-index:40;
  background:var(--ai); color:#fff;
  border-bottom:1px solid rgba(0,0,0,.15);
}
:root[data-theme="dark"] .top,
:root:not([data-theme="light"]) .top{color:#0E1219}
@media (prefers-color-scheme: light){:root:not([data-theme="dark"]) .top{color:#fff}}
.top-in{
  max-width:1400px; margin:0 auto; padding:10px 20px;
  display:flex; align-items:center; gap:20px; flex-wrap:wrap;
}
.brand{font-family:var(--ui); font-weight:700; font-size:16px; letter-spacing:.06em; white-space:nowrap}
.brand small{display:block; font-weight:400; font-size:10px; opacity:.7; letter-spacing:.14em}


.themebtn{
  background:transparent; border:1px solid rgba(255,255,255,.25); color:inherit;
  border-radius:var(--r); padding:4px 10px; font-size:12px;
}

/* ---------- 身份条 ---------- */
.whoami{
  background:var(--card); border-bottom:1px solid var(--line);
  position:sticky; top:0; z-index:30;
}
.whoami-in{
  max-width:1400px; margin:0 auto; padding:9px 20px;
  display:flex; gap:22px; align-items:baseline; flex-wrap:wrap; font-size:12.5px;
}
.whoami b{font-family:var(--ui); font-weight:500; color:var(--ink)}
.whoami .k{color:var(--ink-3); font-size:10.5px; letter-spacing:.1em; font-family:var(--ui)}
.whoami .v{color:var(--ai); font-weight:500; font-variant-numeric:tabular-nums}
.whoami .scope{
  font-family:var(--mono); font-size:11px; background:var(--ai-wash);
  color:var(--ai); padding:1px 7px; border-radius:3px;
}

/* ---------- 布局 ---------- */
.shell{max-width:1400px; margin:0 auto; display:flex; gap:0; align-items:flex-start}
.rail{
  width:186px; flex:none; padding:16px 10px 40px;
  position:sticky; top:76px; align-self:flex-start;
}
.railgroup{margin-bottom:14px}
.railgroup .gl{
  font-family:var(--ui); font-size:10px; letter-spacing:.16em;
  color:var(--ink-3); padding:0 10px 6px;
}
.navitem{
  display:flex; align-items:center; justify-content:space-between; gap:8px;
  width:100%; text-align:left; background:none; border:0;
  padding:7px 10px; border-radius:var(--r); color:var(--ink-2);
  font-size:13.5px; font-family:var(--ui); transition:background .12s,color .12s;
}
.navitem:hover{background:var(--line-soft); color:var(--ink)}
.navitem[aria-current="page"]{background:var(--ai-wash); color:var(--ai); font-weight:500}
.navitem .badge{
  font-family:var(--mono); font-size:10.5px; background:var(--shu); color:#fff;
  border-radius:99px; padding:0 6px; min-width:18px; text-align:center;
}
.navitem .badge.q{background:var(--ink-3)}

.main{flex:1; min-width:0; padding:16px 20px 60px}

/* ---------- 通用块 ---------- */
.page-head{margin-bottom:14px}
.page-head h1{font-size:20px; letter-spacing:.02em}
.page-head p{margin:3px 0 0; color:var(--ink-3); font-size:12.5px; max-width:66ch}
.card{
  background:var(--card); border:1px solid var(--line);
  border-radius:var(--r); box-shadow:var(--shadow); overflow:hidden;
}
.card + .card{margin-top:14px}
.card-h{
  padding:10px 14px; border-bottom:1px solid var(--line-soft);
  display:flex; align-items:center; justify-content:space-between; gap:12px;
  background:var(--card-2);
}
.card-h h2{font-size:13.5px; letter-spacing:.03em}
.card-h .sub{font-size:11.5px; color:var(--ink-3)}
.card-b{padding:14px}
.grid{display:grid; gap:14px}
.g2{grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}
.g3{grid-template-columns:repeat(auto-fit,minmax(210px,1fr))}
.g4{grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}

/* ---------- 数字块 ---------- */
.stat{background:var(--card); border:1px solid var(--line); border-radius:var(--r); padding:12px 14px}
.stat .n{font-family:var(--mono); font-size:26px; font-weight:500; line-height:1.1; font-variant-numeric:tabular-nums}
.stat .l{font-size:11.5px; color:var(--ink-3); margin-top:3px; font-family:var(--ui)}
.stat .d{font-size:11px; color:var(--ink-3); margin-top:5px; border-top:1px solid var(--line-soft); padding-top:5px}
.stat.crit{border-left:3px solid var(--shu)} .stat.crit .n{color:var(--shu)}
.stat.warn{border-left:3px solid var(--kihada)} .stat.warn .n{color:var(--kihada)}
.stat.ok{border-left:3px solid var(--matsu)} .stat.ok .n{color:var(--matsu)}

/* ---------- 表 ---------- */
.tw{overflow-x:auto}
table{border-collapse:collapse; width:100%; font-size:13px}
th{
  text-align:left; font-family:var(--ui); font-weight:500; font-size:11px;
  letter-spacing:.08em; color:var(--ink-3); padding:8px 10px;
  border-bottom:1px solid var(--line); white-space:nowrap; background:var(--card-2);
  position:sticky; top:0;
}
td{padding:8px 10px; border-bottom:1px solid var(--line-soft); vertical-align:middle}
tbody tr:hover{background:var(--card-2)}
tbody tr:last-child td{border-bottom:0}
.num{font-family:var(--mono); font-variant-numeric:tabular-nums; text-align:right}
.nm{font-weight:500}
.sub2{font-size:11px; color:var(--ink-3)}
.stripe td:first-child{box-shadow:inset 3px 0 0 var(--strip,transparent)}
tr.s-crit{--strip:var(--shu)} tr.s-warn{--strip:var(--kihada)} tr.s-ok{--strip:var(--matsu)}

/* ---------- 标记 ---------- */
.pill{
  display:inline-block; font-size:11px; padding:1px 8px; border-radius:99px;
  font-family:var(--ui); white-space:nowrap; line-height:1.7;
}
.p-crit{background:var(--shu-wash); color:var(--shu)}
.p-warn{background:var(--kihada-wash); color:var(--kihada)}
.p-ok{background:var(--matsu-wash); color:var(--matsu)}
.p-info{background:var(--ai-wash); color:var(--ai)}
.p-mut{background:var(--line-soft); color:var(--ink-3)}
.p-pur{background:var(--murasaki-wash); color:var(--murasaki)}
.chip{
  display:inline-block; font-size:10.5px; padding:0 6px; border-radius:3px;
  background:var(--shu-wash); color:var(--shu); font-family:var(--ui);
  margin:1px 3px 1px 0; line-height:1.8;
}
.btn{
  border:1px solid var(--line); background:var(--card); color:var(--ink-2);
  border-radius:var(--r); padding:4px 11px; font-size:12.5px; font-family:var(--ui);
  transition:border-color .12s,color .12s;
}
.btn:hover:not(:disabled){border-color:var(--ai-2); color:var(--ai)}
.btn:disabled{opacity:.4; cursor:not-allowed}
.btn.pri{background:var(--ai); border-color:var(--ai); color:#fff}
.btn.pri:hover{background:var(--ai-2); border-color:var(--ai-2); color:#fff}
.btn.sm{padding:2px 8px; font-size:11.5px}

/* ---------- 字段权限演示 ---------- */
.fieldgrid{display:grid; grid-template-columns:repeat(auto-fit,minmax(215px,1fr)); gap:1px; background:var(--line-soft)}
.f{background:var(--card); padding:8px 12px}
.f .fl{font-size:10.5px; color:var(--ink-3); font-family:var(--ui); letter-spacing:.06em; display:flex; align-items:center; gap:5px}
.f .fv{font-size:13.5px; margin-top:1px; word-break:break-all}
.f.locked{background:var(--card-2)}
.f.locked .fv{color:var(--ink-3); font-family:var(--mono); font-size:12px; letter-spacing:.1em}
.f .lockicon{font-size:9px; color:var(--ink-3); border:1px solid var(--line); border-radius:2px; padding:0 3px; font-family:var(--ui)}
.f.editable .fv{border-bottom:1px dashed var(--line); padding-bottom:1px}
.f-group-h{
  grid-column:1/-1; background:var(--card-2); padding:5px 12px;
  font-family:var(--ui); font-size:10.5px; letter-spacing:.14em; color:var(--ink-3);
}

/* ---------- 说明条 ---------- */
.note{
  border-left:3px solid var(--ai-2); background:var(--ai-wash);
  padding:9px 13px; border-radius:0 var(--r) var(--r) 0; font-size:12.5px; color:var(--ink-2);
}
.note b{color:var(--ai); font-family:var(--ui); font-weight:500}
.note.shu b{color:var(--shu)}
.internal{
  background:var(--murasaki-wash); border:1px dashed var(--murasaki);
  border-radius:var(--r); padding:9px 12px; font-size:12.5px;
}
.internal .tag{
  font-family:var(--ui); font-size:10px; letter-spacing:.1em; color:var(--murasaki);
  display:block; margin-bottom:3px;
}

/* ---------- 学生档案 ---------- */
span[data-act="profile"]{color:var(--ai);cursor:pointer;border-bottom:1px dotted var(--ai-2)}
.tl{position:relative;padding-left:18px}
.tl:before{content:'';position:absolute;left:5px;top:6px;bottom:6px;width:2px;background:var(--line)}
.tlrow{position:relative;padding:7px 0 7px 10px;font-size:12.5px}
.tlrow:before{content:'';position:absolute;left:-17px;top:13px;width:8px;height:8px;
  border-radius:99px;background:var(--ai-2);border:2px solid var(--card)}
.tlrow.crit:before{background:var(--shu)} .tlrow.warn:before{background:var(--kihada)}
.tlrow.ok:before{background:var(--matsu)} .tlrow.pur:before{background:var(--murasaki)}


/* ---------- 空态 ---------- */
.empty{padding:34px 20px; text-align:center; color:var(--ink-3); font-size:13px}
.empty .big{font-family:var(--ui); font-size:15px; color:var(--ink-2); margin-bottom:5px}

.hidden{display:none!important}
.foot{
  max-width:1400px; margin:0 auto; padding:24px 20px 44px; color:var(--ink-3); font-size:12px;
  border-top:1px solid var(--line);
}
.foot b{font-family:var(--ui); color:var(--ink-2); font-weight:500}
@media (max-width:860px){
  /* v1.8.4:竖排后要 align-items:stretch——原来的 flex-start 让 .main 按内容宽度(名册表格几千像素)撑开,整页横着滚 */
  .shell{flex-direction:column; align-items:stretch}
  .main{width:100%; max-width:100%}
  .rail{position:static; width:100%; display:flex; gap:6px; overflow-x:auto; padding:10px}
  .railgroup{margin:0; display:flex; gap:4px}
  .railgroup .gl{display:none}
  .navitem{width:auto; white-space:nowrap}
  .navitem.soon{display:none}   /* 窄屏侧栏只剩一行,「待建」的占位不再占地方 */
}

/* ============================================================
   以下是名册应用自己的补充(原型里没有的部件)
   ============================================================ */
/* 顶栏右侧:当前用户 + 退出 */
.top-in{justify-content:space-between}
.topuser{display:flex; align-items:center; gap:12px; font-family:var(--ui); font-size:12.5px}
.topuser .who{opacity:.9}
.topuser .who b{font-weight:500}
.topuser .out{background:transparent; border:1px solid rgba(255,255,255,.3); color:inherit;
  border-radius:var(--r); padding:3px 10px; font-size:12px}
.topuser .out:hover{background:rgba(255,255,255,.15)}
.navitem.soon{color:var(--ink-3); cursor:default}
.navitem.soon:hover{background:none; color:var(--ink-3)}
.navitem .soon-tag{font-family:var(--ui); font-size:9.5px; letter-spacing:.08em; color:var(--ink-3);
  border:1px solid var(--line); border-radius:3px; padding:0 4px}

/* 登录页 */
.login-wrap{min-height:calc(100vh - 60px); display:flex; align-items:center; justify-content:center; padding:20px}
.login{width:360px; max-width:100%}
.login .card-b{padding:22px 24px 24px}
.login h1{font-size:18px; margin-bottom:2px}
.login .sub{font-size:12px; color:var(--ink-3); margin-bottom:18px}
.field{margin-bottom:12px}
.field label{display:block; font-family:var(--ui); font-size:11px; letter-spacing:.08em; color:var(--ink-3); margin-bottom:4px}
.field input{width:100%; border:1px solid var(--line); border-radius:var(--r); padding:8px 10px;
  font-size:14px; background:var(--card); color:var(--ink)}
.field input:focus{outline:none; border-color:var(--ai-2); box-shadow:0 0 0 3px var(--ai-wash)}
.btn.block{width:100%; padding:9px 12px; font-size:13.5px; margin-top:4px}
.err{background:var(--shu-wash); color:var(--shu); border-radius:var(--r); padding:8px 12px; font-size:12.5px; margin-bottom:12px}
.demo-accounts{margin-top:16px; font-size:11.5px; color:var(--ink-3); line-height:1.7}
.demo-accounts code{font-family:var(--mono); background:var(--ai-wash); color:var(--ai); padding:0 5px; border-radius:3px; font-size:11px}

/* 名册工具栏 */
.toolbar{display:flex; gap:8px; flex-wrap:wrap; align-items:center; padding:10px 14px;
  border-bottom:1px solid var(--line-soft); background:var(--card)}
.toolbar .sp{flex:1}
.toolbar input[type=search], .toolbar input[type=text]{
  border:1px solid var(--line); border-radius:var(--r); padding:4px 10px; background:var(--card);
  color:var(--ink); font-size:12.5px; width:170px}
.toolbar input:focus{outline:none; border-color:var(--ai-2)}
.toolbar select.btn{padding:3px 6px}
.toolbar .lab{font-family:var(--ui); font-size:11px; letter-spacing:.08em; color:var(--ink-3)}
.filters{display:flex; flex-direction:column; gap:4px; padding:6px 14px 10px; border-bottom:1px solid var(--line-soft); background:var(--card)}
.filters:empty{display:none}
.flt{display:flex; gap:6px; align-items:center}
.flt input{width:150px}
.selbar{display:flex; gap:8px; flex-wrap:wrap; align-items:center; padding:6px 14px; min-height:32px; background:var(--ai-wash);
  border-bottom:1px solid var(--line-soft); font-size:12.5px}
.selbar.idle{background:var(--card)}
.selbar b{font-family:var(--ui); font-weight:500; color:var(--ai)}
.colpop{position:absolute; z-index:60; background:var(--card); border:1px solid var(--line); border-radius:var(--r);
  box-shadow:var(--shadow); padding:10px 12px; max-height:360px; overflow:auto; min-width:200px; font-size:12.5px}
.colpop .gh{font-family:var(--ui); font-size:10.5px; letter-spacing:.12em; color:var(--ink-3); margin:8px 0 3px}
.colpop label{display:flex; gap:6px; align-items:center; padding:2px 0; cursor:pointer}

/* 底部提示条(粘贴结果 / 撤销提示) */
#hint{position:fixed; bottom:18px; left:50%; transform:translateX(-50%);
  background:var(--ink); color:var(--paper); font-size:12.5px; font-family:var(--ui);
  padding:8px 18px; border-radius:99px; box-shadow:0 4px 14px rgba(0,0,0,.25);
  z-index:99; display:none; white-space:nowrap; max-width:90vw; overflow:hidden; text-overflow:ellipsis}
#hint.shu{background:var(--shu); color:#fff}

/* ---------- Tabulator 换肤:让网格长成原型里表格的样子 ---------- */
/* 框选时不许浏览器顺手选中文字(编辑器里例外) */
.tabulator .tabulator-header, .tabulator .tabulator-tableholder{user-select:none; -webkit-user-select:none}
.tabulator .tabulator-cell.tabulator-editing, .tabulator .tabulator-cell.tabulator-editing *{user-select:text; -webkit-user-select:text}
.tabulator{background:var(--card); border:0; border-top:1px solid var(--line-soft); font-family:var(--sans); font-size:13px; color:var(--ink)}
.tabulator .tabulator-header{background:var(--card-2); border-bottom:1px solid var(--line); color:var(--ink-3);
  font-family:var(--ui); font-weight:500; font-size:11px; letter-spacing:.06em}
.tabulator .tabulator-header .tabulator-col{background:var(--card-2); border-right:1px solid var(--line-soft)}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content{padding:7px 8px}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable:hover{background:var(--line-soft)}
.tabulator .tabulator-header .tabulator-col.tabulator-sortable .tabulator-col-title{padding-right:16px}
.tabulator .tabulator-header .tabulator-col .tabulator-col-content .tabulator-col-sorter{color:var(--ink-3)}
.tabulator .tabulator-header .tabulator-col.tabulator-frozen{box-shadow:2px 0 4px rgba(0,0,0,.05)}
.tabulator .tabulator-header .tabulator-col .ro{font-weight:400; letter-spacing:0; color:var(--ink-3); font-size:10px; margin-left:3px}
.tabulator .tabulator-header .tabulator-col .sens{color:var(--shu)}
.tabulator .tabulator-row{background:var(--card); color:var(--ink); border-bottom:1px solid var(--line-soft); min-height:30px}   /* 深色模式下不再是 Tabulator 自带的 #333 */
.tabulator .tabulator-row.tabulator-row-even{background:var(--card)}
.tabulator .tabulator-row:hover{background:var(--card-2)}
.tabulator .tabulator-row .tabulator-cell{border-right:1px solid var(--line-soft); padding:5px 8px; line-height:1.5}
.tabulator .tabulator-row .tabulator-cell.tabulator-frozen{background:inherit; border-right:1px solid var(--line)}
.tabulator .tabulator-row .tabulator-cell.tabulator-editing{border:1px solid var(--ai-2); padding:4px 7px; background:var(--card)}
.tabulator .tabulator-row .tabulator-cell.tabulator-editing input,
.tabulator .tabulator-row .tabulator-cell.tabulator-editing select,
.tabulator .tabulator-row .tabulator-cell.tabulator-editing textarea{font-family:var(--sans); font-size:13px; color:var(--ink); background:var(--card); border:0; outline:none}
.tabulator .tabulator-row .tabulator-cell.can-edit{background-image:linear-gradient(to right, var(--line) 50%, transparent 0); background-size:6px 1px; background-repeat:repeat-x; background-position:8px calc(100% - 4px)}
.tabulator .tabulator-row .tabulator-cell.can-edit:hover{background-image:none; box-shadow:inset 0 0 0 1px var(--line)}
.tabulator .tabulator-range-overlay .tabulator-range{border:1.5px solid var(--ai-2); background:rgba(62,107,158,.08)}
.tabulator .tabulator-range-overlay .tabulator-range.tabulator-range-active::after{background:var(--ai-2)}
.tabulator .tabulator-row .tabulator-cell.tabulator-range-selected{background:var(--ai-wash)}
.tabulator .tabulator-header .tabulator-col.tabulator-range-selected,
.tabulator .tabulator-header .tabulator-col.tabulator-range-highlight{background:var(--ai-wash); color:var(--ai)}
.tabulator .tabulator-row .tabulator-cell.tabulator-row-header{background:var(--card-2); color:var(--ink-3); font-family:var(--mono); font-size:11px; text-align:center; border-right:1px solid var(--line)}
.tabulator .tabulator-row .tabulator-cell.tabulator-row-header.tabulator-range-selected,
.tabulator .tabulator-row .tabulator-cell.tabulator-row-header.tabulator-range-highlight{background:var(--ai-wash); color:var(--ai)}
.tabulator .tabulator-row.tabulator-group{background:var(--card-2); border-bottom:1px solid var(--line); border-right:0; padding:5px 10px;
  font-family:var(--ui); font-weight:500; font-size:12.5px; color:var(--ink)}
.tabulator .tabulator-row.tabulator-group.tabulator-group-level-1{padding-left:28px; background:var(--card); color:var(--ink-2); font-weight:400; border-left:3px solid var(--line)}
.tabulator .tabulator-row.tabulator-group .tabulator-group-toggle{color:var(--ink-3)}
.tabulator .tabulator-row.tabulator-group span{color:var(--ink-3); font-weight:400; margin-left:6px; font-size:11.5px}
.tabulator .tabulator-tableholder{background:var(--card)}
.tabulator .tabulator-footer{background:var(--card-2); border-top:1px solid var(--line); color:var(--ink-3); font-size:11.5px}
.tabulator-edit-list{background:var(--card); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow); font-family:var(--sans); font-size:13px}
.tabulator-edit-list .tabulator-edit-list-item{color:var(--ink); padding:5px 10px}
.tabulator-edit-list .tabulator-edit-list-item.active,
.tabulator-edit-list .tabulator-edit-list-item:hover{background:var(--ai-wash); color:var(--ai)}
.tabulator .tabulator-header .tabulator-col.sel-col{width:36px}
.tabulator .tabulator-cell .stuno{font-family:var(--mono); font-size:12px; color:var(--ai); cursor:pointer; border-bottom:1px dotted var(--ai-2)}
.tabulator .tabulator-cell .mut{color:var(--ink-3)}
.tabulator .tabulator-cell.num{font-family:var(--mono); font-variant-numeric:tabular-nums}
/* 选项标签的颜色(和多维表格一样一色一标签) */
.opt{display:inline-block; font-size:11.5px; padding:0 8px; border-radius:99px; line-height:1.7; font-family:var(--ui); white-space:nowrap}
.opt.c-blue{background:var(--ai-wash); color:var(--ai)} .opt.c-green{background:var(--matsu-wash); color:var(--matsu)}
.opt.c-red{background:var(--shu-wash); color:var(--shu)} .opt.c-orange{background:var(--kihada-wash); color:var(--kihada)}
.opt.c-purple{background:var(--murasaki-wash); color:var(--murasaki)} .opt.c-teal{background:#E3F0EE; color:#2F6B62}
.opt.c-gray, .opt.c-none{background:var(--line-soft); color:var(--ink-2)}
@media (prefers-color-scheme: dark){ :root:not([data-theme="light"]) .opt.c-teal{background:#1B2D2A; color:#7FB8AE} }

/* ---------- 字段设置页 ---------- */
.fa-form{display:grid; grid-template-columns:repeat(auto-fit,minmax(150px,1fr)); gap:10px 12px; align-items:end}
.fa-form .field{margin:0}
.fa-form .field select, .fa-form .field textarea{width:100%; border:1px solid var(--line); border-radius:var(--r); padding:7px 10px; font-size:13px; background:var(--card); color:var(--ink); font-family:var(--sans)}
.fa-form .wide{grid-column:1/-1}
.fa-form textarea{min-height:64px; resize:vertical}
.fa-check{display:flex; align-items:center; gap:6px; font-size:12.5px; color:var(--ink-2); padding-bottom:8px}
table.fa td{vertical-align:middle}
table.fa .key{font-family:var(--mono); font-size:11px; color:var(--ink-3)}
table.fa .chip.sys{background:var(--ai-wash); color:var(--ai)} table.fa .chip.custom{background:var(--murasaki-wash); color:var(--murasaki)}
table.fa .chip.sens{background:var(--shu-wash); color:var(--shu)}
table.fa tr.off td{color:var(--ink-3)} table.fa tr.off .nm{text-decoration:line-through}
table.fa .optlist{display:flex; flex-wrap:wrap; gap:3px; align-items:center}
table.fa .optlist .opt .x{margin-left:5px; cursor:pointer; opacity:.6} table.fa .optlist .opt .x:hover{opacity:1}
table.fa .optlist input{width:90px; border:1px solid var(--line); border-radius:var(--r); padding:1px 6px; font-size:12px; background:var(--card); color:var(--ink)}
table.fa .ord{display:inline-flex; flex-direction:column; gap:1px} table.fa .ord button{padding:0 5px; font-size:10px; line-height:1.3}
table.fa input.inl, table.fa select.inl{border:1px solid var(--line); border-radius:var(--r); padding:3px 7px; font-size:12.5px; background:var(--card); color:var(--ink); font-family:var(--sans)}
table.fa input.inl{width:130px}
table.mx th, table.mx td{text-align:center; padding:4px 6px}
table.mx th:first-child, table.mx td:first-child{text-align:left; position:sticky; left:0; background:var(--card); z-index:1; min-width:150px}
table.mx thead th:first-child{background:var(--card-2)}
table.mx select{border:1px solid var(--line); border-radius:var(--r); padding:2px 4px; font-size:11.5px; background:var(--card); color:var(--ink-3); font-family:var(--ui)}
table.mx select.cfg{color:var(--ink); border-color:var(--ai-2); font-weight:500}
table.mx select.l-hidden.cfg{color:var(--shu)} table.mx select.l-write.cfg, table.mx select.l-manage.cfg{color:var(--matsu)}
table.mx .lv{font-size:11.5px; color:var(--ink-3)} table.mx .lv.cfg{color:var(--ink); font-weight:500}

/* ---------- 弹窗 ---------- */
.modal-bg{position:fixed; inset:0; background:rgba(26,31,43,.38); z-index:120; display:flex; align-items:center; justify-content:center; padding:20px}
.modal{width:440px; max-width:100%; max-height:90vh; overflow:auto}
.modal .card-b{padding:16px 18px 18px}
.modal .field input, .modal .field select, .modal .field textarea{width:100%; border:1px solid var(--line); border-radius:var(--r); padding:7px 10px; font-size:13.5px; background:var(--card); color:var(--ink); font-family:var(--sans)}
.modal .field textarea{min-height:80px; resize:vertical}
.modal .field input:focus, .modal .field select:focus, .modal .field textarea:focus{outline:none; border-color:var(--ai-2); box-shadow:0 0 0 3px var(--ai-wash)}
.btn.danger{background:var(--shu); border-color:var(--shu); color:#fff} .btn.danger:hover{background:var(--shu); color:#fff; opacity:.9}

/* ---------- 右键菜单(Tabulator 自带的菜单换皮) ---------- */
.tabulator-menu{background:var(--card); border:1px solid var(--line); border-radius:var(--r); box-shadow:0 6px 24px rgba(0,0,0,.18); padding:4px; min-width:170px; font-family:var(--ui); font-size:13px}
.tabulator-menu .tabulator-menu-item{padding:6px 12px; border-radius:4px; color:var(--ink); white-space:nowrap}
.tabulator-menu .tabulator-menu-item:not(.tabulator-menu-item-disabled):hover{background:var(--ai-wash); color:var(--ai)}
.tabulator-menu .tabulator-menu-item.tabulator-menu-item-disabled{opacity:.4}
.tabulator-menu .tabulator-menu-separator{border-top:1px solid var(--line-soft); margin:4px 0}
table.perm th, table.perm td{text-align:center; padding:5px 8px}
table.perm th:first-child, table.perm td:first-child{text-align:left}
table.perm input[type=checkbox]{width:15px; height:15px; accent-color:var(--ai)}
table.fa td:nth-child(4){white-space:nowrap}
.toolbar .chk{display:inline-flex; align-items:center; gap:5px; font-size:12.5px; color:var(--ink-2); font-family:var(--ui); cursor:pointer}
.toolbar .chk input{accent-color:var(--ai)}

/* ---------- 预设视图(名册顶部的视图页签,飞书多维表格式) ---------- */
.vtabs{display:flex; gap:2px; align-items:flex-end; flex-wrap:wrap; padding:6px 14px 0; border-bottom:1px solid var(--line-soft); background:var(--card)}
.vtabs .vt{font-family:var(--ui); font-size:12.5px; color:var(--ink-2); background:transparent; border:1px solid transparent; border-bottom:none;
  border-radius:var(--r) var(--r) 0 0; padding:5px 12px 6px; cursor:pointer; position:relative; top:1px; max-width:220px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
.vtabs .vt:hover{color:var(--ai); background:var(--ai-wash)}
.vtabs .vt.on{color:var(--ai); background:var(--card); border-color:var(--line-soft); border-bottom:1px solid var(--card); font-weight:500}
.vtabs .vt .sh{font-size:10px; color:var(--ink-3); margin-left:5px; letter-spacing:.06em}
.vtabs .vt.on .sh{color:var(--ai-2)}
.vtabs .vt .dirty{color:var(--kihada); margin-left:3px}
.vtabs .vt.more{padding:5px 8px; color:var(--ink-3); max-width:none}
.vtabs .vt.add{color:var(--ink-3); max-width:none}
.vmenu{position:absolute; z-index:60; background:var(--card); border:1px solid var(--line); border-radius:var(--r); box-shadow:var(--shadow); padding:4px; min-width:220px; font-family:var(--ui); font-size:13px}
.vmenu button{display:block; width:100%; text-align:left; background:none; border:none; padding:6px 12px; border-radius:4px; color:var(--ink); font:inherit; cursor:pointer; white-space:nowrap}
.vmenu button:hover:not(:disabled){background:var(--ai-wash); color:var(--ai)}
.vmenu button:disabled{opacity:.45; cursor:default}
.vmenu .sep{border-top:1px solid var(--line-soft); margin:4px 0}
.vmenu .hint{padding:4px 12px 6px; font-size:11.5px; color:var(--ink-3); white-space:normal; max-width:260px}
/* 剩余权益列:0 标朱红,「不限」淡一点 */
.tabulator .tabulator-cell.rem .rem0{color:var(--shu); font-weight:500}
.tabulator .tabulator-cell.rem .unl{color:var(--ink-3)}

/* 弹窗里的多选清单(分给哪些岗位 / 哪些人) */
.modal .field .checks{max-height:220px; overflow:auto; border:1px solid var(--line); border-radius:var(--r); padding:6px 10px; background:var(--card); display:flex; flex-direction:column; gap:2px}
.modal .field .checks label{display:flex; gap:8px; align-items:center; font-size:12.5px; cursor:pointer; padding:2px 0}
.modal .field .checks input{accent-color:var(--ai); width:14px; height:14px}
/* 档案页:可编辑字段 */
.f.editable .fv input, .f.editable .fv select, .f.editable .fv textarea{width:100%; border:1px solid transparent; border-radius:4px; padding:3px 6px; background:transparent; color:var(--ink); font:inherit; font-size:13.5px}
.f.editable .fv input:hover, .f.editable .fv select:hover, .f.editable .fv textarea:hover{border-color:var(--line)}
.f.editable .fv input:focus, .f.editable .fv select:focus, .f.editable .fv textarea:focus{outline:none; border-color:var(--ai-2); background:var(--card); box-shadow:0 0 0 3px var(--ai-wash)}
.f.editable .fv textarea{min-height:56px; resize:vertical}
.f.editable .fv.saved input, .f.editable .fv.saved select, .f.editable .fv.saved textarea{border-color:var(--matsu, #3a7d5c)}
.f.editable .fv.bad input, .f.editable .fv.bad select, .f.editable .fv.bad textarea{border-color:var(--shu)}
.f.remadj .fv input{width:90px; text-align:right}
/* v1.6 空行(草稿行):浅底、虚线,填姓名即建档 */
.tabulator .tabulator-row.draft{background:var(--card-2)}
.tabulator .tabulator-row.draft .tabulator-cell{border-bottom:1px dashed var(--line)}
.tabulator .tabulator-row.draft .tabulator-cell.tabulator-frozen{background:var(--card-2)}
.tabulator .tabulator-cell .ph{color:var(--ink-3); font-style:normal; font-size:12px}
.tabulator .tabulator-row.draft .tabulator-cell.can-edit{background-image:none}
/* 下拉编辑器的多选项(班级) */
.tabulator-edit-list .tabulator-edit-list-item.active{background:var(--ai-wash); color:var(--ai)}
/* 档案页头部:班级 / 班主任 / 套餐 / 到期可改 */
.stat .hd select, .stat .hd input{font:inherit; font-size:14px; color:var(--ink); background:var(--card); border:1px solid var(--line); border-radius:4px; padding:3px 6px; max-width:100%}
.stat .hd select:focus, .stat .hd input:focus{outline:none; border-color:var(--ai-2); box-shadow:0 0 0 3px var(--ai-wash)}
.stat .hd .cls{display:flex; flex-direction:column; gap:2px; max-height:96px; overflow:auto; margin-top:2px}
.stat .hd .cls label{display:flex; gap:6px; align-items:center; font-size:12.5px; font-family:var(--ui); cursor:pointer}
.stat .hd .cls input{accent-color:var(--ai); width:13px; height:13px}
.stat .hd .cls .none{font-size:12px; color:var(--ink-3)}
.stat .hd.saved select, .stat .hd.saved input{border-color:var(--matsu, #3a7d5c)}
.stat .hd.bad select, .stat .hd.bad input{border-color:var(--shu)}
/* v1.7 套餐面板:一个学生可以同时有几份套餐,一行一份 */
.modal.pkgpanel{width:620px}
table.pkgs{width:100%; border-collapse:collapse; font-size:13px}
table.pkgs th{font-family:var(--ui); font-size:11px; letter-spacing:.06em; color:var(--ink-3); text-align:left; padding:4px 8px; border-bottom:1px solid var(--line)}
table.pkgs td{padding:7px 8px; border-bottom:1px solid var(--line-soft); vertical-align:middle}
table.pkgs td.mono{font-family:var(--mono); font-variant-numeric:tabular-nums; white-space:nowrap}
table.pkgs td.acts{text-align:right; white-space:nowrap}
table.pkgs td.acts .btn + .btn{margin-left:4px}
.tabulator .tabulator-cell .pill{font-size:10px; padding:0 5px; vertical-align:1px}
/* 档案页头部的套餐清单 */
.stat .pkl{display:flex; flex-direction:column; gap:6px}
.stat .pkl .pk{border:1px solid var(--line-soft); border-radius:var(--r); padding:6px 8px; background:var(--card-2)}
.stat .pkl .pk-n{font-size:14px; font-family:var(--ui); font-weight:500}
.stat .pkl .pk-d{font-size:11.5px; color:var(--ink-3); margin-top:2px; display:flex; gap:6px; align-items:center; flex-wrap:wrap}
.stat .pkl .pk-d input{font-size:12px; padding:1px 4px}
.stat .pkl .pk-a{display:flex; gap:6px; align-items:center; margin-top:5px; flex-wrap:wrap}
.stat .pkl .pk-a select, .stat .pkl .pk-add select{font-size:12px; padding:2px 4px; max-width:100%}
.stat .pkl .pk-add select{width:100%}
.stat .pkl .pk.saved{border-color:var(--matsu, #3a7d5c)} .stat .pkl .pk.bad{border-color:var(--shu)}
.stat .pkl .pk-add.saved select{border-color:var(--matsu, #3a7d5c)} .stat .pkl .pk-add.bad select{border-color:var(--shu)}
.modal-bg.busy .pkgpanel table.pkgs button, .modal-bg.busy .pkgpanel .foot button{opacity:.45; pointer-events:none}
.modal-bg.busy .pkgpanel .card-h h2::after{content:"　处理中…"; font-weight:400; color:var(--ink-3); font-size:12px}

/* ============================================================
   v1.8 名册二期 ①「成绩 · 出愿」模式(一行一个学生,点开展开成绩 / 出愿)
   ============================================================ */
.page-head h1 .modesub{font-size:12px; color:var(--ink-3); font-weight:400}
.modewrap{display:flex; gap:14px; align-items:center; flex-wrap:wrap}
.modeswitch{display:inline-flex; border:1px solid var(--line); border-radius:var(--r); overflow:hidden; font-family:var(--ui); font-size:12.5px}
.modeswitch a{padding:4px 14px; color:var(--ink-2); text-decoration:none; background:var(--card); white-space:nowrap}
.modeswitch a.on{background:var(--ai); color:#fff; font-weight:500}
.modeswitch a:not(.on):hover{background:var(--ai-wash); color:var(--ai)}
#count .sub{font-weight:400; margin-left:6px}
/* 主表格子 */
.tabulator .tabulator-cell .adm-car{color:var(--ink-3); cursor:pointer; font-size:12px; display:inline-block; width:100%; text-align:center}
.tabulator .tabulator-cell .adm-car:hover{color:var(--ai)}
.tabulator .tabulator-cell .adm-stu a{color:var(--ink); text-decoration:none; font-weight:500; border-bottom:1px dotted var(--ai-2)}
.tabulator .tabulator-cell .adm-stu a:hover{color:var(--ai)}
.tabulator .tabulator-cell .adm-stu .no{font-family:var(--mono); font-size:11px; color:var(--ink-3); display:block; line-height:1.3}
.tabulator .tabulator-cell .adm-ddl{font-family:var(--mono); font-size:12px; white-space:nowrap}
.tabulator .tabulator-cell .adm-ddl .left{font-family:var(--ui); font-size:11px; margin-left:4px; color:var(--ink-3)}
.tabulator .tabulator-cell .adm-ddl .left.soon, .tabulator .tabulator-cell .adm-ddl .left.past{color:var(--shu); font-weight:500}
.tabulator .tabulator-cell .warnN{color:var(--shu); font-weight:500}
.tabulator .tabulator-cell .adm-res .sub2{display:block; white-space:normal; line-height:1.35; margin-top:1px}
.tabulator .tabulator-row.adm-open{background:var(--ai-wash)}
.tabulator .tabulator-row.adm-open .tabulator-cell.tabulator-frozen{background:var(--ai-wash)}
.tabulator .tabulator-row .tabulator-cell.adm-multiline{white-space:normal; line-height:1.35}
/* 展开区 */
.adm-detail{position:sticky; left:0; box-sizing:border-box; padding:8px 12px 12px 12px; background:var(--card-2); border-top:1px solid var(--line-soft); border-bottom:1px solid var(--line); white-space:normal; user-select:text; -webkit-user-select:text; cursor:default}
.adm-detail .card{box-shadow:none; margin:0}
.adm-detail .card + .card{margin-top:10px}
.adm-detail table{font-size:12.5px}
.adm-detail th{position:static; padding:6px 8px}
.adm-detail td{padding:6px 8px; vertical-align:top}
.adm-detail td.nw, .adm-detail th.nw{white-space:nowrap}
.adm-detail td.num{white-space:nowrap}
.adm-detail .foot{max-width:none; border:0; padding:8px 12px; display:flex; gap:8px; align-items:center; font-size:11.5px; color:var(--ink-3); flex-wrap:wrap}
.adm-detail .foot .sp{flex:1}
.adm-detail .empty{padding:14px; font-size:12.5px}
.adm-detail .sc-title{font-family:var(--mono); font-size:12px; white-space:nowrap}
.adm-detail .sc-jp small{color:var(--ink-3); font-size:10.5px; margin-left:3px}
.adm-detail .school{font-weight:500}
.adm-detail .school .sub2{font-weight:400}
.adm-detail .ddl{font-family:var(--mono); font-size:12px; white-space:nowrap}
.adm-detail .ddl-left{font-size:11px; color:var(--ink-3)}
.adm-detail .ddl-left.soon, .adm-detail .ddl-left.past{color:var(--shu); font-weight:500}
.lnk{color:var(--ai); cursor:pointer; border-bottom:1px dotted var(--ai-2); font-size:12px; font-family:var(--ui); white-space:nowrap; background:none; border-top:0; border-left:0; border-right:0; padding:0}
.lnk.mut{color:var(--ink-3); border-color:var(--line); cursor:not-allowed}
.lnk + .lnk{margin-left:6px}
.ref{display:inline-block; font-size:10.5px; padding:0 6px; border-radius:3px; background:var(--ai-wash); color:var(--ai); font-family:var(--mono); margin:1px 3px 1px 0; line-height:1.8; white-space:nowrap}
.ref.none{background:var(--shu-wash); color:var(--shu); font-family:var(--ui)}
.star{color:var(--kihada); font-size:13px}
/* 弹窗:录成绩 / 登记出愿 / 出愿详情 */
.modal.adm-wide{width:760px}
.modal.adm-panel{width:840px}
.frow{display:grid; grid-template-columns:repeat(auto-fit,minmax(120px,1fr)); gap:8px 10px}
.frow .field{margin-bottom:6px}
.frow .field label{font-size:10.5px}
.frow .field input, .frow .field select{padding:5px 8px; font-size:13px}
.frow .field.wide{grid-column:1/-1}
.adm-total{font-family:var(--mono); font-size:22px; font-weight:500; color:var(--ai)}
.mfoot{display:flex; gap:8px; justify-content:flex-end; margin-top:12px; align-items:center}
.mfoot .sp{flex:1; font-size:11.5px; color:var(--ink-3)}
.steps{display:flex; gap:6px; font-family:var(--ui); font-size:11.5px; margin-bottom:10px; flex-wrap:wrap}
.steps span{padding:2px 10px; border-radius:99px; background:var(--line-soft); color:var(--ink-3)}
.steps span.on{background:var(--ai); color:#fff}
.steps span.done{background:var(--matsu-wash); color:var(--matsu); cursor:pointer}
.picklist{border:1px solid var(--line); border-radius:var(--r); max-height:300px; overflow:auto; font-size:12.5px; background:var(--card)}
.picklist .pi{padding:6px 10px; border-bottom:1px solid var(--line-soft); cursor:pointer; display:flex; gap:8px; align-items:center; flex-wrap:wrap}
.picklist .pi:hover{background:var(--ai-wash)}
.picklist .pi.sel{background:var(--ai-wash); color:var(--ai); font-weight:500}
.picklist .pi.past{color:var(--ink-3)}
.picklist .m{font-family:var(--mono); font-size:11.5px; color:var(--ink-3)}
.picklist .empty{padding:14px}
.kv{display:grid; grid-template-columns:auto 1fr; gap:4px 12px; font-size:12.5px; align-items:baseline}
.kv .k{color:var(--ink-3); font-family:var(--ui); font-size:11px; letter-spacing:.06em; white-space:nowrap}
.sect{border-top:1px solid var(--line-soft); padding-top:10px; margin-top:12px}
.sect h4{font-size:12px; letter-spacing:.06em; color:var(--ink-3); margin:0 0 6px; font-weight:500; font-family:var(--ui)}
.stflow{display:flex; gap:6px; flex-wrap:wrap; align-items:center}
.stflow .btn{padding:3px 10px}
.stflow .arrow{color:var(--ink-3)}
table.docs2{width:100%; font-size:12.5px} table.docs2 th, table.docs2 td{padding:4px 8px; vertical-align:middle}
table.docs2 select, table.docs2 input{border:1px solid var(--line); border-radius:4px; padding:2px 5px; font-size:12px; background:var(--card); color:var(--ink); font-family:var(--sans)}
table.docs2 input[type=date]{width:130px}
.danger-zone{border:1px dashed var(--shu); border-radius:var(--r); padding:8px 12px; font-size:12px; color:var(--ink-2); margin-top:12px; background:var(--shu-wash)}
.danger-zone b{color:var(--shu)}
.scoreline{display:flex; gap:10px; align-items:center; font-size:12.5px; padding:4px 0; flex-wrap:wrap}
.scoreline input{accent-color:var(--ai)}
.scoreline.off{color:var(--ink-3)}
.modal-bg.busy .adm-panel button, .modal-bg.busy .adm-panel select, .modal-bg.busy .adm-panel input{opacity:.5; pointer-events:none}
.modal-bg.busy .adm-panel .card-h h2::after{content:"　处理中…"; font-weight:400; color:var(--ink-3); font-size:12px}
.adm-inline-form{display:flex; gap:6px; align-items:center; flex-wrap:wrap; margin-top:6px}
.adm-inline-form select, .adm-inline-form input{border:1px solid var(--line); border-radius:4px; padding:3px 6px; font-size:12.5px; background:var(--card); color:var(--ink); font-family:var(--sans)}
/* 档案页里的同一块 */
#admission-detail.adm-detail{position:static; width:auto; padding:14px; background:transparent; border:0}

/* v1.8.1:面板重画后放回去的「还没保存」的输入,黄檗色描个边提醒(第五次审稿 M11) */
.adm-panel [data-k].dirty{box-shadow:0 0 0 2px var(--kihada);border-color:var(--kihada)}
/* 处理中的弹窗整个 inert,顺手压淡一点 */
.modal-bg.busy .modal{opacity:.85}

/* ============================================================
   v1.8.4 手机适配(主人 2026-09-18 在手机上打开正式站后提的:「手机页面和网页的各种比例不适配」)
   720px 以下按手机排:只改尺寸和排布,颜色字体不动。桌面和平板(> 720px)不受影响。
   ============================================================ */
html{-webkit-text-size-adjust:100%}
@media (max-width:720px){
  body{touch-action:manipulation}   /* 双击不再被手机当成缩放:表格双击编辑 / 双击展开才管用;两指缩放照旧 */
  /* 手机浏览器在输入框字号小于 16px 时会自动放大页面、之后不缩回——这是「比例不对」的一个来源 */
  input, select, textarea,
  .toolbar input[type=search], .toolbar input[type=text], .field input, .modal .field input, .modal .field select, .modal .field textarea,
  .frow .field input, .frow .field select, .fa-form .field select, .fa-form .field textarea,
  .tabulator .tabulator-row .tabulator-cell.tabulator-editing input, .tabulator .tabulator-row .tabulator-cell.tabulator-editing select, .tabulator .tabulator-row .tabulator-cell.tabulator-editing textarea,
  table.fa input.inl, table.fa select.inl, table.docs2 select, table.docs2 input, .adm-inline-form select, .adm-inline-form input,
  .f.editable .fv input, .f.editable .fv select, .f.editable .fv textarea, .stat .hd select, .stat .hd input,
  .toolbar select.btn, table.mx select, table.fa .optlist input, .stat .pkl .pk-d input, .stat .pkl .pk-a select, .stat .pkl .pk-add select{font-size:16px}
  .tabulator-edit-list{font-size:16px}
  /* 顶栏 / 身份条:压扁,身份条不再吸顶(手机屏幕矮,吸顶的东西越少越好) */
  .top-in{padding:8px 12px; gap:10px}
  .brand{font-size:15px} .brand small{display:none}
  .topuser{gap:8px; font-size:12px}
  .topuser .who{max-width:44vw; white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
  .topuser .out{padding:3px 8px}
  .whoami{position:static}
  .whoami-in{padding:5px 12px; gap:4px 12px; font-size:11.5px}
  .whoami-in > span:last-child{display:none}   /* 「字段权限」那句只在桌面显示 */
  .rail{padding:6px 8px; gap:4px}
  .navitem{padding:6px 9px; font-size:13px}
  .main{padding:8px 8px 40px}
  /* 页头 / 卡片头 / 工具条 */
  .page-head{margin-bottom:8px}
  .page-head h1{font-size:18px}
  .page-head p{font-size:12px}
  .desk{display:none!important}   /* 只对桌面有意义的说明(快捷键、框选、右键、粘贴)在手机上不显示 */
  .card-h{padding:8px 10px; gap:4px 10px; flex-wrap:wrap}
  .card-h .sub{flex:1 1 100%; font-size:11px}
  .modewrap{gap:10px}
  .vtabs{padding:4px 8px 0}
  .vtabs .vt{max-width:150px; padding:4px 9px 5px}
  .toolbar{padding:6px 8px; gap:6px}
  .toolbar .sp{display:none}
  .toolbar input[type=search]{flex:1 1 130px; width:auto; min-width:0}
  .filters{padding:4px 8px 8px}
  .flt{flex-wrap:wrap}
  .flt input{width:120px}
  .selbar{padding:5px 8px; min-height:28px; font-size:12px}
  .selbar.idle{display:none}   /* 没选中东西时那行是鼠标操作的提示,手机上不显示 */
  .note{padding:8px 10px; font-size:12px}
  .empty{padding:24px 12px}
  /* 弹窗:贴着屏幕边、从顶上开始(键盘弹出时不会跳),各种宽度一律占满 */
  .modal-bg{padding:8px; align-items:flex-start; overflow:auto}
  .modal, .modal.adm-wide, .modal.adm-panel, .modal.pkgpanel{width:100%; max-height:calc(100vh - 16px); max-height:calc(100dvh - 16px)}
  .modal .card-b{padding:12px}
  .modal .card-h{padding:8px 12px}
  .mfoot{flex-wrap:wrap}
  .picklist{max-height:40vh}
  .frow{grid-template-columns:repeat(auto-fit,minmax(110px,1fr))}
  .colpop, .vmenu{max-width:calc(100vw - 16px)}
  .colpop{max-height:60vh}
  /* 套餐面板的表:套餐名不按字拆行,操作按钮竖着排,放不下时表在框里横滚 */
  table.pkgs th, table.pkgs td{padding:6px 5px}
  table.pkgs td:first-child{white-space:nowrap}
  table.pkgs td.acts{white-space:normal; min-width:96px}
  table.pkgs td.acts .btn{display:block; width:100%; margin:2px 0}
  table.pkgs td.acts .btn + .btn{margin-left:0}
  /* 档案页 */
  .stat{padding:10px 12px}
  .stat .n{font-size:22px}
  .fieldgrid{grid-template-columns:1fr}
  .g4{grid-template-columns:repeat(auto-fit,minmax(140px,1fr))}
  /* 展开区(成绩 · 出愿):表格不挤成一格一个字,而是在卡片里横着滚;第一列(考试 / 学校)钉在左边 */
  .adm-detail{padding:6px 8px 8px}
  .adm-detail table{font-size:12px}
  .adm-detail th, .adm-detail td{padding:5px 6px; white-space:nowrap}
  .adm-detail td.sub2{white-space:normal; min-width:140px}
  .adm-detail th:first-child, .adm-detail td:first-child{position:sticky; left:0; background:var(--card); z-index:1}
  .adm-detail th:first-child{background:var(--card-2)}
  .adm-detail .foot{padding:8px 4px}
  /* 出愿详情里的材料清单 */
  table.docs2 th, table.docs2 td{white-space:nowrap}
  table.docs2 td:first-child{white-space:normal; min-width:104px}
  table.docs2 input[type=date]{width:118px}
  #hint{font-size:12px; padding:7px 14px; bottom:12px}
}
