:root{
  --orange:#f07826; --green:#6fae3d; --yellow:#f5b31a; --blue:#2e7cd6;
  --bg:#f4f6f9; --card:#fff; --line:#e6e9ef; --txt:#22272e; --sub:#7a8494;
  --ok:#2e9e5b; --warn:#e07b00; --bad:#d9534f;
  --radius:10px; --shadow:0 1px 3px rgba(20,30,50,.08);
}
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:"PingFang SC","Microsoft YaHei",system-ui,sans-serif;background:var(--bg);color:var(--txt);font-size:14px}
a{color:var(--blue);text-decoration:none}
button{font-family:inherit}

/* ---------- 登录页 ---------- */
.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#ff9a4d 0%,#f07826 45%,#e05f10 100%)}
.login-card{background:#fff;border-radius:16px;padding:40px 36px;width:400px;box-shadow:0 12px 40px rgba(0,0,0,.18)}
.login-logo{display:flex;align-items:center;gap:12px;margin-bottom:8px}
.login-logo .mark{width:44px;height:44px;border-radius:12px;background:var(--orange);color:#fff;display:flex;align-items:center;justify-content:center;font-size:22px;font-weight:700}
.login-logo img.mark{background:#fff;border-radius:50%;object-fit:contain;border:1px solid var(--line)}
.login-logo h1{font-size:19px}
.login-sub{color:var(--sub);font-size:12px;margin-bottom:26px}
.login-card .field{margin-bottom:14px}
.quick-accounts{margin-top:20px;border-top:1px dashed var(--line);padding-top:14px}
.quick-accounts p{font-size:12px;color:var(--sub);margin-bottom:8px}
.quick-accounts .chips{display:flex;flex-wrap:wrap;gap:8px}

/* ---------- 布局 ---------- */
.layout{display:flex;min-height:100vh}
.sidebar{width:200px;background:#20242c;color:#c8cedb;display:flex;flex-direction:column;position:fixed;top:0;bottom:0;left:0;z-index:5}
.sidebar .brand{display:flex;align-items:center;gap:10px;padding:18px 16px 14px}
.sidebar .brand .mark{width:34px;height:34px;border-radius:9px;background:linear-gradient(135deg,var(--orange),#ff9a4d);display:flex;align-items:center;justify-content:center;color:#fff;font-weight:700;font-size:16px}
.sidebar .brand img.mark{background:#fff;object-fit:contain;border-radius:50%;flex:none}
.sidebar .brand b{color:#fff;font-size:15px}
.sidebar .slogan{font-size:10px;color:#6c7688;padding:0 16px 12px;border-bottom:1px solid #2b313c}
.nav{flex:1;padding:10px 10px;overflow-y:auto}
.nav-group{font-size:11px;color:#5f6a7d;padding:12px 8px 4px}
.nav a{display:flex;align-items:center;gap:8px;padding:9px 10px;border-radius:8px;color:#c8cedb;font-size:13.5px;margin-bottom:2px}
.nav a:hover{background:#2a303b;color:#fff}
.nav a.active{background:var(--orange);color:#fff}
.sidebar .me{padding:12px 16px;border-top:1px solid #2b313c;font-size:12px;color:#8a94a6}
.sidebar .me b{color:#fff;display:block;font-size:13px;margin-bottom:2px}
.main{flex:1;margin-left:200px;padding:20px 24px 40px;max-width:1280px;min-width:0}
.main.main-wide{max-width:none}
.topbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px}
.topbar h2{font-size:20px}
.topbar .date{color:var(--sub);font-size:13px}

/* ---------- 通用组件 ---------- */
.card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:18px 20px;margin-bottom:16px}
.card h3{font-size:15px;margin-bottom:12px;display:flex;align-items:center;justify-content:space-between}
/* v1.75 教务设置卡片拖拽排序 */
.card.aca-dragging{opacity:.45;outline:2px dashed var(--line);outline-offset:2px}
.card[data-card] h3{user-select:none}
.grid{display:grid;gap:14px}
.g4{grid-template-columns:repeat(4,1fr)}
.g5{grid-template-columns:repeat(5,1fr)}
.g6{grid-template-columns:repeat(6,1fr)}
.g3{grid-template-columns:repeat(3,1fr)}
.g2{grid-template-columns:repeat(2,1fr)}
.stat{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);padding:16px 18px}
.stat .num{font-size:26px;font-weight:700;margin:6px 0 2px}
.stat .lbl{color:var(--sub);font-size:12px}
.stat.o .num{color:var(--orange)} .stat.g .num{color:var(--green)} .stat.b .num{color:var(--blue)} .stat.y .num{color:var(--yellow)}
.stat.r .num{color:var(--bad)}
.stat.p .num{color:#7c5cff}
.stat.clickable{cursor:pointer;transition:.15s}
.stat.clickable:hover{box-shadow:0 4px 14px rgba(217,83,79,.18);border:1px solid var(--bad)}
.stat.p.clickable:hover{box-shadow:0 4px 14px rgba(124,92,255,.20);border:1px solid #7c5cff}
.dash-section{border-radius:12px;padding:14px 16px 16px;margin-bottom:14px}
.dash-today{background:linear-gradient(135deg,#fef3e8 0%,#fce4d2 100%)}
.dash-plan{background:linear-gradient(135deg,#ede8fe 0%,#e0d6fa 100%)}
.dash-title{font-size:14px;font-weight:700;margin-bottom:10px;display:flex;align-items:center;gap:6px;letter-spacing:.5px}
.dash-today .dash-title{color:var(--orange)}
.dash-plan .dash-title{color:#7c5cff}

/* v1.52：校长驾驶舱三大看板 */
.dash-board{border-radius:14px;padding:18px 20px;margin-bottom:16px;border:1px solid transparent}
.dash-board h3{font-size:16px;margin-bottom:14px;display:flex;align-items:center;gap:8px}
.dash-board h3 .board-icon{width:28px;height:28px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:15px;color:#fff;flex:none}
.dash-board .board-link{font-size:12px;font-weight:400;margin-left:auto}
.dash-board .mini-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:10px;margin-bottom:10px}
.dash-board .mini-stat{background:rgba(255,255,255,.65);border-radius:10px;padding:12px 14px;text-align:center}
.dash-board .mini-stat .ms-lbl{font-size:11px;color:#6b7280;margin-bottom:4px}
.dash-board .mini-stat .ms-num{font-size:22px;font-weight:700;line-height:1.2}
.dash-board .mini-stat .ms-sub{font-size:11px;color:#9ca3af;margin-top:2px}
.dash-board .board-row{display:flex;gap:16px;flex-wrap:wrap;align-items:stretch}
.dash-board .board-section{flex:1;min-width:200px}
.dash-board .board-section-title{font-size:12px;font-weight:600;color:#6b7280;margin-bottom:8px;text-transform:uppercase;letter-spacing:.5px}
/* 销售看板：暖橙底 */
.dash-board.sales{background:linear-gradient(135deg,#fff7ed 0%,#ffedd5 50%,#fed7aa 100%);border-color:#fdba74}
.dash-board.sales h3{color:#c2410c}
.dash-board.sales h3 .board-icon{background:var(--orange)}
.dash-board.sales .ms-num{color:var(--orange)}
/* 教学看板：蓝色底 */
.dash-board.teach{background:linear-gradient(135deg,#eff6ff 0%,#dbeafe 50%,#bfdbfe 100%);border-color:#93c5fd}
.dash-board.teach h3{color:#1d4ed8}
.dash-board.teach h3 .board-icon{background:var(--blue)}
.dash-board.teach .ms-num{color:var(--blue)}
/* 校区看板：绿色底 */
.dash-board.campus{background:linear-gradient(135deg,#f0fdf4 0%,#dcfce7 50%,#bbf7d0 100%);border-color:#86efac}
.dash-board.campus h3{color:#15803d}
.dash-board.campus h3 .board-icon{background:var(--green)}
.dash-board.campus .ms-num{color:var(--green)}
/* 待审核看板：红色底（需主管确认处理的事项） */
.dash-board.audit{background:linear-gradient(135deg,#fef2f2 0%,#fee2e2 50%,#fecaca 100%);border-color:#fca5a5}
.dash-board.audit h3{color:#b91c1c}
.dash-board.audit h3 .board-icon{background:var(--bad)}
.dash-board.audit .ms-num{color:#b91c1c}
/* 我的工作安排看板：紫色底（个人视角） */
.dash-board.mine{background:linear-gradient(135deg,#faf5ff 0%,#f3e8ff 50%,#e9d5ff 100%);border-color:#d8b4fe}
.dash-board.mine h3{color:#7e22ce}
.dash-board.mine h3 .board-icon{background:#9333ea}
.dash-board.mine .ms-num{color:#7e22ce}
/* v1.55：月收入预估看板：金底 */
.dash-board.pay{background:linear-gradient(135deg,#fffbeb 0%,#fef3c7 50%,#fde68a 100%);border-color:#fcd34d}
.dash-board.pay h3{color:#92400e}
.dash-board.pay h3 .board-icon{background:#d97706}
.dash-board.pay .ms-num{color:#b45309}
/* v1.58：每日例行卡 */
.daily-task{display:flex;align-items:flex-start;gap:10px;padding:8px 10px;border-bottom:1px dashed rgba(124,45,18,.18)}
.daily-task:last-of-type{border-bottom:none}
.daily-task input[type=checkbox]{width:16px;height:16px;margin-top:3px;cursor:pointer;accent-color:#c2410c;flex-shrink:0}
.daily-task .dt-body{flex:1;min-width:0}
.daily-task .dt-title.done b{text-decoration:line-through;color:#9ca3af}
.daily-logs{margin:6px 0 0;padding:6px 10px;background:rgba(255,255,255,.55);border-radius:8px;font-size:12px;color:#7c2d12}
.daily-logs div{padding:2px 0}
/* 看板内表格 */
.dash-board .mini-tbl{width:100%;font-size:12px;border-collapse:collapse}
.dash-board .mini-tbl th{text-align:left;padding:5px 8px;color:#6b7280;font-weight:600;border-bottom:1px solid rgba(0,0,0,.06)}
.dash-board .mini-tbl td{padding:5px 8px;border-bottom:1px solid rgba(0,0,0,.04)}
.dash-board .mini-tbl tr:last-child td{border-bottom:none}
.dash-board .tag-mini{font-size:11px;padding:1px 7px;border-radius:4px;display:inline-block}
.dash-section .stat{background:rgba(255,255,255,.9)}
.dash-section .stat.clickable:hover{background:#fff}
table.tbl{width:100%;border-collapse:separate;border-spacing:0;font-size:13px}
.tbl th{text-align:left;color:var(--sub);font-weight:500;padding:8px 10px;border-bottom:1px solid var(--line);white-space:nowrap}
/* v2.00：可排序表头 */
.tbl th.th-sort,.mini-tbl th.th-sort{cursor:pointer;user-select:none;transition:color .15s}
.tbl th.th-sort:hover,.mini-tbl th.th-sort:hover{color:var(--blue)}
.tbl th.th-sort .sort-ind,.mini-tbl th.th-sort .sort-ind{display:inline-block;margin-left:2px;font-size:10px;opacity:.45;transform:translateY(-1px)}
.tbl th.th-sort:hover .sort-ind,.mini-tbl th.th-sort:hover .sort-ind{opacity:1}
.tbl th.th-sort[data-dir] .sort-ind,.mini-tbl th.th-sort[data-dir] .sort-ind{opacity:1;color:var(--blue);font-weight:700}
.tbl td{padding:9px 10px;border-bottom:1px solid #f0f2f6;vertical-align:middle}
.tbl tr:hover td{background:#fafbfd}
.tbl .empty{color:var(--sub);text-align:center;padding:24px}
/* v2.254→v2.382：全列表冻结表头整行 + 姓名整列 —— 往上滚锁表头整行、往右滑锁姓名整列；
   层级(v2.382修正)：普通单元格 < 表头(3) < 冻结列数据(4) < 冻结列表头(6)。
   旧版冻结列 z-index 低于表头，横向滚动时其它列的表头会从冻结列上方扫过（看起来像没冻结）；
   现在普通表头从冻结列数据下方穿过、数据行从表头下方穿过，两个方向都不串位 */
.tbl th{position:sticky;top:0;z-index:3;background:#f8f9fb}
.tbl td:first-child,.tbl th:first-child{position:sticky;left:0;background:#fff;box-shadow:1px 0 0 var(--line)}
.tbl td:first-child{z-index:4}
.tbl th:first-child{z-index:6;background:#f8f9fb}
.tbl tr:hover td:first-child{background:#fafbfd}
/* 首列为多选框时：多选列定宽 44px，冻结第二列（姓名）整列 */
.tbl th:first-child:has(input[type=checkbox]),.tbl td:first-child:has(input[type=checkbox]){width:44px!important;min-width:44px!important;max-width:44px!important;padding-left:8px!important;padding-right:8px!important;text-align:center!important}
.tbl tr:has(td:first-child input[type=checkbox]) td:nth-child(2){position:sticky;left:44px;z-index:4;background:#fff;box-shadow:1px 0 0 var(--line)}
.tbl tr:has(td:first-child input[type=checkbox]):hover td:nth-child(2){background:#fafbfd}
.tbl tr:has(th:first-child input[type=checkbox]) th:nth-child(2){position:sticky;left:44px;z-index:6;background:#f8f9fb;box-shadow:1px 0 0 var(--line)}
/* v2.382：预报名(试听)列表冻结前三列（多选 + 姓名 + 操作）——姓名定宽120px，操作列锁在164px处 */
#tr-table th:nth-child(2),#tr-table td:nth-child(2){width:120px;min-width:120px;max-width:120px}
#tr-table tr td:nth-child(2){position:sticky;left:44px;z-index:4;background:#fff;box-shadow:1px 0 0 var(--line)}
#tr-table tr th:nth-child(2){position:sticky;left:44px;z-index:6;background:#f8f9fb;box-shadow:1px 0 0 var(--line)}
#tr-table tr td:nth-child(3){position:sticky;left:164px;z-index:4;background:#fff;box-shadow:1px 0 0 var(--line)}
#tr-table tr th:nth-child(3){position:sticky;left:164px;z-index:6;background:#f8f9fb;box-shadow:1px 0 0 var(--line)}
#tr-table tr:hover td:nth-child(2),#tr-table tr:hover td:nth-child(3){background:#fafbfd}
.tag{display:inline-block;padding:2px 9px;border-radius:20px;font-size:12px;background:#eef2f7;color:#54607a;white-space:nowrap}
.tag.ok{background:#e5f5ec;color:var(--ok)}
.tag.warn{background:#fdf1e0;color:var(--warn)}
.tag.bad{background:#fdecea;color:var(--bad)}
.tag.blue{background:#e8f1fc;color:var(--blue)}
.tag.orange{background:#fdeade;color:var(--orange)}
.tag.purple{background:#f3e8ff;color:#7c3aed}

/* v2.02.15：意向课程（多选）卡片化，无复选框，单/双击切换 active */
.course-pills{margin:6px 0 10px}
.course-pills .course-label{display:block;font-size:12px;color:var(--sub);margin-bottom:6px}
.course-cards{display:flex;flex-wrap:wrap;gap:8px}
.course-card{display:inline-flex;align-items:center;justify-content:center;min-width:78px;height:40px;padding:0 16px;border:1px solid #e2e8f0;border-radius:8px;background:#fff;cursor:pointer;user-select:none;font-size:14px;color:#475569;transition:background .15s,border-color .15s,color .15s,transform .08s}
.course-card:hover{background:#f8fafc;border-color:#cbd5e1}
.course-card.active{background:#ede9fe;border-color:#7c3aed;color:#5b21b6;font-weight:500}
.course-card.active:hover{background:#ddd6fe}
.btn{border:1px solid var(--line);background:#fff;color:var(--txt);border-radius:8px;padding:7px 14px;font-size:13px;cursor:pointer;transition:.15s}
.btn:hover{border-color:var(--orange);color:var(--orange)}
.btn.primary{background:var(--orange);border-color:var(--orange);color:#fff}
.btn.primary:hover{background:#e0661a;color:#fff}
.btn.mini{padding:3px 10px;font-size:12px;border-radius:6px}
.btn.danger{color:var(--bad)} .btn.danger:hover{border-color:var(--bad)}
.btn.warn{background:var(--warn);border-color:var(--warn);color:#fff}
.btn.warn:hover{background:#c96d00;color:#fff}
.btn.ok{background:var(--ok);border-color:var(--ok);color:#fff}
.btn.ok:hover{background:#268a4e;color:#fff}

/* ---------- 排课看板卡 ---------- */
.sc-board{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px;margin-top:12px}
.sc-card{border:1px solid var(--line);border-radius:10px;background:#fff;box-shadow:var(--shadow);overflow:hidden;display:flex;flex-direction:column}
.sc-card-hd{display:flex;align-items:center;gap:8px;padding:10px 14px;background:#f8fafd;border-bottom:1px solid var(--line)}
.sc-card-hd b{flex:1;font-size:14px}
.sc-card-bd{padding:6px 14px 12px;max-height:360px;overflow:auto;flex:1}
.sc-wd{font-size:12px;font-weight:700;color:var(--orange);margin:10px 0 4px}
.sc-item{font-size:12.5px;padding:4px 0 4px 10px;border-left:2px solid var(--line);line-height:1.6}
.sc-card-wide{grid-column:1/-1}
.sc-card-wide .sc-card-bd{max-height:none;overflow:visible}
.sc-legend{display:flex;flex-wrap:wrap;gap:6px 16px;align-items:center;margin:6px 0 2px}
.sc-legend .sc-lg-item{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:#475569}
.sc-legend .sc-lg-item i{width:14px;height:14px;border-radius:4px;display:inline-block;border:1px solid rgba(0,0,0,.08)}
.sc-tt{width:100%;border-collapse:collapse;font-size:12px;table-layout:fixed;margin-top:6px}
.sc-tt th{background:#f8fafd;padding:7px 4px;font-size:12px;border:1px solid var(--line);text-align:center;white-space:nowrap}
.sc-tt th.sc-time-th{width:64px}
.sc-tt td{border:1px solid var(--line);padding:6px;vertical-align:top}
.sc-tt td.sc-off{background:#fafbfd}
/* v2.121：td 保持 table-cell，内部 .sc-td-cells 用 flex 排列（修复 td 设 display:flex 导致课程格堆叠错位） */
.sc-tt .sc-td-cells{display:flex;flex-wrap:wrap;gap:5px;align-items:stretch;align-content:flex-start}
.sc-tt .sc-td-cells .sc-cell{flex:1 1 120px;min-width:120px}
.sc-tt .sc-time{width:64px;text-align:center;white-space:nowrap;background:#f8fafd;font-size:13px;line-height:1.5;font-weight:700;color:#0f172a}
.sc-tt .sc-cell b{display:block;font-size:12.5px;margin-bottom:3px;line-height:1.35;word-break:break-all;overflow-wrap:break-word}
.sc-tt .sc-cell .mini-note{display:block;font-size:11px;line-height:1.4}
.sc-tt .sc-cell .sc-time-tag{display:inline-block;font-size:11px;line-height:1;padding:2px 6px;border-radius:6px;background:rgba(255,255,255,.7);color:#0f172a;margin-bottom:3px;font-weight:700}
.sc-tt td:not(.sc-off):not(.sc-time){background:#fff}
.sc-tt .sc-cell{border-radius:6px;padding:6px}
.sc-tt .sc-cell .sc-subtag{display:inline-block;font-size:10px;line-height:1;padding:2px 6px;border-radius:8px;background:rgba(0,0,0,.06);color:#555;margin-bottom:3px;font-weight:600}
/* v2.142：非在读班级（停课/结课/已结业）灰色显示 + 状态标签 */
.sc-tt .sc-cell.sc-cell-off{opacity:.72}
.sc-tt .sc-cell .sc-st-tag{display:inline-block;font-size:10px;line-height:1;padding:2px 6px;border-radius:8px;background:rgba(0,0,0,.12);color:#555;margin-bottom:3px;font-weight:600;margin-left:4px}
.sc-tt tr.sc-sep-row td{border:none;padding:0;height:8px;background:transparent;border-top:2px solid #cbd5e1}
.btn:disabled{opacity:.5;cursor:not-allowed}
input,select,textarea{font-family:inherit;font-size:13px;border:1px solid var(--line);border-radius:8px;padding:8px 10px;background:#fff;color:var(--txt);outline:none;width:100%}
input:focus,select:focus,textarea:focus{border-color:var(--orange)}
.field{margin-bottom:13px}
.field label{display:block;font-size:12px;color:var(--sub);margin-bottom:5px}
.field label .req{color:var(--bad)}
.row{display:flex;gap:12px}.row .field{flex:1}
#ld-ref-wrap{flex:1}
.bill-course{border:1px dashed #c8d4e6;border-radius:10px;padding:8px 14px 4px;margin:14px 0;background:#fafbfd}
.bill-course legend{font-size:12px;color:var(--sub);padding:0 6px}
.tier-row{display:flex;gap:14px;flex-wrap:wrap}
.tier-group{margin-bottom:12px}
.tier-group-label{font-size:14px;font-weight:600;margin-bottom:6px;padding:3px 12px;border-radius:6px;display:inline-block}
.tier-group-label.young{background:#e3f0ff;color:#2563eb}
.tier-group-label.middle{background:#fff4e6;color:#ea580c}
.tier-group.dim{opacity:.35;pointer-events:none}
.tier-card{display:flex;flex-direction:column;align-items:center;gap:6px;padding:16px 28px;border:2px solid #e0e6ed;border-radius:12px;cursor:pointer;transition:all .18s;background:#fff;min-width:140px}
.tier-card:hover{border-color:#7c5cff;box-shadow:0 2px 12px rgba(124,92,255,.12)}
.tier-card.active{border-color:#7c5cff;background:#f5f0ff;box-shadow:0 2px 16px rgba(124,92,255,.20)}
.tier-card input{display:none}
.tier-hours{font-size:32px;font-weight:700;color:#333;line-height:1}
.tier-hours span{font-size:13px;font-weight:400;color:var(--sub);margin-left:2px}
.tier-card.active .tier-hours{color:#7c5cff}
.tier-prices{display:flex;flex-direction:column;gap:2px;align-items:center}
.tier-p{font-size:12px;color:var(--primary,#3b82f6)}
.tier-m{font-size:12px;color:var(--orange,#f59e0b)}
.tier-orig{font-size:11px;color:#999;text-decoration:line-through}
.extra-row{display:flex;gap:8px;align-items:flex-end;margin-bottom:6px}
.extra-row .field{margin-bottom:0}
#extra-items-box{margin-bottom:4px}
#bi-amount-breakdown{display:inline}
.th-filter{cursor:pointer;user-select:none;white-space:nowrap}
.th-filter:hover{background:rgba(59,130,246,0.1)}
.th-filter-active{color:var(--blue,#3b82f6)}
.th-funnel{font-size:9px;opacity:.4;margin-left:2px}
.th-filter-active .th-funnel{opacity:1;color:var(--blue,#3b82f6)}
.col-filter-panel{position:absolute;z-index:9999;background:#fff;border:1px solid #ddd;border-radius:8px;box-shadow:0 4px 16px rgba(0,0,0,.18);padding:8px;font-size:13px;width:max-content;min-width:200px;max-width:300px;line-height:1.5}
.col-filter-panel>.col-filter-search{margin:0 0 8px;width:100%;display:block;box-sizing:border-box}
.col-filter-panel>.col-filter-search input{width:100%;box-sizing:border-box}
.col-filter-panel>.col-filter-actions{margin:0 0 6px;display:flex;gap:6px;justify-content:flex-start}
.col-filter-list{display:block;width:100%;max-height:260px;overflow-y:auto;overflow-x:hidden;text-align:left;box-sizing:border-box}
.col-filter-list>.col-filter-item{display:flex;align-items:center;justify-content:flex-start;gap:6px;padding:4px 6px;cursor:pointer;font-size:12px;white-space:nowrap;width:100%;box-sizing:border-box;line-height:1.5}
.col-filter-list>.col-filter-item:hover{background:#f5f5f5;border-radius:3px}
.col-filter-list>.col-filter-item input{margin:0;flex-shrink:0;width:auto}
.col-filter-list>.col-filter-item>span{flex:0 0 auto;color:#999;font-size:11px}
.col-filter-list>.col-filter-item>b,.col-filter-list>.col-filter-item>span:not([class]){flex:0 0 auto;color:#333}
.col-filter-active-bar{display:inline-flex;align-items:center;gap:6px;background:#e3f0ff;color:#2563eb;padding:3px 10px;border-radius:12px;font-size:12px;margin-left:8px}
.col-vis-header{display:flex;justify-content:space-between;align-items:center;padding:0 6px 8px;border-bottom:1px solid #eee;margin:0 0 8px}
.col-vis-header>button{flex:0 0 auto}
.col-vis-list{display:block;width:100%;max-height:360px;overflow-y:auto;overflow-x:hidden;text-align:left;box-sizing:border-box}
.col-vis-list>.col-vis-item{display:flex;align-items:center;justify-content:flex-start;gap:6px;padding:5px 6px;cursor:pointer;font-size:13px;white-space:nowrap;width:100%;box-sizing:border-box;line-height:1.5}
.col-vis-list>.col-vis-item:hover{background:#f5f5f5;border-radius:3px}
.col-vis-list>.col-vis-item input{margin:0;flex-shrink:0;width:auto}

.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:14px}
.toolbar input,.toolbar select{width:auto}
.hint{font-size:12px;color:var(--sub);background:#f6f8fb;border-radius:8px;padding:10px 12px;margin-bottom:14px;line-height:1.7}
.warnbox{background:#fdf6e8;border:1px solid #f5deb3;color:#8a6100;border-radius:8px;padding:10px 14px;font-size:13px;margin:10px 0;line-height:1.8}

/* modal */
.modal-mask{position:fixed;inset:0;background:rgba(15,20,30,.45);display:flex;align-items:center;justify-content:center;z-index:100}
.modal{background:#fff;border-radius:14px;width:560px;max-width:94vw;max-height:88vh;overflow:auto;padding:24px 26px}
.modal h3{font-size:16px;margin-bottom:16px}
.modal .foot{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}
.modal.wide{width:760px}

/* toast */
#toast-root{position:fixed;top:18px;right:18px;z-index:200;display:flex;flex-direction:column;gap:8px}
.toast{background:#22272e;color:#fff;border-radius:10px;padding:11px 18px;font-size:13px;box-shadow:0 6px 20px rgba(0,0,0,.25);animation:tin .25s}
.toast.ok{background:var(--ok)} .toast.bad{background:var(--bad)}
@keyframes tin{from{opacity:0;transform:translateY(-8px)}to{opacity:1}}

/* dashboard todo list */
.todo{display:flex;align-items:center;gap:10px;padding:9px 4px;border-bottom:1px dashed #eef0f4;font-size:13px}
.todo:last-child{border-bottom:none}
.todo .dot{width:8px;height:8px;border-radius:50%;flex:none}
.todo .dot.o{background:var(--orange)} .todo .dot.g{background:var(--green)} .todo .dot.y{background:var(--yellow)} .todo .dot.b{background:var(--blue)} .todo .dot.r{background:var(--bad)}
.todo .act{margin-left:auto;flex:none}
.att-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px}
.att-item{border:1px solid var(--line);border-radius:10px;padding:12px 14px}
.att-item b{display:block;margin-bottom:8px}
.att-opts{display:flex;gap:6px}
.att-opts button{flex:1;padding:5px 0;font-size:12px;border-radius:6px;border:1px solid var(--line);background:#fff;cursor:pointer}
.att-opts button.on-到课{background:#e5f5ec;border-color:var(--ok);color:var(--ok)}
.att-opts button.on-请假{background:#fdf1e0;border-color:var(--warn);color:var(--warn)}
.att-opts button.on-缺勤{background:#fdecea;border-color:var(--bad);color:var(--bad)}
.att-focus{margin-top:8px;border-top:1px dashed var(--line);padding-top:8px}
.att-focus-lbl{display:inline-flex;align-items:center;gap:5px;font-size:12px;color:#7c2d12;cursor:pointer;user-select:none}
.att-focus-lbl input{margin:0}
.rc-focus-reason{display:block;width:100%;margin-top:6px;font-size:12px;padding:6px 8px;border:1px solid #fcd34d;border-radius:6px;background:#fffbeb}
.bar-wrap{background:#eef2f7;border-radius:6px;height:8px;overflow:hidden;min-width:60px}
.bar-wrap i{display:block;height:100%;background:var(--orange)}
.pkg-row td{font-size:12.5px}
.detail-list .kv{display:flex;padding:6px 0;border-bottom:1px dashed #eef0f4;font-size:13px}
.detail-list .kv b{width:88px;color:var(--sub);font-weight:500;flex:none}
.mini-note{color:var(--sub);font-size:12px}
@media(max-width:900px){.g4,.g5,.g6{grid-template-columns:repeat(2,1fr)}.g3{grid-template-columns:1fr}}
/* 职位多选（复选框组） */
.pos-checks{display:flex;flex-wrap:wrap;gap:6px 14px;padding:10px 12px;background:#f6f8fb;border-radius:8px;line-height:22px}
.pos-check{display:inline-flex;align-items:center;justify-content:center;gap:6px;font-size:13px;color:#3b4453;cursor:pointer;white-space:nowrap;line-height:1;padding:3px 0;vertical-align:middle}
.pos-check input{margin:0;width:14px;height:14px;flex:none;vertical-align:middle;accent-color:var(--orange)}

/* v1.3 线索CRM宽表 + 招生工作看板 + 跟进记录
   v2.262：overflow:auto(双向) + max-height，让宽表在容器内滚动，表头 sticky top / 姓名列 sticky left 才真正冻结 */
.tbl-wrap{overflow:auto;max-height:calc(100vh - 240px)}
.page-bar{display:flex;gap:6px;align-items:center;justify-content:flex-end;padding:10px 0 2px;flex-wrap:wrap}
.page-bar .page-info{font-size:13px;color:var(--sub);margin-right:8px}
.page-bar .btn.mini{min-width:34px;padding:4px 8px;font-size:13px}
.page-bar .btn.mini:disabled{opacity:.4;cursor:default}
.page-ellipsis{color:var(--sub);padding:0 2px;font-size:13px}
.modal .modal-body{max-height:70vh;overflow-y:auto}
.kb-board{display:flex;gap:12px;overflow-x:auto;padding-bottom:6px;flex-wrap:wrap}
.kb-col{flex:0 0 220px;background:#f7f9fc;border-radius:10px;padding:10px}
.kb-col-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;font-size:13px}
.kb-col-head b{color:#3b4453}
.kb-count{background:#fff;border-radius:10px;padding:1px 9px;font-size:12px;color:#7a8494;box-shadow:var(--shadow)}
.kb-wait .kb-col-head b{color:#c77700}.kb-doing .kb-col-head b{color:#2f6fd6}
.kb-visit .kb-col-head b{color:#d2691e}.kb-done .kb-col-head b{color:#1e9e62}.kb-lost .kb-col-head b{color:#b3546a}
.kb-card{background:#fff;border-radius:9px;box-shadow:var(--shadow);padding:9px 10px;margin-bottom:8px;cursor:pointer;font-size:13px}
.kb-card:hover{outline:2px solid var(--orange)}
.kb-card-top{display:flex;justify-content:space-between;align-items:center}
.kb-card-line{color:#5a6474;margin-top:3px}
.kb-card-foot{display:flex;justify-content:space-between;align-items:center;margin-top:6px}
.kb-empty{text-align:center;color:#a5adba;font-size:12px;padding:14px 0}
.fu-item{border-left:3px solid var(--orange);background:#f8f9fc;border-radius:0 8px 8px 0;padding:8px 10px;margin-bottom:8px}
.fu-head{display:flex;justify-content:space-between;align-items:center;font-size:13px}
.fu-note{color:#3b4453;font-size:13px;margin-top:4px;white-space:pre-wrap}
.bar-line{display:flex;align-items:center;gap:10px;margin:9px 0}
.bar-lbl{width:88px;font-size:13px;color:#3b4453;text-align:right;flex-shrink:0}
.bar-line .bar-wrap{flex:1}
.bar-val{width:30px;font-size:13px;color:#7a8494;flex-shrink:0}

/* ===== 人事排班（v1.61） ===== */
.sh-tools{display:inline-flex;gap:6px;flex-wrap:wrap;margin-left:8px}
.sh-legend-bar{display:flex;gap:8px;flex-wrap:wrap;margin:8px 0}
.sh-legend{font-size:12px;padding:3px 10px;border-radius:12px;font-weight:600}
.sh-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:10px}
.sh-tbl{margin:0;min-width:100%}
.sh-tbl th,.sh-tbl td{padding:5px 2px;text-align:center;font-size:12px;border-color:#eef1f5}
.sh-h{min-width:26px;font-size:11px;line-height:1.3;white-space:nowrap}
.sh-h .sh-wk{display:block;font-size:10px;color:var(--sub);font-weight:400}
.sh-h.we .sh-wk{color:#d9534f}
.sh-h.today,.sh-c.today{outline:2px solid var(--orange);outline-offset:-2px;border-radius:4px}
.sh-c{cursor:pointer;user-select:none;font-weight:700;min-width:26px;border-radius:4px}
.sh-name{position:sticky;left:0;background:#fff;z-index:2;min-width:96px;text-align:left;padding:6px 10px !important;border-right:1px solid var(--line)}
.sh-name b{display:block;font-size:13px}
.sh-name .sh-pos{display:block;font-size:10px;color:var(--sub);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:110px}
.sh-stat,.sh-stat-th{min-width:64px;font-size:11px;white-space:nowrap}
.sh-stat{color:#475569}

/* ---------- v1.63 客户跟踪：卡片 + 时间轴 + 转介绍链路 ---------- */
.tk-card{padding:14px 18px}
.tk-head{border-bottom:1px dashed var(--line);padding-bottom:10px;margin-bottom:10px}
.tk-name{display:flex;align-items:center;flex-wrap:wrap;gap:6px;font-size:15px}
.tk-name b{font-size:16px}
.tk-phone{color:var(--sub);font-size:13px}
.tk-meta{font-size:12px;color:var(--sub);margin-top:6px}
.tk-acts{margin-top:8px;display:flex;gap:6px;flex-wrap:wrap}

/* v2.01.12：客户跟踪页左右分栏 */
.tk-split{display:grid;grid-template-columns:300px 1fr;min-height:1000px}
@media (max-width:900px){.tk-split{grid-template-columns:1fr}}
.tk-side{border-right:1px solid var(--line);background:#fbfaf6;max-height:1000px;overflow-y:auto;display:flex;flex-direction:column}
.tk-side-head{padding:12px 14px;font-size:13px;font-weight:700;color:var(--text-sec);background:#f6f3ec;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:1;display:flex;flex-direction:column;gap:2px}
.tk-side-list{padding:6px 0;flex:1}
.tk-side-item{padding:10px 14px;cursor:pointer;font-size:14px;color:#334155;border-bottom:1px solid #f0ece2;display:flex;align-items:center;gap:8px;line-height:1.3}
.tk-side-item:hover{background:#f3efe2}
.tk-side-item.active{background:linear-gradient(90deg,#fff5e0,#fff);color:#7a3e0d;font-weight:700;border-left:3px solid #d97706;padding-left:11px}
.tk-side-item .tag{font-size:11px;padding:1px 6px}
.tk-side-item .tk-side-sub{font-size:11px;color:var(--sub);margin-left:auto;flex-shrink:0}
.tk-main{padding:18px 22px;background:#fff;max-height:1000px;overflow-y:auto}
.tk-main-empty{padding:60px 24px;text-align:center;color:var(--sub)}
/* v2.02.7：客户全景三块卡片（学生/家长/跟踪记录）+ 字段横排 + 未填占位 */
.tk-card{border:1px solid var(--line);border-radius:10px;background:#fff;margin-bottom:12px;overflow:hidden;box-shadow:0 1px 2px rgba(15,23,42,.03)}
.tk-card-head{padding:10px 16px;font-size:14px;font-weight:600;background:#f5f7fa;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:8px}
.tk-card-head .tk-card-sub{font-weight:400;font-size:12px;color:var(--sub);margin-left:4px}
.tk-card-body{padding:14px 16px}
.tk-field-row{display:flex;flex-wrap:wrap;gap:10px 18px;align-items:baseline}
.tk-field{display:flex;align-items:baseline;gap:6px;flex:0 1 auto;min-width:120px;line-height:1.7}
.tk-field-lbl{color:#8a94a6;font-size:12px;flex-shrink:0}
.tk-field-val{font-size:14px;color:var(--text);word-break:break-word}
.tk-field-val.empty{color:#cbd0d8;font-style:normal}
.tk-field-sub{color:#8a94a6;font-size:12px;margin-left:2px}
.tk-note-row{display:flex;gap:6px;align-items:flex-start;margin-top:12px;padding-top:10px;border-top:1px dashed var(--line);line-height:1.7}
.tk-note-row .tk-field-lbl{flex-shrink:0;padding-top:1px}
.tk-note-row .tk-field-val{flex:1;min-width:0}
.tk-sep{color:#cbd5e1;margin:0 8px}
.tk-lbl{color:#8a94a6;font-size:12px;margin-right:2px;flex-shrink:0}
.tk-empty{color:#cbd0d8;font-size:13px;font-style:normal}
.tk-next{margin-top:3px;color:#8a94a6;font-size:12px}
.tk-stu-bar{padding:6px 14px;background:#fffbeb;border-bottom:1px solid #fde68a;font-size:12px;color:#92400e;display:flex;align-items:center;gap:8px}
.tk-stu-bar b{color:#7c2d12}
.tk-stu-bar .btn{margin-left:auto}
.tk-tl{position:relative;margin:4px 0 2px 8px;padding-left:26px;border-left:2px solid var(--line)}
.tk-item{position:relative;padding:5px 0 9px}
.tk-dot{position:absolute;left:-26px;top:4px;width:20px;height:20px;display:flex;align-items:center;justify-content:center;font-size:13px;background:#fff;border-radius:50%;border:2px solid var(--line)}
.tk-title{font-size:13px;font-weight:600;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.tk-at{font-weight:400;color:var(--sub);font-size:11px}
.tk-detail{font-size:12px;color:#475569;margin-top:2px}
.tk-by{font-size:11px;color:var(--sub);margin-top:1px}
.ref-tree{border:1px solid var(--line);border-radius:10px;padding:10px 14px;margin-bottom:10px;background:linear-gradient(135deg,#f0fdfa,#fff)}
.ref-node{margin-top:6px}
.ref-row{display:flex;align-items:center;flex-wrap:wrap;gap:8px;font-size:13px;padding:4px 6px;border-radius:8px;background:rgba(255,255,255,.75)}
.ref-row:hover{background:#fff}
.ref-edge{color:#0d9488;font-weight:700}
.ref-crown{font-size:15px}
.ref-node .ref-node{border-left:2px dashed #99f6e4;padding-left:4px}

/* ---------- v1.64 管理架构总览：主管卡片 + 下属标签 ---------- */
.org-mgr{border:1px solid var(--line);border-radius:12px;padding:12px 14px;background:linear-gradient(135deg,#f0f9ff,#f8fafc);flex:1;min-width:320px}
.org-mgr.top{background:linear-gradient(135deg,#fefce8,#fff);border-color:#fde68a}
.org-mgr-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding-bottom:8px;border-bottom:1px dashed var(--line);margin-bottom:10px}
.org-mgr-head b{font-size:14px}
.org-cnt{font-size:11px;color:#64748b;margin-left:auto;white-space:nowrap}
.org-subs{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.org-chip{display:inline-flex;align-items:center;gap:6px;border:1px solid #dbeafe;background:#fff;border-radius:999px;padding:3px 6px 3px 10px;font-size:12px}
.org-chip b{font-weight:600}
.org-chip i{font-style:normal;color:#64748b;font-size:11px}
.org-chip em{font-style:normal;font-size:10px;color:#2563eb;background:#eff6ff;border-radius:999px;padding:1px 7px;white-space:nowrap}
.org-chip.manual{border-color:#fed7aa;background:#fffbeb}
.org-chip.manual em{color:#c2410c;background:#fff7ed}
.org-chip.mgr{border-color:#bbf7d0;background:#f0fdf4}
.org-chip.none{border-color:#e2e8f0;background:#f8fafc}
.org-chip.none em{color:#64748b;background:#f1f5f9}
.org-x{border:none;background:#e2e8f0;color:#334155;border-radius:50%;width:18px;height:18px;line-height:16px;font-size:11px;cursor:pointer;padding:0;flex:none}
.org-x:hover{background:#2563eb;color:#fff}
.org-unassigned{margin-top:10px;border:1px dashed #fca5a5;background:#fef2f2;border-radius:10px;padding:10px 12px;font-size:12px;color:#7f1d1d;display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.org-empty{font-size:12px;color:#94a3b8}

/* ---------- v1.73 排班 2.0：班次色块 + 一键选班次 ---------- */
.sh-c.wk{min-width:62px;padding:4px 2px;line-height:1.4}
.sh-c.wk.on{font-weight:700}
.sh-c .sh-t1,.sh-c .sh-t2{display:block;font-size:11px;font-weight:600}
.sh-c .sh-t2{color:#64748b}
.sh-c .sh-dur{font-size:10px;font-weight:700}
.sh-c .sh-cp{display:block;font-size:9px;color:#a16207;font-weight:600;line-height:1.2}
.sh-c.wk:hover{filter:brightness(.94);cursor:pointer}
.sh-pick-grid{display:flex;flex-wrap:wrap;gap:8px}
.sh-pick{flex:1;min-width:110px;border-radius:10px;padding:10px 12px;cursor:pointer;text-align:left;transition:transform .06s}
.sh-pick:hover{transform:translateY(-1px);filter:brightness(.96)}
.sh-pick b{display:block;font-size:15px;margin-bottom:2px}
.sh-pick span{font-size:12px;opacity:.85}

/* ---------- v1.69 报销流程：审批进度步骤 ---------- */
.rp-step{display:inline-block;padding:1px 8px;border-radius:10px;font-size:11px;background:#f1f5f9;color:#94a3b8;margin-right:3px;white-space:nowrap}
.rp-step.done{background:#dcfce7;color:#15803d;font-weight:600}
.rp-step.cur{background:#fef9c3;color:#a16207;font-weight:600}
.rp-step.skip{background:#f8fafc;color:#cbd5e1;text-decoration:line-through}

/* ---------- v2.02.12 全局看板通知横幅（学年升级预告/结果等系统消息，所有人可见） ---------- */
.board-notices{display:flex;flex-direction:column;gap:8px;margin-bottom:12px}
.board-notice{display:flex;align-items:flex-start;gap:12px;padding:10px 14px;border-radius:8px;font-size:13px;line-height:1.7}
.board-notice b{white-space:nowrap}
.board-notice.warn{background:#fffbeb;border:1px solid #fde68a;color:#92400e}
.board-notice.ok{background:#f0fdf4;border:1px solid #bbf7d0;color:#166534}
.board-notice span{flex:1;min-width:0}
.board-notice a{color:inherit;opacity:.45;text-decoration:none;font-size:14px;font-weight:700;padding:0 2px}
.board-notice a:hover{opacity:1}

/* v2.02.22：校长驾驶舱 — 周会议模板样式 */
.coc-topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 18px;background:linear-gradient(135deg,#1e293b 0%,#334155 100%);color:#f8fafc;border-radius:12px;margin-bottom:14px;box-shadow:0 2px 8px rgba(15,23,42,.18)}
.coc-top-left h2{margin:0;font-size:20px;font-weight:700;display:flex;align-items:center;gap:6px}
.coc-sub{display:block;font-size:12px;color:#cbd5e1;margin-top:2px;font-weight:400}
.coc-top-right{display:flex;align-items:center;gap:14px;flex-wrap:wrap;justify-content:flex-end}
.coc-top-right .date{font-size:12px;color:#e2e8f0}
.coc-toggle{display:inline-flex;align-items:center;gap:8px;padding:7px 14px;border-radius:999px;font-size:13px;font-weight:600;cursor:pointer;user-select:none;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.18);color:#e2e8f0;transition:all .15s}
.coc-toggle:hover{background:rgba(255,255,255,.16);transform:translateY(-1px)}
.coc-toggle .coc-toggle-dot{width:10px;height:10px;border-radius:50%;background:#94a3b8;box-shadow:0 0 0 0 rgba(148,163,184,.5);transition:all .15s}
.coc-toggle.on{background:linear-gradient(135deg,#16a34a,#22c55e);border-color:#15803d;color:#fff;box-shadow:0 2px 10px rgba(22,163,74,.4)}
.coc-toggle.on .coc-toggle-dot{background:#fff;box-shadow:0 0 0 4px rgba(255,255,255,.25)}
.coc-toggle-by{font-size:11px;font-weight:400;opacity:.85;padding-left:6px;border-left:1px solid rgba(255,255,255,.3)}
.coc-toggle-readonly{padding:7px 14px;border-radius:999px;font-size:12px;font-weight:500;background:rgba(34,197,94,.15);border:1px solid rgba(34,197,94,.45);color:#86efac}
.coc-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px;padding:0 4px}
.coc-count{font-size:12px;color:#64748b}
.coc-empty{padding:60px 20px;text-align:center;color:#94a3b8;font-size:14px;background:#f8fafc;border:2px dashed #e2e8f0;border-radius:12px}
.coc-card{background:#fff;border:1px solid #e2e8f0;border-radius:12px;padding:16px 18px;margin-bottom:14px;box-shadow:0 1px 3px rgba(15,23,42,.05)}
.coc-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;padding-bottom:12px;border-bottom:1px dashed #e2e8f0;margin-bottom:14px}
.coc-head-left{display:flex;align-items:center;gap:12px;flex-wrap:wrap;font-size:13px}
.coc-head-right{display:flex;align-items:center;gap:6px}
.coc-week{font-size:15px;font-weight:700;color:#0f172a;background:#fef3c7;padding:4px 10px;border-radius:6px}
.coc-date{color:#475569}
.coc-author{color:#1d4ed8;background:#dbeafe;padding:2px 8px;border-radius:4px;font-size:12px}
.coc-updated{color:#94a3b8;font-size:11px}
.coc-edit-meta{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:12px;padding:10px 12px;background:#f1f5f9;border-radius:8px}
.coc-edit-meta label{display:flex;align-items:center;gap:8px;font-size:13px;color:#475569}
.coc-edit-meta input{padding:6px 10px;border:1px solid #cbd5e1;border-radius:6px;font-size:13px}
.coc-edit-meta input[data-coc-week]{width:240px}
.coc-edit-meta input[data-coc-date]{width:160px}
.coc-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}
@media (max-width: 980px){.coc-grid{grid-template-columns:1fr}}
.coc-field{background:#fafbfc;border:1px solid #eef2f7;border-radius:8px;padding:12px 14px;display:flex;flex-direction:column;gap:8px;min-width:0}
.coc-field label{display:flex;flex-direction:column;gap:2px}
.coc-field b{font-size:13px;color:#0f172a}
.coc-hint{font-size:11px;color:#94a3b8;font-weight:400}
.coc-field textarea{width:100%;min-height:70px;padding:8px 10px;border:1px solid #cbd5e1;border-radius:6px;font-size:13px;font-family:inherit;line-height:1.6;resize:vertical;box-sizing:border-box}
.coc-field textarea:focus{outline:none;border-color:#1d4ed8;box-shadow:0 0 0 3px rgba(29,78,216,.12)}
.coc-readonly{min-height:34px;padding:8px 10px;background:#fff;border:1px dashed #e2e8f0;border-radius:6px;font-size:13px;line-height:1.7;color:#334155;white-space:pre-wrap;word-break:break-word}
.coc-footer{margin-top:18px;padding-top:14px;border-top:1px solid #e2e8f0;text-align:center;font-size:11px;color:#94a3b8}

/* ================= 工作周报 v2.03 ================= */
.wr-weekbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}
.wr-week-label{font-size:15px;font-weight:600;color:#1e293b}
.wr-week-now{font-size:12px;color:#94a3b8}
.wr-sums{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:14px}
.wr-sum{border-radius:10px;padding:12px 14px;border:1px solid #e2e8f0;background:#fff}
.wr-sum-label{font-size:12px;color:#64748b;margin-bottom:4px}
.wr-sum-num{font-size:15px;font-weight:600;color:#1e293b}
.wr-sum-amt{font-size:17px;font-weight:700;margin-top:2px}
.wr-new .wr-sum-amt{color:#2563eb}
.wr-renew .wr-sum-amt{color:#16a34a}
.wr-ext .wr-sum-amt{color:#ea580c}
.wr-total{background:#f8fafc}
.wr-total .wr-sum-amt{color:#0f172a}
.wr-auto-hint{font-size:11px;color:#94a3b8;font-weight:400}
.wr-footer{margin-top:18px;padding-top:14px;border-top:1px solid #e2e8f0;text-align:center;font-size:11px;color:#94a3b8}
@media (max-width:980px){.wr-sums{grid-template-columns:repeat(2,1fr)}}

/* ================= 工作周报 · 上周试听 v2.03c ================= */
.wr-sub-h{font-size:13px;font-weight:600;color:#334155;margin:14px 0 8px}
.wr-works{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.wr-works .tag{max-width:240px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wr-works .btn.mini{flex-shrink:0}
.wr-modal-works{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0 12px;padding:8px;background:#f8fafc;border-radius:8px}
.wr-modal-works .tag{max-width:100%;white-space:normal}

/* ================= 工作周报 · 上周教学活动 v2.03d ================= */
.wr-act-toggle{display:flex;align-items:center;flex-wrap:wrap;gap:10px;padding:10px 12px;background:#f8fafc;border-radius:10px;margin-bottom:12px}
.wr-act-q{font-size:13px;font-weight:600;color:#334155}

/* ================= 工作周报 · 分区横幅 v2.03e ================= */
.wr-banner{display:flex;align-items:center;gap:12px;padding:14px 20px;border-radius:12px;margin:0 0 14px;color:#fff;box-shadow:0 4px 14px rgba(15,23,42,.12)}
.wr-banner-ico{font-size:26px;line-height:1;filter:drop-shadow(0 1px 2px rgba(0,0,0,.2))}
.wr-banner-title{font-size:18px;font-weight:700;letter-spacing:1px}
.wr-banner-sub{font-size:12px;opacity:.92;font-weight:400;margin-left:auto}
.wr-banner.past{background:linear-gradient(105deg,#4f46e5 0%,#7c3aed 45%,#db2777 100%)}
.wr-banner.next{background:linear-gradient(105deg,#f59e0b 0%,#f43f5e 60%,#d946ef 100%);margin:14px 0 0}
@media (max-width:720px){.wr-banner{flex-wrap:wrap}.wr-banner-sub{margin-left:0;width:100%}}

/* ================= 教学活动课申请 v2.04a ================= */
.actreq-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.actreq-filters{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.actreq-filters .btn.mini{padding:4px 10px}
.actreq-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin:8px 0 12px}
.actreq-stats .sc{padding:10px 12px;border-radius:10px;background:#f8fafc;border:1px solid #e2e8f0}
.actreq-stats .sc .lbl{font-size:12px;color:#64748b;font-weight:500}
.actreq-stats .sc .num{font-size:22px;font-weight:700;color:#0f172a;line-height:1.3}
.actreq-stats .sc.b{background:linear-gradient(135deg,#eef2ff,#e0e7ff);border-color:#c7d2fe}
.actreq-stats .sc.o{background:linear-gradient(135deg,#fff7ed,#ffedd5);border-color:#fed7aa}
.actreq-stats .sc.g{background:linear-gradient(135deg,#ecfdf5,#d1fae5);border-color:#a7f3d0}
.actreq-stats .sc.r{background:linear-gradient(135deg,#fef2f2,#fee2e2);border-color:#fecaca}
@media (max-width:720px){.actreq-stats{grid-template-columns:repeat(2,1fr)}}
.actreq-content{font-size:12px;color:#475569;line-height:1.5;max-width:320px;white-space:pre-wrap;word-break:break-word}
.actreq-content.collapsed{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.actreq-no{font-family:Consolas,Monaco,monospace;font-size:12px;color:#1e40af;font-weight:600}
.actreq-meta{font-size:12px;color:#64748b;line-height:1.5}
.actreq-time{font-family:Consolas,Monaco,monospace;font-size:12px;color:#0f172a;font-weight:600}
.actreq-op{display:flex;gap:4px;flex-wrap:wrap}
.actreq-op .btn.mini{padding:3px 8px;font-size:11px}
/* v2.04g：教学周计划表（参考 Molly 周计划表样式：班级+周一~周日+人数） */
.wp-tbl{table-layout:fixed;min-width:980px}
.wp-tbl th,.wp-tbl td{font-size:12px;vertical-align:top}
.wp-tbl th{background:linear-gradient(180deg,#1e293b,#334155);color:#fff;border-color:#1e293b;text-align:center;padding:8px 6px}
.wp-tbl td{text-align:left;padding:6px 8px;border-color:#cbd5e1}
.wp-tbl tbody tr:nth-child(odd) td{background:#f8fafc}
.wp-tbl tbody tr:hover td{background:#fef9c3}
.wp-cell{font-size:12px;line-height:1.5;color:#1e293b;white-space:pre-wrap;word-break:break-word;max-height:96px;overflow:auto}
.wp-cell-empty{color:#cbd5e1;font-size:18px;text-align:center;line-height:1.2}
/* v2.05c：本周安排表 — 教学活动课格子高亮（橙金色） */
.wp-act-td{background:rgba(245,158,11,.14)!important}
.wp-act-td:hover td,.wp-tbl tbody tr:hover .wp-act-td{background:rgba(245,158,11,.22)!important}
.wp-cell-act{background:linear-gradient(135deg,#fef3c7,#fde68a);border:1px solid #f59e0b;border-radius:8px;padding:6px 8px;font-weight:600;color:#92400e}
.wp-act-tag{margin-top:4px;font-size:11px;font-weight:700;color:#b45309;background:rgba(255,255,255,.85);border:1px solid rgba(245,158,11,.5);border-radius:6px;padding:2px 6px;display:inline-block;line-height:1.4}
/* v2.64：当日事项学员名字自动匹配下拉项 */
.ti-cust-opt{padding:7px 10px;cursor:pointer;border-bottom:1px solid #f0f0f3;font-size:13px;color:#334155}
.ti-cust-opt:hover{background:#f5f3ff}
.ti-cust-opt:last-child{border-bottom:none}
/* v2.111：测试课上报 — 试卷照片缩略图 */
.lt-photo{position:relative;width:76px;height:76px;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:#f6f8fb;flex:none}
.lt-photo img{width:100%;height:100%;object-fit:cover;display:block}
.lt-photo-del{position:absolute;top:2px;right:2px;width:18px;height:18px;line-height:16px;text-align:center;background:rgba(0,0,0,.55);color:#fff;border-radius:50%;font-size:12px;cursor:pointer;text-decoration:none}
