*{box-sizing:border-box;margin:0;padding:0;-webkit-tap-highlight-color:transparent}
:root{
  --bg:#F4F7FC;--card:#fff;--ink:#0F1A2E;--ink2:#5D6B84;--ink3:#94A1B8;
  --line:#E9EEF7;--line2:#F1F5FB;
  --brand:#2F6BFF;--brand-d:#1B4FE0;--brand-l:#EAF0FF;
  --teal:#00BFA5;--teal-l:#E1FAF5;
  --warn:#FF9F1C;--warn-l:#FFF4E2;
  --danger:#FF4D6D;--danger-l:#FFEAF0;
  --ok:#12B886;--ok-l:#E4F9F1;--ok-d:#0E9F6E;
  /* 浅底只用三档（2026-10-31 第三批）：以前页面里散着六种几乎一样的白（F7F9FD / FAFBFD /
     FBFCFE / FCFDFF / FAFCFF / F2F4F8），叠在一起看着脏。现在统一成 surface / surface-2 / hover。 */
  --surface:#FAFBFE;--surface-2:#F3F6FB;--hover:#F4F8FF;
  --purple:#7C5CFF;--purple-l:#F1EDFF;
  --r:18px;--sh:0 1px 2px rgba(19,39,79,.04),0 8px 24px rgba(19,39,79,.06);
  /* 左栏宽度：2026-11-06 先按用户要求从 226 收 60 → 166，试看后觉得太窄，改回 200。
     sidebar / main 的左边距 / 收起把手三处都读这一个值，改宽度只改这里。 */
  --side-w:200px;
}
html,body{height:100%}
body{font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
  background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.5}
.num{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}
/* 数字列一律右对齐（2026-10-31 第三批）：停留 126 / 88 / 201 左对齐时个位对不齐，扫一眼看不出大小关系。 */
th.num,td.num{text-align:right}
td.num .u{font-size:10.5px;color:var(--ink3);margin-left:2px}
svg{display:block}
button,input,select,textarea{font-family:inherit}
a{color:var(--brand);text-decoration:none}

/* ---------- 布局 ---------- */
.sidebar{position:fixed;inset:0 auto 0 0;width:var(--side-w);background:#fff;border-right:1px solid var(--line);
  display:flex;flex-direction:column;padding:18px 12px 14px;z-index:30;transition:transform .2s ease}
.brand{display:flex;align-items:center;gap:10px;padding:4px 8px 18px}
.brand-mark{width:36px;height:36px;border-radius:11px;background:linear-gradient(135deg,var(--brand),var(--teal));
  display:grid;place-items:center;box-shadow:0 6px 16px rgba(47,107,255,.3);flex:none}
.brand-name{font-size:15px;font-weight:700;letter-spacing:.3px}
.brand-sub{font-size:10.5px;color:var(--ink3);letter-spacing:.6px;margin-top:1px}
.nav{display:flex;flex-direction:column;gap:2px;flex:1;overflow-y:auto}
/* 左栏整体收起 / 展开（2026-11-05）：收的是整条导航栏，不是分组。
   收起后 .main 让出 var(--side-w)，屏幕左边缘留一个 20px 的把手（.navtog）负责开合。 */
body.nav-fold .sidebar{transform:translateX(-100%)}
body.nav-fold .main{margin-left:0}
.navtog{position:fixed;left:var(--side-w);top:50%;transform:translate(-50%,-50%);z-index:40;
  width:20px;height:54px;padding:0;border:1px solid var(--line);border-left:0;border-radius:0 10px 10px 0;
  background:#fff;color:#94A3BC;display:grid;place-items:center;cursor:pointer;
  box-shadow:2px 0 10px rgba(23,42,74,.07);transition:left .2s ease,transform .2s ease,color .15s,background .15s}
