/* ============================================================
   康美全校驾驶舱 · 全校长专用
   ------------------------------------------------------------
   浅色指挥舱：整页克制、干净、白底，
   只有「招生作战室」是一块深空屏 —— 像白墙上镶了一块真屏幕。
   视觉重心只有一个：校长 3 秒内必须知道该看哪。
   ============================================================ */
:root{
  /* 底色阶 */
  --bg:#F1F4F8; --bg2:#E9EEF4;
  --panel:#FFFFFF; --panel2:#F7F9FC; --panel3:#EDF1F6;
  --line:#E3E8EF; --line2:#EEF1F5;

  /* 文字 */
  --tx:#101828; --tx2:#475467; --tx3:#7A8699; --tx4:#AEB8C6;

  /* 主色：康美绿 */
  --brand:#0E8F6E; --brand-d:#0A6E55; --brand-m:#12C08C; --brand-l:#E6F5EF;

  /* 数据辅色 */
  --blue:#2F6FED;  --blue-l:#E8EFFE;
  --amber:#D97B12; --amber-l:#FDF3E5;
  --red:#D93A38;   --red-l:#FDECEC;
  --violet:#6D4AE8;--violet-l:#F0EDFE;
  /* 兼容旧变量名 */
  --good:#0E8F6E; --warn:#D97B12; --bad:#D93A38; --info:#2F6FED;
  --brand2:#0E8F6E;

  /* 深空屏（仅招生作战室使用） */
  --deep:#0A1628; --deep2:#0D1E33;
  --deep-line:rgba(120,220,255,.13);
  --cyan:#0FF3C0; --cyan2:#35D0FF;
  --deep-tx:rgba(255,255,255,.94);
  --deep-tx2:rgba(255,255,255,.62);
  --deep-tx3:rgba(255,255,255,.38);

  --r-l:18px; --r:14px; --r-s:10px;
  --sh1:0 1px 2px rgba(16,24,40,.04);
  --sh2:0 1px 3px rgba(16,24,40,.05),0 1px 2px rgba(16,24,40,.03);
  --sh3:0 12px 32px rgba(16,24,40,.10);
  --mono:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace;
  --tabh:62px;
}

*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{margin:0;padding:0}
body{
  background:var(--bg); color:var(--tx);
  font:15px/1.65 -apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  -webkit-font-smoothing:antialiased; padding-bottom:44px;
}
.wrap{max-width:1160px;margin:0 auto;padding:0 22px}
@media(max-width:700px){.wrap{padding:0 14px}}
.mono,code{font-family:var(--mono);font-variant-numeric:tabular-nums}
button{font-family:inherit;cursor:pointer}
:focus-visible{outline:2px solid var(--brand);outline-offset:2px;border-radius:4px}

/* ── 顶栏 ── */
.top{
  position:sticky;top:0;z-index:50;
  background:rgba(255,255,255,.82);backdrop-filter:blur(16px) saturate(1.6);
  border-bottom:1px solid var(--line);
}
.top .in{max-width:1160px;margin:0 auto;padding:13px 22px;display:flex;align-items:center;gap:14px}
@media(max-width:700px){.top .in{padding:11px 14px;gap:10px}}
.logo{display:flex;align-items:center;gap:10px;font-weight:600;font-size:16px;letter-spacing:-.2px}
.logo .dot{
  width:8px;height:8px;border-radius:50%;background:var(--brand);
  animation:pulse 2.6s ease-out infinite;flex:0 0 auto;
}
.top .sp{flex:1}

/* 同步状态：一个脉冲点 + 相对时间 —— 这条「直播感」比任何特效都强 */
.sync{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--tx3);white-space:nowrap}
.sync i{
  width:6px;height:6px;border-radius:50%;background:var(--brand-m);
  box-shadow:0 0 0 3px rgba(18,192,140,.16);animation:breath 2.4s ease-in-out infinite;flex:0 0 auto;
}
@media(max-width:760px){
  .sync{display:none}
  .top .date{display:none}
}
.top .date{font-size:13px;color:var(--tx2);white-space:nowrap}

