/* 主题（参考 Linear / Vercel）：灰阶 + 一个主色。颜色从小招形象里取（work/ui/xz_src/colors.json）：
 *   主色 = 小招耳机的钴蓝；文字和灰阶带一点面罩的藏青；金色（--gold）只给小招相关的装饰，不当状态色。
 *   小招出现在：侧栏系统标、仪表台问候（小招播报）、登录页、小招对话。
 * 层次：页面浅灰 → 卡片纯白（细边 + 微投影）→ 卡片里的填充灰。
 * 交互规则（全站一致）：
 *   能点的 → 悬停有变化（底色加深 / 卡片上浮），按下回弹；不能点的不变
 *   选中   → 小控件主色实底白字；分段按钮凸起 + 主色字 + 主色描边；导航浅主色底 + 左侧主色条
 *   状态   → 好 / 坏 / 要注意 分别用绿 / 红 / 黄，只在表示状态时用
 *   焦点   → 主色光圈
 * 颜色只从 :root 取；index.html、assistant.css 已换成这些变量，app.js 的图表色也是同一套色值。只改样子，模块位置不动。 */
@font-face { font-family: "Geist"; src: url("vendor/geist@1.9.0/Geist-Variable.woff2") format("woff2"); font-weight: 100 900; font-display: swap; }
@font-face { font-family: "Geist Mono"; src: url("vendor/geist@1.9.0/GeistMono-Variable.woff2") format("woff2"); font-weight: 100 900; font-display: swap; }
:root {
  --bg: #f3f5f9; --card: #fff; --fill: #eff2f7; --fill-2: #f7f8fb; --fill-h: #e5e9f1;
  --line: #e3e7ef; --line-2: #d8dde8; --line-3: #c4cbd9;
  --t1: #0b1533; --t2: #45506b; --t3: #687390; --t4: #98a1b8; --t5: #cbd1de;
  --pri: #1f4fd6; --pri-h: #1a45c0; --pri-a: #163ca8; --pri-d: #163fb0; --pri-dd: #0d2a80; --pri-rgb: 31, 79, 214;
  --pri-00: #f5f8ff; --pri-0: #eaf0fe; --pri-1: #dbe5fd; --pri-2: #c4d4fb; --pri-3: #6f92ee; --glow: var(--pri);
  --gold: #f5b938; --sky: #a8c2fd;
  --ok: #30a46c; --ok-t: #18794e; --ok-bg: #e9f7ef; --ok-bd: #a9dcbd;
  --warn: #f5a524; --warn-t: #965800; --warn-bg: #fff6e6; --warn-bd: #f8d48e;
  --bad: #e5484d; --bad-h: #dc3e42; --bad-t: #ce2c31; --bad-bg: #feeced; --bad-bd: #fbbabc;
  --r: 8px; --r-lg: 12px;
  --e1: 0 0 0 1px var(--line), 0 1px 2px rgba(11,21,51,.04);
  --e2: 0 0 0 1px var(--pri-2), 0 6px 16px -6px rgba(11,21,51,.14), 0 2px 4px -2px rgba(11,21,51,.06);
  --e3: 0 0 0 1px rgba(11,21,51,.06), 0 12px 32px -8px rgba(11,21,51,.18), 0 4px 8px -4px rgba(11,21,51,.08);
  --ring: 0 0 0 3px rgba(var(--pri-rgb), .22);
  --ease: cubic-bezier(.2, .7, .3, 1);
  --font: "Geist", -apple-system, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
  --mono: "Geist Mono", Consolas, "Microsoft YaHei", monospace;
  --bs-primary: var(--pri); --bs-primary-rgb: var(--pri-rgb); --bs-link-color: var(--pri); --bs-link-color-rgb: var(--pri-rgb); --bs-link-hover-color: var(--pri-h);
  --bs-body-color: var(--t1); --bs-secondary-color: var(--t3); --bs-border-color: var(--line);
  --ant-bg: var(--bg); --ant-split: var(--line); --ant-border: var(--line-3); --ant-text-2: var(--t2); --ant-text-3: var(--t3);
}
body { -webkit-font-smoothing: antialiased; color: var(--t1); }
.text-success { color: var(--ok-t) !important; } .text-danger { color: var(--bad-t) !important; }
a { transition: color .12s; }

/* ===== 外框：顶栏、侧栏白，内容区浅灰 ===== */
.app-header { background: var(--card) !important; border-bottom: 1px solid var(--line); box-shadow: none; }
.app-header .nav-link { color: var(--t2); border-radius: 6px; transition: background .12s; }
.app-header .nav-link:hover { background: var(--fill); color: var(--t1); }
.avatar { background: var(--pri); font-weight: 600; }
.app-sidebar { background: var(--card) !important; border-right: 1px solid var(--line);
  --lte-sidebar-color: var(--t2); --lte-sidebar-hover-color: var(--t1); --lte-sidebar-hover-bg: var(--fill); --lte-sidebar-menu-active-color: var(--pri-d); }
