/* ============================================================================
   技敦敦技能服务管理系统 · PC 后台视觉设计系统  v3 (2026-10-31)
   风格：深墨蓝 + 鎏金 · 教育科技后台（稳重、清晰、留白呼吸感）
   ========================================================================== */

:root{
  /* —— 品牌色 —— */
  --ink:#0A1E38;
  --navy:#14345C;            /* 主色（深墨蓝） */
  --navy2:#2C6BA8;           /* 品牌蓝（兼容旧变量） */
  --navy-navy:#1D4B7E;
  --gold:#C8A24A;            /* 鎏金 */
  --gold2:#E2C583;
  --gold-600:#A9822F;
  --gold-050:#FBF4E2;

  /* —— 中性 —— */
  --bg:#F4F6FA;
  --bg2:#EDF1F8;
  --panel:#FFFFFF;
  --line:#E7ECF4;
  --line2:#D9E2EF;
  --text:#16273D;
  --text2:#3C4E66;
  --muted:#6E7F96;
  --muted2:#93A2B6;

  /* —— 语义 —— */
  --green:#1E8E5A;
  --green-bg:#E9F7EF;
  --red:#D2483E;
  --red-bg:#FDEDEB;
  --blue:#2C6BA8;
  --blue-bg:#EAF2FC;
  --purple:#6554C0;
  --purple-bg:#F1EEFB;
  --orange:#B8791A;
  --orange-bg:#FDF4E3;

  /* —— 形状 / 阴影 —— */
  --r-xs:6px; --r-sm:8px; --r:10px; --r-md:12px; --r-lg:14px; --r-xl:18px;
  --sh-1:0 1px 2px rgba(16,32,56,.05);
  --sh-2:0 4px 16px -6px rgba(16,32,56,.16);
  --sh-3:0 18px 44px -16px rgba(10,30,56,.28);
  --ring:0 0 0 3px rgba(44,107,168,.14);

  --sidebar-w:236px;
  --topbar-h:64px;
}

*{box-sizing:border-box;margin:0;padding:0;}
html{-webkit-text-size-adjust:100%;}
body{
  font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  background:var(--bg);color:var(--text);font-size:13.5px;line-height:1.6;
  -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;
  font-variant-numeric:tabular-nums;
}
a{color:var(--navy2);text-decoration:none;}
a:hover{color:var(--navy);}
button{font-family:inherit;cursor:pointer;}
::selection{background:rgba(200,162,74,.25);}
*:focus-visible{outline:2px solid rgba(44,107,168,.5);outline-offset:2px;}