.btn{
  background:var(--panel);border:1px solid var(--line);color:var(--tx2);
  padding:7px 15px;border-radius:var(--r-s);font-size:13px;transition:.16s;white-space:nowrap;
}
.btn:hover{background:var(--panel2);border-color:var(--tx4);color:var(--tx)}
.btn.primary{background:var(--brand);border-color:var(--brand);color:#fff;box-shadow:0 1px 2px rgba(14,143,110,.24)}
.btn.primary:hover{background:var(--brand-d);border-color:var(--brand-d);color:#fff}
.btn:disabled{opacity:.6;cursor:default}

/* ── PC 二级导航 ── */
.pnav{
  position:sticky;top:55px;z-index:40;
  background:rgba(255,255,255,.86);backdrop-filter:blur(14px);
  border-bottom:1px solid var(--line2);
}
.pnav .in{max-width:1160px;margin:0 auto;padding:0 22px;display:flex;gap:2px}
.pnav button{
  background:none;border:none;color:var(--tx3);font-size:13.5px;
  padding:11px 14px;border-bottom:2px solid transparent;transition:.16s;margin-bottom:-1px;
}
.pnav button:hover{color:var(--tx2)}
.pnav button.on{color:var(--brand);border-bottom-color:var(--brand);font-weight:500}
@media(max-width:900px){.pnav{display:none}}

/* ── 白卡 ── */
.card{
  background:var(--panel);border:1px solid var(--line);border-radius:var(--r-l);
  padding:22px 24px;margin-top:16px;scroll-margin-top:126px;
  box-shadow:var(--sh2);animation:fadeUp .52s cubic-bezier(.16,1,.3,1) both;
}
@media(max-width:700px){.card{padding:17px 16px;border-radius:var(--r);margin-top:12px}}
.card h2{
  margin:0 0 5px;font-size:15.5px;font-weight:600;letter-spacing:.1px;
  display:flex;align-items:center;gap:9px;flex-wrap:wrap;
}
.card .cap{font-size:12.5px;color:var(--tx3);margin:0 0 18px;line-height:1.65}

/* 小节能标题（漏斗/来源等内嵌区块） */
.subttl{
  font-size:12.5px;color:var(--tx2);font-weight:500;margin:22px 0 12px;
  display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;
}
.subttl em{font-style:normal;font-size:11.5px;color:var(--tx4);font-weight:400}

/* ── 结论条 ── */
.verdict{
  margin-top:18px;background:var(--panel);border:1px solid var(--line);
  border-radius:var(--r-l);padding:0;position:relative;overflow:hidden;
  box-shadow:var(--sh2);animation:fadeUp .5s cubic-bezier(.16,1,.3,1) both;
}
.verdict .row{display:flex;gap:16px;padding:18px 24px;align-items:flex-start}
.verdict .row+.row{border-top:1px solid var(--line2)}
@media(max-width:700px){.verdict .row{padding:12px 15px;gap:10px}}
.verdict .tagx{
  flex:0 0 auto;font-size:10.5px;letter-spacing:.12em;padding:3px 8px;border-radius:5px;
  font-weight:500;line-height:1.5;margin-top:2px;
}
.verdict .tagx.biz{background:var(--brand-l);color:var(--brand-d)}
.verdict .tagx.bld{background:var(--blue-l);color:var(--blue)}
.verdict .t{font-size:16px;line-height:1.68;font-weight:500;color:var(--tx);letter-spacing:-.1px}
@media(max-width:700px){.verdict .t{font-size:13.8px;line-height:1.64;font-weight:400}}

/* 手机端数据时间戳 */
.mdate{display:none}

/* ════════════════════════════════════════════════
   深空屏 —— 招生作战室
   全站唯一一块深色。别处都白，这里才显出发的光。
   ════════════════════════════════════════════════ */
.deep{
  position:relative;overflow:hidden;border-radius:var(--r-l);
  background:var(--deep);
  border:1px solid #16283F;
  box-shadow:0 18px 44px rgba(6,16,32,.22),0 2px 6px rgba(6,16,32,.14);
  color:var(--deep-tx);margin-top:16px;
  animation:fadeUp .56s cubic-bezier(.16,1,.3,1) both;
}
@media(max-width:700px){.deep{border-radius:var(--r);margin-top:12px}}

/* 网格 + 顶部辉光：科技感来自这两个，不是来自"黑" */
.deep::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background-image:
    radial-gradient(760px 320px at 16% 0%, rgba(15,243,192,.10), transparent 68%),
    radial-gradient(620px 300px at 88% 8%, rgba(53,208,255,.09), transparent 70%),
    linear-gradient(var(--deep-line) 1px,transparent 1px),
    linear-gradient(90deg,var(--deep-line) 1px,transparent 1px);
  background-size:100% 100%,100% 100%,30px 30px,30px 30px;
  opacity:.9;
}
/* 扫描光带：一条 1px 的光从左划到右，6 秒一轮，不刺眼 */
.deep::after{
  content:"";position:absolute;top:0;left:0;width:42%;height:1px;pointer-events:none;
  background:linear-gradient(90deg,transparent,rgba(15,243,192,.72),transparent);
  animation:scanX 6.5s linear infinite;
}
.deep .body{position:relative;z-index:1;padding:22px 24px 24px}
@media(max-width:700px){.deep .body{padding:17px 16px 20px}}

.deep .hd{display:flex;align-items:center;gap:10px;margin-bottom:3px;flex-wrap:wrap}
.deep .hd h2{
  margin:0;font-size:15.5px;font-weight:600;letter-spacing:.5px;
  color:#fff;display:flex;align-items:center;gap:9px;
}
.deep .hd h2::before{
  content:"";width:3px;height:15px;border-radius:2px;
  background:linear-gradient(180deg,var(--cyan),var(--cyan2));
  box-shadow:0 0 10px rgba(15,243,192,.7);
}
.deep .cap{font-size:12.5px;color:var(--deep-tx2);margin:0 0 18px;line-height:1.6;letter-spacing:.2px}
@media(max-width:700px){.deep .cap{font-size:12px;margin-bottom:14px}}
.deep .subttl{color:var(--deep-tx2);margin:24px 0 13px}
.deep .subttl em{color:var(--deep-tx3)}

/* 状态胶囊（深色版） */
.pill{
  font-size:10.5px;padding:2.5px 9px;border-radius:20px;letter-spacing:.04em;
  border:1px solid transparent;white-space:nowrap;font-weight:500;
}
.pill.ok{background:rgba(15,243,192,.13);color:#5CF0C8;border-color:rgba(15,243,192,.28)}
.pill.warn{background:rgba(232,145,42,.14);color:#F0AE60;border-color:rgba(232,145,42,.3)}
.pill.info{background:rgba(53,208,255,.13);color:#78D8FF;border-color:rgba(53,208,255,.28)}
.pill.mute{background:rgba(255,255,255,.07);color:var(--deep-tx2);border-color:rgba(255,255,255,.12)}
.pill.bad{background:rgba(217,58,56,.16);color:#FF8A88;border-color:rgba(217,58,56,.32)}

/* ── 双区布局：左环 右 KPI ── */
.mast{display:grid;grid-template-columns:268px 1fr;gap:32px;align-items:center}
@media(max-width:820px){.mast{grid-template-columns:1fr;gap:20px}}

/* 主环 */
.ring{position:relative;width:268px;height:268px;margin:0 auto}
@media(max-width:820px){.ring{width:214px;height:214px}}
.ring svg{display:block;width:100%;height:100%;overflow:visible}
.ring .trk{stroke:rgba(255,255,255,.075)}
/* 刻度环：把「1000 人」这个量级画出来，比光写个百分比有冲击 */
.ring .ticks{
  stroke:rgba(53,208,255,.40);stroke-width:3.5;fill:none;stroke-linecap:butt;
}
.ring .prog{
  stroke:url(#rgGrad);stroke-width:13;fill:none;stroke-linecap:round;
  transition:stroke-dashoffset 1.7s cubic-bezier(.16,1,.3,1);
  filter:drop-shadow(0 0 6px rgba(15,243,192,.75));
}
.ring .head{
  fill:var(--cyan);filter:drop-shadow(0 0 7px rgba(15,243,192,.95));
  animation:breath 2.2s ease-in-out infinite;
}
.ring .hub{
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  flex-direction:column;pointer-events:none;
}
.ring .big{
  font-family:var(--mono);font-size:54px;font-weight:600;line-height:1;color:#fff;
  letter-spacing:-.03em;text-shadow:0 0 22px rgba(15,243,192,.42);
}
@media(max-width:820px){.ring .big{font-size:46px}}
.ring .big em{font-style:normal;font-size:19px;color:var(--deep-tx2);margin-left:3px;letter-spacing:0}
.ring .of{font-size:12px;color:var(--deep-tx2);margin-top:7px;letter-spacing:.06em}
.ring .of b{color:#5CF0C8;font-weight:500;font-family:var(--mono)}
.ring .rate{
  margin-top:9px;font-size:11px;color:rgba(15,243,192,.9);
  font-family:var(--mono);letter-spacing:.06em;
}
.ringfoot{
  margin-top:16px;text-align:center;font-size:12.5px;color:var(--deep-tx2);line-height:1.85;
}
.ringfoot b{color:var(--deep-tx);font-family:var(--mono);font-weight:500}
.ringfoot .gap{color:#FF8A63;font-weight:600}

/* KPI 组 */
.kpis{display:grid;grid-template-columns:1fr 1fr;gap:11px}
@media(max-width:520px){.kpis{grid-template-columns:1fr 1fr;gap:9px}}
.kpi{
  background:rgba(255,255,255,.045);border:1px solid rgba(255,255,255,.075);
  border-radius:var(--r-s);padding:13px 15px;transition:.18s;
}
.kpi:hover{background:rgba(255,255,255,.07);border-color:rgba(15,243,192,.26)}
@media(max-width:520px){.kpi{padding:11px 12px}}
.kpi .l{font-size:11.5px;color:var(--deep-tx3);margin-bottom:6px;letter-spacing:.04em}
.kpi .v{
  font-family:var(--mono);font-size:33px;font-weight:600;line-height:1.02;color:#fff;
  letter-spacing:-.03em;
}
@media(max-width:520px){.kpi .v{font-size:27px}}
.kpi .v small{font-size:12px;font-weight:400;color:var(--deep-tx3);margin-left:4px;letter-spacing:0;font-family:inherit}
.kpi .s{font-size:11px;color:var(--deep-tx3);margin-top:5px;line-height:1.5}
.kpi .s b{color:#5CF0C8;font-weight:500;font-family:var(--mono)}
.kpi.alert{background:rgba(232,145,42,.08);border-color:rgba(232,145,42,.24)}
.kpi.alert .v{color:#FFC480}
.kpi.alert .s b{color:#FFC480}

/* ── 能量条漏斗 ── */
.funnel{margin-top:4px}
.fn{display:flex;align-items:center;gap:12px;margin-bottom:9px;opacity:0;animation:fadeUp .5s cubic-bezier(.16,1,.3,1) forwards}
.fn .nm{width:46px;flex:0 0 auto;font-size:12.5px;color:var(--deep-tx2);letter-spacing:.04em}
.fn .track{
  flex:1;height:24px;background:rgba(255,255,255,.045);border-radius:5px;
  position:relative;overflow:hidden;min-width:0;
}
.fn .track::after{
  content:"";position:absolute;inset:0;border-radius:5px;
  border:1px solid rgba(255,255,255,.05);pointer-events:none;
}
.fn .fill{
  height:100%;border-radius:5px;width:0;position:relative;
  transition:width .95s cubic-bezier(.16,1,.3,1);
}
.fn .fill::after{
  content:"";position:absolute;right:0;top:0;bottom:0;width:16px;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.5));
  border-radius:0 5px 5px 0;
}
.fn .n{
  width:52px;flex:0 0 auto;text-align:right;font-family:var(--mono);
  font-size:15px;color:#fff;letter-spacing:-.01em;
}
.fn .pc{width:50px;flex:0 0 auto;text-align:right;font-size:11.5px;color:var(--deep-tx3);font-family:var(--mono)}
@media(max-width:560px){
  .fn .nm{width:40px;font-size:12px}
  .fn .pc{display:none}
  .fn .n{width:44px;font-size:14px}
  .fn .track{height:22px}
}

/* ── 来源环 ── */
.srcwrap{display:grid;grid-template-columns:190px 1fr;gap:26px;align-items:center;margin-top:2px}
@media(max-width:680px){.srcwrap{grid-template-columns:1fr;gap:16px}}
.donut{position:relative;width:190px;height:190px;margin:0 auto}
@media(max-width:680px){.donut{width:164px;height:164px}}
.donut svg{display:block;width:100%;height:100%;transform:rotate(-90deg)}
.donut .seg{fill:none;stroke-width:20;transition:opacity .18s}
.donut .hub{
  position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;
  pointer-events:none;
}
.donut .hub .n{font-family:var(--mono);font-size:29px;font-weight:600;color:#fff;line-height:1;letter-spacing:-.02em}
.donut .hub .l{font-size:11px;color:var(--deep-tx3);margin-top:6px}
.legend{display:flex;flex-direction:column;gap:7px}
.lg{display:flex;align-items:center;gap:9px;font-size:12.5px;color:var(--deep-tx2);line-height:1.5}
.lg i{width:9px;height:9px;border-radius:2.5px;flex:0 0 auto}
.lg .k{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lg .v{font-family:var(--mono);color:var(--deep-tx);font-size:12.5px;flex:0 0 auto}
.lg .r{font-family:var(--mono);color:var(--deep-tx3);font-size:11.5px;width:42px;text-align:right;flex:0 0 auto}
.lg.alert{color:#FFC480}
.lg.alert .v{color:#FFC480}
@media(max-width:560px){.lg .r{display:none}}

/* ════════════════════════════════════════════════
   其余系统
   ════════════════════════════════════════════════ */
.grid4{display:grid;grid-template-columns:repeat(auto-fit,minmax(228px,1fr));gap:13px}
@media(max-width:560px){.grid4{grid-template-columns:1fr;gap:9px}}
.sys{
  background:var(--panel2);border:1px solid var(--line);border-radius:var(--r);
  padding:16px;transition:.18s;position:relative;overflow:hidden;
}
.sys:hover{border-color:var(--tx4);background:#fff;box-shadow:var(--sh2);transform:translateY(-1px)}
.sys .hd{display:flex;align-items:center;gap:10px;margin-bottom:13px}
/* 系统图标：色块底 + 几何图形。图标说「是什么系统」，颜色说「什么状态」 */
.sys .ico{
  width:34px;height:34px;border-radius:10px;flex:0 0 auto;
  display:flex;align-items:center;justify-content:center;
}
.sys .ico svg{width:17px;height:17px;display:block}
.sys .nm{font-size:13.5px;font-weight:600;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sys .big{
  font-family:var(--mono);font-size:28px;font-weight:600;line-height:1.05;
  letter-spacing:-.03em;color:var(--tx);
}
.sys .big small{font-family:inherit;font-size:11.5px;font-weight:400;color:var(--tx3);margin-left:4px;letter-spacing:0}
.sys .sub{font-size:11.5px;color:var(--tx3);margin-top:6px;line-height:1.6}
.sys .note{
  font-size:11.5px;color:var(--amber);margin-top:10px;padding-top:9px;
  border-top:1px dashed var(--line);line-height:1.55;
}
/* 状态胶囊（浅色版） */
.badge{font-size:10.5px;padding:2px 8px;border-radius:20px;letter-spacing:.02em;white-space:nowrap;font-weight:500}
.badge.healthy,.badge.live{background:var(--brand-l);color:var(--brand-d)}
.badge.thin,.badge.pilot{background:var(--amber-l);color:var(--amber)}
.badge.acceptance,.badge.building{background:var(--blue-l);color:var(--blue)}
.badge.empty,.badge.unknown,.badge.planned{background:var(--panel3);color:var(--tx3)}
.badge.down{background:var(--red-l);color:var(--red)}

/* ════════════════════════════════════════════════
   建设进度
   ════════════════════════════════════════════════ */
.psum{display:grid;grid-template-columns:repeat(auto-fit,minmax(126px,1fr));gap:11px;margin-bottom:20px}
@media(max-width:560px){.psum{grid-template-columns:1fr 1fr;gap:9px}}
.psum .it{background:var(--panel2);border-radius:var(--r-s);padding:14px 15px;border:1px solid var(--line2)}
.psum .it .l{font-size:11.5px;color:var(--tx3);margin-bottom:6px}
.psum .it .v{font-family:var(--mono);font-size:24px;font-weight:600;line-height:1.1;letter-spacing:-.02em}
.psum .it .v small{font-family:inherit;font-size:11.5px;font-weight:400;color:var(--tx3);margin-left:2px}
.psum .it .s{font-size:11px;color:var(--tx4);margin-top:4px;line-height:1.5}

.pgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:13px;align-items:start}
@media(max-width:760px){.pgrid{grid-template-columns:1fr;gap:10px}}
.pcard{
  background:var(--panel2);border:1px solid var(--line);border-radius:var(--r);
  padding:16px;transition:.18s;scroll-margin-top:126px;
}
.pcard:hover{border-color:var(--tx4);background:#fff;box-shadow:var(--sh2)}
.pcard .hd{display:flex;align-items:center;gap:9px;margin-bottom:3px}
.pcard .nm{font-size:14px;font-weight:600;flex:1;min-width:0}
.pcard .sum{font-size:12px;color:var(--tx3);line-height:1.65;margin:7px 0 13px}

.pbar{height:7px;background:var(--panel3);border-radius:4px;overflow:hidden;margin:10px 0 7px}
.pbar .f{
  height:100%;border-radius:4px;width:0;
  transition:width 1s cubic-bezier(.16,1,.3,1);
}
.pmeta{display:flex;justify-content:space-between;align-items:baseline;font-size:11.5px;color:var(--tx3);gap:8px}
.pmeta .pc{font-family:var(--mono);font-weight:600;font-size:13px;letter-spacing:-.01em}

.pmore{
  background:none;border:none;color:var(--tx3);font-size:11.5px;
  padding:8px 0 0;display:flex;align-items:center;gap:5px;transition:color .15s;
}
.pmore:hover{color:var(--brand)}
.pmore .ar{transition:transform .22s;font-size:9px;display:inline-block}
.pmore.open .ar{transform:rotate(90deg)}
.pmods{margin-top:11px;padding-top:11px;border-top:1px solid var(--line);display:none}
.pmods.open{display:block;animation:fadeUp .3s ease both}
.pmods .m{font-size:12px;line-height:1.95;display:flex;gap:8px;align-items:flex-start}
.pmods .m .i{flex:0 0 auto;width:12px;text-align:center;font-size:10.5px;margin-top:2px}
.pmods .m.done{color:var(--tx2)}
.pmods .m.done .i{color:var(--brand)}
.pmods .m.todo{color:var(--tx4)}
.pmods .m.todo .i{color:var(--tx4)}
.pfoot{margin-top:12px;padding-top:10px;border-top:1px solid var(--line);font-size:11.5px;line-height:1.7}
.pfoot .k{color:var(--tx4)}
.pfoot .nx{color:var(--amber)}

/* ── 时间线 ── */
.tl{margin-top:6px;position:relative;scroll-margin-top:126px;padding-left:20px}
.tl::before{
  content:"";position:absolute;left:4px;top:10px;bottom:10px;width:1px;
  background:linear-gradient(180deg,var(--line),var(--line2));
}
.tl .day{display:flex;align-items:center;gap:10px;margin:20px 0 10px;margin-left:-20px;padding-left:20px}
.tl .day:first-child{margin-top:2px}
.tl .day .dt{
  font-family:var(--mono);font-size:12px;color:var(--tx2);font-weight:600;white-space:nowrap;
  background:var(--panel);padding:2px 0;
}
.tl .day .ln{flex:1;height:1px;background:var(--line2)}
.tl .day .w{font-size:11px;color:var(--tx4);white-space:nowrap}
.tl .ev{display:flex;gap:12px;padding:8px 0;position:relative;margin-left:-20px;padding-left:20px}
.tl .ev::before{
  content:"";position:absolute;left:1px;top:15px;width:7px;height:7px;border-radius:50%;
  background:var(--tx4);box-shadow:0 0 0 3px var(--panel);
}
.tl .ev.feature::before{background:var(--brand);box-shadow:0 0 0 3px var(--panel),0 0 10px rgba(14,143,110,.5)}
.tl .ev.fix::before{background:var(--amber)}
.tl .ev.design::before{background:var(--violet)}
.tl .ev.infra::before{background:var(--tx3)}
.tl .ev.release::before{background:var(--brand-m)}
.tl .ev .ct{flex:1;min-width:0}
.tl .ev .t{font-size:13.5px;line-height:1.6;color:var(--tx)}
.tl .ev .d{font-size:11.5px;color:var(--tx3);line-height:1.7;margin-top:4px;white-space:pre-line}
.tl .ev .tag{
  font-size:10px;padding:2px 7px;border-radius:5px;background:var(--panel3);
  color:var(--tx2);margin-right:7px;white-space:nowrap;font-weight:500;
}
.tl .ev .ver{font-size:10px;color:var(--tx4);font-family:var(--mono);margin-left:6px}
@media(max-width:520px){
  .tl .ev .t{font-size:13px}
  .tl .ev .d{font-size:11px}
}

/* ── 组织架构 ── */
.org{margin-top:8px;scroll-margin-top:126px}
.org .u{
  display:flex;align-items:center;gap:9px;padding:9px 0;border-bottom:1px solid var(--line2);
  font-size:13px;flex-wrap:wrap;transition:background .15s;
}
.org .u:last-child{border-bottom:none}
.org .u .ind{flex:0 0 auto;color:var(--tx4);font-size:11px;font-family:var(--mono);white-space:pre}
.org .u .nm{font-weight:500;color:var(--tx)}
.org .u .hd2{color:var(--tx3);font-size:12px}
.org .u .du{color:var(--tx4);font-size:11.5px}
.org .u .sp{flex:1}
.org .u .st{font-size:10.5px;padding:2.5px 9px;border-radius:20px;white-space:nowrap;font-weight:500}
.org .u .st.has{background:var(--brand-l);color:var(--brand-d)}
.org .u .st.none{background:var(--amber-l);color:var(--amber)}
@media(max-width:520px){
  .org .u{font-size:12.5px;gap:7px}
  .org .u .du{display:none}
}
.orgnote{
  margin-top:16px;padding:13px 16px;background:var(--amber-l);
  border-radius:var(--r-s);font-size:12.5px;color:#8A5210;line-height:1.7;
  border-left:3px solid var(--amber);
}

/* ════════════════════════════════════════════════
   简报 / 追问
   ════════════════════════════════════════════════ */
.brief{
  font-size:14.8px;line-height:1.92;color:var(--tx2);white-space:pre-wrap;
  word-break:break-word;letter-spacing:.1px;
}
@media(max-width:700px){.brief{font-size:15.5px;line-height:1.98;color:var(--tx)}}
/* 简报首段：全场唯一加粗引导段，校长三秒内能抓到今天的关键 */
.blead{
  font-size:15.5px;line-height:1.85;color:var(--tx);font-weight:500;
  padding:15px 18px;margin-bottom:20px;border-radius:var(--r-s);
  background:var(--brand-l);border-left:3px solid var(--brand);
  white-space:pre-wrap;word-break:break-word;letter-spacing:.1px;
}
@media(max-width:700px){.blead{font-size:15px;line-height:1.82;padding:13px 15px;font-weight:400}}
.brief strong{color:var(--tx)}
.src{font-size:11.5px;color:var(--tx3);margin-top:18px;padding-top:14px;border-top:1px solid var(--line2);line-height:1.7}

.ask{display:flex;gap:10px;margin-bottom:16px}
.ask input{
  flex:1;background:var(--panel2);border:1px solid var(--line);color:var(--tx);
  padding:12px 16px;border-radius:var(--r-s);font-size:14px;font-family:inherit;min-width:0;
  transition:.16s;
}
.ask input::placeholder{color:var(--tx4)}
.ask input:focus{outline:none;border-color:var(--brand);background:#fff;box-shadow:0 0 0 3px rgba(14,143,110,.1)}
.qa{background:var(--panel2);border-radius:var(--r-s);padding:15px 17px;margin-bottom:10px;border:1px solid var(--line2)}
.qa .q{font-size:13.5px;color:var(--brand-d);margin-bottom:8px;font-weight:500}
.qa .a{font-size:14px;line-height:1.85;color:var(--tx2);white-space:pre-wrap}
@media(max-width:700px){.qa .a{font-size:15px;line-height:1.92}}
.chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:16px}
.chip{
  background:var(--panel2);border:1px solid var(--line);color:var(--tx2);
  padding:7px 14px;border-radius:20px;font-size:12.5px;transition:.16s;
}
.chip:hover{border-color:var(--brand);color:var(--brand-d);background:var(--brand-l)}

/* ── 登录 ── */
.login{
  min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px;
  position:relative;overflow:hidden;
  background-image:
    radial-gradient(760px 460px at 50% -10%, rgba(14,143,110,.14), transparent 70%),
    linear-gradient(rgba(14,143,110,.055) 1px,transparent 1px),
    linear-gradient(90deg,rgba(14,143,110,.055) 1px,transparent 1px);
  background-size:100% 100%,42px 42px,42px 42px;
}
/* 背景同心圆环：呼应首页那块仪表面板，让登录页不是一片空白 */
.login::before,.login::after{
  content:"";position:absolute;left:50%;top:50%;border-radius:50%;
  pointer-events:none;
}
.login::before{
  width:760px;height:760px;margin:-380px 0 0 -380px;
  border:1px solid rgba(14,143,110,.13);
  box-shadow:inset 0 0 0 78px rgba(14,143,110,.028),inset 0 0 0 79px rgba(14,143,110,.075);
}
.login::after{
  width:1080px;height:1080px;margin:-540px 0 0 -540px;
  border:1px solid rgba(14,143,110,.07);
}
.login .box{
  position:relative;z-index:1;
  width:100%;max-width:398px;text-align:center;background:var(--panel);
  border:1px solid var(--line);border-radius:20px;padding:40px 32px 34px;
  box-shadow:0 20px 48px rgba(16,24,40,.09),0 2px 6px rgba(16,24,40,.04);
  animation:fadeUp .55s cubic-bezier(.16,1,.3,1) both;
}
/* 卡片顶部标记：一块绿牌 + 一进度环，和驾驶舱主视觉同源 */
.login .mark{
  width:50px;height:50px;margin:0 auto 20px;border-radius:15px;
  background:linear-gradient(135deg,var(--brand-m),var(--brand));
  box-shadow:0 8px 20px rgba(14,143,110,.28);
  display:flex;align-items:center;justify-content:center;
}
.login .mark svg{width:27px;height:27px;display:block}
.login .logo{justify-content:center;font-size:20px;margin-bottom:10px;letter-spacing:-.3px}

.login .sb{font-size:13px;color:var(--tx3);margin-bottom:30px;line-height:1.65}
.login input{
  width:100%;background:var(--panel2);border:1px solid var(--line);color:var(--tx);
  padding:14px 16px;border-radius:var(--r-s);font-size:15px;text-align:center;
  font-family:inherit;margin-bottom:12px;transition:.16s;
}
.login input:focus{outline:none;border-color:var(--brand);background:#fff;box-shadow:0 0 0 3px rgba(14,143,110,.1)}
.login .btn{width:100%;padding:13px;font-size:15px;border-radius:var(--r-s)}

/* ── 杂项 ── */
.empty{text-align:center;padding:44px 20px;color:var(--tx3);font-size:13.5px;line-height:2}
.spin{
  display:inline-block;width:15px;height:15px;border:2px solid var(--line);
  border-top-color:var(--brand);border-radius:50%;animation:sp .7s linear infinite;vertical-align:-3px;
}
.toast{
  position:fixed;left:50%;bottom:32px;transform:translateX(-50%) translateY(16px);
  background:#1B2637;border:none;color:#fff;
  padding:11px 22px;border-radius:24px;font-size:13.5px;opacity:0;pointer-events:none;
  transition:.26s cubic-bezier(.16,1,.3,1);z-index:200;box-shadow:0 10px 28px rgba(16,24,40,.24);max-width:90vw;
}
.toast.on{opacity:1;transform:translateX(-50%) translateY(0)}
.foot{text-align:center;color:var(--tx4);font-size:11.5px;margin-top:36px;line-height:1.95}

/* ════════════════════════════════════════════════
   手机端：底部标签
   校长是在电梯里、车上、开会前看这屏，
   所以不做「把电脑版压窄」，改成拇指够得着的四个标签。
   ════════════════════════════════════════════════ */
.mtabs{display:none}
@media(max-width:900px){
  body{padding-bottom:calc(var(--tabh) + env(safe-area-inset-bottom) + 8px)}
  .mtabs{
    display:grid;grid-template-columns:repeat(4,1fr);
    position:fixed;left:0;right:0;bottom:0;z-index:90;
    background:rgba(255,255,255,.94);backdrop-filter:blur(18px) saturate(1.6);
    border-top:1px solid var(--line);
    padding-bottom:env(safe-area-inset-bottom);
    box-shadow:0 -2px 14px rgba(16,24,40,.05);
  }
  .mtabs button{
    background:none;border:none;color:var(--tx3);
    padding:9px 2px 8px;display:flex;flex-direction:column;align-items:center;gap:4px;
    font-size:10.5px;letter-spacing:.02em;min-height:var(--tabh);
    position:relative;transition:color .16s;
  }
  .mtabs button .ic{font-size:17px;line-height:1;opacity:.55;transition:.16s}
  .mtabs button.on{color:var(--brand);font-weight:500}
  .mtabs button.on .ic{opacity:1}
  .mtabs button.on::before{
    content:"";position:absolute;top:0;left:50%;transform:translateX(-50%);
    width:28px;height:2.5px;border-radius:0 0 3px 3px;background:var(--brand);
  }
  .tabpane{display:none}
  .tabpane.on{display:block}
}
@media(min-width:901px){
  .tabpane{display:block}
}

/* 小屏：数据时间戳回到内容区 */
@media(max-width:760px){
  .mdate{display:block;font-size:11px;color:var(--tx3);margin:6px 3px 0;text-align:right}
}

/* ════════════════════════════════════════════════
   动效
   ════════════════════════════════════════════════ */
@keyframes fadeUp{from{opacity:0;transform:translateY(11px)}to{opacity:1;transform:none}}
@keyframes scanX{0%{transform:translateX(-105%)}100%{transform:translateX(255%)}}
@keyframes sp{to{transform:rotate(360deg)}}
@keyframes pulse{
  0%{box-shadow:0 0 0 0 rgba(14,143,110,.5)}
  70%{box-shadow:0 0 0 8px rgba(14,143,110,0)}
  100%{box-shadow:0 0 0 0 rgba(14,143,110,0)}
}
@keyframes breath{0%,100%{opacity:.55}50%{opacity:1}}

/* 卡片依次浮起：错开的节奏感，是"高级"和"呆板"的分界 */
.tabpane>.card:nth-child(1),.tabpane>.verdict:nth-child(1){animation-delay:0s}
.tabpane>.card:nth-child(2),.tabpane>.deep:nth-child(2){animation-delay:.06s}
.tabpane>.card:nth-child(3){animation-delay:.12s}
.tabpane>.card:nth-child(4){animation-delay:.18s}

@media(max-width:900px){
  /* 手机上砍掉一半动效：宁可稳，不要卡 */
  .deep::after{display:none}
  .card,.verdict,.deep{animation-duration:.34s}
  .tabpane>.card:nth-child(n){animation-delay:0s}
}
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important}
  .fn{opacity:1!important}
}

/* 小屏隐藏次要半句：手机上一行要放得下，不堆三行 */
@media(max-width:560px){.hide-s{display:none}}