.sidebar-brand { border-bottom: 0; }
.sidebar-brand .brand-text { font-family: var(--font); color: var(--t1); font-size: 16px; font-weight: 600; letter-spacing: -.2px; margin-left: 10px; }
/* 侧栏系统标：用小招头像 */
.brand-mark { width: 32px; height: 32px; border-radius: 50%; background: #fff url(/xz/xiaozhao-face.webp) center / cover no-repeat; box-shadow: 0 0 0 1px var(--pri-1), 0 2px 6px -2px rgba(13,42,128,.3); }
.brand-mark > i { visibility: hidden; }
/* 「提招·教务系统」的点：雅黑里太窄，大字号时两边加点空 */
.name-dot { margin: 0 .18em; color: var(--pri); }
.sidebar-menu .nav-link { position: relative; margin: 1px 8px; height: 36px; border-radius: 8px; padding: 0 10px 0 14px; color: var(--t2); font-size: 14px; transition: background .12s, color .12s; }
.sidebar-menu .nav-link .nav-icon { color: var(--t3); font-size: 16px; margin-right: 10px; transition: color .12s; }
.sidebar-menu .nav-link:hover { background: var(--fill); color: var(--t1); }
.sidebar-menu .nav-link:hover .nav-icon { color: var(--t1); }
.sidebar-menu .nav-link.active,
.sidebar-menu > .nav-item > .nav-link.active { background: var(--pri-0) !important; color: var(--pri-d) !important; font-weight: 600; }
.sidebar-menu .nav-link.active .nav-icon { color: var(--pri) !important; }
.sidebar-menu .nav-link.active::before { content: ""; position: absolute; left: 0; top: 9px; bottom: 9px; width: 3px; border-radius: 0 3px 3px 0; background: var(--pri); }
.app-main { background: var(--bg) !important; }
.app-content { padding-top: 28px; }
.app-footer { color: var(--t4); font-size: 12px; }
/* ===== 字号层级：页面标题 20 / 卡片标题 15 / 正文 14 / 表头、说明 12–13 ===== */
.page-head h1, .card-head .title, .dh-title, .mf-hero h1, .br-hero h1, .br-head h1, .login-top .name, .r-title { font-family: var(--font); }
.page-head h1 { font-size: 20px; font-weight: 600; letter-spacing: -.3px; color: var(--t1); }
.page-head .sub, .crumbs { color: var(--t3); font-size: 13px; }
.page-head .back { color: var(--t2); transition: background .12s; } .page-head .back:hover { background: var(--fill-h); color: var(--t1); }
.crumbs a:hover { background: var(--fill-h); color: var(--t1); }
.card-head .title { font-size: 15px; font-weight: 600; letter-spacing: -.1px; color: var(--t1); }
.card-head .extra, .card-tip { color: var(--t3); font-size: 13px; }
.dh-title { font-size: 18px; letter-spacing: -.2px; }
.kpi span, .cc-title { color: var(--t3); font-size: 13px; }
.kpi b, .cc-value { font-size: 28px; font-weight: 600; letter-spacing: -.6px; color: var(--t1); }
.kpi b.warn, .cc-value.warn { color: var(--warn-t); } .kpi b.bad, .cc-value.bad { color: var(--bad-t); }
.cc-foot { color: var(--t3); font-size: 13px; }
.kpi b, .cc-value, .donut b, .dp-stat b, .mini-kpi b, .fn-row > b, .rank b, .legend b, .hb > b, .br-hero .nums b, .mf-hero .nums b,
.br-head-nums b, .br-card .br-kpi b, .mf-forms b, .dp-date b, .cal-week .wh .d { font-family: var(--font); font-feature-settings: "tnum"; }
.secret { font-family: var(--mono); }

/* ===== 面：卡片白底 + 细边 + 微投影，浮在浅灰页面上 ===== */
.card, .kpi, .ccard, .dash-head, .cal-month, .cal-week, .dp, .mf-sec, .mf-nav, .br-toc, .br-head, .xz-page { border-radius: var(--r-lg); box-shadow: var(--e1); }
.card-head { min-height: 52px; border-bottom-color: var(--line); }
.card-foot { border-top-color: var(--line); }
/* 原来的蓝色渐变头图（专业完整版、学校简章）：白卡片，文字转深色 */
.mf-hero, .br-hero { background: var(--card); color: var(--t1); box-shadow: var(--e1); }
.mf-hero h1, .br-hero h1 { color: var(--t1); letter-spacing: -.4px; }
.mf-hero .cat, .mf-hero .yr, .mf-hero .nums span, .br-hero .nums span { color: var(--t3); }
.mf-hero p, .br-hero p { color: var(--t2); }
.mf-hero .kw span { background: var(--fill); border-color: transparent; color: var(--t2); }
.mf-hero .r, .br-hero .nums { background: var(--fill-2); box-shadow: 0 0 0 1px var(--line); }
.mf-hero .nums > div, .br-hero .nums > div { border-left-color: var(--line); }
.br-hero .yr { background: var(--pri-0); border-color: transparent; color: var(--pri-d); }
.mg-hero { background: var(--pri-00); border-color: var(--pri-1); }
.mf-prep > div { background: var(--fill-2); }
.mf-layer .n { background: var(--pri); }
.mf-q .real { background: var(--warn-bg); border-top-color: var(--warn-bd); }

/* ===== 能点的卡片：悬停上浮 + 主色细边，按下回弹 ===== */
.br-card, .mg-feat-item, .mf-steps button, .mgs-card { transition: box-shadow .16s var(--ease), transform .16s var(--ease), background .16s, border-color .16s; }
.br-card { border-color: var(--line); }
.br-card:hover, .mg-feat-item:hover { border-color: var(--pri-2); box-shadow: var(--e2); transform: translateY(-2px); }
.br-card:active, .mg-feat-item:active, .mgs-card:active { transform: translateY(0); box-shadow: 0 0 0 1px var(--pri-2); }
.br-card:hover .name, .mgs-card:hover b { color: var(--pri-d); }
.br-card .acts { background: linear-gradient(90deg, rgba(255,255,255,0), var(--card) 14px); }
.br-card .acts a:hover { background: var(--pri-0); }
.mf-steps button { border-color: var(--line); }
.mf-steps button:hover { border-color: var(--pri-2); box-shadow: var(--e2); }
.mg-feat-item.on { border-color: var(--pri); background: var(--pri-00); box-shadow: 0 0 0 1px var(--pri); }
/* ===== 选中状态 ===== */
/* 分段按钮（志愿状态、月/周/列表、志愿 1-5、熟练度）：灰槽里，选中的那格凸起 + 主色描边 */
.seg { background: var(--fill); box-shadow: inset 0 0 0 1px var(--line); border-radius: var(--r); padding: 3px; gap: 2px; }
.seg button, .seg a { color: var(--t2); border-radius: 6px; transition: background .12s, color .12s, box-shadow .12s; }
.seg button:hover:not(:disabled):not(.on), .seg a:hover:not(.on) { background: var(--fill-h); color: var(--t1); }
.seg .on { background: var(--card); color: var(--pri-d); font-weight: 600; box-shadow: 0 0 0 1px var(--pri-2), 0 1px 3px rgba(11,21,51,.1); }
.seg .on.good { background: var(--ok-bg); color: var(--ok-t); box-shadow: 0 0 0 1px var(--ok-bd), 0 1px 3px rgba(11,21,51,.08); }
.seg .on.bad { background: var(--bad-bg); color: var(--bad-t); box-shadow: 0 0 0 1px var(--bad-bd), 0 1px 3px rgba(11,21,51,.08); }
.seg .on.warn { background: var(--warn-bg); color: var(--warn-t); box-shadow: 0 0 0 1px var(--warn-bd), 0 1px 3px rgba(11,21,51,.08); }
.seg button:disabled { color: var(--t4); }
.seg a.dropped { opacity: .55; }
/* 下划线页签（学校简章详情、面试准备、登录） */
.br-tabs { border-bottom-color: var(--line); }
.br-tabs a { color: var(--t3); border-radius: 6px 6px 0 0; transition: color .12s, background .12s; }
.br-tabs a:hover { color: var(--t1); background: var(--fill-2); }
.br-tabs a.on { color: var(--pri-d); border-bottom-color: var(--pri); font-weight: 600; }
.br-tabs a.on .br-n { background: var(--pri-0); color: var(--pri-d); }
/* 筛选标签（学校简章的地区、类别、办学，专业搜索的大类）：没选中灰字，悬停灰底，选中主色实底白字 */
.br-cities a, .br-frow .opts a { transition: background .12s, color .12s; }
.br-cities a:hover, .br-frow .opts a:hover { background: var(--fill); color: var(--t1); }
.br-cities a.on, .br-frow .opts a.on { background: var(--pri); color: #fff; font-weight: 500; }
.br-frow .opts a.on em { color: rgba(255,255,255,.75); }
/* 带边框的二选一（卡片/表格、按地区/按类别） */
.br-seg { border-color: var(--line-3); }
.br-seg a { transition: background .12s, color .12s; }
.br-seg a:hover:not(.on) { background: var(--fill); color: var(--t1); }
.br-seg a.on { background: var(--pri-0); color: var(--pri-d); font-weight: 600; box-shadow: inset 0 0 0 1px var(--pri-2); }
/* 分页 */
.pager button { transition: background .12s; }
.pager button:hover:not(:disabled):not(.on) { background: var(--fill-h); }
.pager button.on { background: var(--pri); border-color: var(--pri); color: #fff; }
/* 竖排目录（学校简章、专业完整版左侧） */
.br-toc a, .br-toc button, .mf-nav button { transition: background .12s, color .12s; }
.br-toc a:hover, .br-toc button:hover, .mf-nav button:hover { background: var(--fill); color: var(--t1); }
.br-toc a.on { background: var(--pri-0); color: var(--pri-d); border-left-color: var(--pri); font-weight: 600; }
.br-sort.on, .br-sort.on i { color: var(--pri-d); }
/* 排序表头、行内小按钮 */
.ivp-move .act:hover:not(:disabled) { background: var(--fill-h); color: var(--pri-d); }
/* ===== 表格、矩阵、日历、时间线 ===== */
.table { --bs-table-hover-bg: var(--fill-2); color: var(--t1); }
.table thead th { background: var(--fill-2); color: var(--t3); font-size: 12px; font-weight: 500; padding-top: 10px; padding-bottom: 10px; border-bottom: 1px solid var(--line); }
.table thead th:not(:last-child)::after { display: none; }
.table td { padding-top: 12px; padding-bottom: 12px; border-color: var(--line); }
.table tbody tr { transition: background .1s; }
.table:not(.matrix) tbody tr:hover > td { background: var(--fill-2); }
.table .cell-sub { color: var(--t3); }
/* 学生列表矩阵：当前步骤主色浅底 + 主色字；能点的格子悬停变色 */
.matrix td.now { background: var(--pri-1); color: var(--pri-d); font-weight: 500; }
.matrix td.stage { transition: background .1s; }
.matrix td.stage:hover { background: var(--pri-0); }
.matrix td.now:hover { background: var(--pri-2); }
.matrix tr.dropped td:not(.stu) { opacity: .4; }
/* 月历：悬停浅主色，今天主色圆，选中主色描边 */
.cal-cell:hover, .cal-week .wh[data-act]:hover { background: var(--pri-00); }
.cal-cell.today .num { background: var(--pri); color: #fff; }
.cal-cell.sel { background: var(--pri-0); }
.cal-cell.sel::after { border-color: var(--pri); }
.cal-cell .add:hover { background: var(--card); color: var(--pri); box-shadow: 0 0 0 1px var(--pri-2); }
.cal-col.today { background-color: var(--pri-00); }
.cal-week .wh.today .d { color: var(--pri); }
.cal-day { background: var(--fill-2); }
/* 时间线：当前这一步主色浅底卡片，点状态后闪一下 */
.tl-item.now .tl-dot { box-shadow: var(--ring); }
.tl-item.now .tl-body { background: var(--pri-00); border-color: var(--pri-2); }
.step.process .ico { box-shadow: var(--ring); }
/* 提醒分组：白底，左边一道状态色，悬停浅灰 */
.rm-red > summary, .rm-gold > summary, .rm-blue > summary { background: var(--card); transition: background .12s; }
.rm-red > summary:hover, .rm-gold > summary:hover, .rm-blue > summary:hover { background: var(--fill-2); }
.rm-red > summary { box-shadow: inset 3px 0 0 var(--bad); } .rm-gold > summary { box-shadow: inset 3px 0 0 var(--warn); } .rm-blue > summary { box-shadow: inset 3px 0 0 var(--pri); }
.ptmatrix td.pt-待确认, .pts li.pt-待确认 { background: var(--warn-bg); }
.pts li.pt-待确认 { box-shadow: inset 3px 0 0 var(--warn); }
.feed .av { background: var(--fill) !important; color: var(--t2); font-weight: 600; }

/* ===== 图表：主色深浅；进度条灰轨 + 主色 ===== */
.fn-track, .bar, .rk-bar, .sbar { background: var(--fill); }
.fn-track > i, .bar > i, .rk-bar > i, .mf-abil .bar i { background: var(--pri); }
.bar.over > i { background: var(--bad); }
.rk { background: var(--fill); color: var(--t3); } .rk.top { background: var(--t1); color: #fff; }
.mf-trend .bar { background: var(--pri-2); } .mf-trend .col.on .bar { background: var(--pri); } .mf-trend .col.on .v { color: var(--pri-d); }
/* 课表 8 种内容：同一深浅、不同色相 */
.k1 { --kbg: #eaf0fe; --kbd: #1f4fd6; } .k2 { --kbg: #e9f7ef; --kbd: #30a46c; } .k3 { --kbg: #fff6e6; --kbd: #f5a524; }
.k4 { --kbg: #f3eefb; --kbd: #8e4ec6; } .k5 { --kbg: #fcedf6; --kbd: #d6409f; } .k6 { --kbg: #e6f6f3; --kbd: #12a594; }
.k7 { --kbg: #ffefe4; --kbd: #f76b15; } .k8 { --kbg: var(--fill); --kbd: var(--t4); }

/* ===== 标签：浅底无框（边框透明，宽度不变） ===== */
.tag { border-color: transparent; background: var(--fill); color: var(--t2); border-radius: 6px; font-weight: 500; }
.tag.blue { background: var(--pri-0); color: var(--pri-d); border-color: transparent; }
.tag.green { background: var(--ok-bg); color: var(--ok-t); border-color: transparent; }
.tag.red { background: var(--bad-bg); color: var(--bad-t); border-color: transparent; }
.tag.gold { background: var(--warn-bg); color: var(--warn-t); border-color: transparent; }
.tag.purple { background: #f3eefb; color: #6e3fa8; border-color: transparent; }
.tag.gray { background: var(--fill); color: var(--t3); border-color: transparent; }
.tag.void { background: transparent; color: var(--t4); }
/* ===== 输入框：悬停边框加深，聚焦主色边 + 光圈 ===== */
.form-control, .form-select { border-color: var(--line-3); border-radius: var(--r); color: var(--t1); transition: border-color .12s, box-shadow .12s; }
.form-control:hover:not(:disabled), .form-select:hover:not(:disabled) { border-color: var(--t4); }
.form-control:focus, .form-select:focus { border-color: var(--pri); box-shadow: var(--ring); }
.form-control::placeholder { color: var(--t4); }
.form-control:disabled, .form-select:disabled { background: var(--fill); color: var(--t4); }
.field > label { color: var(--t2); font-size: 13px; font-weight: 500; }
input[type=checkbox], input[type=radio] { width: 16px; height: 16px; accent-color: var(--pri); cursor: pointer; vertical-align: -3px; }
label:has(> input[type=checkbox]), label:has(> input[type=radio]) { cursor: pointer; }
label > input[type=checkbox], label > input[type=radio] { margin: 0 8px 0 0 !important; float: none !important; flex: none; }

/* ===== 按钮：实色主按钮、白底描边次按钮；悬停加深，按下回弹 ===== */
.btn { border-radius: var(--r); font-weight: 500; transition: background .12s, border-color .12s, color .12s, box-shadow .12s, transform .08s; }
.btn:active:not(:disabled) { transform: scale(.97); }
.btn-sm { border-radius: 6px; font-size: 13px; }
.btn-primary { background: var(--pri); border-color: var(--pri); box-shadow: 0 1px 2px rgba(var(--pri-rgb), .3); }
.btn-primary:hover { background: var(--pri-h) !important; border-color: var(--pri-h) !important; }
.btn-primary:active { background: var(--pri-a) !important; border-color: var(--pri-a) !important; }
.btn-default { background: var(--card); border-color: var(--line-3); color: var(--t1); box-shadow: 0 1px 2px rgba(11,21,51,.05); }
.btn-default:hover { background: var(--fill); border-color: var(--line-3); color: var(--t1); }
.btn-danger { background: var(--bad); border-color: var(--bad); box-shadow: none; }
.btn-danger:hover { background: var(--bad-h); border-color: var(--bad-h); }
.btn:disabled, .btn.disabled { opacity: .5; }
.act { color: var(--pri); border-radius: 3px; } .act:hover { color: var(--pri-a); }
.act.danger { color: var(--bad-t); } .act.danger:hover { color: var(--bad); }
.table td a:not(.btn):hover, .act:hover, .desc a:hover, .list-item a:hover { text-decoration: underline; text-underline-offset: 3px; }

/* ===== 键盘焦点：主色光圈 ===== */
a:focus-visible, button:focus-visible, summary:focus-visible, [tabindex]:focus-visible { outline: 2px solid var(--pri); outline-offset: 2px; border-radius: 6px; }
.btn:focus-visible { outline: 0; box-shadow: var(--ring); }

/* ===== 反馈：提示条、弹窗、提示框 ===== */
.alert { border-radius: var(--r); }
.alert-info { background: var(--pri-00); border-color: var(--pri-1); }
.modal-content, .ant-msg > div, .user-menu .dropdown-menu { border-radius: var(--r-lg); box-shadow: var(--e3); }
.modal-backdrop.show { opacity: .32; }
.ant-msg > div { animation: msgin .22s var(--ease); }
.user-menu .dropdown-item { transition: background .1s; } .user-menu .dropdown-item:hover { background: var(--fill); }
.dp-card, .chip, .cal-ev { transition: filter .12s, box-shadow .12s; }
.dp-card:hover { box-shadow: 0 0 0 1px var(--kbd); }

/* ===== 登录页 ===== */
.login-page { background: var(--bg); }
.login-top .name { color: var(--t1); font-size: 28px; letter-spacing: -.6px; }
.login-top .name .brand-mark { width: 36px; height: 36px; border-radius: 9px; }
.login-top .desc-line { color: var(--t3); }
.login-box { background: var(--card); border-radius: 14px; padding: 4px 28px 28px; box-sizing: content-box; box-shadow: var(--e3); }
.login-tabs { border-bottom-color: var(--line); }
.login-tabs span { color: var(--pri-d); border-bottom-color: var(--pri); font-weight: 600; }
.affix > i { color: var(--t3); transition: color .12s; } .affix:focus-within > i { color: var(--pri); }
@media (max-width: 400px) { .login-box { padding-left: 16px; padding-right: 16px; } }
/* ===== 小招 ===== */
.xz-pop { border-radius: 14px; box-shadow: var(--e3); }
.xz-pop-head { border-bottom-color: var(--line); }
.xz-pop-head b { color: var(--t1); font-weight: 600; }
.xz-hbtn { transition: background .12s; }
.xz-ava { background: var(--pri-0); color: var(--pri); }
.xz-q-text { background: var(--pri); border-radius: 12px 12px 4px 12px; }
.xz-a-body { background: var(--fill); border-radius: 4px 12px 12px 12px; }
.xz-hello { background: var(--fill-2); box-shadow: 0 0 0 1px var(--line); }
.xz-ex-item { border-color: var(--line); transition: border-color .12s, background .12s, color .12s; }
.xz-ex-item:hover { border-color: var(--pri-2); color: var(--pri-d); background: var(--pri-00); }
.xz-ex-item i { color: var(--t3); } .xz-ex-item:hover i { color: var(--pri); }
.xz-input { border-color: var(--line-3); border-radius: 10px; }
.xz-input:hover { border-color: var(--t4); }
.xz-input:focus-within { border-color: var(--pri); box-shadow: var(--ring); }
.xz-send { background: var(--pri); border-radius: 7px; transition: background .12s, transform .08s; }
.xz-send:hover:not(:disabled) { background: var(--pri-h); } .xz-send:active:not(:disabled) { transform: scale(.94); }
.xz-send:disabled { background: var(--fill); color: var(--t4); }
.xz-bubble { background: var(--pri); box-shadow: 0 6px 16px -4px rgba(var(--pri-rgb), .5), 0 2px 4px rgba(0,0,0,.08); transition: background .12s, transform .12s var(--ease); }
.xz-bubble:hover { background: var(--pri-h); transform: translateY(-1px); } .xz-bubble:active { transform: scale(.94); }
.xz-ref { border-color: var(--pri-1); }
.xz-src-item:hover, .xz-src-item.on { background: var(--pri-0); }

/* ===== 专业目录：搜索框 + 试试 + 大类筛选 + 专业卡片 ===== */
.mgs-box { display: flex; align-items: center; gap: 10px; height: 46px; padding: 0 12px 0 14px; margin: 0; border: 1px solid var(--line-3); border-radius: 10px; background: var(--card); cursor: text; transition: border-color .12s, box-shadow .12s; }
.mgs-box:hover { border-color: var(--t4); }
.mgs-box:focus-within { border-color: var(--pri); box-shadow: var(--ring); }
.mgs-box > i { color: var(--t3); font-size: 17px; transition: color .12s; } .mgs-box:focus-within > i { color: var(--pri); }
.mgs-box input { flex: 1; min-width: 0; border: 0; outline: 0; background: none; font-size: 15px; color: var(--t1); }
.mgs-box input::placeholder { color: var(--t4); }
.mgs-box input::-webkit-search-cancel-button { display: none; }
.mgs-box kbd { font-family: var(--mono); font-size: 11px; color: var(--t3); background: var(--fill); border: 1px solid var(--line-2); border-radius: 4px; padding: 1px 6px; box-shadow: none; }
.mgs-box:focus-within kbd { visibility: hidden; }
/* 「试试」是一键填词，用虚线框，和下面的大类筛选区分开 */
.mgs-try { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin: 10px 0 16px; font-size: 13px; }
.mgs-try > span { color: var(--t4); margin-right: 2px; }
.mgs-try button { border: 1px dashed var(--line-3); background: var(--card); color: var(--t2); border-radius: 999px; padding: 0 10px; line-height: 22px; font-size: 12px; cursor: pointer; transition: all .12s; }
.mgs-try button:hover { border-style: solid; border-color: var(--pri-2); background: var(--pri-00); color: var(--pri-d); }
/* 大类筛选：没选中灰底，选中主色实底白字 */
.mgs-cats { display: flex; flex-wrap: wrap; gap: 6px; padding-bottom: 16px; border-bottom: 1px solid var(--line); }
.mgs-cat { border: 0; background: var(--fill); color: var(--t2); border-radius: 6px; padding: 0 10px; line-height: 28px; font-size: 13px; cursor: pointer; transition: background .12s, color .12s, transform .08s; }
.mgs-cat em { font-style: normal; font-size: 11px; color: var(--t4); margin-left: 5px; font-feature-settings: "tnum"; }
.mgs-cat:hover:not(.on) { background: var(--fill-h); color: var(--t1); }
.mgs-cat:active { transform: scale(.96); }
.mgs-cat.on { background: var(--pri); color: #fff; font-weight: 500; box-shadow: 0 1px 2px rgba(var(--pri-rgb), .35); }
.mgs-cat.on em { color: rgba(255,255,255,.75); }
.mgs-head { display: flex; align-items: baseline; gap: 8px; margin: 16px 0 10px; font-size: 13px; font-weight: 500; color: var(--t1); }
.mgs-head > span:not(.t) { color: var(--t3); font-weight: 400; font-feature-settings: "tnum"; }
.mgs-head .act { margin-left: auto; font-size: 13px; }
.mgs-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(232px, 1fr)); gap: 10px; }
/* 专业卡片：能点，悬停上浮 + 主色细边 + 右上角箭头 */
.mgs-card { position: relative; display: flex; flex-direction: column; gap: 4px; padding: 12px 14px; border-radius: var(--r); background: var(--card); box-shadow: 0 0 0 1px var(--line); color: var(--t1); }
.mgs-card::after { content: "\2192"; position: absolute; right: 12px; top: 10px; color: var(--pri); font-size: 14px; opacity: 0; transform: translateX(-4px); transition: opacity .16s, transform .16s var(--ease); }
.mgs-card:hover { color: var(--t1); box-shadow: var(--e2); transform: translateY(-2px); }
.mgs-card:hover::after { opacity: 1; transform: none; }
.mgs-card b { font-size: 14px; font-weight: 600; padding-right: 16px; transition: color .12s; }
.mgs-card p { margin: 0; flex: 1; color: var(--t2); font-size: 12.5px; line-height: 19px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.mgs-card .why { color: var(--pri-d); font-size: 12px; }
.mgs-card .ft { display: flex; justify-content: space-between; margin-top: 4px; font-size: 12px; color: var(--t3); }
.mgs-card .ft .n { font-feature-settings: "tnum"; margin-left: auto; }
.mgs-card mark { background: var(--pri-1); color: var(--pri-dd); padding: 0 1px; border-radius: 3px; }
.mgs-more { display: flex; align-items: center; justify-content: center; gap: 8px; width: 100%; margin-top: 10px; height: 36px; border: 1px solid var(--line-2); border-radius: var(--r); background: var(--card); color: var(--t1); font-size: 13px; font-weight: 500; cursor: pointer; transition: background .12s, border-color .12s; }
.mgs-more:hover { border-color: var(--line-3); background: var(--fill); }
.mgs-more span { color: var(--t4); font-size: 12px; font-weight: 400; }
.mgs-empty { padding: 24px 0 12px; color: var(--t3); font-size: 13px; }

/* ===== 小招出场的三处 ===== */
/* 1. 仪表台问候 = 小招播报：右边小招半身，旁边一句「今天先做什么」，点了滚到那张卡片 */
.dash-head { position: relative; overflow: visible; min-height: 132px; padding: 20px 232px 20px 24px; gap: 20px;
  background: radial-gradient(260px 180px at calc(100% - 90px) 100%, rgba(168,194,253,.45), transparent 70%), var(--card); }
.dash-head::after { content: ""; position: absolute; left: 24px; right: 232px; bottom: 0; height: 2px; border-radius: 2px;
  background: linear-gradient(90deg, transparent, var(--gold) 70%, transparent); opacity: .5; }
.dh-main { min-width: 0; }
.dh-main .btn-sm { height: 28px; padding: 0 12px; }
.xz-say { position: relative; margin-left: auto; max-width: 440px; display: grid; grid-template-columns: auto 1fr; gap: 2px 10px; align-items: baseline;
  text-align: left; border: 0; border-radius: 14px; padding: 12px 16px; background: var(--pri-00); box-shadow: 0 0 0 1px var(--pri-1); color: var(--t1);
  font-size: 14px; line-height: 22px; cursor: pointer; transition: box-shadow .16s var(--ease), background .16s, transform .16s var(--ease); }
.xz-say::after { content: ""; position: absolute; right: -7px; top: 50%; width: 14px; height: 14px; margin-top: -7px; background: inherit;
  transform: rotate(45deg); box-shadow: 1px -1px 0 0 var(--pri-1); border-radius: 0 3px 0 0; }
.xz-say .lbl { grid-row: span 2; align-self: start; font-size: 12px; font-weight: 600; color: var(--pri); background: var(--card); border-radius: 6px; padding: 0 6px;
  line-height: 20px; box-shadow: 0 0 0 1px var(--pri-1); }
.xz-say .msg b { color: var(--pri-d); font-weight: 600; }
.xz-say .go { color: var(--pri); font-size: 13px; font-weight: 500; }
.xz-say:hover:not(:disabled) { background: var(--pri-0); box-shadow: 0 0 0 1px var(--pri-2), 0 6px 16px -8px rgba(31,79,214,.4); transform: translateY(-1px); }
.xz-say:disabled { cursor: default; }
.dh-xz { position: absolute; right: 8px; bottom: 0; height: 152px; width: auto; pointer-events: none;
  -webkit-mask-image: linear-gradient(#000 70%, transparent); mask-image: linear-gradient(#000 70%, transparent);
  filter: drop-shadow(0 8px 14px rgba(13,42,128,.18)); }
@keyframes flashcard { 0%, 40% { box-shadow: 0 0 0 2px var(--pri), var(--e2); } 100% { box-shadow: var(--e1); } }
.flash-card { animation: flashcard 1.6s var(--ease); }
@media (max-width: 1199.98px) { .dash-head { flex-wrap: wrap; padding-right: 24px; } .dh-xz, .dash-head::after { display: none; } .xz-say { margin-left: 0; max-width: none; flex: 1 1 100%; } .xz-say::after { display: none; } }
/* 2. 登录页：小招徽章在系统名上面，旧的方块标不用 */
.login-xz { display: block; width: 132px; height: 132px; margin: 0 auto 6px; filter: drop-shadow(0 10px 18px rgba(13,42,128,.18)); }
.login-top .name .brand-mark { display: none; }
.login-top .name { gap: 0; } /* 原来的间距是给方块标留的，标不显示了，不然「·」两边会空太多 */
.login-top .name { font-size: 26px; }
.login-main { padding-top: 7vh; }
/* 3. 小招对话：头像、气泡、侧栏都用小招的脸 */
.xz-ava { background: #fff url(/xz/xiaozhao-face.webp) center / cover no-repeat; box-shadow: 0 0 0 1px var(--pri-1); }
.xz-ava > i { visibility: hidden; }
.xz-hello .xz-ava.big { width: 48px; height: 48px; }
.xz-bubble { background: #fff url(/xz/xiaozhao-face.webp) center / cover no-repeat; box-shadow: 0 0 0 2px var(--card), 0 0 0 4px var(--pri), 0 8px 20px -4px rgba(13,42,128,.4); }
.xz-bubble:hover { background-color: #fff; }
.xz-bubble .bi-chat-dots-fill { visibility: hidden; }
.xz-bubble.on { background: var(--pri); box-shadow: 0 6px 16px -4px rgba(31,79,214,.5); }
.xz-bubble.on:hover { background: var(--pri-h); }
.sidebar-menu a[href="#/assistant"] .nav-icon { display: inline-block; width: 18px; height: 18px; border-radius: 50%; background: url(/xz/xiaozhao-face.webp) center / cover no-repeat; box-shadow: 0 0 0 1px var(--pri-1); }
.sidebar-menu a[href="#/assistant"] .nav-icon::before { visibility: hidden; }

/* ===== 其它 ===== */
@media (prefers-reduced-motion: reduce) { *, *::before, *::after { transition-duration: .01ms !important; animation-duration: .01ms !important; } .br-card:hover, .mg-feat-item:hover, .mgs-card:hover { transform: none; } }
@media print { .card, .kpi, .ccard, .dash-head, .mf-sec, .br-head, .mf-hero, .br-hero { box-shadow: none !important; } }

/* 计费：账户页、自我介绍的扣点提示 */
.bill-pts { margin-left: 16px; color: var(--t3); font-size: 13px; }
.iv-pts-row { margin-top: 12px; }
.iv-pts { color: var(--t3); font-size: 13px; }
.iv-pts.off { color: var(--bad-t); }
.iv-pts .bi { margin-right: 6px; }

/* 学生页的面试准备。index.html 里有一段内联样式也定义了 .iv-item，这里用 !important 把勾选框排到题目左边 */
.iv-stu-h { font-size: 12px; color: var(--fg-3, #71717a); margin: 10px 0 4px; }
.iv-item { display: flex !important; flex-direction: row !important; align-items: flex-start; }
.iv-pick-q { flex: none; display: inline-flex; align-items: center; gap: 4px; margin-top: 2px; padding: 2px 8px; border: 1px solid var(--pri, #1f4fd6); border-radius: 4px; color: var(--pri, #1f4fd6); font-size: 12px; white-space: nowrap; cursor: pointer; }

/* ===== 管理员后台：侧栏分组、平台概览、机构 ===== */
.sidebar-menu .nav-header { padding: 18px 22px 6px; font-size: 12px; font-weight: 500; letter-spacing: .4px; color: var(--t4); }
.sidebar-menu .nav-header:first-child { padding-top: 8px; }
.cc-line { font-size: 13px; color: var(--t2); }
.cc-line b { font-weight: 600; color: var(--t1); }
.legend-inline { font-size: 13px; color: var(--t3); }
.legend-inline i { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin: 0 6px 0 14px; vertical-align: 0; }
.form-sep { margin: 0 0 16px; padding-top: 16px; border-top: 1px solid var(--line); font-size: 13px; font-weight: 500; color: var(--t3); }
.table td .bar { margin-left: auto; width: 96px; }
.org-pane[hidden] { display: none; }
/* 迷你柱：指标卡里近 14 天用点 */
.spark { display: flex; align-items: flex-end; gap: 3px; height: 40px; }
.spark i { flex: 1; min-width: 0; background: var(--pri); border-radius: 2px 2px 0 0; }
.spark i.z { height: 2px !important; background: var(--fill-h); }
.spark i:hover { background: var(--pri-d); }
/* 近 30 天用量：每天一根堆叠柱（自我介绍在下、小招在上），虚线网格 */
.uchart { position: relative; }
.ugrid { position: absolute; left: 0; right: 0; top: 0; height: 220px; display: flex; flex-direction: column; justify-content: space-between; pointer-events: none; }
.ugrid i { display: block; height: 0; margin-left: 36px; border-top: 1px solid var(--line); position: relative; }
.ugrid b { position: absolute; left: -36px; top: -8px; width: 28px; text-align: right; font-size: 11px; font-weight: 400; color: var(--t4); }
.uplot { position: relative; z-index: 1; height: 220px; margin-left: 36px; display: flex; gap: 4px; }
.ucol { flex: 1; min-width: 0; height: 100%; display: flex; justify-content: center; border-radius: 4px; transition: background .12s; }
.ucol:hover { background: var(--fill-2); }
.stk { width: 100%; max-width: 22px; height: 100%; display: flex; flex-direction: column; justify-content: flex-end; }
.stk i { display: block; flex: none; }
.stk i:first-child { border-radius: 3px 3px 0 0; }
.stk i + i { border-top: 1px solid var(--card); }
.ucol:hover .stk i { opacity: .82; }
.uax { display: flex; gap: 4px; margin: 6px 0 0 36px; }
.uax span { flex: 1; min-width: 0; position: relative; height: 16px; }
.uax em { position: absolute; left: 50%; transform: translateX(-50%); font-style: normal; font-size: 11px; color: var(--t3); white-space: nowrap; }
.uempty { position: absolute; left: 36px; right: 0; top: 0; height: 220px; display: grid; place-items: center; color: var(--t4); font-size: 13px; pointer-events: none; z-index: 2; }
/* 待处理：每条一行，能点的悬停变底色 */
.todo-row { display: flex; align-items: center; gap: 12px; padding: 10px 24px; border-top: 1px solid var(--line); color: var(--t1); transition: background .1s; }
a.todo-row:hover { background: var(--fill-2); color: var(--t1); }
.todo-row .tag { flex: none; margin: 0; }
.todo-text { flex: 1; min-width: 0; }
.todo-row > .bi { color: var(--t4); font-size: 12px; transition: transform .12s var(--ease), color .12s; }
a.todo-row:hover > .bi { color: var(--pri); transform: translateX(2px); }
/* 接口健康：一行一项，左标签右数字 */
.hl { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 0; border-bottom: 1px solid var(--line); font-size: 14px; }
.hl:first-child { padding-top: 0; }
.hl:last-child { border-bottom: 0; padding-bottom: 0; }
.hl span { color: var(--t3); }
.hl b { font-weight: 600; color: var(--t1); font-feature-settings: "tnum"; }
.hl b.bad { color: var(--bad-t); }
.hl b small { font-size: 12px; font-weight: 400; color: var(--t3); margin-left: 4px; }
.cc-mini > .bar.slim { flex: none; height: 8px; margin-top: 0; }
.mix .donut-wrap { flex-direction: column; align-items: stretch; gap: 20px; }
.mix .donut { margin: 0 auto; }
.mix .legend span { white-space: nowrap; }
.form-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 0 16px; }
.foot-tight { font-size: 13px; white-space: nowrap; }
.foot-tight .sep { margin: 0 7px; }
/* ===== 机构注册（登录页同款外框）和开通弹窗 ===== */
.login-alt { margin-top: 20px; text-align: center; font-size: 14px; color: var(--t3); }
.login-alt a { margin-left: 4px; font-weight: 500; }
.login-box.reg-box { width: 440px; }
.reg-page .login-main { padding-top: 5vh; padding-bottom: 32px; }
.reg-page .login-top { margin-bottom: 24px; }
.reg-sub { margin: -8px 0 20px; text-align: center; font-size: 13px; line-height: 1.6; color: var(--t3); }
.reg-box .field { margin-bottom: 16px; }
.reg-box .field > label { font-size: 13px; }
.reg-box .field .help { font-size: 12px; color: var(--t3); margin-top: 4px; }
.reg-box .form-control { height: 38px; border-radius: 8px; }
.reg-box .alert { margin-bottom: 16px; }
.reg-done { padding: 28px 0 4px; }
.reg-done > i { font-size: 56px; margin-bottom: 16px; color: var(--ok); }
.reg-done .r-title { font-size: 20px; font-weight: 600; margin-bottom: 8px; }
.reg-done .r-sub { font-size: 14px; line-height: 1.7; margin-bottom: 24px; word-break: break-all; }
@media (max-width: 520px) { .login-box.reg-box { width: 100%; } .reg-box .form-2 { grid-template-columns: 1fr; } }
/* 开通弹窗上方的注册信息（只读） */
.reg-info { display: grid; grid-template-columns: 1fr 1fr; gap: 6px 16px; margin-bottom: 20px; padding: 12px 16px; background: var(--fill-2); border-radius: var(--r); box-shadow: inset 0 0 0 1px var(--line); font-size: 13px; }
.reg-info > div { display: flex; gap: 6px; min-width: 0; }
.reg-info > div.wide { grid-column: 1 / -1; }
.reg-info span { flex: none; color: var(--t3); }
.reg-info span::after { content: "："; }
.reg-info b { font-weight: 400; color: var(--t1); word-break: break-all; }
/* 机构列表标题栏里的状态筛选 */
.card-head .extra .seg a { height: 26px; padding: 0 10px; font-size: 13px; }
/* 机构卡页脚：状态多到一行放不下时折行，不裁掉 */
.foot-tight { white-space: normal; line-height: 1.7; }
/* 表单里的复选框并排（原来被 .field > label 撑成整行，一个占一行） */
.field > label.form-check { display: inline-flex; margin: 0 24px 0 0; }
/* AI 功能没开通：菜单入口置灰，还能点进去看说明 */
.sidebar-menu .nav-link.nav-off { opacity: .5; }
/* 还没开通的账号：会写数据的按钮灰掉，点了只提示 */
.ro-off { opacity: .45; cursor: not-allowed; }

/* Token 用量：计算器的四格一行 */
.grid.tu-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
@media (max-width: 900px) { .grid.tu-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