/* 细滚动条 */
::-webkit-scrollbar{width:10px;height:10px;}
::-webkit-scrollbar-thumb{background:#CBD5E3;border-radius:8px;border:3px solid transparent;background-clip:content-box;}
::-webkit-scrollbar-thumb:hover{background:#AEBBCE;background-clip:content-box;}
::-webkit-scrollbar-track{background:transparent;}

/* ============================================================================
   1. 布局骨架
   ========================================================================== */
.app{display:flex;min-height:100vh;}

/* —— 侧边栏 —— */
.sidebar{
  width:var(--sidebar-w);flex-shrink:0;position:fixed;inset:0 auto 0 0;height:100vh;
  background:
    radial-gradient(560px 220px at 8% -6%,rgba(200,162,74,.20),transparent 70%),
    linear-gradient(180deg,#123458 0%,#0C2442 52%,#0A1E38 100%);
  display:flex;flex-direction:column;overflow-y:auto;overflow-x:hidden;z-index:40;
  scrollbar-width:thin;
}
.sidebar::-webkit-scrollbar{width:6px;}
.sidebar::-webkit-scrollbar-thumb{background:rgba(255,255,255,.16);border:none;border-radius:6px;}

.brand{
  display:flex;align-items:center;gap:11px;padding:20px 18px 18px;
  border-bottom:1px solid rgba(255,255,255,.08);margin-bottom:8px;
}
.brand-mark{
  width:36px;height:36px;border-radius:10px;flex:0 0 auto;overflow:hidden;
  background:linear-gradient(145deg,#E4C97F,#C8A24A 55%,#A9822F);
  color:#241A00;font-size:17px;font-weight:800;letter-spacing:-.5px;
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 4px 12px -4px rgba(200,162,74,.7),inset 0 1px 0 rgba(255,255,255,.45);
}
.brand-txt{min-width:0;}
.brand-txt b{display:block;font-size:15px;font-weight:700;color:#fff;letter-spacing:.5px;line-height:1.25;}
.brand-txt small{display:block;font-size:10.5px;color:#9DB3CE;letter-spacing:1.2px;margin-top:3px;font-weight:400;}

#nav{flex:1;padding:2px 0 10px;}

.navgroup{margin-bottom:1px;}
.navitem{
  display:flex;align-items:center;gap:10px;margin:2px 12px;padding:10px 10px 10px 14px;
  border-radius:9px;color:#C3D2E5;font-size:13px;font-weight:500;
  cursor:pointer;position:relative;transition:background .15s,color .15s;
  white-space:nowrap;
}
/* 图标与文字分两个盒子：图标定宽居中，文字独占剩余宽度（避免图标被挤到贴边） */
.navitem .ico{
  width:18px;flex:0 0 18px;display:inline-flex;align-items:center;justify-content:center;
  font-size:13.5px;line-height:1;opacity:.95;
}
.navitem .lbl{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;}
.navitem:hover{background:rgba(255,255,255,.07);color:#fff;}
.navitem.active{background:linear-gradient(90deg,rgba(200,162,74,.22),rgba(200,162,74,.08));color:#fff;font-weight:600;}
.navitem.active::before{
  content:"";position:absolute;left:-10px;top:50%;transform:translateY(-50%);
  width:3px;height:18px;border-radius:0 3px 3px 0;background:linear-gradient(180deg,var(--gold2),var(--gold));
}
/* 三角：独立点击区，只负责展开 / 收起，不跳页面 */
.navitem .caret{
  flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;
  width:20px;height:20px;margin:-5px -4px -5px auto;padding:0;border:0;border-radius:6px;
  background:none;color:inherit;font:inherit;font-size:10px;line-height:1;cursor:pointer;
  opacity:.5;transition:transform .18s ease,opacity .15s,background .15s;
  transform:rotate(-90deg);
}
.navitem .caret.open{transform:rotate(0deg);opacity:.85;}
.navitem .caret:hover{opacity:1;background:rgba(255,255,255,.16);}
.navitem.active .caret{opacity:.9;}
.navitem .badge{margin-left:auto;background:var(--gold);color:#2A1E00;font-size:10px;font-weight:700;padding:0 6px;border-radius:20px;line-height:16px;}

.navsub{padding:0 0 2px;}
.navchild{
  padding:7px 12px 7px 44px;color:#A9BCD4;cursor:pointer;font-size:12.5px;
  border-radius:8px;margin:1px 12px 1px 18px;position:relative;transition:.14s;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.navchild:hover{background:rgba(255,255,255,.06);color:#fff;}
.navchild.active{color:#fff;font-weight:600;background:rgba(255,255,255,.09);}
.navchild.active::before{
  content:"";position:absolute;left:16px;top:50%;width:5px;height:5px;margin-top:-2.5px;
  border-radius:50%;background:var(--gold2);box-shadow:0 0 0 3px rgba(200,162,74,.16);
}
.nav-foot{
  margin:10px 16px 16px;padding:9px 12px;border-radius:9px;font-size:11px;color:#93A9C4;
  background:rgba(255,255,255,.05);border:1px solid rgba(255,255,255,.07);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.navstep{display:none;}

/* —— 主区 —— */
.main{margin-left:var(--sidebar-w);flex:1;min-width:0;display:flex;flex-direction:column;}

.topbar{
  height:var(--topbar-h);flex:0 0 auto;display:flex;align-items:center;gap:14px;padding:0 26px;
  background:rgba(255,255,255,.88);backdrop-filter:blur(10px);
  border-bottom:1px solid var(--line);position:sticky;top:0;z-index:30;
}
.tb-title{min-width:0;display:flex;flex-direction:column;justify-content:center;}
.topbar h2{font-size:16.5px;font-weight:700;color:var(--ink);letter-spacing:.2px;line-height:1.3;white-space:nowrap;}
.crumb{font-size:11px;color:var(--muted2);letter-spacing:.3px;line-height:1.4;margin-bottom:1px;white-space:nowrap;}
.crumb b{color:var(--muted);font-weight:500;}
.crumb-sep{margin:0 5px;color:#C6D0DE;}
.topbar .right{margin-left:auto;display:flex;align-items:center;gap:10px;font-size:13px;color:var(--muted);}

.userchip{display:flex;align-items:center;gap:9px;padding-left:12px;border-left:1px solid var(--line);}
.avatar{
  width:32px;height:32px;border-radius:50%;flex:0 0 auto;
  background:linear-gradient(145deg,#2C6BA8,#14345C);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;
  box-shadow:0 0 0 2px #fff,0 2px 6px rgba(10,30,56,.18);
}
#userName{font-weight:600;color:var(--text);font-size:13px;line-height:1.25;}
#userRole{font-size:11px;color:var(--muted2);line-height:1.25;}

.content{padding:22px 26px 40px;width:100%;max-width:1620px;margin:0 auto;}

/* ============================================================================
   2. 面板 / 卡片
   ========================================================================== */
.panel{
  background:var(--panel);border:1px solid var(--line);border-radius:var(--r-lg);
  padding:18px 20px 20px;margin-bottom:16px;box-shadow:var(--sh-1);
}
.panel h3{
  font-size:14.5px;font-weight:700;color:var(--ink);margin:0 0 14px;
  display:flex;align-items:center;gap:9px;line-height:1.4;
}
.panel>h3::before{
  content:"";width:3px;height:14px;border-radius:2px;flex:0 0 auto;
  background:linear-gradient(180deg,var(--gold2),var(--gold));
}
.panel h3 .tag{
  font-size:11.5px;font-weight:400;color:var(--muted2);
  background:#F4F7FB;border:1px solid var(--line);border-radius:20px;padding:1px 9px;
}
.panel h3 .tag[onclick]{cursor:pointer;color:var(--navy2);border-color:#DCE7F5;background:#F5F9FF;}
.panel h3 .tag[onclick]:hover{background:#EAF2FC;}
.panel-head{display:flex;justify-content:space-between;align-items:flex-start;gap:14px;flex-wrap:wrap;}
.panel-head .row-actions{flex-shrink:0;}

.grid{display:grid;gap:16px;}
.grid>.panel{margin-bottom:0;min-width:0;}
/* 首页顶部 / 基础设置 / 权限三栏：同排模块一律等宽等高（初始空态也保持同一尺寸，不因内容多少而参差） */
.home-top,.sup-grid{grid-template-columns:repeat(2,minmax(0,1fr));align-items:stretch;}
.perm-cols{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;align-items:stretch;}
/* 统一空态占位：所有模块「无数据」时的提示块采用同一最小高度与居中方式；成对齐的卡片内自动撑满剩余高度 */
.ph-empty{display:flex;align-items:center;justify-content:center;min-height:96px;padding:10px 6px;text-align:center;color:var(--muted);font-size:13px;line-height:1.75;}
.home-top>.panel,.sup-grid>.panel{display:flex;flex-direction:column;}
.home-top>.panel>*,.sup-grid>.panel>*{flex:0 0 auto;}
.home-top>.panel>.ph-empty,.sup-grid>.panel>.ph-empty{flex:1 1 auto;}
/* 基础设置左右两栏列表可能很长：等高的同时限制最大高度、卡内滚动，避免短的那栏被拉出一大片空白 */
#sec_msg,#sec_todo{max-height:min(720px,calc(100vh - 210px));overflow:auto;}
@media(max-width:1180px){
  .home-top,.sup-grid,.perm-cols{grid-template-columns:1fr;}
}
.kpis{grid-template-columns:repeat(auto-fit,minmax(168px,1fr));gap:12px;}

/* KPI 指标卡 */
.kpi{
  --accent:var(--navy2);
  position:relative;overflow:hidden;cursor:pointer;
  background:var(--panel);border:1px solid var(--line);border-radius:var(--r-md);
  padding:15px 16px 14px 18px;transition:transform .16s,box-shadow .16s,border-color .16s;
  box-shadow:var(--sh-1);
}
.kpi::before{content:"";position:absolute;left:0;top:12px;bottom:12px;width:3px;border-radius:0 3px 3px 0;background:var(--accent);opacity:.85;}
.kpi::after{
  content:"";position:absolute;right:-30px;top:-30px;width:84px;height:84px;border-radius:50%;
  background:color-mix(in srgb,var(--accent) 6%,transparent);opacity:0;transition:opacity .2s;
}
.kpi:hover{transform:translateY(-2px);box-shadow:var(--sh-2);border-color:var(--line2);}
.kpi:hover::after{opacity:1;}
.kpi{display:flex;flex-direction:column;justify-content:center;min-height:86px;}
.kpi .num{font-size:27px;font-weight:800;letter-spacing:-.4px;color:var(--ink);line-height:1.18;}
.kpi .label{font-size:12px;color:var(--muted);margin-top:3px;font-weight:500;}
.kpi .muted{font-size:11.5px;color:var(--muted2);}
.kpi.gold{--accent:#C8A24A;} .kpi.gold .num{color:#8A6A16;}
.kpi.green{--accent:#1E8E5A;} .kpi.green .num{color:#157347;}
.kpi.orange{--accent:#D08A22;} .kpi.orange .num{color:#A0651A;}
.kpi.purple{--accent:#6554C0;} .kpi.purple .num{color:#5745B4;}
.panel .kpi{background:#FBFCFE;box-shadow:none;border-color:#EDF1F7;}
.panel .kpi:hover{background:#fff;}

/* 流程节点条：等宽网格（无论几个节点、窗口多宽，每个节点尺寸一致；放不下时整行均分换行） */
.flow-strip{display:grid;grid-template-columns:repeat(auto-fit,minmax(96px,1fr));gap:8px;margin:4px 0 2px;}
.fnode{
  background:#FBFCFE;border:1px solid #E9EEF6;border-radius:var(--r-md);
  padding:11px 8px;text-align:center;cursor:pointer;transition:.16s;position:relative;
}
.fnode:hover{border-color:#E4CE94;background:#FFFDF7;transform:translateY(-2px);box-shadow:0 8px 18px -12px rgba(160,120,30,.5);}
.fnode .fnum{font-size:21px;font-weight:800;color:var(--ink);line-height:1.25;letter-spacing:-.3px;}
.fnode .flabel{font-size:11.5px;color:var(--muted);margin-top:1px;}
.farrow{display:flex;align-items:center;justify-content:center;font-size:0;color:transparent;padding:0;width:14px;flex:0 0 14px;}
.farrow::before{content:"";width:6px;height:6px;border-top:1.6px solid #AEBED2;border-right:1.6px solid #AEBED2;border-radius:1px;transform:rotate(45deg);margin-left:-2px;}

/* 漏斗 */
.funnel{display:flex;flex-direction:column;gap:8px;max-width:460px;}
.fstage{display:flex;align-items:center;gap:10px;}
.fstage .bar{
  height:32px;border-radius:8px;display:flex;align-items:center;padding:0 12px;
  font-size:12.5px;font-weight:700;color:#fff;min-width:56px;
  background:linear-gradient(90deg,#1D4B7E,#3E7FBE 92%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.18);
  transition:filter .15s;
}
.fstage:last-child .bar{background:linear-gradient(90deg,#A9822F,#D3AF5C 92%);}
.fstage:hover .bar{filter:brightness(1.06);}
.fstage .lbl{width:46px;color:var(--muted);font-size:12.5px;flex:0 0 auto;}
.fstage .cnt{font-weight:700;color:var(--ink);}

/* ============================================================================
   3. 表格
   ========================================================================== */
table{width:100%;border-collapse:collapse;font-size:13px;}
thead th{
  background:#F7F9FC;padding:11px 14px;text-align:left;color:#5C6E86;
  font-weight:600;font-size:12px;letter-spacing:.02em;
  border-bottom:1px solid var(--line);white-space:nowrap;
}
tbody td{padding:12px 14px;border-bottom:1px solid #F1F4F9;vertical-align:middle;color:var(--text2);}
tbody tr:last-child td{border-bottom:none;}
tbody tr{transition:background .12s;}
tbody tr:hover td{background:#FAFBFE;}
tbody td b{color:var(--text);}
tbody td:first-child{color:var(--text);}

.tbl-scroll{width:100%;overflow-x:auto;border:1px solid var(--line);border-radius:var(--r-md);background:#fff;}
.tbl-scroll>table{min-width:1040px;}
.tbl-scroll thead th:first-child{border-radius:var(--r-md) 0 0 0;}
.tbl-scroll thead th:last-child{border-radius:0 var(--r-md) 0 0;}

.tag-pill{
  display:inline-block;padding:1px 8px;border-radius:var(--r-xs);font-size:11.5px;font-weight:600;
  line-height:18px;border:1px solid transparent;white-space:nowrap;
}
.t-ok{background:var(--green-bg);color:#157347;border-color:#CFEBD9;}
.t-warn{background:var(--orange-bg);color:#9A6516;border-color:#F3E1C0;}
.t-info{background:var(--blue-bg);color:#1F5C97;border-color:#D3E3F6;}
.t-red{background:var(--red-bg);color:#B93C33;border-color:#F6D5D1;}
.t-gray{background:#F2F5F9;color:#63758C;border-color:#E5EAF2;}
.t-purple{background:var(--purple-bg);color:#5745B4;border-color:#E2DAF7;}
.t-gold{background:var(--gold-050);color:#96701C;border-color:#F0E0B8;}
.tag-pill.t-sys{background:#EDF4FE;color:#1F5C97;border-color:#D7E5F8;}
.tag-pill.t-per{background:#EAF7EF;color:#157347;border-color:#D2EBDC;}

/* 分页 */
.tpager{display:flex;flex-wrap:wrap;align-items:center;gap:5px;padding:12px 14px;border-top:1px solid var(--line);margin-top:0;background:#fff;}
.tpager .tpi{font-size:12px;color:var(--muted2);margin-right:auto;font-variant-numeric:tabular-nums;}
.tpager .btn.sm{padding:0 8px;min-width:28px;height:28px;line-height:26px;font-size:12px;}
.tpager .btn[disabled]{opacity:.42;cursor:not-allowed;filter:none;transform:none;}
.tpager .btn.on{background:var(--navy);color:#fff;border-color:var(--navy);}
.jtable-wrap .tpager{position:sticky;left:0;}

/* ============================================================================
   4. 表单
   ========================================================================== */
.form-row{display:flex;flex-wrap:wrap;gap:14px;margin-bottom:12px;}
.field{display:flex;flex-direction:column;gap:5px;flex:1;min-width:180px;}
.field label{font-size:12px;color:var(--muted);font-weight:500;letter-spacing:.1px;}
.field .req{color:var(--red);margin-left:2px;}
/* 带单位后缀的输入（佣金比例 % / 固定金额 元） */
.unit-field{position:relative;display:block;}
.unit-field input{width:100%;padding-right:40px;}
.unit-field .unit{
  position:absolute;right:12px;top:50%;transform:translateY(-50%);
  font-size:12px;color:var(--muted2);pointer-events:none;letter-spacing:.2px;
}
.unit-field input:disabled{background:#F4F6FA;color:var(--muted2);cursor:not-allowed;}
.unit-field input:disabled+.unit{opacity:.55;}
.unit-field input.invalid{border-color:#DC4C41;background:#FFFAFA;box-shadow:0 0 0 3px rgba(220,76,65,.1);}
/* 字段下方的即时说明（如佣金测算） */
.hint{margin-top:2px;font-size:11.5px;color:var(--muted2);line-height:1.55;min-height:15px;}
.hint.warn{color:#C2410C;font-weight:600;}
input,select,textarea{
  font-family:inherit;font-size:13.5px;padding:8px 11px;height:36px;
  border:1px solid var(--line2);border-radius:var(--r-sm);background:#fff;color:var(--text);
  width:100%;transition:border-color .15s,box-shadow .15s;
}
input::placeholder,textarea::placeholder{color:#AAB6C6;}
input:hover,select:hover,textarea:hover{border-color:#C6D2E2;}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--navy2);box-shadow:var(--ring);}
input:disabled,select:disabled,textarea:disabled{background:#F6F8FB;color:#94A2B4;cursor:not-allowed;}
textarea{resize:vertical;min-height:72px;height:auto;line-height:1.65;padding:9px 11px;}
select{appearance:none;-webkit-appearance:none;background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%238A99AD' stroke-width='1.6' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 11px center;padding-right:28px;}
input[type=checkbox],input[type=radio]{width:auto;height:auto;accent-color:var(--navy2);}
input[type=file]{height:auto;padding:5px 8px;font-size:12.5px;background:#FBFCFE;cursor:pointer;}
input[type=file]::file-selector-button{
  margin-right:10px;height:26px;padding:0 12px;border:1px solid var(--line2);border-radius:6px;
  background:#fff;color:var(--navy);font-family:inherit;font-size:12.5px;font-weight:500;cursor:pointer;
  transition:border-color .15s,color .15s,background .15s;
}
input[type=file]::file-selector-button:hover{border-color:var(--navy2);color:var(--navy2);background:#F6F9FD;}
/* 自绘文件选择（原生 file 按钮文案无法中文化） */
.upload-pick{
  position:relative;display:flex;align-items:center;gap:9px;height:36px;padding:0 10px;
  border:1px solid var(--line2);border-radius:var(--r-sm);background:#fff;transition:border-color .15s,box-shadow .15s;
}
.upload-pick:hover{border-color:#C6D2E2;}
.upload-pick:focus-within{border-color:var(--navy2);box-shadow:var(--ring);}
.upload-pick>input[type=file]{
  position:absolute;inset:0;width:100%;height:100%;opacity:0;padding:0;cursor:pointer;
  background:transparent;border:none;box-shadow:none;
}
.upload-pick .up-btn{
  flex:0 0 auto;height:24px;padding:0 10px;display:inline-flex;align-items:center;border-radius:6px;
  background:#F2F6FC;color:var(--navy);font-size:12px;font-weight:500;pointer-events:none;
}
.upload-pick .up-t{flex:1 1 auto;min-width:0;font-size:12.5px;color:var(--muted2);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;}
.upload-pick .up-thumb{flex:0 0 auto;width:24px;height:24px;border-radius:5px;object-fit:cover;border:1px solid var(--line);}
.modal img.proof-view{max-width:100%;height:auto;}
.file-link{font-size:12px;color:var(--navy2);text-decoration:none;border-bottom:1px dashed rgba(44,107,168,.5);width:fit-content;}
.file-link:hover{color:var(--navy);border-bottom-color:var(--navy);}

/* 按钮 */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:5px;
  height:36px;padding:0 16px;border:none;border-radius:var(--r-sm);
  background:linear-gradient(180deg,#245180,#14345C);color:#fff;
  font-size:13.5px;font-weight:600;letter-spacing:.2px;white-space:nowrap;
  box-shadow:0 1px 2px rgba(10,30,56,.16),inset 0 1px 0 rgba(255,255,255,.14);
  transition:filter .14s,transform .14s,box-shadow .14s;
}
.btn:hover{filter:brightness(1.1);transform:translateY(-1px);box-shadow:0 4px 12px -6px rgba(10,30,56,.5);}
.btn:active{transform:translateY(0);filter:brightness(.98);}
.btn.gold{background:linear-gradient(180deg,#D7B25E,#C8A24A);color:#2A1E00;box-shadow:0 1px 2px rgba(140,105,25,.25),inset 0 1px 0 rgba(255,255,255,.35);}
.btn.gold:hover{filter:brightness(1.04);}
.btn.ghost{background:#fff;color:var(--navy);border:1px solid var(--line2);box-shadow:var(--sh-1);}
.btn.ghost:hover{background:#F8FAFD;border-color:#C4D1E2;color:var(--navy);}
.btn.danger{background:linear-gradient(180deg,#DD5A50,#C63B31);color:#fff;}
.btn.ghost.danger{background:#fff;color:var(--red);border:1px solid #F0C8C4;box-shadow:none;}
.btn.ghost.danger:hover{background:#FDF1F0;border-color:#E5A9A3;}
.btn.sm{height:28px;padding:0 11px;font-size:12px;border-radius:7px;}
.btn:disabled{opacity:.5;cursor:not-allowed;filter:none;transform:none;box-shadow:none;}
.row-actions{display:flex;gap:6px;flex-wrap:wrap;align-items:center;}

/* 工具条 / 筛选条 */
.toolbar{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:14px;align-items:flex-end;}
.toolbar .field{min-width:150px;flex:0 0 auto;}
.pf-bar{
  padding:12px 14px;border:1px solid var(--line);border-radius:var(--r-md);
  background:linear-gradient(180deg,#FBFCFE,#F7F9FC);margin-bottom:14px;gap:10px;align-items:flex-end;
}
.pf-bar .field{min-width:112px;max-width:176px;flex:1 1 132px;gap:4px;}
.pf-bar .field label{font-size:11.5px;color:var(--muted2);font-weight:500;}
.pf-bar .field.pf-f{margin:0;}
.pf-bar .field.pf-kw{flex:1.4 1 200px;}
.pf-bar .field.pf-kw{min-width:170px;max-width:300px !important;}
.pf-bar>.btn:first-of-type{margin-left:auto;}
.pf-bar .pf-count{margin-left:auto;}
.pf-bar .pf-count+.btn{margin-left:8px;}
.pf-bar .field input,.pf-bar .field select{height:34px;font-size:13px;}
.pf-bar .btn{height:34px;}
.pf-bar .btn.sm{height:34px;font-size:12.5px;padding:0 14px;}
.pf-count{font-size:12px;white-space:nowrap;margin-left:2px;color:var(--muted);}
.pf-count b{color:var(--ink);font-weight:700;}
.pf-right{margin-left:auto;display:flex;gap:8px;align-items:center;}
.pf-empty{padding:30px 0;text-align:center;color:var(--muted2);font-size:13px;}
.pf-chip{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;border-radius:20px;border:1px solid var(--line2);background:#fff;font-size:12px;color:var(--muted);cursor:pointer;}
.pf-chip.on{background:#EDF4FE;border-color:#BFD8F5;color:var(--navy);font-weight:600;}

/* ============================================================================
   5. 弹窗
   ========================================================================== */
.modal-mask{
  position:fixed;inset:0;background:rgba(9,22,40,.52);backdrop-filter:blur(3px);
  display:flex;align-items:flex-start;justify-content:center;z-index:1000;
  overflow-y:auto;padding:5vh 16px 40px;animation:maskIn .16s ease;
}
@keyframes maskIn{from{opacity:0}to{opacity:1}}
.modal{
  background:#fff;border-radius:var(--r-xl);width:600px;max-width:96vw;
  box-shadow:var(--sh-3);overflow:hidden;animation:modalIn .2s cubic-bezier(.2,.8,.3,1);
  display:flex;flex-direction:column;max-height:90vh;
}
@keyframes modalIn{from{opacity:0;transform:translateY(8px) scale(.99)}to{opacity:1;transform:none}}
.modal>h3{
  margin:0;padding:18px 56px 16px 22px;font-size:16px;font-weight:700;color:var(--ink);
  border-bottom:1px solid var(--line);background:linear-gradient(180deg,#fff,#FCFDFF);position:relative;
}
.modal>h3::before{display:none;}
.modal-x{
  position:absolute;right:14px;top:13px;width:28px;height:28px;border:none;border-radius:8px;
  background:transparent;color:var(--muted2);font-size:19px;line-height:1;display:flex;
  align-items:center;justify-content:center;transition:.14s;
}
.modal-x:hover{background:#F1F4F9;color:var(--text);}
.modal-body{max-height:none;overflow-y:auto;padding:18px 22px;flex:1;min-height:0;}
.modal .foot{
  display:flex;justify-content:flex-end;align-items:center;gap:10px;
  margin:0;padding:14px 22px;border-top:1px solid var(--line);background:#FAFBFD;
}
.modal .foot .foot-actions{display:flex;gap:6px;flex-wrap:wrap;margin-right:auto;}
.modal .panel{border:none;box-shadow:none;padding:0;margin-bottom:12px;}

/* ============================================================================
   6. 时间线 / 阶段 / 待办
   ========================================================================== */
.timeline{position:relative;padding-left:18px;border-left:2px solid var(--line);margin-left:6px;}
.tl-item{position:relative;padding:0 0 16px 8px;}
.tl-item::before{
  content:"";position:absolute;left:-26px;top:4px;width:10px;height:10px;border-radius:50%;
  background:#fff;border:2px solid var(--navy2);box-shadow:0 0 0 3px #EFF5FC;
}
.tl-item:first-child::before{background:var(--gold);border-color:var(--gold);box-shadow:0 0 0 3px var(--gold-050);}
.tl-item .tl-meta{font-size:11.5px;color:var(--muted2);margin-bottom:2px;}
.tl-item .tl-content{font-size:13px;color:var(--text2);}

.stagebar{display:flex;gap:0;margin:10px 0 4px;flex-wrap:wrap;}
.stage{padding:6px 14px;font-size:12.5px;background:#F2F5F9;color:var(--muted);border-right:1px solid #fff;cursor:pointer;}
.stage:first-child{border-radius:7px 0 0 7px;} .stage:last-child{border-radius:0 7px 7px 0;border-right:none;}
.stage.done{background:#DFF2E7;color:#157347;} .stage.cur{background:var(--navy);color:#fff;font-weight:700;}

.todo{
  border-left:3px solid var(--gold);background:#FFFCF5;padding:10px 13px;border-radius:var(--r-sm);
  margin-bottom:8px;font-size:13px;color:var(--text2);
}
.todo:hover{background:#FFF9EC;}

/* 紧凑表格（列多但每列内容短，如合作方列表） */
.tbl-compact th,.tbl-compact td{padding-left:10px;padding-right:10px;}
.tbl-compact .row-actions{gap:4px;}

/* 提现四步流程条（提交申请 → 财务审票 → 管理员审批 → 财务打款） */
.wsteps{display:flex;align-items:center;flex-wrap:wrap;gap:0;margin:2px 0 14px;
  background:#FBFCFE;border:1px solid var(--line);border-radius:var(--r-md);padding:10px 14px;}
.wstep{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:var(--muted);white-space:nowrap;}
.wstep .dot{width:19px;height:19px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;
  font-size:11px;font-weight:700;border:1.4px solid #D9E2EF;background:#fff;color:#9AA9BC;flex:0 0 19px;}
.wstep.done{color:#157347;} .wstep.done .dot{background:#EAF6EF;border-color:#8ED0AC;color:#1E8E5A;}
.wstep.cur{color:var(--ink);font-weight:700;} .wstep.cur .dot{background:var(--navy);border-color:var(--navy);color:#fff;
  box-shadow:0 0 0 3px rgba(20,52,92,.13);}
.wstep.bad{color:#B93C33;font-weight:700;} .wstep.bad .dot{background:#FDEDEC;border-color:#E9A9A3;color:#B93C33;}
.wline{flex:1 1 20px;min-width:12px;height:1.4px;background:#E2E9F3;margin:0 7px;}
.wline.done{background:#9AD3B5;}
/* 提现各阶段说明行 */
.wd-note{font-size:12.5px;line-height:1.7;color:var(--text2);background:#F5F9FF;border:1px dashed #DCE9F8;
  border-radius:var(--r-sm);padding:8px 11px;margin-bottom:10px;}
.wd-note b{color:var(--navy2);}
.wd-log{display:flex;gap:10px;font-size:12.5px;line-height:1.6;padding:6px 0;border-bottom:1px dashed #EEF2F8;color:var(--text2);}
.wd-log:last-child{border-bottom:none;}
.wd-log .t{flex:0 0 128px;color:var(--muted2);white-space:nowrap;}
.wd-log .who{flex:0 0 82px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}

/* 维护记录：字段级变更留痕（渠道经理维护合作方资料） */
.chg-list{border:1px solid var(--line);border-radius:var(--r-sm);overflow:hidden;background:#fff;margin-bottom:6px;}
.chg{display:flex;align-items:center;gap:10px;padding:8px 12px;font-size:12.5px;
  border-bottom:1px solid #F1F4F9;color:var(--text2);}
.chg:last-child{border-bottom:none;}
.chg:hover{background:#FBFCFE;}
.chg-t{flex:0 0 112px;color:var(--muted2);white-space:nowrap;}
.chg-u{flex:0 0 76px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.chg-f{flex:0 0 116px;color:var(--text);font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.chg-v{flex:1 1 auto;min-width:0;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.chg-v b{color:var(--navy2);font-weight:600;}

.todo-list{display:flex;flex-direction:column;gap:8px;}
.todo-item{
  display:flex;align-items:flex-start;gap:11px;padding:11px 13px;background:#fff;
  border:1px solid var(--line);border-left:3px solid var(--line2);border-radius:var(--r-sm);transition:.14s;
}
.todo-item:hover{border-color:var(--line2);box-shadow:var(--sh-1);}
.todo-item .ti-main{flex:1;min-width:0;}
.todo-item .ti-title{font-weight:600;color:var(--text);font-size:13px;}
.todo-item .ti-content{font-size:12.5px;color:#5C6E86;margin-top:2px;line-height:1.6;}
.todo-item .ti-meta{font-size:11.5px;color:var(--muted2);margin-top:3px;}
.todo-item.overdue{border-left-color:#D2483E;background:#FFF8F7;}
.todo-item.due{border-left-color:#D08A22;background:#FFFBF3;}
.todo-item .ti-act{display:flex;flex-direction:column;gap:5px;flex:0 0 auto;}

/* ============================================================================
   7. 通用小件
   ========================================================================== */
.empty{color:var(--muted2);text-align:center;padding:32px;font-size:13px;}
.empty-state{
  text-align:center;padding:34px 20px;color:var(--muted2);font-size:13px;
  border:1px dashed var(--line2);border-radius:var(--r-md);background:#FBFCFE;
}
.section-title{font-size:12.5px;color:var(--muted);font-weight:700;margin:18px 0 10px;letter-spacing:.4px;}
.section-title::before{content:"";display:inline-block;width:3px;height:11px;border-radius:2px;background:var(--gold);margin-right:7px;vertical-align:-1px;}
.flex{display:flex;} .between{display:flex;justify-content:space-between;align-items:center;} .center{align-items:center;}
.mt{margin-top:14px;} .mb{margin-bottom:14px;} .gap8{gap:8px;}
.pill-group{display:flex;gap:8px;flex-wrap:wrap;}
.pill-group label{
  display:inline-flex;align-items:center;gap:6px;font-size:12.5px;background:#FBFCFE;
  border:1px solid var(--line2);border-radius:20px;padding:5px 13px;cursor:pointer;transition:.14s;
}
.pill-group label:hover{border-color:#BFD1E6;background:#F7FAFF;}
.pill-group label:has(input:checked){background:#EDF4FE;border-color:#9FC3EA;color:var(--navy);font-weight:600;}
.pill-group label input[type=checkbox]{width:auto;box-shadow:none;margin:0;height:auto;}
.link{color:var(--navy2);cursor:pointer;text-decoration:none;border-bottom:1px dashed rgba(44,107,168,.4);}
.link:hover{color:var(--navy);border-bottom-color:var(--navy);}
.muted{color:var(--muted);font-size:12.5px;}
.nowrap{white-space:nowrap;}
#userName,#userRole{white-space:nowrap;}

/* 顶栏铃铛 */
.bell{
  position:relative;width:36px;height:36px;border-radius:var(--r);background:#fff;
  border:1px solid var(--line2);font-size:16px;display:flex;align-items:center;justify-content:center;
  transition:.15s;box-shadow:var(--sh-1);line-height:1;
}
.bell:hover{border-color:#BFD1E6;background:#F7FAFF;}
.bell .badge{
  position:absolute;top:-5px;right:-5px;min-width:17px;height:17px;padding:0 4px;background:#E0483D;color:#fff;
  border-radius:9px;font-size:10.5px;line-height:17px;text-align:center;font-weight:700;
  box-shadow:0 0 0 2px #fff;
}

/* 提示条 */
.note-box{
  background:#F5F9FF;border:1px solid #DCE9F8;border-left:3px solid var(--navy2);
  border-radius:var(--r-sm);padding:10px 13px;font-size:12.5px;line-height:1.8;color:var(--text2);margin-bottom:12px;
}
.flow-hint{
  background:#FBFCFE;border:1px solid var(--line);border-left:3px solid var(--gold);
  border-radius:var(--r-sm);padding:10px 13px;font-size:12.5px;line-height:1.9;color:var(--text2);margin-bottom:12px;
}
.flow-hint .flow-step{display:inline-block;background:#fff;border:1px solid var(--line2);border-radius:10px;padding:0 8px;font-weight:600;color:var(--navy2);margin:0 2px;}
.flow-hint .flow-sep{color:var(--line2);margin:0 6px;}
.assign-tip{font-size:12.5px;line-height:1.75;color:var(--text2);background:#F5F9FF;border:1px dashed #DCE9F8;border-radius:var(--r-sm);padding:8px 11px;min-height:34px;}
.assign-tip b{color:var(--navy2);}

/* 上传 / 图片 */
.upload-box{border:1px dashed #C3D0E0;border-radius:var(--r-md);padding:13px;background:#FBFCFE;transition:.15s;}
.upload-box:hover{border-color:#A9C0DA;background:#F8FBFF;}
.upload-box input[type=file]{border:none;padding:4px 0;background:transparent;box-shadow:none;}
.proof-prev{max-width:320px;max-height:210px;margin-top:10px;border:1px solid var(--line);border-radius:var(--r-sm);display:block;}
.proof-img{max-width:100%;max-height:300px;border:1px solid var(--line);border-radius:var(--r-sm);display:block;margin-bottom:6px;}
.proof-img.sm{max-height:230px;max-width:460px;}
.cert-preview{width:100%;height:460px;border:1px solid var(--line);border-radius:var(--r-sm);background:#525659;}

/* 考勤 */
.att-card{border:1px solid var(--line);border-radius:var(--r-md);padding:11px 13px;margin-bottom:8px;background:#FBFCFE;}
.att-card:hover{background:#fff;box-shadow:var(--sh-1);}
.att-head{display:flex;align-items:center;gap:10px;margin-bottom:4px;font-size:13px;flex-wrap:wrap;}
.att-row{display:flex;align-items:center;gap:12px;padding:7px 0;border-bottom:1px dashed #EEF2F8;}
.att-row:last-child{border-bottom:none;}
.att-name{flex:1;font-size:13.5px;}
.att-sel{width:130px;flex:0 0 130px;}
.hours-bar{display:inline-block;width:88px;height:7px;border-radius:5px;background:#E9EEF6;overflow:hidden;vertical-align:middle;margin-right:6px;}
.hours-bar>i{display:block;height:100%;background:linear-gradient(90deg,#12805A,#22A874);border-radius:5px;}

/* 权限矩阵 */
.matrix-wrap{display:flex;flex-wrap:wrap;gap:4px;max-width:560px;}
.matrix-wrap .tag-pill{font-size:10.5px;padding:0 7px;line-height:17px;}
.perm-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 18px;background:#FBFCFE;border:1px solid var(--line);border-radius:var(--r-md);padding:13px 15px;}
.perm-grid label{display:flex;align-items:center;gap:8px;font-size:13px;cursor:pointer;padding:3px 0;color:var(--text2);}
.perm-grid label input[type=checkbox]{width:auto;box-shadow:none;margin:0;flex:0 0 auto;height:auto;}
.perm-grid label:hover{color:var(--navy2);}
.modal .panel h3,.toolbar h3{display:flex;align-items:center;gap:8px;}

/* 教学 / 课表 */
.lesson{display:flex;align-items:center;gap:12px;padding:11px 13px;border:1px solid var(--line);border-radius:var(--r-md);margin-bottom:8px;background:#fff;transition:.14s;}
.lesson:hover{box-shadow:var(--sh-1);border-color:var(--line2);}
.lesson .ldate{font-weight:700;color:var(--navy);width:96px;font-size:12.5px;}
.lesson .lcourse{flex:1;color:var(--text);}
.lesson.pending{border-color:#F0DEBE;background:#FFFBF3;}

/* 进展看板 */
.prog-card{border:1px solid #EDF1F7;border-radius:var(--r-md);padding:13px 15px;background:#FBFCFE;margin-bottom:10px;transition:.14s;}
.prog-card:hover{box-shadow:var(--sh-1);background:#fff;border-color:var(--line2);}
.prog-head{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap;}
.prog-name{font-weight:700;color:var(--text);}
.prog-owner{font-size:12.5px;color:#5C6E86;}
.prog-stagebar{display:flex;flex-wrap:wrap;gap:6px;margin:9px 0 8px;}
.prog-stage{font-size:11.5px;padding:2px 10px;border-radius:20px;background:#F2F5F9;color:var(--muted2);border:1px solid transparent;}
.prog-stage.done{background:#E9F7EF;color:#157347;}
.prog-stage.cur{background:var(--navy);color:#fff;font-weight:600;}
.prog-last{font-size:12.5px;color:#5C6E86;background:#F8FAFD;border-radius:var(--r-sm);padding:8px 11px;line-height:1.65;}
.prog-last b{color:var(--navy2);}
.prog-foot{display:flex;justify-content:flex-end;align-items:center;margin-top:10px;}

/* 学员信息卡 / 键值 / 金额 */
.stu-card{
  display:flex;align-items:center;gap:14px;padding:14px 16px;border:1px solid var(--line);
  border-radius:var(--r-md);background:linear-gradient(180deg,#FBFCFF,#F4F8FD);margin-bottom:12px;
}
.stu-avatar{
  width:46px;height:46px;border-radius:50%;flex:0 0 auto;
  background:linear-gradient(145deg,#2C6BA8,#14345C);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:19px;font-weight:800;
  box-shadow:0 0 0 3px #fff,0 4px 12px -6px rgba(10,30,56,.5);
}
.stu-id{flex:1 1 auto;min-width:0;}
.stu-name{font-size:16.5px;font-weight:800;color:var(--ink);display:flex;align-items:center;gap:7px;flex-wrap:wrap;}
.stu-meta{font-size:12.5px;color:var(--muted);margin-top:3px;line-height:1.55;}
.stu-meta b{color:var(--text);}
.stu-money{display:flex;gap:18px;flex:0 0 auto;text-align:right;}
.stu-money div{display:flex;flex-direction:column;gap:1px;}
.stu-money span{font-size:11.5px;color:var(--muted2);}
.stu-money b{font-size:16px;color:var(--ink);white-space:nowrap;}
.stu-money b.g{color:var(--green);} .stu-money b.o{color:var(--orange);} .stu-money b.r{color:var(--red);}

.kv-grid{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:#EDF1F7;border:1px solid #EDF1F7;border-radius:var(--r-md);overflow:hidden;margin-bottom:8px;}
.kv{display:flex;gap:10px;background:#fff;padding:9px 12px;font-size:12.5px;}
.kv .k{color:var(--muted2);flex:0 0 82px;}
.kv .v{color:var(--text);font-weight:600;word-break:break-all;flex:1;}
.kv-grid>.kv:last-child:nth-child(odd){grid-column:1/-1;}

.rv-money{display:grid;grid-template-columns:repeat(4,1fr);gap:9px;margin-bottom:8px;}
.rv-money>div{background:#FBFCFE;border:1px solid var(--line);border-radius:var(--r-sm);padding:10px 12px;display:flex;flex-direction:column;gap:2px;}
.rv-money span{font-size:11.5px;color:var(--muted2);}
.rv-money b{font-size:15px;color:var(--ink);}
.rv-money b.g{color:var(--green);} .rv-money b.o{color:var(--orange);} .rv-money b.r{color:var(--red);}

/* 学员头像 */
.stu-cell{display:flex;align-items:center;gap:9px;}
.savatar{width:28px;height:28px;border-radius:50%;object-fit:cover;flex:0 0 auto;border:1px solid var(--line);background:#EEF2F8;}
.savatar.txt{
  display:inline-flex;align-items:center;justify-content:center;
  background:linear-gradient(145deg,#2C6BA8,#14345C);color:#fff;font-size:11.5px;font-weight:700;border:none;
}
.savatar.lg{width:42px;height:42px;font-size:16px;}

/* 照片字段 */
.pf-field{flex:1 1 100%;}
.photo-field{display:flex;align-items:flex-start;gap:14px;margin-top:4px;}
.pf-thumb{
  width:84px;height:110px;border-radius:var(--r-md);overflow:hidden;background:#F2F5F9;border:1px dashed #C3D0E0;
  display:flex;align-items:center;justify-content:center;font-size:25px;font-weight:700;color:#A9BCD4;
  flex:0 0 auto;cursor:pointer;transition:.15s;
}
.pf-thumb:hover{border-color:var(--gold);background:#FDF9EE;color:var(--gold-600);}
.pf-thumb img{width:100%;height:100%;object-fit:cover;display:block;}
.pf-act{display:flex;flex-direction:column;gap:7px;align-items:flex-start;padding-top:2px;}
.pf-act .muted{font-size:11.5px;line-height:1.6;max-width:220px;}

/* ============================================================================
   8. 全流程追踪
   ========================================================================== */
.jtoolbar{flex-wrap:wrap;gap:8px 10px;align-items:flex-end;}
.jtoolbar .field{min-width:118px;}
.jcheck{display:flex;align-items:center;gap:6px;font-size:12.5px;color:var(--muted);padding-bottom:9px;white-space:nowrap;}
.jkpis{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:9px;margin:12px 0 14px;}
.jkpi{background:#FBFCFE;border:1px solid var(--line);border-radius:var(--r-md);padding:11px 13px;transition:.14s;}
.jkpi:hover{background:#fff;box-shadow:var(--sh-1);}
.jkpi .jn{font-size:19px;font-weight:800;color:var(--ink);line-height:1.25;white-space:nowrap;letter-spacing:-.3px;}
.jkpi .jl{font-size:11.5px;color:var(--muted);margin-top:2px;}
.jkpi .ju{font-size:11.5px;font-weight:600;color:var(--muted);margin-left:3px;letter-spacing:0;}
.jkpi .js{font-size:11px;color:var(--muted2);margin-top:2px;}
.jkpi.gold .jn{color:#8A6A16;}
.jgrid{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:14px;align-items:start;}
/* 表格优先占宽：只有超宽屏才把「本期动态」放右侧，其余屏放表格下方整宽，避免列被压窄截断 */
@media(max-width:1679px){
  .jgrid{grid-template-columns:1fr;}
  .jevent-list{max-height:420px;}
}
.jtable-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:var(--r-md);background:#fff;}
.jtable{width:100%;min-width:980px;border-collapse:collapse;font-size:12.5px;table-layout:fixed;}
.jtable th{background:#F7F9FC;color:#5C6E86;font-weight:600;text-align:left;padding:9px 11px;white-space:normal;line-height:1.4;border-bottom:1px solid var(--line);position:sticky;top:0;font-size:11.5px;}
.jtable td{padding:9px 11px;border-bottom:1px solid #F1F4F9;vertical-align:top;white-space:normal;line-height:1.55;overflow-wrap:anywhere;}
.jtable td.nw,.jtable td .nw{white-space:nowrap;}
.jtable td .jclamp{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.jtable td .muted{font-size:11.5px;}
.jtable td .tag-pill{font-size:11px;padding:3px 7px;}
.jtable th:nth-child(1),.jtable td:nth-child(1){width:110px;}
.jtable th:nth-child(2),.jtable td:nth-child(2){width:100px;}
.jtable th:nth-child(3),.jtable td:nth-child(3){width:104px;}
.jtable th:nth-child(4),.jtable td:nth-child(4){width:92px;}
.jtable th:nth-child(5),.jtable td:nth-child(5){width:122px;}
.jtable th:nth-child(6),.jtable td:nth-child(6){width:124px;}
.jtable th:nth-child(7),.jtable td:nth-child(7){width:114px;}
.jtable th:nth-child(8),.jtable td:nth-child(8){width:112px;}
.jtable th:nth-child(9),.jtable td:nth-child(9){width:102px;}
.jtable tbody tr.jrow{cursor:pointer;}
.jtable tbody tr.jrow:hover{background:#FAFBFE;}
.jtable tbody tr.jrow.open{background:#FFFBF2;}
.jbar{display:flex;gap:3px;align-items:center;margin-bottom:3px;}
.jdot{width:11px;height:11px;border-radius:3px;background:#E7ECF4;display:inline-block;}
.jdot.on{background:var(--gold);}
.jtable .jdetail>td{background:#FBFCFF;padding:0;width:auto;}
.jdetail-box{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:16px;padding:13px 15px;}
.jdetail-h{font-weight:700;color:var(--navy);font-size:12.5px;margin-bottom:8px;display:flex;align-items:center;gap:6px;}
.jstage{width:100%;border-collapse:collapse;font-size:12px;}
.jstage td{padding:5px 8px;border-bottom:1px dashed #EDF1F7;color:#93A2B6;white-space:nowrap;}
.jstage td:last-child{white-space:normal;overflow-wrap:anywhere;}
.jstage tr.on td{color:var(--text2);}
.jstage tr.on td:first-child::before{content:"✓ ";color:var(--green);font-weight:700;}
.jevents{border:1px solid var(--line);border-radius:var(--r-md);padding:13px;background:#FBFCFF;}
.jevent-list{max-height:660px;overflow-y:auto;}
.jperf{width:100%;border-collapse:collapse;font-size:13px;margin-bottom:8px;background:#fff;}
.jperf th{background:#F7F9FC;color:#5C6E86;font-weight:600;text-align:left;padding:8px 11px;border-bottom:1px solid var(--line);font-size:11.5px;}
.jperf td{padding:8px 11px;border-bottom:1px solid #F1F4F9;vertical-align:top;}
.jlegend{display:flex;flex-wrap:wrap;gap:10px;margin:-2px 0 8px;font-size:11.5px;color:var(--muted2);}
.jlegend span{display:inline-flex;align-items:center;gap:4px;}
.jlegend b{display:inline-flex;align-items:center;justify-content:center;width:15px;height:15px;border-radius:3px;background:var(--gold);color:#3a2c00;font-size:10px;font-weight:800;}
.jhint{display:none;font-size:11.5px;color:var(--muted2);margin:-4px 0 6px;}
@media(max-width:1320px){.jhint{display:block;}}

/* ============================================================================
   9. 自绘下拉
   ========================================================================== */
select.nsel-src{display:none !important;}
.nsel{position:relative;width:100%;}
.nsel-btn{
  display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;
  font-family:inherit;font-size:13.5px;line-height:1.3;padding:0 11px;height:36px;
  border:1px solid var(--line2);border-radius:var(--r-sm);background:#fff;color:var(--text);
  text-align:left;cursor:pointer;transition:border-color .15s,box-shadow .15s;
}
.nsel-btn:hover{border-color:#C6D2E2;}
.nsel-btn:focus{outline:none;border-color:var(--navy2);box-shadow:var(--ring);}
.nsel-btn.is-open{border-color:var(--navy2);box-shadow:var(--ring);}
.nsel-btn:disabled{background:#F6F8FB;color:#94A2B4;cursor:not-allowed;}
.nsel-label{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.nsel-btn.is-empty .nsel-label{color:#AAB6C6;}
.nsel-caret{flex:0 0 auto;width:0;height:0;border-left:4.5px solid transparent;border-right:4.5px solid transparent;border-top:5px solid #8A99AD;}
.nsel-btn.is-open .nsel-caret{border-top:none;border-bottom:5px solid var(--navy2);}
.nsel-pop{
  position:fixed;z-index:3000;box-sizing:border-box;padding:5px;overflow:auto;overscroll-behavior:contain;
  background:#fff;border:1px solid var(--line);border-radius:var(--r-md);box-shadow:0 16px 40px -12px rgba(16,32,56,.28);
}
.nsel-pop[hidden]{display:none;}
.nsel-item{padding:8px 10px;border-radius:7px;font-size:13.5px;line-height:1.35;color:var(--text2);cursor:pointer;overflow-wrap:anywhere;}
.nsel-item:hover,.nsel-item.is-active{background:#F1F6FD;}
.nsel-item.is-sel{background:#EAF2FC;color:var(--navy);font-weight:600;}
.nsel-item.is-disabled{color:#BCC6D3;cursor:not-allowed;background:none;}
/* 自绘时间选择器：面板锚定在输入框下方（空间不足翻到上方），避免原生 type=time 下拉漂移 */
input.tp-in{
  cursor:pointer;padding-right:30px;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%238A99AD' stroke-width='2' stroke-linecap='round'><circle cx='12' cy='12' r='9'/><path d='M12 7.5V12l3.2 2'/></svg>");
  background-repeat:no-repeat;background-position:right 10px center;
}
input.tp-in.is-open{border-color:var(--navy2);box-shadow:var(--ring);}
.tpop{
  position:fixed;z-index:3000;box-sizing:border-box;padding:5px;
  background:#fff;border:1px solid var(--line);border-radius:var(--r-md);
  box-shadow:0 16px 40px -12px rgba(16,32,56,.28);
}
.tpop-hd{display:grid;grid-template-columns:1fr 1fr;gap:4px;padding:1px 4px 3px;font-size:10.5px;line-height:1.3;color:var(--muted2);}
.tpop-hd span{text-align:center;}
.tpop-cols{display:grid;grid-template-columns:1fr 1fr;gap:4px;}
.tpop-col{max-height:126px;overflow:auto;overscroll-behavior:contain;display:flex;flex-direction:column;gap:2px;scrollbar-width:thin;}
.tpop-col::-webkit-scrollbar{width:6px;}
.tpop-col::-webkit-scrollbar-thumb{background:#DCE3EC;border-radius:3px;}
.tpop-col::-webkit-scrollbar-track{background:transparent;}
.tpop-it{
  font:inherit;font-size:13px;line-height:1;padding:6px 0;border:none;border-radius:6px;background:none;
  color:var(--text2);cursor:pointer;font-variant-numeric:tabular-nums;text-align:center;
}
.tpop-it:hover{background:#F1F6FD;}
.tpop-it.on{background:#EAF2FC;color:var(--navy);font-weight:700;}

.nsel-empty{padding:10px;text-align:center;font-size:12.5px;color:var(--muted2);}

/* ============================================================================
   10. 云服务状态 / 合作方佣金列
   ========================================================================== */
.cloudchip{max-width:210px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--muted);height:36px;font-size:12.5px;}
.cloudchip.on{color:#157347;border-color:#BFE3C8;background:#F2FBF5;}
.comm-cell{display:flex;flex-direction:column;gap:1px;line-height:1.3;white-space:nowrap;}
.comm-cell .cavail{color:#157347;font-size:13px;font-weight:700;}
.comm-cell .cavail.zero{color:#9AA7B8;font-weight:600;}
.comm-cell .cunready{font-size:11px;color:#96701C;}
.comm-cell .cowner{font-size:10.5px;color:#9AA7B8;}

/* 表格内标签/按钮不拆行，窄屏交给横向滚动 */
.tag-pill{white-space:nowrap;}
.tbl-scroll .row-actions{flex-wrap:nowrap;}
.btn{white-space:nowrap;}
th{white-space:nowrap;}
.pf-bar .btn,.pf-bar .pf-count{flex:0 0 auto;}
.pf-bar .field.pf-f{flex:0 1 auto;}
.tbl-scroll td{white-space:nowrap;}
.tbl-scroll thead th:last-child{position:sticky;right:0;background:#F7F9FC;box-shadow:-10px 0 10px -10px rgba(20,40,80,.2);z-index:2;}
.tbl-scroll tbody td:last-child{position:sticky;right:0;background:#fff;box-shadow:-10px 0 10px -10px rgba(20,40,80,.14);}
.tbl-scroll tbody tr:hover td:last-child{background:#FAFBFE;}
.tbl-scroll .tpager{position:sticky;left:0;}

/* ============================================================================
   11. 登录
   ========================================================================== */
#loginRoot{
  position:fixed;inset:0;display:none;align-items:center;justify-content:center;
  background:
    radial-gradient(900px 520px at 12% 8%,rgba(44,107,168,.35),transparent 65%),
    radial-gradient(700px 500px at 88% 92%,rgba(200,162,74,.18),transparent 60%),
    #081A31;
  z-index:2000;padding:24px 16px;overflow-y:auto;
}
.login-wrap{width:100%;display:flex;justify-content:center;}
.login-shell{
  display:grid;grid-template-columns:1.02fr .98fr;width:min(940px,100%);
  border-radius:22px;overflow:hidden;background:#fff;
  box-shadow:0 40px 100px -32px rgba(0,0,0,.7),0 0 0 1px rgba(255,255,255,.06);
}
.login-brand{
  position:relative;overflow:hidden;padding:46px 40px;display:flex;flex-direction:column;
  background:linear-gradient(158deg,#153A63 0%,#0C2442 62%,#0A1E38 100%);color:#fff;
}
.login-brand::before{
  content:"";position:absolute;right:-90px;top:-90px;width:300px;height:300px;border-radius:50%;
  background:radial-gradient(circle,rgba(200,162,74,.28),transparent 68%);
}
.login-brand::after{
  content:"";position:absolute;left:-40px;bottom:-70px;width:240px;height:240px;border-radius:50%;
  border:1px solid rgba(255,255,255,.08);
}
.lb-logo{
  width:56px;height:56px;border-radius:14px;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(145deg,#E4C97F,#C8A24A 55%,#A9822F);color:#241A00;
  font-size:25px;font-weight:800;box-shadow:0 8px 22px -10px rgba(200,162,74,.9);
  position:relative;z-index:1;overflow:hidden;
}
/* 上传了 LOGO：方块里换成 1:1 图片（比例由上传端裁切 + 后端校验双重保证） */
.lb-logo.has-logo,.brand-mark.has-logo,.ag-logo.has-logo{
  background:#fff;box-shadow:0 8px 22px -12px rgba(0,0,0,.55),0 0 0 1px rgba(255,255,255,.22);
}
.lb-logo img,.brand-mark img,.ag-logo img{width:100%;height:100%;object-fit:cover;display:block;border-radius:inherit;}
/* 品牌简称单独成行、明显大于副标题：原来和「人才培养管理系统」同字号，层级分不出来 */
.lb-name{
  font-size:40px;font-weight:800;letter-spacing:5px;line-height:1.1;
  margin-top:22px;color:#fff;position:relative;z-index:1;
  text-shadow:0 2px 16px rgba(0,0,0,.28);
}
.lb-tag{
  font-size:19px;font-weight:600;letter-spacing:2.4px;line-height:1.35;
  margin-top:9px;color:#C6D8EC;position:relative;z-index:1;
}
.lb-sub{font-size:11px;color:#9FB7D2;margin-top:13px;letter-spacing:2.1px;position:relative;z-index:1;}
.lb-main{margin:auto 0;display:flex;flex-direction:column;align-items:flex-start;position:relative;z-index:1;}
.lb-foot{padding-top:26px;font-size:11.5px;color:#8DA3BC;letter-spacing:.3px;position:relative;z-index:1;}
/* 渠道端登录页的品牌问候语（员工端不显示） */
.lb-greet{margin-top:22px;font-size:15px;font-weight:700;color:#F1D692;letter-spacing:.6px;position:relative;z-index:1;}
.lb-greet small{display:block;margin-top:5px;font-size:11.5px;font-weight:400;color:#9FB7D2;letter-spacing:.3px;}

.login-card{
  background:#fff;padding:44px 42px;display:flex;flex-direction:column;justify-content:center;
}
.login-card .lc-kicker{font-size:11.5px;color:var(--gold-600);letter-spacing:2px;font-weight:700;}
.login-card h2{font-size:21px;color:var(--ink);font-weight:700;margin-top:7px;letter-spacing:.3px;}
.login-card .lc-desc{font-size:12.5px;color:var(--muted2);margin-top:6px;margin-bottom:22px;}
.login-card .field{margin-top:14px;}
.login-card .field label{font-size:12px;color:var(--muted);display:block;margin-bottom:6px;font-weight:500;}
.login-card input{height:42px;font-size:14px;border-radius:var(--r);background:#FBFCFE;}
.login-card input:focus{background:#fff;}
.login-card .btn{margin-top:22px;height:42px;font-size:14px;letter-spacing:2px;border-radius:var(--r);}
.login-card .muted{margin-top:18px;font-size:11.5px;line-height:1.85;color:var(--muted2);}
.login-card .muted b{color:var(--muted);font-weight:600;}

/* 登录页底部的身份切换（员工端 ⇄ 渠道代理端） */
.lc-alt{
  margin-top:20px;padding-top:16px;border-top:1px dashed var(--line);
  display:flex;align-items:center;justify-content:center;gap:6px;
  font-size:12.5px;color:var(--muted2);
}
.lc-alt a{
  color:var(--navy);font-weight:600;text-decoration:none;border-bottom:1px solid transparent;
  transition:color .15s,border-color .15s;
}
.lc-alt a:hover{color:var(--gold-600);border-bottom-color:var(--gold-600);}

.login-err{
  display:none;align-items:flex-start;gap:8px;margin-top:16px;padding:10px 12px;border-radius:var(--r-sm);
  background:#FDEFEE;border:1px solid #F6D5D1;color:#B93C33;font-size:12.5px;line-height:1.55;
}
.login-err .ico{
  flex:0 0 16px;width:16px;height:16px;border-radius:50%;background:#DC4C41;color:#fff;
  font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;margin-top:1px;
}
.login-err.shake{animation:loginShake .32s ease;}
@keyframes loginShake{0%,100%{transform:translateX(0)}25%{transform:translateX(-5px)}50%{transform:translateX(5px)}75%{transform:translateX(-3px)}}
.login-card input.invalid{border-color:#DC4C41 !important;background:#FFFAFA;box-shadow:0 0 0 3px rgba(220,76,65,.1);}
.login-card .btn[disabled]{opacity:.65;cursor:not-allowed;}

/* 独立门户页（代理 / 学员）复用卡片 */
body>.wrap .login-card{border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--sh-2);padding:28px;}

/* ============================================================================
   12. Toast
   ========================================================================== */
.toast{
  position:fixed;bottom:28px;left:50%;transform:translateX(-50%);z-index:4000;
  background:rgba(12,30,52,.94);color:#fff;padding:11px 20px;border-radius:var(--r);
  font-size:13px;font-weight:500;box-shadow:0 12px 32px -10px rgba(0,0,0,.55);
  animation:toastIn .22s cubic-bezier(.2,.8,.3,1);backdrop-filter:blur(6px);
  border:1px solid rgba(255,255,255,.08);max-width:80vw;
}
.toast.err{background:linear-gradient(180deg,#DC4C41,#C0392F);font-weight:600;border-color:rgba(255,255,255,.16);}
@keyframes toastIn{from{opacity:0;transform:translate(-50%,10px)}to{opacity:1;transform:translate(-50%,0)}}

/* ============================================================================
   13. 响应式
   ========================================================================== */
.menu-btn{display:none;background:none;border:none;font-size:20px;color:var(--navy);padding:4px 6px;margin-right:2px;border-radius:8px;}
.menu-btn:hover{background:#F1F5FA;}

@media(max-width:1360px){
  .jkpis{grid-template-columns:repeat(4,minmax(0,1fr));}
}
@media(max-width:1180px){
  :root{--sidebar-w:210px;}
  .content{padding:18px 18px 34px;}
  .topbar{padding:0 18px;}
  .grid:not(.kpis){grid-template-columns:1fr !important;}
}
@media(max-width:900px){
  .sidebar{transform:translateX(-100%);transition:transform .22s ease;width:236px;box-shadow:0 0 40px rgba(0,0,0,.4);}
  .sidebar.open{transform:translateX(0);}
  .main{margin-left:0;}
  .menu-btn{display:flex;}
  .kpis{grid-template-columns:repeat(2,1fr);}
  .content{padding:14px;}
  .toolbar .field{min-width:120px;flex:1 1 40%;}
  .login-shell{grid-template-columns:1fr;width:min(420px,100%);}
  .login-brand{display:none;}
  .login-card{padding:32px 26px;}
  .topbar h2{font-size:15.5px;}
  .crumb{display:none;}
  #userName,#userRole{display:none;}
  .userchip{padding-left:10px;}
  .kv-grid,.rv-money{grid-template-columns:1fr 1fr;}
  .flow-strip{gap:5px;}
  .fnode{flex:1 1 30%;min-width:0;}
  .jarrow,.farrow{display:none;}
}
@media(max-width:560px){
  .topbar{padding:0 12px;gap:8px;}
  .topbar h2{font-size:15px;}
  .topbar .right{gap:6px;}
  .cloudchip{width:34px;max-width:34px;padding:0;justify-content:center;flex:0 0 34px;}
  .cloudchip #cloudChipTxt{display:none;}
  .bell{width:32px;height:32px;flex:0 0 32px;font-size:15px;}
  .userchip{padding-left:0;border-left:none;}
  .topbar .right>.btn.ghost.sm{padding:0 9px;}
  .content{padding:12px 12px 30px;}
  .panel{padding:15px 15px 16px;}
  .panel h3{flex-wrap:wrap;row-gap:4px;}
  .panel h3::after{content:"";order:1;flex-basis:100%;height:0;}
  .panel h3 .tag{order:2;flex:0 0 auto;margin-left:13px;max-width:100%;}
  .kpi .num{font-size:23px;}
  .modal-mask{padding:12px 8px 24px;}
  .modal>h3{padding:15px 48px 13px 16px;font-size:15px;}
  .modal-body{padding:14px 16px;}
  .modal .foot{padding:12px 16px;}
}

/* 提现台账：窄屏隐藏次要列（收款方/申请人/流水号），保证「当前环节 + 操作」不被吸附列遮住 */
@media(max-width:560px){
  .tbl-scroll>table.wd-tbl{min-width:0;}
  .wd-tbl th:nth-child(1),.wd-tbl td:nth-child(1),
  .wd-tbl th:nth-child(4),.wd-tbl td:nth-child(4),
  .wd-tbl th:nth-child(5),.wd-tbl td:nth-child(5),
  .wd-tbl th:nth-child(7),.wd-tbl td:nth-child(7),
  .wd-tbl th:nth-child(8),.wd-tbl td:nth-child(8){display:none;}
  .wd-tbl td:nth-child(2){white-space:normal;}
}

/* ===== 身份证必填：实时校验提示 ===== */
.idcard-hint{font-size:11.5px;line-height:1.5;margin-top:3px;color:var(--muted2);}
.idcard-hint.ok{color:var(--green);}
.idcard-hint.bad{color:var(--red);}
.kpi.red{--accent:#D2483E;} .kpi.red .num{color:#B93C33;}

/* ===== 生日提醒（学籍管理 / 我的教学） ===== */
.bd-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(258px,1fr));gap:10px;margin-top:2px;}
.bd-card{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1px solid var(--line);
  border-radius:var(--r-md);background:linear-gradient(180deg,#FFFCF4,#FFFFFF);box-shadow:var(--sh-1);}
.bd-avatar{width:38px;height:38px;flex:0 0 38px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:var(--gold-050);color:var(--gold-600);font-weight:800;font-size:15px;border:1px solid #F0E3C4;}
.bd-main{min-width:0;flex:1;}
.bd-main .muted{font-size:11.5px;line-height:1.5;}
.bd-card .btn{flex:0 0 auto;}
@media(max-width:560px){
  .bd-grid{grid-template-columns:1fr;}
  .bd-card .btn{padding:0 8px;}
}

/* ===== 二级菜单分组小标题（长菜单分段，如教务管理） ===== */
.navcap{
  margin:9px 12px 2px 44px;padding:2px 0 1px;font-size:10.5px;letter-spacing:.6px;
  color:#7E95B0;font-weight:600;white-space:nowrap;
}
.navcap:first-child{margin-top:2px;}

/* ===== 班级花名册（学籍管理 / 教学老师） ===== */
.roster-bar{align-items:center;gap:10px;flex-wrap:wrap;}
.roster-chips{display:flex;flex-wrap:wrap;gap:6px;}
.chip-n{display:inline-block;margin-left:6px;padding:0 6px;border-radius:9px;background:rgba(26,58,107,.08);
  font-size:10.5px;line-height:16px;color:#41556F;}
.roster-chips .btn.gold .chip-n{background:rgba(255,255,255,.3);color:#3a2c00;}
.roster-panel{margin-bottom:12px;}
.roster-head{display:flex;align-items:flex-start;gap:12px;flex-wrap:wrap;margin-bottom:8px;}
.roster-head .row-actions{margin-left:auto;flex-wrap:nowrap;}
.roster-meta{font-size:12px;color:var(--muted2);line-height:1.65;margin-top:3px;}
.roster-panel .tbl-scroll>table{min-width:1020px;}
table.roster-tbl{width:100%;border-collapse:collapse;font-size:12.5px;}
table.roster-tbl th,table.roster-tbl td{border:1px solid var(--line);padding:6px 8px;}
table.roster-tbl th{background:#F7F9FC;font-weight:700;white-space:nowrap;position:static;}
table.roster-tbl tbody tr:nth-child(even){background:#FCFDFF;}
table.roster-tbl td.num-cell{text-align:center;color:#41556F;}
table.roster-tbl td.mono{font-family:ui-monospace,Consolas,"Courier New",monospace;font-size:11.5px;letter-spacing:.3px;}
/* 花名册最后一列是备注，不做右侧吸附 */
.roster-panel .tbl-scroll thead th:last-child,
.roster-panel .tbl-scroll tbody td:last-child{position:static;box-shadow:none;background:inherit;}
.roster-panel .tbl-scroll thead th:last-child{background:#F7F9FC;}
@media(max-width:560px){
  table.roster-tbl th,table.roster-tbl td{padding:5px 6px;}
  .roster-head .row-actions{margin-left:0;width:100%;}
}

/* ===== 企业资源库（就业服务） ===== */
.ent-bar{align-items:center;gap:8px;flex-wrap:wrap;}
.ent-bar-right{margin-left:auto;display:flex;gap:8px;align-items:center;}
.ent-chips{align-items:center;gap:8px;flex-wrap:wrap;margin:2px 0 10px;padding:0;border:none;background:none;}
.ent-chips .btn.sm{padding:3px 9px;}
.ent-chips .chip-n{margin-left:5px;}
.ent-sub{font-size:11px;color:var(--muted2);line-height:1.5;margin-top:2px;}
.ent-addr{min-width:170px;max-width:260px;font-size:12px;line-height:1.5;}
.ent-phone{font-family:ui-monospace,Consolas,"Courier New",monospace;font-size:12px;letter-spacing:.2px;}
@media(max-width:560px){
  .ent-bar .field{max-width:none!important;flex:1 1 46%;}
  .ent-bar-right{margin-left:0;width:100%;}
  .ent-addr{min-width:150px;}
}

/* 企业资源库：固定列宽，10 列一屏放得下（不再压住「合作状态」列） */
table.ent-tbl{width:100%;table-layout:fixed;min-width:980px;}
table.ent-tbl th,table.ent-tbl td{padding:7px 8px;font-size:12.5px;vertical-align:top;word-break:break-word;}
table.ent-tbl td{white-space:normal;}
table.ent-tbl td .ent-phone,table.ent-tbl td .tag-pill{white-space:nowrap;}
table.ent-tbl th{white-space:nowrap;}
table.ent-tbl .ent-addr{min-width:0;max-width:none;padding-right:12px;}
table.ent-tbl .ent-sub{white-space:normal;}
table.ent-tbl td .row-actions{gap:4px;}
table.ent-tbl td .btn.sm{padding:2px 7px;}
.ent-panel .tbl-scroll thead th:last-child,
.ent-panel .tbl-scroll tbody td:last-child{position:static;box-shadow:none;background:inherit;}
.ent-panel .tbl-scroll thead th:last-child{background:#F7F9FC;}
@media(max-width:560px){
  table.ent-tbl th,table.ent-tbl td{padding:6px 6px;}
}

/* ---------- 招生业绩（我的招生 / 招生总览） ---------- */
.rec-panel .tbl-scroll thead th:last-child,
.rec-panel .tbl-scroll tbody td:last-child,
.rec-panel .tbl-scroll tfoot td:last-child{position:static;box-shadow:none;background:inherit;}
.rec-panel .tbl-scroll thead th:last-child{background:#F7F9FC;}
.rec-tbl{min-width:940px;}
.rec-tbl td{white-space:nowrap;}
.rec-tbl tfoot td{background:#FAFBFE;font-weight:700;color:var(--ink);border-top:1px solid var(--line);}
.rec-tbl .num-cell{font-variant-numeric:tabular-nums;}
/* 统计类表格（按日/周/月统计、招生老师业绩）：表头、数据、合计行统一居中 */
.rec-stat th,.rec-stat td{text-align:center;}
.rec-stat tfoot td{text-align:center;}
@media(max-width:760px){ .rec-tbl{min-width:760px;} }
.rec-toolbar{display:flex;flex-wrap:wrap;gap:8px 8px;align-items:flex-end;}
.rec-toolbar .field{min-width:0;flex:0 0 auto;gap:4px;}
.rec-toolbar .field label{font-size:11.5px;color:var(--muted2);font-weight:500;}
.rec-toolbar .field input,.rec-toolbar .field select{height:34px;font-size:13px;}
.rec-toolbar .field input[type=date]{width:136px;}
.rec-toolbar .field.rc-kw input{width:152px;}
.rec-toolbar .btn{height:34px;}
.rec-toolbar .pill-group .btn{height:34px;padding:0 14px;}
.rec-sechead{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:4px 0 8px;flex-wrap:wrap;}
.rec-sechead .jcheck{margin:0;font-size:12px;color:var(--muted);display:flex;align-items:center;gap:6px;cursor:pointer;}
/* 渠道招生统计：搜索框稍宽，避免占位文字被截断 */
.rec-toolbar .field.cs-kw input{width:172px;}

/* ---------- 学时设置 / 已消课时 · 剩余课时 ---------- */
.hcell{min-width:130px;font-size:12.5px;color:var(--text2);line-height:1.5;}
.hcell b{color:var(--text);font-variant-numeric:tabular-nums;}
.hbar{height:6px;border-radius:6px;background:rgba(20,52,92,.10);overflow:hidden;margin-top:5px;}
.hrow{display:flex;align-items:center;gap:8px;}
.hrow .hbar{flex:1;margin-top:0;min-width:56px;}
.hrow span{font-size:11.5px;color:var(--muted);font-variant-numeric:tabular-nums;}
.hbar>i{display:block;height:100%;border-radius:6px;background:linear-gradient(90deg,var(--gold-600),var(--gold2));transition:width .25s;}
.hbar.full>i{background:linear-gradient(90deg,#157347,#3FAF74);}
/* 表单里的说明行（学时规则、预计结课、节假日提示） */
.hint-line{font-size:12px;color:var(--muted);line-height:1.6;margin:-2px 0 10px;}
.hint-line b{color:var(--text);}
/* 排课弹窗的班级学时信息条 */
.hours-box{background:var(--gold-050);border:1px solid #F0E2C2;border-radius:10px;padding:9px 12px;
  font-size:12.5px;color:var(--text2);margin:0 0 12px;}
.hours-box b{color:var(--ink);font-variant-numeric:tabular-nums;}
.hours-box .hbar{background:#EFE3C6;}
/* 项目/分班/排课表：包进横向滚动，390 只在表内横滚，不撑破页面 */
.tbl-scroll.hs-wrap{border:0;background:transparent;}
.tbl-scroll>table.hs-tbl{min-width:880px;margin-bottom:0;}
.tbl-scroll>table.mt.hs-tbl{margin-top:6px;}
/* 学时表末列为「预计结课」，不做粘性固定，窄屏按顺序横向滚动更符合阅读顺序 */
.tbl-scroll.hs-wrap thead th:last-child,
.tbl-scroll.hs-wrap tbody td:last-child{position:static;box-shadow:none;background:inherit;}
.tbl-scroll.hs-wrap thead th:last-child{background:#F7F9FC;}

/* 全流程追踪：窄屏 KPI 两列，避免金额被卡片裁切 */
@media(max-width:900px){.jkpis{grid-template-columns:repeat(2,minmax(0,1fr));}}
@media(max-width:480px){.jkpi .jn{font-size:17px;}}

/* 数据看板分页：经营概览 / 漏斗分析 / 排行分析（页签条） */
.dash-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:0 0 12px;}
.dash-head .pill-group{gap:0;}
.dash-head .btn.sm{border-radius:0;font-size:12px;padding:5px 13px;box-shadow:none;}
.dash-head .btn.sm:first-child{border-top-left-radius:var(--r-sm);border-bottom-left-radius:var(--r-sm);}
.dash-head .btn.sm:last-child{border-top-right-radius:var(--r-sm);border-bottom-right-radius:var(--r-sm);}
.dash-hint{margin-left:auto;font-size:12px;}
.panel table .sum-row td{font-weight:700;background:#FAFBFE;}
.rank-kpis{grid-template-columns:repeat(4,minmax(0,1fr));}
@media(max-width:900px){.rank-kpis{grid-template-columns:repeat(2,minmax(0,1fr));}}
@media(max-width:480px){.rank-kpis .num{font-size:19px;}}
@media(max-width:900px){.dash-hint{display:none;}}

/* 我的招生 · 我的学员台账（与统计表区分，避免互相干扰） */
.tbl-scroll>table.stu-tbl{min-width:860px;}
.stu-tbl td,.stu-tbl th{white-space:nowrap;}
.stu-tbl .num-cell{font-variant-numeric:tabular-nums;}
.stu-tbl td.cell-wrap{white-space:normal;line-height:1.45;}
.stu-tbl td.cell-proj{max-width:198px;min-width:140px;}
.stu-tbl td.cell-stage{max-width:148px;min-width:96px;}
.stu-tbl td.op-cell{text-align:right;}
.stu-tbl td.op-cell .btn+.btn{margin-left:6px;}
/* 操作列吸附右侧：窗口较窄时按钮不会被卡片边界裁掉（覆盖 .rec-panel 的 static 规则） */
.rec-panel .tbl-scroll>table.stu-tbl thead th:last-child,
.tbl-scroll>table.stu-tbl thead th:last-child{position:sticky;right:0;z-index:3;background:#F7F9FC;
  box-shadow:-12px 0 12px -12px rgba(20,40,80,.28);}
.rec-panel .tbl-scroll>table.stu-tbl tbody td:last-child,
.tbl-scroll>table.stu-tbl tbody td:last-child{position:sticky;right:0;z-index:2;background:#fff;
  box-shadow:-12px 0 12px -12px rgba(20,40,80,.18);}
.tbl-scroll>table.stu-tbl tbody tr:hover td:last-child{background:#FAFBFE;}
.rec-stages{flex-wrap:wrap;gap:8px;}

/* 通用：最后一列是「操作」的表格，操作列吸附右侧（js 按表头文字自动打 .has-ops）
   优先级高于各面板把最后一列改回 static 的规则，保证窄窗口下按钮不被裁掉 */
.tbl-scroll>table.has-ops thead th:last-child{position:sticky;right:0;z-index:3;background:#F7F9FC;
  box-shadow:-12px 0 12px -12px rgba(20,40,80,.28);}
.tbl-scroll>table.has-ops tbody td:last-child{position:sticky;right:0;z-index:2;background:#fff;
  box-shadow:-12px 0 12px -12px rgba(20,40,80,.18);}
.tbl-scroll>table.has-ops tbody tr:hover td:last-child{background:#FAFBFE;}

/* ===================== 系统设置 ===================== */
.set-acts{display:flex;gap:8px;align-items:center}
.set-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px;margin-top:10px}
.set-card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:14px 16px}
.set-card .set-h{font-size:13px;font-weight:700;color:var(--navy);margin-bottom:10px;padding-bottom:8px;
  border-bottom:1px dashed var(--line2);letter-spacing:.3px}
.set-row{display:flex;align-items:center;gap:10px;padding:7px 0;flex-wrap:wrap}
.set-row .sl{font-size:12.5px;color:var(--text2);min-width:112px;flex:0 0 112px}
.set-row .set-in{display:flex;align-items:center;gap:6px;flex:1;min-width:120px}
.set-row .set-in input{flex:1;min-width:0;padding:6px 9px;border:1px solid var(--line2);border-radius:8px;
  font-size:13px;color:var(--text);background:#fff}
.set-row .set-in input:focus{outline:none;border-color:var(--navy2);box-shadow:0 0 0 3px rgba(44,107,168,.12)}
.set-row .set-in input[type=number]{max-width:120px;text-align:right}
.set-row .set-in .unit{font-size:12px;color:var(--muted);flex:0 0 auto}
.set-row em{flex:1 1 100%;font-style:normal;font-size:11.5px;color:var(--muted2);margin-left:122px}
.set-sw{cursor:pointer}
.set-sw input{display:none}
.set-sw i{width:38px;height:20px;border-radius:20px;background:var(--line2);position:relative;transition:.18s;flex:0 0 auto}
.set-sw i::after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;
  box-shadow:0 1px 3px rgba(10,30,56,.25);transition:.18s}
.set-sw input:checked+i{background:var(--navy2)}
.set-sw input:checked+i::after{left:20px}
/* 品牌 LOGO 上传卡 */
.set-card.logo-card{align-self:start}
.logo-set{display:flex;gap:16px;align-items:flex-start}
.logo-pv{
  width:84px;height:84px;border-radius:18px;flex:0 0 auto;overflow:hidden;
  display:flex;align-items:center;justify-content:center;
  background:linear-gradient(145deg,#E4C97F,#C8A24A 55%,#A9822F);color:#241A00;
  font-size:34px;font-weight:800;
  box-shadow:0 10px 24px -14px rgba(200,162,74,.95),inset 0 1px 0 rgba(255,255,255,.42);
}
.logo-pv img{width:100%;height:100%;object-fit:cover;display:block}
.logo-ops{flex:1;min-width:0}
.logo-tip{font-size:11.5px;line-height:1.75;color:var(--muted2);margin-bottom:11px}
.logo-tip b{color:var(--text2);font-weight:700}
@media(max-width:640px){
  .set-grid{grid-template-columns:1fr}
  .set-row .sl{flex:1 1 100%;min-width:0}
  .set-row em{margin-left:0}
  .logo-set{gap:12px}
  .logo-pv{width:66px;height:66px;border-radius:14px;font-size:27px}
}