.navtog:hover{color:var(--brand);background:#F5F9FF;border-color:#D6E2F5}
.navtog svg{transition:transform .2s ease}
body.nav-fold .navtog{left:0;transform:translate(0,-50%)}
body.nav-fold .navtog svg{transform:rotate(180deg)}
.nav-group{display:flex;flex-direction:column;gap:2px}
/* 组与组拉开距离：收起时一排一级目录也是有节奏的分组，不是一个长列表 */
.nav-group + .nav-group{margin-top:7px}
/* 一级目录 = 分组条（2026-11-06 用户定样式）：浅灰条 + 6px 圆角 + 13px/600 + #333，
   展开与折叠同一个底色，只靠右侧箭头方向区分（收起 ▶ 朝右 / 展开 ▼ 朝下）。 */
.nav-label{display:flex;align-items:center;gap:7px;width:100%;font-family:inherit;text-align:left;
  background:#f5f7fa;border:0;border-radius:6px;cursor:pointer;
  font-size:13px;color:#333;padding:10px 10px;letter-spacing:.2px;font-weight:600;
  line-height:19px;transition:background .16s,color .16s}
.nav-label:hover{background:#eef1f6}
.nav-label>span{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nav-ar{flex:none;opacity:.5;transition:transform .16s,opacity .16s}
.nav-group:not(.off) > .nav-label .nav-ar{transform:rotate(90deg);opacity:.8}
.nav-group.off .nav-group-b{display:none}
.nav-group-b{display:flex;flex-direction:column;gap:2px;padding-top:3px}
/* 常驻展开的「常用功能」：标题只是标签，不是折叠开关（2026-11-05）
   hover 跟其他组保持同一档，别让鼠标移上去有「能点」的错觉 */
.nav-pin-h{cursor:default}
.nav-group.nav-pin > .nav-label:hover{background:#eef1f6}
/* 右上角齿轮 → 系统配置面板 */
.gear-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;padding-bottom:14px}
.gear-item{display:flex;align-items:center;gap:9px;padding:11px 12px;border:1px solid var(--line);
  border-radius:11px;background:#fff;cursor:pointer;font-family:inherit;text-align:left;
  font-size:13px;color:var(--ink);transition:border-color .15s,background .15s}
.gear-item:hover{border-color:#CFDCF2;background:#F7FAFF}
.gear-item .ico{flex:none;color:var(--ink3)}
.gear-item:hover .ico{color:var(--brand)}
.gear-t{flex:1;min-width:0;font-weight:600}
.gear-ar{flex:none;opacity:.4}
@media(max-width:760px){.gear-grid{grid-template-columns:1fr}}
/* 二级目录整体右移，与上面的分组条错开一档，形成层级台阶。
   左栏 200 宽后缩进从 12 回到 16（原来 18），层级台阶更明显 */
.nav-group-b > .nav-item{padding-left:16px}
.nav-item{display:flex;align-items:center;gap:9px;padding:13px 10px;border-radius:8px;color:#5D6B84;
  font-size:14px;line-height:20px;cursor:pointer;border:none;background:none;width:100%;text-align:left;
  position:relative;transition:background .16s,color .16s}
.nav-item .ico{flex:none}
/* 收窄后长名字（带营数据总览 / 志愿者承担记录管理）会撑出去，一律省略号 */
.nav-item span:not(.nav-badge){flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nav-item:hover{background:#f7f9fc;color:#0F1A2E}
/* 选中态（2026-11-06 用户定样式）：不要整块浅蓝，改左侧 3px 蓝条 + 蓝字加粗 + 极浅蓝底 */
.nav-item.on{background:#f0f7ff;color:#1890ff;font-weight:600}
.nav-item.on::before{content:'';position:absolute;left:0;top:50%;transform:translateY(-50%);
  width:3px;height:18px;border-radius:0 2px 2px 0;background:#1890ff}
/* 待审批红点：请假菜单右侧的数字角标 */
.nav-badge{margin-left:auto;display:inline-flex;align-items:center;justify-content:center;min-width:18px;height:18px;
  padding:0 5px;border-radius:9px;background:var(--danger);color:#fff;font-size:10.5px;font-weight:700;
  font-variant-numeric:tabular-nums;line-height:1}
.nav-item.on .nav-badge{box-shadow:0 0 0 2px #fff}
.side-foot{border-top:1px solid var(--line);padding-top:12px;margin-top:8px;flex:none}
.side-ver{margin-top:8px;text-align:center;font-size:10.5px;color:#AEB9CB;letter-spacing:.4px;
  font-variant-numeric:tabular-nums;user-select:all}
.who{display:flex;align-items:center;gap:9px;padding:8px;border-radius:12px;background:var(--line2);cursor:pointer}
.who:hover{background:#EDF2FA}
.avatar{width:32px;height:32px;border-radius:50%;display:grid;place-items:center;font-size:12px;font-weight:700;
  color:#fff;background:linear-gradient(135deg,#2F6BFF,#7C5CFF);flex:none}
.who-name{font-size:12.5px;font-weight:600;line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.who-role{font-size:10.5px;color:var(--ink3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

.main{margin-left:var(--side-w);min-height:100vh;padding:0 22px 40px;max-width:1560px;transition:margin-left .2s ease}
.topbar{position:sticky;top:0;z-index:20;background:rgba(244,247,252,.9);backdrop-filter:blur(14px);
  padding:16px 0 12px;display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.page-title{font-size:19px;font-weight:700;letter-spacing:-.2px}
.page-sub{font-size:12px;color:var(--ink3);margin-top:2px}
.spacer{flex:1}
.seg{display:inline-flex;background:#fff;border:1px solid var(--line);border-radius:11px;padding:3px;gap:2px}
.seg button{border:none;background:none;font-size:12.5px;color:var(--ink2);padding:6px 12px;border-radius:8px;cursor:pointer;font-weight:500}
.seg button.on{background:var(--brand);color:#fff;font-weight:600;box-shadow:0 4px 10px rgba(47,107,255,.25)}
.icon-btn{width:36px;height:36px;border-radius:11px;border:1px solid var(--line);background:#fff;display:grid;
  place-items:center;cursor:pointer;position:relative}
.icon-btn:hover{border-color:#CFDCF2}
.chip{display:inline-flex;align-items:center;gap:6px;padding:7px 13px;border-radius:999px;background:#fff;
  border:1px solid var(--line);font-size:12.5px;color:var(--ink2);cursor:pointer;white-space:nowrap;font-weight:500}
.chip:hover{border-color:#CFDCF2;color:var(--ink)}
.chip.on{background:var(--ink);color:#fff;border-color:var(--ink);font-weight:600}
.chip .cdot{width:7px;height:7px;border-radius:50%}

/* ---------- 卡片 ---------- */
.card{background:var(--card);border-radius:var(--r);box-shadow:var(--sh);padding:18px;border:1px solid rgba(233,238,247,.7)}
.card-h{display:flex;align-items:center;gap:8px;margin-bottom:14px;flex-wrap:wrap}
.card-t{font-size:14px;font-weight:700;letter-spacing:-.1px}
.card-tip{font-size:11px;color:var(--ink3);font-weight:400;margin-left:auto;display:flex;align-items:center;gap:4px}
.grid{display:grid;gap:14px}
.grid>*{min-width:0}
.g4{grid-template-columns:repeat(4,1fr)}
.g3{grid-template-columns:repeat(3,1fr)}
.g2{grid-template-columns:repeat(2,1fr)}
.g23{grid-template-columns:1.55fr 1fr}
.g32{grid-template-columns:1fr 1.5fr}
.section-gap{margin-top:14px}

/* ---------- KPI ---------- */
.kpi{position:relative;overflow:hidden}
.kpi::after{content:"";position:absolute;right:-28px;top:-28px;width:96px;height:96px;border-radius:50%;
  background:radial-gradient(circle,rgba(47,107,255,.09),transparent 70%)}
.kpi-top{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--ink2);font-weight:500}
.kpi-ico{width:24px;height:24px;border-radius:8px;display:grid;place-items:center;flex:none}
.kpi-val{display:flex;align-items:baseline;gap:3px;margin:10px 0 2px}
.kpi-num{font-size:31px;font-weight:800;letter-spacing:-1.4px;line-height:1}
.kpi-unit{font-size:13px;font-weight:600;color:var(--ink2)}
.kpi-foot{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--ink3);margin-top:9px;flex-wrap:wrap}
.trend{display:inline-flex;align-items:center;gap:3px;font-weight:700;font-size:11.5px;padding:2px 7px;border-radius:7px}
.trend.up{color:var(--ok-d);background:var(--ok-l)}
.trend.down{color:#E0344F;background:var(--danger-l)}
.trend.flat{color:var(--ink2);background:var(--line2)}

/* ---------- 表格 ---------- */
.table-wrap{overflow-x:auto;margin:0 -6px;padding:0 6px}
table{width:100%;border-collapse:collapse;font-size:13px}
th{text-align:left;font-size:11.5px;color:var(--ink3);font-weight:600;padding:9px 10px;border-bottom:1px solid var(--line);
  white-space:nowrap;letter-spacing:.2px}
td{padding:11px 10px;border-bottom:1px solid var(--line2);white-space:nowrap;vertical-align:middle}
tbody tr:hover{background:var(--hover)}
tbody tr:last-child td{border-bottom:none}
.cell-name{display:flex;align-items:center;gap:9px}
.av-sm{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;font-size:11px;font-weight:700;color:#fff;flex:none}

/* ---------- 限高表格：只露 N 行，超出滚动，表头吸附 ---------- */
/* 用法：<div class="table-wrap table-scroll" style="--rows:10;--rh:50px;--hh:42px"> */
.table-scroll{
  max-height:calc(var(--rows,10) * var(--rh,50px) + var(--hh,42px));
  overflow-y:auto;overflow-x:auto;
  scrollbar-width:thin;
  border-radius:0 0 10px 10px;
}
.table-scroll::-webkit-scrollbar{width:8px;height:8px}
.table-scroll::-webkit-scrollbar-thumb{background:#DCE4F0;border-radius:4px}
.table-scroll::-webkit-scrollbar-thumb:hover{background:#C6D2E4}
/* 表头（含多行表头）整体吸顶，滚动时列名一直看得见 */
.table-scroll thead{position:sticky;top:0;z-index:2}
.table-scroll thead th{background:#fff;box-shadow:inset 0 -1px 0 var(--line)}

/* ---------- 徽章 ---------- */
.tag{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:600;padding:3px 8px;border-radius:7px;white-space:nowrap}
.t-ok{background:var(--ok-l);color:var(--ok-d)}
.t-part{background:var(--warn-l);color:#C97B05}
.t-miss{background:var(--danger-l);color:#E0344F}
.t-info{background:var(--brand-l);color:var(--brand-d)}
.t-gray{background:var(--line2);color:var(--ink2)}
.t-teal{background:var(--teal-l);color:#00937F}
.t-admin{background:linear-gradient(135deg,#FFF3E0,#FFE7CC);color:#B25E00;font-weight:600}
.t-off{background:var(--surface-2);color:#98A2B3}
.t-pend{background:var(--warn-l);color:#8A5A05;border:1px solid #FFE4BE}
.t-plain{background:transparent;color:#A9B5C8;font-weight:500}
.t-new{background:#FFF0F6;color:#E0344F;border:1px solid #FFD6E4}

/* ---------- 导入页顶部操作条：确认按钮吸顶，滚动时一直看得见 ---------- */
.att-actionbar{
  position:sticky; top:0; z-index:30;
  display:flex; gap:9px; flex-wrap:wrap; align-items:center;
  margin-top:14px; padding:11px 14px;
  background:rgba(255,255,255,.94);
  backdrop-filter:saturate(180%) blur(8px);
  border:1px solid var(--line2); border-radius:14px;
  box-shadow:0 4px 16px rgba(31,54,92,.07);
}

/* ---------- 名单管理：筛选条吸顶，滚到底部也能改条件 ---------- */
.roster-bar{
  position:sticky; top:calc(var(--topbar-h,64px) - 2px); z-index:18;
  display:flex; gap:8px; flex-wrap:wrap; align-items:center;
  margin:0 -8px 12px; padding:10px 8px;
  background:rgba(255,255,255,.96);
  backdrop-filter:blur(10px);
  border-bottom:1px solid var(--line2);
  box-shadow:0 8px 14px -12px rgba(19,39,79,.5);
}

/* ---------- 拉取会议用户ID 预览弹窗（2026-10-30） ---------- */
.tp-sum{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0 8px}
.tp-k{font-size:11.5px;line-height:22px;padding:0 9px;border-radius:7px;background:var(--surface-2);
  color:var(--ink2);border:1px solid #E4E9F2;white-space:nowrap}
.tp-k b{font-size:12.5px;margin-left:2px}
.tp-k.ok{background:#E6F7F0;color:#0B8A63;border-color:#BDEBD7}
.tp-k.warn{background:#FFF6E5;color:#9A6400;border-color:#FFE2B0}
.tp-k.bad{background:#FDEEF0;color:#C2334D;border-color:#F7CFD6}
.tp-body{max-height:46vh;overflow:auto;border:1px solid var(--line2);border-radius:10px;padding:6px 10px;background:var(--surface)}
.tp-h{font-size:12px;font-weight:700;color:var(--ink2);padding:8px 0 4px;position:sticky;top:0;background:var(--surface)}
.tp-h b{color:var(--ink);margin:0 2px}
.tp-row{font-size:11.5px;line-height:1.9;color:var(--ink2);border-top:1px dashed #EDF1F7;padding:1px 0}
.tp-row code{font-size:11px;background:var(--surface-2);padding:1px 5px;border-radius:5px;color:var(--ink)}
.tp-dim{color:var(--ink3)}
.tp-arrow{color:var(--ink3);margin:0 2px}
.tp-err{font-size:11.5px;color:#C2334D;background:#FDEEF0;border:1px solid #F7CFD6;
  border-radius:8px;padding:7px 10px;line-height:1.7;margin-top:6px}

/* ---------- 初始密码提醒条 ---------- */
.pwd-banner{
  display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  margin-bottom:14px; padding:10px 14px;
  border-radius:14px; border:1px solid #FFE4BE;
  background:linear-gradient(135deg,#FFF8EC,#FFFDF7);
  color:#8A5A05; font-size:12.5px;
}
.pwd-banner-t{font-weight:700;color:#7A4E00}
.pwd-banner-d{color:#9A6B12}
.pwd-banner .btn{background:#fff;border-color:#F2D9AE;color:#8A5A05}
.pwd-banner .btn:hover{background:#FFF6E7;border-color:#E9C68E;color:#7A4E00}

/* ---------- 周明细对勾 ---------- */
.wk-ok{display:inline-flex;align-items:center;justify-content:center;width:17px;height:17px;border-radius:5px;
  background:var(--ok);color:#fff;font-size:11px;font-weight:700;line-height:1}
.wk-part{display:inline-flex;align-items:center;justify-content:center;width:17px;height:17px;border-radius:5px;
  background:var(--warn);color:#fff;font-size:11px;font-weight:700;line-height:1}
.wk-no{display:inline-flex;align-items:center;justify-content:center;width:17px;height:17px;border-radius:5px;
  background:#FFE3E8;color:#E0344F;font-size:11px;font-weight:700;line-height:1}

/* ---------- 进度条 ---------- */
.bar-track{height:7px;border-radius:99px;background:var(--line2);overflow:hidden;position:relative}
.bar-fill{display:block;height:100%;border-radius:99px;transition:width .5s;min-width:3px}

/* ---------- 排行 ---------- */
/* 团队排行只露 8 行，超出部分滚动；右侧「需要关注」用同一个高度变量，两栏始终齐平 */
.rank-list{max-height:var(--list-h,296px);overflow-y:auto;padding-right:4px;scrollbar-width:thin}
.rank-list::-webkit-scrollbar{width:5px}
.rank-list::-webkit-scrollbar-thumb{background:#DCE4F0;border-radius:3px}
.rank-row{display:flex;align-items:center;gap:10px;padding:9px 0}
.rank-i{width:19px;text-align:center;font-size:11.5px;font-weight:700;color:var(--ink3);flex:none}
/* 团队名不换行：名字长短不一，换行会把行高撑乱；超长用省略号，悬停看全名 */
.rank-n{flex:0 0 auto;max-width:136px;font-size:12.5px;font-weight:600;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rank-b{flex:1;min-width:40px}
.rank-v{width:44px;text-align:right;font-size:12.5px;font-weight:700;flex:none}

/* ---------- 关注 ---------- */
.alert-row{display:flex;align-items:center;gap:10px;padding:10px;border-radius:12px;transition:.15s;cursor:pointer}
.alert-row:hover{background:var(--hover)}
.alert-line{width:3px;height:32px;border-radius:2px;flex:none}
.alert-main{flex:1;min-width:0}
.alert-name{font-size:13px;font-weight:600;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.alert-desc{font-size:11.5px;color:var(--ink3);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ---------- 热力 ---------- */
.heat{display:grid;grid-template-columns:repeat(14,1fr);gap:5px}
.heat-cell{aspect-ratio:1;border-radius:6px;cursor:pointer;transition:transform .12s}
.heat-cell:hover{outline:2px solid rgba(47,107,255,.35);outline-offset:1px;transform:translateY(-1px)}
.heat-axis{display:grid;gap:5px;margin-top:6px;font-size:9.5px;color:#B4BFD1;text-align:center}
.heat-axis span{overflow:hidden;white-space:nowrap}
.heat-legend{display:flex;align-items:center;gap:4px;margin-top:10px;font-size:10.5px;color:var(--ink3)}
.heat-legend i{width:11px;height:11px;border-radius:3px;display:inline-block}
.alert-list{max-height:var(--list-h,296px);overflow-y:auto;padding-right:3px;scrollbar-width:thin;
  -webkit-mask-image:linear-gradient(to bottom,#000 calc(100% - 18px),transparent);
  mask-image:linear-gradient(to bottom,#000 calc(100% - 18px),transparent)}
.alert-list::-webkit-scrollbar{width:5px}
.alert-list::-webkit-scrollbar-thumb{background:#DCE4F0;border-radius:3px}

/* ---------- 参会条 ---------- */
/* 只露 6 行，超出滚动；打开时自动滚到最新的记录 */
.att-list{max-height:calc(6 * var(--att-rh,48px));overflow-y:auto;padding-right:5px;scrollbar-width:thin}
.att-list::-webkit-scrollbar{width:5px}
.att-list::-webkit-scrollbar-thumb{background:#DCE4F0;border-radius:3px}
.att-row{display:grid;grid-template-columns:80px 1fr 86px;gap:9px;align-items:center;padding:8px 0;border-bottom:1px solid var(--line2)}
.att-row:last-child{border-bottom:none}
.att-date{font-size:11.5px;color:var(--ink2);line-height:1.35}
.att-date b{display:block;font-size:12px;color:var(--ink);font-weight:600}
.att-track{height:16px;border-radius:6px;background:var(--line2);overflow:hidden;position:relative}
.att-fill{height:100%;border-radius:6px;position:relative}
.att-fill::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(255,255,255,.28),transparent 45%)}
.att-legend{position:absolute;top:0;bottom:0;left:50%;width:1px;border-left:1px dashed rgba(255,255,255,.85)}

/* ---------- 日历 ---------- */
.cal{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.cal-h{text-align:center;font-size:11px;color:var(--ink3);padding:4px 0;font-weight:600}
.cal-d{aspect-ratio:1;border-radius:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:2px;font-size:12px;color:var(--ink2);background:#fff;border:1px solid var(--line2);position:relative;cursor:pointer}
.cal-d.empty{background:transparent;border:none;cursor:default}
.cal-d.today{border-color:var(--brand);color:var(--brand);font-weight:700;background:var(--brand-l)}
.cal-d.meet{background:#F7FAFF;border-color:#DCE8FF}
.cal-d.off{background:repeating-linear-gradient(45deg,var(--surface),var(--surface) 4px,var(--surface-2) 4px,var(--surface-2) 8px);color:#C2CCDC}

/* ---------- 表单 ---------- */
.field{margin-bottom:13px}
.field label{display:block;font-size:11.5px;color:var(--ink2);font-weight:600;margin-bottom:6px}
.input,select.input,textarea.input{width:100%;height:42px;border-radius:12px;border:1.5px solid var(--line);background:var(--surface);
  padding:0 13px;font-size:13.5px;color:var(--ink);outline:none;transition:.16s}
textarea.input{height:auto;padding:10px 13px;line-height:1.6;resize:vertical}
.input:focus{border-color:var(--brand);background:#fff;box-shadow:0 0 0 4px rgba(47,107,255,.1)}
select.input{appearance:none;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%2394A1B8' stroke-width='3'><path d='M6 9l6 6 6-6'/></svg>");
  background-repeat:no-repeat;background-position:right 12px center;padding-right:32px}
.btn{height:40px;padding:0 16px;border-radius:11px;border:1.5px solid var(--line);background:#fff;font-size:13px;
  font-weight:600;color:var(--ink2);cursor:pointer;display:inline-flex;align-items:center;gap:6px;transition:.15s}
.btn:hover{border-color:#CFDCF2;color:var(--ink)}
/* 按钮里的图标必须固定尺寸：SVG 只有 viewBox、没有 width/height 时，
   在 flex 里会按默认 300×150 撑开，把按钮顶成一个大方块、文字被挤歪。
   这条是兜底 —— 个别地方有更细的规则（.td-addbtn svg 等）时以那些为准。 */
.btn>svg{width:14px;height:14px;flex:none}
.btn-primary{background:linear-gradient(135deg,#2F6BFF,#4B7CFF);color:#fff;border:none;box-shadow:0 6px 16px rgba(47,107,255,.28)}
/* 审批按钮：通过 = 绿，驳回 = 红，都做成浅底描边，避免一屏全是重色 */
.btn-ok{background:var(--ok-l);border-color:#CBEFE2;color:#0B7A5C;font-weight:600}
.btn-ok:hover{background:#D6F4E7;border-color:#B3E8D5;color:#0B7A5C}
.btn-no{background:var(--danger-l);border-color:#FFD3DC;color:#C0243C;font-weight:600}
.btn-no:hover{background:#FDDCE3;border-color:#FFBCC8;color:#C0243C}
.btn-primary:hover{color:#fff;opacity:.94}
.btn-danger{color:#E0344F;border-color:#FFD3DC}
.btn-sm{height:30px;padding:0 11px;font-size:12px;border-radius:9px}
.btn:disabled{opacity:.5;cursor:not-allowed}

/* ---------- 弹层 ---------- */
.modal{position:fixed;inset:0;background:rgba(15,26,46,.4);backdrop-filter:blur(3px);z-index:70;display:none;
  align-items:center;justify-content:center;padding:18px}
.modal.show{display:flex}
.modal-box{background:#fff;border-radius:20px;padding:22px;width:100%;max-width:460px;box-shadow:0 24px 60px rgba(19,39,79,.24);
  max-height:86vh;overflow:auto}
.modal-title{font-size:16px;font-weight:700;margin-bottom:4px}
.modal-sub{font-size:12px;color:var(--ink3);margin-bottom:16px}
.modal-foot{display:flex;gap:9px;justify-content:flex-end;margin-top:18px;flex-wrap:wrap;row-gap:9px}
/* 按钮文字不许折行（折了会被 40px 的行高切掉半截），放不下就整颗换行 */
.modal-foot .btn{white-space:nowrap}

/* ---------- 弹窗分块卡片（2026-11-03）----------
 * 弹窗里数据一多（一个人名下挂着学习/承担/证书/培训好几张表），一个模块一张卡：
 * 标题栏浅底粗体 + 小图标 + 条数，点标题栏折叠；表头再弱一档，层级拉开。
 * 滚动只有一条：整个弹窗滚（.modal-box 自带 overflow:auto），
 * ⚠️ 卡里的表格不要再写 max-height / overflow（那就又变成多区域各自滚动了）。
 * 用法（结构由 app.js 的 modalSec() 生成，不手写）：
 *   modalSec({icon:'<path .../>', title:'学习记录', count:12, body:'<table>…</table>'})
 *   折叠由 openModal 自动绑定 bindMSec()，各页面不用管。
 */
.modal-box.modal-wide{max-width:960px}
.m-sec{border:1px solid var(--line);border-radius:15px;background:#fff;margin-top:16px}
.m-sec:first-child{margin-top:0}
.m-sec-h{display:flex;align-items:center;gap:9px;padding:11px 15px;background:var(--surface);
  border-bottom:1px solid var(--line);border-radius:14px 14px 0 0;cursor:pointer;user-select:none;transition:background .15s}
.m-sec-h:hover{background:var(--hover)}
.m-sec-i{width:22px;height:22px;border-radius:7px;background:var(--brand-l);color:var(--brand-d);
  display:grid;place-items:center;flex:none}
.m-sec-i svg{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.m-sec-t{font-size:13.5px;font-weight:700;color:var(--ink);letter-spacing:.1px}
.m-sec-n{font-size:11px;font-weight:600;color:var(--ink2);background:#fff;border:1px solid var(--line);
  padding:1px 8px;border-radius:20px;font-variant-numeric:tabular-nums}
.m-sec-g{flex:1}
.m-sec-c{width:18px;height:18px;color:var(--ink3);display:grid;place-items:center;flex:none;transition:transform .18s}
.m-sec-c svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}
.m-sec-b{padding:2px 15px 10px}
.m-sec-b .table-wrap{margin:0;padding:0}
/* 卡内表头：比模块标题弱一档（小号、灰、大写间距），一眼分得清“这是块”和“这是列” */
.m-sec-b table{font-size:12.5px}
.m-sec-b thead th{font-size:11px;font-weight:500;color:var(--ink3);letter-spacing:.5px;padding:9px 10px}
.m-sec-b tbody td{font-size:12.5px}
/* 折叠态 */
.m-sec.off .m-sec-b{display:none}
.m-sec.off .m-sec-h{border-bottom:none;border-radius:14px}
.m-sec.off .m-sec-c{transform:rotate(-90deg)}
/* 卡内空状态不要再撑出一大块 */
.m-sec-b .empty{padding:18px 0}

/* ---------- 标签页 ---------- */
.tabs{display:flex;gap:4px;background:var(--line2);border-radius:12px;padding:3px;margin-bottom:16px;overflow-x:auto}
.tabs button{flex:1;border:none;background:none;font-size:13px;color:var(--ink2);padding:8px 12px;border-radius:9px;
  cursor:pointer;font-weight:500;white-space:nowrap}
.tabs button.on{background:#fff;color:var(--ink);font-weight:700;box-shadow:0 2px 8px rgba(19,39,79,.08)}

/* ---------- 上传 ---------- */
.drop{border:2px dashed #D3E0F5;border-radius:16px;padding:26px 16px;text-align:center;background:#FBFCFF;cursor:pointer;transition:.18s}
.drop:hover,.drop.over{border-color:var(--brand);background:var(--hover)}
.drop-ico{width:46px;height:46px;border-radius:14px;background:var(--brand-l);display:grid;place-items:center;margin:0 auto 10px}
.drop-t{font-size:13.5px;font-weight:600}
.drop-s{font-size:11.5px;color:var(--ink3);margin-top:4px;line-height:1.7}

/* ---------- 提示条 ---------- */
.note{display:flex;gap:9px;padding:11px 13px;border-radius:12px;font-size:12px;line-height:1.65;background:var(--brand-l);color:#2B4C9B}
.note.warn{background:var(--warn-l);color:#8A5A05}
.note.ok{background:var(--ok-l);color:#0B7A5C}
.note.danger{background:var(--danger-l);color:#B3243E}

/* ---------- 空态 ---------- */
.empty{text-align:center;padding:34px 12px;color:var(--ink3);font-size:12.5px;line-height:1.9}
.empty-ico{width:48px;height:48px;border-radius:15px;background:var(--line2);display:grid;place-items:center;margin:0 auto 10px}

/* ---------- 登录 ---------- */
.login-wrap{position:fixed;inset:0;z-index:60;display:none;overflow:auto;
  background:linear-gradient(135deg,#F0F6FF 0%,#F7FBFF 40%,#EFFCF8 100%)}
.login-wrap.show{display:block}
.login-blob{position:absolute;border-radius:50%;filter:blur(60px);opacity:.55}
.login-inner{min-height:100%;display:flex;align-items:center;justify-content:center;padding:32px 18px;position:relative;z-index:2}
.login-card{width:100%;max-width:392px;background:rgba(255,255,255,.94);backdrop-filter:blur(20px);border-radius:24px;
  padding:30px 26px 26px;box-shadow:0 20px 60px rgba(19,39,79,.13);border:1px solid rgba(255,255,255,.9)}
.login-logo{display:flex;flex-direction:column;align-items:center;gap:12px;margin-bottom:22px}
.login-title{font-size:20px;font-weight:800;letter-spacing:-.4px}
.login-sub{font-size:12px;color:var(--ink3);margin-top:4px}
.login-note{font-size:11px;color:var(--ink3);margin-top:14px;text-align:center;line-height:1.8}

/* ---------- 环形 ---------- */
.ring-wrap{position:relative;display:inline-grid;place-items:center}
.ring-val{position:absolute;inset:0;display:grid;place-items:center;align-content:center;text-align:center;line-height:1.1}
.ring-num{font-size:17px;font-weight:800;letter-spacing:-.5px}
.ring-cap{font-size:9.5px;color:var(--ink3);margin-top:2px;white-space:nowrap}

/* ---------- 其他 ---------- */
.breadcrumb{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--ink3);flex-wrap:wrap}
.breadcrumb b{color:var(--ink);font-weight:600}
.breadcrumb .sep{opacity:.5}
.profile{display:flex;gap:16px;align-items:center;flex-wrap:wrap}
.pf-av{width:62px;height:62px;border-radius:20px;display:grid;place-items:center;font-size:21px;font-weight:800;color:#fff;flex:none}
.pf-name{font-size:20px;font-weight:800;letter-spacing:-.3px;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.pf-meta{font-size:12px;color:var(--ink3);margin-top:5px;display:flex;gap:12px;flex-wrap:wrap}
.pf-meta span{display:inline-flex;align-items:center;gap:4px}
.mini-metric{display:flex;flex-direction:column;align-items:center;gap:7px;flex:1;min-width:0}
.mm-label{font-size:11.5px;color:var(--ink2);text-align:center}
.suggest{display:flex;gap:11px;padding:12px;border-radius:13px;background:#FBFCFF;border:1px solid var(--line2)}
.sg-ico{width:32px;height:32px;border-radius:10px;display:grid;place-items:center;flex:none}
.sg-t{font-size:12.5px;font-weight:700;margin-bottom:3px}
.sg-d{font-size:11.5px;color:var(--ink2);line-height:1.6}
hr.soft{border:none;border-top:1px solid var(--line2);margin:14px 0}
.toast{position:fixed;left:50%;bottom:88px;transform:translateX(-50%) translateY(20px);background:#0F1A2E;color:#fff;
  padding:10px 18px;border-radius:12px;font-size:12.5px;opacity:0;pointer-events:none;transition:.25s;z-index:99;
  box-shadow:0 10px 30px rgba(0,0,0,.25);max-width:86vw;text-align:center}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
.view{display:none;animation:fade .28s ease}
.view.on{display:block}
@keyframes fade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.loading{display:grid;place-items:center;padding:50px;color:var(--ink3);font-size:12.5px}
.spin{width:26px;height:26px;border:2.5px solid var(--line);border-top-color:var(--brand);border-radius:50%;
  animation:sp .8s linear infinite;margin-bottom:10px}
@keyframes sp{to{transform:rotate(360deg)}}

/* ---------- 响应式 ---------- */
@media(max-width:1180px){.g4{grid-template-columns:repeat(2,1fr)}.g23,.g32{grid-template-columns:1fr}}
@media(max-width:900px){
  .sidebar{inset:auto 0 0 0;width:auto;height:64px;flex-direction:row;align-items:center;padding:5px 0;
    border-right:none;border-top:1px solid var(--line);background:rgba(255,255,255,.97);backdrop-filter:blur(16px);
    box-shadow:0 -4px 20px rgba(19,39,79,.06);overflow-x:auto;overflow-y:hidden}
  .brand,.side-foot,.nav-label,.navtog{display:none}
  /* 窄屏底部横条没有「收起左栏」这回事，桌面端记下的收起状态要在这里失效 */
  body.nav-fold .sidebar{transform:none}
  /* 窄屏是底部横条，分组不再折叠，所有入口平铺 */
  .nav-group,.nav-group-b,.nav-group.off .nav-group-b{display:contents}
  .nav{flex-direction:row;gap:2px;overflow:visible;flex:none;padding:0 4px}
  .nav-item{flex:0 0 62px;min-width:62px;flex-direction:column;gap:3px;padding:6px 2px;font-size:10px;
    line-height:1.2;
    border-radius:10px;justify-content:center;text-align:center;align-items:center}
  /* 底部条上不分层级，取消桌面端的二级左移 */
  .nav-group-b > .nav-item{padding:6px 2px}
  /* 底部条放不下省略号，文字按两行展示 */
  .nav-item span:not(.nav-badge){flex:none;overflow:visible;white-space:normal;text-overflow:clip}
  .nav-item.on{box-shadow:none;background:transparent;color:var(--brand)}
  /* 桌面端的左侧 3px 蓝条在底部横条上没有意义 */
  .nav-item.on::before{display:none}
  .nav-item.on .ico{background:var(--brand-l);border-radius:9px;padding:3px}
  .ico{padding:3px;border-radius:9px}
  .main{margin-left:0;padding:0 13px 84px;overflow-x:clip}
  .topbar{padding:11px 0 9px;gap:8px;flex-wrap:nowrap}
  .topbar>div:first-child{min-width:0;flex:1}
  .page-title{font-size:17px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .page-sub{font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .topbar .spacer{display:none}
  .topbar .seg button{padding:6px 9px;font-size:12px}
  .card{padding:14px;border-radius:16px}
  .g4,.g3,.g2{grid-template-columns:1fr}
  .g4.keep2{grid-template-columns:repeat(2,1fr)}
  #kpiRow{grid-template-columns:repeat(2,1fr);gap:10px}
  #kpiRow .card{padding:12px}
  #kpiRow .kpi-num{font-size:23px;letter-spacing:-.8px}
  #kpiRow .kpi-foot{font-size:10.5px}
  #kpiRow .ring-wrap{width:30px!important;height:30px!important}
  #kpiRow .ring-wrap svg{width:30px;height:30px}
  .heat{grid-template-columns:repeat(7,1fr)}
  .att-row{grid-template-columns:66px 1fr 74px;gap:7px}
  .toast{bottom:78px}
  .hide-sm{display:none!important}
  /* 筛选条在窄屏压成一行横滑，吸顶时只占 ~54px，不挡内容 */
  .roster-bar{flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;padding:8px 6px;gap:6px;
    scrollbar-width:none;-webkit-overflow-scrolling:touch}
  .roster-bar::-webkit-scrollbar{display:none}
  .roster-bar .input{flex:0 0 auto}
  .roster-bar #rosterQ{width:132px!important}
  .roster-bar #rosterProj{width:112px!important}
  .roster-bar #rosterRole{width:124px!important}
  .roster-bar label{white-space:nowrap}
  .roster-bar .btn{flex:0 0 auto}
  .pwd-banner{padding:9px 11px;font-size:11.5px;gap:8px}
  .pwd-banner-d{font-size:11px}
}

/* ================= 负责人周报 ================= */
.rep-bar{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.rep-dates{display:flex;align-items:center;gap:6px;font-size:11.5px;color:var(--ink3)}
.rep-dates .input{width:auto;padding:6px 8px;font-size:12px}
.rep-kpi{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.dlt{display:inline-flex;align-items:center;gap:3px;font-size:10.5px;font-weight:800;
  padding:1.5px 6px;border-radius:6px;letter-spacing:.2px}
.dlt.up{color:#0B9C82;background:#E4F9F1}
.dlt.down{color:#E0344F;background:#FDECEF}
.dlt.flat{color:#7A879C;background:#F1F5FB;font-weight:600}
.rep-concl{display:flex;flex-direction:column;gap:10px;margin:0;padding:0}
.rep-concl li{list-style:none;display:flex;gap:9px;font-size:12.5px;line-height:1.7;color:var(--ink2)}
.rep-concl li b{color:var(--ink)}
.rep-concl .dot{width:6px;height:6px;border-radius:50%;margin-top:8px;flex:0 0 6px}
@media (max-width:1180px){
  .rep-kpi{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:900px){
  .rep-bar{gap:8px}
  .rep-dates{flex:1 1 100%}
  .rep-dates .input{flex:1;min-width:0}
  .rep-kpi{grid-template-columns:repeat(2,1fr);gap:10px}
  .rep-kpi .card{padding:12px!important}
  .rep-kpi .num{font-size:21px!important}
  .rep-concl li{font-size:12px}
}

/* ================= 数据导出 ================= */
.ex-two{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-items:start}
/* 表格内容 nowrap，grid 子项默认 min-width:auto 会把整页撑出横向滚动条 */
.ex-two>*{min-width:0}
.ex-two>.card{min-width:0;overflow:hidden}
@media (max-width:1080px){.ex-two{grid-template-columns:1fr}}
.ex-kpi{display:flex;gap:8px;flex-wrap:wrap;margin:2px 0 14px}
.ex-kpi>div{background:var(--line2);border-radius:10px;padding:8px 12px;min-width:92px}
.ex-kpi b{display:block;font-size:18px;line-height:23px;letter-spacing:-.4px;font-variant-numeric:tabular-nums}
.ex-kpi span{display:block;line-height:15px}
.ex-tbl::-webkit-scrollbar{width:8px;height:8px}
.ex-tbl::-webkit-scrollbar-thumb{background:#D7E0EF;border-radius:8px}
.ex-tbl::-webkit-scrollbar-thumb:hover{background:#C2CFE4}
.ex-tbl::-webkit-scrollbar-track{background:transparent}
.ex-kpi span{font-size:10.5px;color:var(--ink3)}
.ex-list{max-height:186px;overflow:auto;border:1px solid var(--line);border-radius:11px;padding:5px;background:#fff}
.ex-m{display:flex;align-items:center;gap:7px;font-size:12.5px;padding:5px 8px;border-radius:8px;cursor:pointer;margin:0}
.ex-m:hover{background:var(--line2)}
.ex-m input{width:14px;height:14px;accent-color:var(--brand);flex:none;margin:0}
.ex-m .ex-sub{color:var(--ink3);font-size:10.5px;margin-left:auto;white-space:nowrap}
.ex-tbl{max-height:330px;overflow:auto;border:1px solid var(--line);border-radius:11px}
.ex-tbl table{font-size:11.5px}
.ex-tbl th{position:sticky;top:0;background:#fff;z-index:1;padding:7px 8px;white-space:nowrap}
.ex-tbl td{padding:7px 8px;font-size:12px}
.ex-note{font-size:11px;color:var(--ink3);line-height:1.75;margin-top:10px}
.ex-note b{color:var(--ink2)}

/* 导出页的筛选条：窄屏别把「近 7 天」挤成两行，改成整条横向滚动 */
#v-export .seg{max-width:100%;overflow-x:auto;overflow-y:hidden;scrollbar-width:none}
#v-export .seg::-webkit-scrollbar{display:none}
#v-export .seg button{white-space:nowrap;flex:none}
#v-export .rep-bar{row-gap:9px}
@media (max-width:900px){
  #v-export .ex-kpi>div{flex:1 1 44%;min-width:0}
  #v-export .ex-kpi b{font-size:17px}
  #v-export .rep-dates{width:100%}
  #v-export .rep-dates .input{flex:1;min-width:0}
}

/* 档案页「回到我的档案」：窄屏时独占一行，别和下拉挤在一起 */
@media (max-width:720px){
  #v-person .pf-back{width:100%;margin:0}
}

/* ================= 课表查看（数据分析） ================= */
/* 2026-10-31 定稿：左日历 / 右当日面板；本场明细回到页面底部通栏（不再进右栏）。
   右栏只装当日面板，不需要 1.22fr 那么宽，比例放回接近对半，日历格子也宽敞了。 */
.calpage{display:grid;grid-template-columns:1.08fr 1fr;gap:14px;align-items:start}
.calpage>*{min-width:0}
.cal2{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}
.cal2>*{min-width:0}
.cal2h{text-align:center;font-size:11px;color:var(--ink3);font-weight:600;padding:2px 0 4px}
.dcell{min-height:60px;border-radius:11px;border:1px solid var(--line2);background:#fff;padding:5px 6px;overflow:hidden;
  display:flex;flex-direction:column;gap:5px;cursor:pointer;position:relative;transition:.15s;text-align:left}
.dcell:hover{border-color:#CFDCF2;box-shadow:0 4px 14px rgba(19,39,79,.07)}
.dcell.empty{background:transparent;border:none;cursor:default;box-shadow:none}
.dcell.today{border-color:#BBD3FF;background:linear-gradient(180deg,var(--hover),#fff)}
.dcell.sel{border-color:var(--brand);box-shadow:0 0 0 3px rgba(47,107,255,.15)}
.dcell.off{background:repeating-linear-gradient(45deg,var(--surface),var(--surface) 5px,var(--surface-2) 5px,var(--surface-2) 10px)}
.dnum{font-size:12px;font-weight:500;color:var(--ink2);line-height:1;display:flex;align-items:center;gap:4px}
.dcell.today .dnum{color:var(--brand)}
.dnum .tdy{font-size:9px;font-weight:700;color:var(--brand);background:var(--brand-l);padding:1px 4px;border-radius:5px}
/* 会议块：名字一行、时间一行，时间用最粗的字重——一眼就能看到「6:00 / 15:00 / 10:30」 */
.mchip2{position:relative;display:flex;flex-direction:row;align-items:center;gap:3px;padding:3px 3px;border-radius:7px;
  line-height:1.25;overflow:hidden;border:1px solid transparent;width:100%}
.mchip2 .mn{font-size:10px;font-weight:500;opacity:.92;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;letter-spacing:-.1px}
.mchip2 .mt{font-size:10px;font-weight:500;letter-spacing:-.1px;font-variant-numeric:tabular-nums;flex:none;opacity:.85}
.mchip2 .mk{position:absolute;top:4px;right:5px;font-size:9px;font-weight:800;line-height:1}
.mchip2.cancel{background:var(--surface-2)!important;border-color:#E7EBF3}
.mchip2.cancel .mn{text-decoration:line-through;color:#98A2B3}
.mchip2.cancel .mt{color:#AEB9CA}
/* 一天多场：只露第一条，其余折成三个点（点日期到右侧看清单） */
.mchip2.more{padding:1px 6px 2px;background:#F5F8FD;border-color:#E4EAF4;color:#94A1B8;
  align-items:center;font-size:11px;font-weight:800;letter-spacing:2px;line-height:1.1}
/* 右侧「今日日程」列表：一行一项，整行可点 */
/* 2026-10-31 A 方案：行边界做实、一行只留一个主角、右端统一收箭头。
 * 原来行底 #FBFCFF 对卡片白是对比 1.03、边框 #F1F5FB 是对比 1.09 —— 低于 1.1 就等于没边界，
 * 三行在白底上像三条雾，选中的第一行又突然变实，看起来「只有第一行是真的」。
 * 现在：白底 + #DFE6F2 实边（对比 1.25）+ 行距 6px，起止一眼看得见。 */
.ag-list{display:flex;flex-direction:column;gap:6px}
.ag-row{display:flex;align-items:center;gap:8px;padding:7px 8px;border-radius:10px;cursor:pointer;
  min-height:36px;background:#fff;border:1px solid #DFE6F2;
  transition:background .15s,border-color .15s}
.ag-row:hover{background:var(--hover);border-color:#C9D8F0}
.ag-row.on{background:var(--brand-l);border-color:#B9CFFA}
/* 时间降为旁注（ink3 / 600），跟会议名拉开一级，眼睛先落到名字上 */
.ag-row .ag-t{flex:none;width:42px;font-size:11.5px;font-weight:600;color:var(--ink3);
  font-variant-numeric:tabular-nums;letter-spacing:-.2px}
.ag-row.on .ag-t{color:var(--ink2)}
/* 类型色点 → 竖条：圆点跟名字之间是「散点」，竖条更像日程表左沿的标记 */
.ag-row .ag-d{flex:none;width:3px;height:17px;border-radius:2px}
.ag-row .ag-n{flex:1;min-width:0;font-size:13px;font-weight:600;color:var(--ink);line-height:1.35;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 「⋯」默认透明但占位（宽度固定，悬停不会引起布局跳动） */
.ag-edit{flex:none;width:20px;height:20px;border-radius:6px;border:1px solid transparent;
  background:transparent;color:var(--ink3);cursor:pointer;padding:0;
  display:inline-flex;align-items:center;justify-content:center;
  opacity:0;transition:opacity .15s,color .15s,border-color .15s,background .15s}
.ag-row:hover .ag-edit{opacity:1}
.ag-edit:hover{color:var(--purple);border-color:#DCD3FF;background:#fff}
/* 行尾箭头：每行都有，右边缘就齐了 */
.ag-go{flex:none;color:#B7C3D6;transition:color .15s,transform .15s}
.ag-row:hover .ag-go{color:var(--brand);transform:translateX(1px)}
.ag-row.on .ag-go{color:var(--brand)}
.cal-legend{display:flex;gap:14px;flex-wrap:wrap;font-size:11.5px;color:var(--ink2);margin-top:12px}
.cal-legend span{display:inline-flex;align-items:center;gap:5px}
.cal-legend i{width:7px;height:7px;border-radius:50%}

/* 当天面板 */
.dp-head{display:flex;align-items:flex-start;gap:10px;margin-bottom:12px}
.dp-dot{width:9px;height:9px;border-radius:50%;margin-top:6px;flex:none}
.dp-title{font-size:15px;font-weight:800;letter-spacing:-.2px;line-height:1.3}
.dp-sub{font-size:11.5px;color:var(--ink3);margin-top:3px;line-height:1.6}
.dp-kpi{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:12px 0}
.dp-kpi>div{background:var(--line2);border-radius:11px;padding:9px 10px}
.dp-kpi b{display:block;font-size:18px;line-height:22px;font-weight:800;letter-spacing:-.5px;font-variant-numeric:tabular-nums}
.dp-kpi span{display:block;font-size:10.5px;color:var(--ink3);line-height:15px}
.dp-acts{display:flex;gap:8px;flex-wrap:wrap;margin:12px 0}
.lk{display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 12px;border-radius:10px;
  font-size:12.5px;font-weight:600;cursor:pointer;border:1px solid transparent;transition:.15s;text-decoration:none}
.lk.play{background:linear-gradient(135deg,#2F6BFF,#4B7CFF);color:#fff;box-shadow:0 5px 14px rgba(47,107,255,.26)}
.lk.play:hover{opacity:.94}
.lk.ms{background:var(--purple-l);color:#5B3FD6;border-color:#E3DAFF}
.lk.ms:hover{background:#E8E0FF}
.lk.ghost{background:#fff;border-color:var(--line);color:var(--ink2)}
.lk.ghost:hover{background:var(--line2);border-color:#CFDCF2}
.lk .arw{opacity:.7;font-size:11px}
.dp-meta{display:flex;flex-direction:column;gap:6px;font-size:11.5px;color:var(--ink3);
  border-top:1px solid var(--line2);padding-top:11px;margin-top:2px}
.dp-meta div{display:flex;justify-content:space-between;gap:12px}
.dp-meta b{color:var(--ink2);font-weight:600}

/* 开关（回放 / 纪要 是否对老师开放） */
.sw{position:relative;display:inline-block;width:36px;height:21px;flex:none;cursor:pointer}
.sw input{position:absolute;opacity:0;width:0;height:0}
.sw i{position:absolute;inset:0;background:#DDE4EF;border-radius:99px;transition:.18s}
.sw i::after{content:"";position:absolute;width:15px;height:15px;border-radius:50%;background:#fff;
  top:3px;left:3px;transition:.18s;box-shadow:0 1px 3px rgba(19,39,79,.25)}
.sw input:checked+i{background:var(--brand)}
.sw input:checked+i::after{transform:translateX(15px)}
.sw.lock{opacity:.55;cursor:default}
.cfg-row{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--line2)}
.cfg-row:last-child{border-bottom:none}
.cfg-n{font-size:12.5px;font-weight:600}
.cfg-d{font-size:10.5px;color:var(--ink3);margin-top:1px}

/* 明细表 */
.pt-tabs{display:flex;gap:6px;margin-bottom:12px;flex-wrap:wrap}
.pt-tabs button{border:none;background:var(--line2);color:var(--ink2);font-size:12.5px;font-weight:600;
  padding:7px 13px;border-radius:9px;cursor:pointer}
.pt-tabs button.on{background:var(--ink);color:#fff}
.pt-src{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:11px}
.pt-src button{border:1px solid var(--line);background:#fff;border-radius:9px;padding:6px 10px;
  font-size:11.5px;color:var(--ink2);cursor:pointer;display:inline-flex;align-items:center;gap:5px}
.pt-src button b{color:var(--ink);font-weight:800;font-variant-numeric:tabular-nums}
.pt-src button.on{border-color:var(--brand);background:var(--brand-l);color:var(--brand-d)}
.pt-tbl{max-height:430px;overflow:auto;border:1px solid var(--line);border-radius:12px}
.pt-tbl::-webkit-scrollbar{width:8px;height:8px}
.pt-tbl::-webkit-scrollbar-thumb{background:#D7E0EF;border-radius:8px}
.pt-tbl table{font-size:12px}
.pt-tbl th{position:sticky;top:0;background:#fff;z-index:1;padding:8px 10px}
.pt-tbl td{padding:8px 10px}
.pt-tbl tr.pend td{background:#FFFCF3}
.min-doc{max-height:520px;overflow:auto;padding-right:6px;font-size:12.5px;color:var(--ink2);line-height:1.85}
.min-doc h2,.min-doc h3{font-size:13px;color:var(--ink);font-weight:700;margin:14px 0 6px}
.min-doc h2:first-child,.min-doc h3:first-child{margin-top:0}

/* ============ 当日概览（课表查看右侧） ============ */
/* 2026-10-31 第二批：日期块三行并两行、反思打卡压成一行、今日日程收行高，
   省下来的纵向空间全给「会议概览」——它是这一屏唯一需要读数字的模块。 */
.ov-date{display:flex;align-items:center;gap:13px;padding:0 0 11px;border-bottom:1px solid var(--line2)}
.ov-dnum{font-size:34px;font-weight:800;letter-spacing:-1.6px;line-height:.9;font-variant-numeric:tabular-nums;
  background:linear-gradient(160deg,#2F6BFF,#7C5CFF);-webkit-background-clip:text;background-clip:text;color:transparent}
.ov-dmeta{flex:1;min-width:0}
.ov-dl1{font-size:15px;font-weight:700;display:flex;align-items:center;gap:7px}
.ov-dl2{font-size:11.5px;color:var(--ink3);margin-top:4px;line-height:1.5}
.ov-dl2 .dsep{display:inline-block;width:1px;height:9px;background:#DDE5F1;margin:0 8px;vertical-align:-1px}
.ov-fest{font-size:10.5px;font-weight:700;color:#C2410C;background:#FFF1E7;border:1px solid #FFDCC4;border-radius:6px;padding:1px 6px}

.ov-sec{padding:12px 0 2px;border-top:1px solid var(--line2);margin-top:11px}
/* 紧跟在日期模块后面的第一个分区：日期模块自己已经有 border-bottom，
   这里再去掉 border-top，否则会出现两条线叠在一起。
   （不能用 :first-of-type —— 日期模块也是 div，会被算进去，选不中。） */
.ov-date + .ov-sec{border-top:none;margin-top:0;padding-top:14px}
.ov-sh{display:flex;align-items:center;gap:7px;font-size:12.5px;font-weight:700;margin-bottom:9px;flex-wrap:wrap}
.ov-sh .ic{width:22px;height:22px;border-radius:7px;display:grid;place-items:center;flex:none}
.ov-sh .cnt{margin-left:auto;font-size:11px;font-weight:500;color:var(--ink3)}
.ov-sh .lk{font-size:11px;font-weight:600;color:var(--brand);cursor:pointer;white-space:nowrap;
  border-left:1px solid var(--line2);padding-left:9px}
.ov-sh .lk:hover{color:var(--brand-d)}
.ov-tag{font-size:10.5px;font-weight:700;border-radius:6px;padding:1px 7px;border:1px solid}
.ov-none{font-size:12.5px;color:var(--ink3);background:var(--surface);border:1px dashed #E2E9F4;border-radius:11px;
  padding:14px;text-align:center;line-height:1.7}

.ov-k{display:grid;gap:8px;margin-bottom:4px}
.ov-k4{grid-template-columns:repeat(4,1fr)}
.ov-k3{grid-template-columns:repeat(3,1fr)}
.ov-k>div{background:var(--surface);border-radius:11px;padding:9px 8px 8px;text-align:center}
.ov-k b{display:block;font-size:18px;font-weight:800;letter-spacing:-.6px;font-variant-numeric:tabular-nums;line-height:1.15;white-space:nowrap}
.ov-k b .u{display:inline;font-size:10px;font-weight:600;color:var(--ink3);margin-left:1px}
.ov-k span{display:block;font-size:10px;color:var(--ink3);margin-top:3px;letter-spacing:.2px}

/* 会议概览的四格：这一屏唯一要读数字的地方，比别处放大一档（2026-10-31 第二批）。
   其它页面（表格 KPI、详情弹窗）仍走上面的 .ov-k 基础尺寸，不受影响。 */
.ov-kpi>div{background:linear-gradient(180deg,var(--surface),var(--surface-2));border-radius:12px;padding:12px 8px 10px}
.ov-kpi b{font-size:23px;letter-spacing:-.9px;line-height:1.1}
.ov-kpi span{font-size:10.5px;color:var(--ink2);margin-top:4px}
/* 单位「分」在 23px 数字旁边要立得住，别缩成一个小点 */
.ov-kpi b .u{font-size:11px;font-weight:700;color:var(--ink2);margin-left:2px}

/* 反思打卡压成一行：标题 · 进度条 · 完成率 · 已交/应到 · 未完成 N 人 */
.ov-refl{padding:11px 0 0}
.rf{display:flex;align-items:center;gap:9px;min-width:0}
.rf .ic{width:22px;height:22px;border-radius:7px;display:grid;place-items:center;flex:none}
.rf-t{font-size:12.5px;font-weight:700;flex:none}
.rf-bar{flex:1;min-width:36px;height:5px;border-radius:99px;background:#EDF2FA;overflow:hidden}
.rf-bar>i{display:block;height:100%;border-radius:99px;transition:width .3s}
.rf-p{font-size:13.5px;font-weight:800;letter-spacing:-.3px;font-variant-numeric:tabular-nums;flex:none}
.rf-n{font-size:11px;color:var(--ink3);font-variant-numeric:tabular-nums;flex:none}
.rf-u{font-size:11.5px;font-weight:600;color:var(--ink2);flex:none;white-space:nowrap;cursor:pointer;
  border-left:1px solid var(--line2);padding-left:10px}
.rf-u:hover{color:var(--brand)}
.rf-u .ar{margin-left:1px;color:var(--ink3)}
.rf-u.ok{color:var(--ok);cursor:default;border-left:none}

/* 计数行：只给数字，名字点开才看 */
.ov-ctr{display:flex;align-items:center;gap:9px;padding:10px 12px;background:var(--surface);border:1px solid var(--line2);
  border-radius:11px;margin-top:10px}
.ov-ctr .dot{width:8px;height:8px;border-radius:50%;flex:none}
.ov-ctr .lb{font-size:12px;color:var(--ink2);font-weight:600}
.ov-ctr .nm{font-size:17px;font-weight:800;font-variant-numeric:tabular-nums;letter-spacing:-.4px;margin-left:auto}
.ov-ctr .nm em{font-style:normal;font-size:11px;font-weight:600;color:var(--ink3);margin-left:2px}
.ov-ctr .lk{font-size:11.5px;color:var(--brand);font-weight:600;cursor:pointer;display:inline-flex;align-items:center;gap:2px;
  border-left:1px solid var(--line2);padding-left:9px}
.ov-ctr .lk:hover{color:var(--brand-d)}

.ov-sum{font-size:12px;color:var(--ink2);line-height:1.75;background:var(--surface);border-radius:11px;
  padding:10px 12px;border-left:3px solid #D8E3F8;margin-top:8px}
.ov-sum .lk{color:var(--brand);cursor:pointer;font-weight:600;white-space:nowrap}
.ov-line{display:flex;align-items:center;gap:8px;margin:13px 0 0}
.ov-line .t{font-size:11.5px;color:var(--ink2);font-weight:600}
.ov-line .s{font-size:11.5px;color:var(--ok);font-weight:600}
.ov-line .lk{margin-left:auto;font-size:11px;color:var(--brand);cursor:pointer;font-weight:600}

/* 概览里的会议卡片（一天多场时叠起来）
   注意：这里刻意不加左右内缩、不加边框 —— 会议卡和反思模块的 KPI 网格
   必须共用同一条左/右边界，否则右侧面板里上下两个模块会左右错开一截。
   多场会议之间用顶部分隔线区分（不能用 :first-of-type ——
   同级的 .ov-sh 也是 div 且排第一，那个选择器选不中）。 */
.ov-mcard{border:none;border-radius:0;padding:0;margin-top:0;background:transparent}
.ov-mcard + .ov-mcard{border-top:1px solid var(--line2);margin-top:13px;padding-top:13px}
.ov-mhead{display:flex;align-items:center;flex-wrap:wrap;gap:6px 8px;margin-bottom:11px}
.ov-mhead .nm{font-size:15px;font-weight:800;letter-spacing:-.2px}
.ov-mhead .tm{margin-left:auto;font-size:11px;color:var(--ink3)}

/* 名单弹层 */
.ov-mask{position:fixed;inset:0;background:rgba(15,26,46,.42);backdrop-filter:blur(3px);z-index:60;
  display:flex;align-items:center;justify-content:center;padding:24px}
.ov-mask[hidden]{display:none}
.ov-modal{background:#fff;border-radius:18px;width:520px;max-width:100%;max-height:78vh;display:flex;flex-direction:column;
  box-shadow:0 24px 70px rgba(15,26,46,.28);overflow:hidden}
.ov-mh{display:flex;align-items:center;gap:9px;padding:16px 18px 13px;border-bottom:1px solid var(--line2)}
.ov-mh .t{font-size:14.5px;font-weight:700}
.ov-mh .n{font-size:11.5px;color:var(--ink3);font-weight:500}
.ov-mh .x{margin-left:auto;width:28px;height:28px;border-radius:9px;border:1px solid var(--line);background:#fff;
  cursor:pointer;color:var(--ink3);font-size:14px;line-height:1}
.ov-mh .x:hover{background:var(--line2)}
.ov-mbody{overflow:auto;padding:8px 10px 14px}
.ov-mfoot{padding:10px 18px;border-top:1px solid var(--line2);font-size:11.5px;color:var(--ink3);display:flex;gap:12px;flex-wrap:wrap}
.ov-mfoot b{color:var(--ink2)}
.mrow{display:flex;align-items:center;gap:9px;padding:8px 9px;border-radius:9px}
.mrow:hover{background:var(--surface)}
.mrow .pj{font-size:10.5px;font-weight:700;border-radius:6px;padding:2px 7px;flex:none;white-space:nowrap}
.mrow b{font-size:13px;font-weight:600}
.mrow .gp{font-size:11px;color:var(--ink3);background:#F4F7FC;border-radius:6px;padding:1px 6px}
.mrow em{font-style:normal;font-size:11px;color:var(--ink3);margin-left:auto}

/* 明细四组标签 */
.pt-src2{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px}
.pt-src2 button{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);background:#fff;
  border-radius:10px;padding:7px 12px;font-size:12.5px;color:var(--ink2);cursor:pointer;font-weight:500}
.pt-src2 button.on{background:var(--brand-l);border-color:#C9D9FF;color:var(--brand);font-weight:700}
.pt-src2 button b{font-size:12px;font-variant-numeric:tabular-nums}
.pt-src2 button .dot{width:7px;height:7px;border-radius:50%}
.pj2{font-size:10.5px;font-weight:700;border-radius:6px;padding:2px 7px;white-space:nowrap}
.sect-h{display:flex;align-items:center;gap:8px;font-size:12px;font-weight:700;color:var(--ink2);margin:2px 0 10px}
.sect-h .ln{flex:1;height:1px;background:var(--line2)}
.sect-h .r{font-weight:500;color:var(--ink3)}
.empty4{padding:26px 10px;text-align:center;color:var(--ink3);font-size:12.5px;line-height:1.8}
.empty4 .ico{width:40px;height:40px;border-radius:12px;background:#F2F6FC;display:grid;place-items:center;margin:0 auto 10px}

.min-doc ul{margin:4px 0 8px;padding-left:17px}
.min-doc li{margin:2px 0}
.min-doc p{margin:5px 0}
.min-doc strong{color:var(--ink);font-weight:700}
.cal-stat{font-size:11.5px;color:var(--ink3);margin-bottom:10px;display:flex;gap:6px;flex-wrap:wrap}
.cal-stat b{color:var(--ink2)}

/* 课表查看：窄屏把两栏叠起来，日历格子收紧但「名称 + 时间」两行不省 */
@media (max-width:1180px){.calpage{grid-template-columns:1fr}}
@media (max-width:900px){
  .cal2{gap:3px}
  .dcell{min-height:60px;padding:4px;border-radius:10px;gap:3px}
  .dnum{font-size:11.5px}
  .dnum .tdy{display:none}
  .mchip2{padding:3px 4px;border-radius:6px}
  .mchip2 .mn{font-size:8.5px}
  .mchip2 .mt{font-size:10px;letter-spacing:-.4px}
  .mchip2 .mk{font-size:7px;top:2px;right:3px}
  .dp-kpi{grid-template-columns:repeat(2,1fr)}
  .cal-legend{gap:9px;font-size:10.5px}
  .pt-tbl{max-height:360px}
}

/* ================= 我的班级（2026-10-29） ================= */
.cls-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:10px}
.cls-card{
  border:1px solid var(--line2);border-radius:10px;padding:10px 12px;cursor:pointer;
  background:#fff;transition:border-color .15s,box-shadow .15s
}
.cls-card:hover{border-color:#C9D6F5;box-shadow:0 2px 8px rgba(47,107,255,.08)}
.cls-card.on{border-color:var(--brand,#2F6BFF);box-shadow:0 0 0 2px rgba(47,107,255,.12)}

/* ---- 自建日程 ---- */
.ev-row{display:flex;gap:10px;padding:7px 0;font-size:12.5px;border-bottom:1px solid var(--line2);align-items:flex-start}
.ev-row b{width:56px;flex:none;color:var(--ink3);font-weight:500}
.ev-row span{flex:1;word-break:break-all}
.ev-pick{max-height:148px;overflow:auto;border:1px solid var(--line2);border-radius:8px;padding:6px 8px;font-size:12.5px;background:#fff}
.ev-pick label{display:inline-flex;align-items:center;gap:4px;margin:2px 10px 2px 0;cursor:pointer;white-space:nowrap}
.ev-pick i{color:var(--ink3);font-style:normal;font-size:11px}
/* 班级多选（2026-11-07 W24）：一行一个班，老师一眼扫得到排期名，人数靠右对齐 */
.ev-pick-col{max-height:196px}
.ev-pick-col label{display:flex;width:100%;margin:3px 0;white-space:normal;line-height:1.5}
.ev-pick-col label i{margin-left:auto;padding-left:8px;flex:none}
.evchip{cursor:pointer}


/* ---------- 老师档案 → 查看 Ta 的日程（只读弹层日历） ---------- */
.pcal-bar{display:flex;align-items:center;gap:10px;justify-content:flex-end;
  margin:-4px 0 12px;font-size:11.5px;color:var(--ink3)}
/* 会议号 +「自动创建会议」并排（2026-10-30）：按钮高度跟输入框对齐，不要挤成小链接 */
.ev-code-row{display:flex;gap:8px;align-items:center}
.ev-code-row .input{flex:1;min-width:0}
.btn-auto-meet{flex:none;height:42px;padding:0 15px;font-size:12.5px;border-radius:12px;
  color:#0B7A5C;border-color:#BDEBD7;background:#EAF9F2;font-weight:700;white-space:nowrap;
  box-shadow:0 3px 10px rgba(18,184,134,.14)}
.btn-auto-meet:hover{background:#DCF5EA;border-color:#9FE2C9;color:#0B7A5C}
.btn-auto-meet:disabled{opacity:.65;box-shadow:none}
@media (max-width:520px){.ev-code-row{flex-wrap:wrap}.btn-auto-meet{width:100%}}

/* 档案页「查看 Ta 的日程」：和补录/请假并排，紫色描边 + 图标，一眼能认出是另一类操作 */
.btn-pcal{color:#6B46FF;border-color:#D9CEFF;background:#F5F1FF;font-weight:600}
.btn-pcal:hover{background:#EDE6FF;border-color:#C4B2FF;color:#5A34F0}
.btn-pcal svg{flex:none}
.pcal-top{display:flex;align-items:center;gap:9px;margin-bottom:10px}
.pcal-top b{font-size:14px}
.pcal-sum{margin-left:auto;font-size:11.5px;color:var(--ink3)}
.pcal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}
.pcal-h{text-align:center;font-size:11px;color:var(--ink3);padding:2px 0}
.pcal-c{min-height:62px;border:1px solid var(--line);border-radius:10px;padding:5px 6px;
  background:#fff;cursor:pointer;overflow:hidden;transition:box-shadow .15s,border-color .15s}
.pcal-c:hover{border-color:var(--brand)}
.pcal-c.empty{border:0;background:transparent;cursor:default}
.pcal-c.today{background:var(--brand-l)}
.pcal-c.on{border-color:var(--brand);box-shadow:0 0 0 2px rgba(47,107,255,.16)}
.pcal-d{font-size:11.5px;color:var(--ink3);margin-bottom:3px}
.pcal-c.on .pcal-d,.pcal-c.today .pcal-d{color:var(--brand);font-weight:700}
.pcal-chip{font-size:10.5px;line-height:1.5;padding:1px 5px;margin-bottom:2px;border-radius:5px;
  border-left:3px solid var(--brand);background:var(--line2);color:var(--ink);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pcal-chip i{font-style:normal;color:var(--ink3);margin-left:4px}
.pcal-more{font-size:10px;color:var(--ink3)}
.pcal-list{margin-top:14px;border-top:1px solid var(--line);padding-top:10px}
.pcal-list-h{font-size:12px;font-weight:600;color:var(--ink2);margin-bottom:6px}
.pcal-row{display:flex;gap:10px;align-items:baseline;font-size:12.5px;padding:5px 0;
  border-bottom:1px dashed var(--line2)}
.pcal-row b{font-variant-numeric:tabular-nums;color:var(--ink2);font-weight:600;min-width:96px}
.pcal-row span{flex:1}
.pcal-row i{font-style:normal;font-size:11px;color:var(--ink3)}
.pcal-none{font-size:12px;color:var(--ink3);padding:8px 0}

/* ---------- 日程同步前的确认清单 ---------- */
.sync-plan{list-style:none;margin:12px 0 0;padding:0;counter-reset:sp;
  max-height:46vh;overflow:auto;font-size:12.5px;line-height:1.6}
.sync-plan li{counter-increment:sp;display:flex;gap:8px;align-items:baseline;flex-wrap:wrap;
  padding:7px 10px;margin-bottom:6px;border-radius:9px;background:var(--line2)}
.sync-plan li::before{content:counter(sp) '.';color:var(--ink3);flex:0 0 auto}
.sync-plan li b{font-variant-numeric:tabular-nums;color:var(--ink2);min-width:92px}
.sync-plan li i{font-style:normal;font-size:11px;color:var(--ink3);margin-left:auto;white-space:nowrap}

/* ---------- 日历：标题不再当链接点，日程行加「查看」 ---------- */
.evchip{cursor:default}
.mchip2,.ag-row{cursor:pointer}

/* 自建日程的本场明细：按状态分组列名字 */
.evg{margin-top:10px;font-size:12.5px;line-height:1.7}
.evg-n{color:var(--ink2);word-break:break-all}

/* ---------- 同步记录 ---------- */
.sync-log{margin-top:14px;border-top:1px dashed var(--line);padding-top:10px}
.sync-log-h{font-size:11.5px;font-weight:600;color:var(--ink2);margin-bottom:6px}
.sync-log-none{font-size:11.5px;color:var(--ink3)}
.sync-log-row{display:flex;gap:10px;align-items:baseline;font-size:11.5px;color:var(--ink2);
  padding:5px 8px;border-radius:8px;cursor:pointer}
.sync-log-row:hover{background:var(--line2)}
.sync-log-row b{font-variant-numeric:tabular-nums;color:var(--ink3);font-weight:600;min-width:74px}
.sync-log-row i{font-style:normal;margin-left:auto;font-size:10.5px;color:var(--ink3);flex:0 0 auto}
.sync-log-sec{margin-top:14px;font-size:12px;font-weight:600;color:var(--ink2)}
.sync-log-lines{margin-top:6px;font-size:12px;line-height:1.75;color:var(--ink2)}

/* 表单里的小提示（如：会议版本选错会导致查不到会议号） */
.ev-hint{font-size:11px;color:var(--ink3);margin-top:5px;line-height:1.5}

/* 取消弹窗里的勾选项（2026-10-30）：重复日程取消时问「腾讯会议那边要不要一起取消」 */
.ev-cb{display:flex;align-items:center;gap:9px;margin-top:14px;padding:11px 13px;border-radius:11px;
  background:#F6F8FC;border:1px solid var(--line);font-size:12.5px;color:var(--ink2);cursor:pointer;line-height:1.5}
.ev-cb input{width:15px;height:15px;flex:none;accent-color:var(--brand);cursor:pointer}
.ev-cb:hover{background:#EFF3FB}

/* ---------- 本场明细：名单胶囊 + 待确认名单（2026-10-30） ---------- */
.nm-wrap{display:flex;flex-wrap:wrap;gap:6px}
.nm-pill{display:inline-flex;align-items:baseline;gap:4px;padding:3px 9px;border-radius:8px;
  background:var(--line2);color:var(--ink2);font-size:12px;line-height:1.5}
.nm-pill i{font-style:normal;font-size:10.5px;color:var(--ink3)}
.pend-row{display:flex;flex-wrap:wrap;gap:7px;align-items:center;
  padding:8px 0;border-bottom:1px solid var(--line2);font-size:12.5px}
.pend-nick{font-weight:600;color:var(--ink);word-break:break-all;max-width:52%}
.pend-sec{color:var(--ink3);font-size:11.5px;margin-left:auto;flex:0 0 auto}
.pend-act{display:flex;gap:6px;flex:0 0 auto}
.inp-sm{flex:1 1 110px;min-width:96px;height:30px;border-radius:8px;border:1.5px solid var(--line);
  background:#fff;padding:0 9px;font-size:12.5px;color:var(--ink)}
.inp-sm:focus{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-l)}

/* ---------- 单场同步条（本场明细上方，2026-10-30 加强：老师一眼要看到） ---------- */
.ev-syncbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;
  padding:10px 12px;margin:0 0 12px;border-radius:12px;
  border:1px solid #CFE0FF;background:linear-gradient(90deg,#EFF5FF,#FBFDFF)}
.ev-syncbar.ok{border-color:#BDEBD7;background:linear-gradient(90deg,#E9FAF2,#FBFFFD)}
.ev-syncbar.bad{border-color:#F7CFD6;background:linear-gradient(90deg,#FFF0F3,#FFFBFC)}
.ev-syncbar-tx{flex:1 1 180px;min-width:0;display:flex;flex-direction:column;gap:2px}
.ev-syncbar-tx b{font-size:13px;font-weight:700;color:#1B2A4A;letter-spacing:-.1px}
.ev-syncbar.ok .ev-syncbar-tx b{color:#0B8A63}
.ev-syncbar.bad .ev-syncbar-tx b{color:#C2334D}
.ev-syncbar-tx span{font-size:11.5px;color:var(--ink3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ev-syncbar-btn{height:36px;padding:0 18px;font-size:13.5px;font-weight:700;border-radius:11px;flex:none;
  letter-spacing:.3px;box-shadow:0 6px 16px rgba(47,107,255,.32)}
.ev-syncbar-btn:hover{opacity:.94}
.ev-syncbar-btn:disabled{opacity:.6;box-shadow:none}
@media (max-width:520px){.ev-syncbar-btn{width:100%}}

/* ---- 本场明细：会议回放 / 智能纪要（2026-10-30） ---- */
.ev-media{margin-top:10px;border:1px solid var(--line2);border-radius:11px;padding:9px 12px;background:var(--surface)}
.ev-media-h{display:flex;align-items:center;gap:8px}
.ev-media-t{font-size:12.5px;font-weight:700;color:var(--ink)}
.ev-media-tip{font-size:11px;color:var(--ink3)}
.ev-media-out{font-size:11.5px;color:var(--ink3);margin-top:7px;line-height:1.6}
.ev-link{display:inline-flex;align-items:center;gap:6px;margin-top:8px;font-size:12.5px;font-weight:600;
  color:var(--brand);text-decoration:none;padding:6px 12px;border-radius:9px;background:var(--brand-l);transition:.16s}
.ev-link:hover{background:#E2EAFF}
.ev-sum{margin-top:8px;font-size:12.5px;line-height:1.72;color:var(--ink2);white-space:pre-wrap;
  max-height:230px;overflow:auto;background:#fff;border-radius:9px;padding:9px 11px;border:1px solid var(--line2)}

/* ---- 会议概览底部操作行（2026-10-31）：同步参会 / 查看修改要跳出来 ---- */
.ov-foot{border-top:1px solid var(--line2);margin-top:14px;padding-top:12px;display:flex;
  gap:7px;flex-wrap:wrap;align-items:center}
.ov-foot-t{font-size:11px;color:var(--ink3);font-weight:600}
.ov-act{display:inline-flex;align-items:center;gap:5px;height:30px;padding:0 12px;border-radius:8px;
  font-size:12px;font-weight:700;cursor:pointer;border:1px solid transparent;transition:.16s;
  white-space:nowrap;font-family:inherit}
.ov-act:hover{transform:translateY(-1px)}
.ov-act:active{transform:translateY(0)}
.ov-act-sync{background:#E6F7F1;color:var(--ok-d);border-color:var(--ok-d)3D}
.ov-act-sync:hover{background:#D5F2E7}
.ov-act-edit{background:#F1EDFF;color:#7C5CFF;border-color:#7C5CFF3D}
.ov-act-edit:hover{background:#E7DEFF}

/* 本场操作行：从会议概览卡里提出来，直接跟在会议概览板块下面（2026-10-31）
   紧跟 ov-sec 时不要再画上边框，否则会和下一块的分隔线叠成双线。 */
.ov-sec + .ov-foot{border-top:none;margin-top:2px;padding-top:0}
