/* 由 tools/migrate.js 从原型 smart-fill.html 提取,勿手改结构性类名 */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
    html { scroll-behavior: smooth; }

    :root {
      --bg:          #F4F5F8;
      --surface:     #FFFFFF;
      --fg:          #1D2129;
      --sub:         #4E5969;
      --muted:       #86909C;
      --border:      #E5E6EB;
      --border-soft: #F0F1F3;
      --primary:     #5A5BE6;
      --primary-600: #4B4BD6;
      --primary-dim: #EEEEFC;
      --chong:       #F53F3F;
      --chong-bg:    #FFECE8;
      --wen:         #165DFF;
      --wen-bg:      #E8F3FF;
      --bao:         #D25F00;
      --bao-bg:      #FFF4E5;
      --dian:        #00B42A;
      --dian-bg:     #E8FFEA;
      --amber:       #FF7D00;
      --rail-w:      62px;
      --topbar-h:    58px;
    }

    body {
      font-family: -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", system-ui, sans-serif;
      background: var(--bg);
      color: var(--fg);
      min-height: 100vh;
      line-height: 1.5;
      -webkit-font-smoothing: antialiased;
      padding-left: var(--rail-w);
      padding-top: var(--topbar-h);
    }

    /* ===================== 左侧图标导航栏 ===================== */
    .rail {
      position: fixed;
      top: 0; left: 0; bottom: 0;
      width: var(--rail-w);
      background: var(--surface);
      border-right: 1px solid var(--border);
      z-index: 120;
      display: flex;
      flex-direction: column;
      align-items: center;
      padding: 10px 0 14px;
    }
    .rail-logo {
      width: 34px; height: 34px;
      border-radius: 9px;
      background: linear-gradient(135deg, var(--primary), #8A7BFF);
      color: #fff;
      font-weight: 800; font-size: 16px;
      display: flex; align-items: center; justify-content: center;
      margin-bottom: 14px;
      box-shadow: 0 4px 12px rgba(90,91,230,0.28);
    }
    .rail-nav { display: flex; flex-direction: column; gap: 2px; width: 100%; align-items: center; }
    .rail-item {
      width: 100%;
      display: flex; flex-direction: column; align-items: center; gap: 3px;
      padding: 9px 0;
      color: var(--muted);
      text-decoration: none;
      font-size: 10px;
      cursor: pointer;
      transition: color .15s;
      position: relative;
    }
    .rail-item svg { width: 20px; height: 20px; }
    .rail-item:hover { color: var(--sub); }
    .rail-item.active { color: var(--primary); }
    .rail-item.active::before {
      content: ""; position: absolute; left: 0; top: 8px; bottom: 8px;
      width: 3px; border-radius: 0 3px 3px 0; background: var(--primary);
    }
    .rail-spacer { flex: 1; }
    .rail-avatar {
      width: 30px; height: 30px; border-radius: 50%;
      background: #E9D9C6; color: #7A5B39; font-size: 12px; font-weight: 700;
      display: flex; align-items: center; justify-content: center;
    }

    /* ===================== 顶部考生档案栏 ===================== */
    .topbar {
      position: fixed;
      top: 0; left: var(--rail-w); right: 0;
      height: var(--topbar-h);
      background: var(--surface);
      border-bottom: 1px solid var(--border);
      z-index: 110;
      display: flex; align-items: center;
      padding: 0 18px;
      gap: 14px;
    }
    .tb-back {
      border: none; background: transparent; color: var(--sub);
      font-size: 20px; cursor: pointer; line-height: 1; padding: 4px;
    }
    .tb-name {
      font-size: 15px; font-weight: 700; color: var(--fg);
      display: flex; align-items: center; gap: 4px; white-space: nowrap;
    }
    .tb-name small { font-size: 11px; color: var(--muted); font-weight: 500; }
    .tb-divider { width: 1px; height: 22px; background: var(--border); }

    .tb-score { display: flex; align-items: center; gap: 6px; }
    .tb-score label { font-size: 12px; color: var(--muted); }
    .score-input {
      width: 68px; text-align: center;
      border: 1px solid var(--border); border-radius: 7px;
      padding: 5px 6px; font-size: 15px; font-weight: 700; color: var(--primary);
      outline: none; transition: border-color .15s, box-shadow .15s;
      background: #FBFBFE;
    }
    .score-input:focus { border-color: var(--primary); box-shadow: 0 0 0 3px var(--primary-dim); }
    .tb-score span.unit { font-size: 12px; color: var(--muted); }
    .tb-rank-sep { font-size: 13px; color: var(--muted); margin: 0 4px; }
    .tb-rank-label { font-size: 12px; color: var(--muted); }
    #scoreDisplay { font-size: 14px; font-weight: 700; color: var(--primary); min-width: 48px; white-space: nowrap; }
    #rankDisplay { font-size: 14px; font-weight: 700; color: var(--primary); min-width: 60px; white-space: nowrap; }

    .tb-chip {
      font-size: 12px; color: var(--sub); white-space: nowrap;
      background: #F7F8FA; border: 1px solid var(--border-soft);
      border-radius: 6px; padding: 4px 10px;
    }
    .tb-chip b { color: var(--fg); font-weight: 700; margin-left: 2px; }
    .tb-chip.amber b { color: var(--amber); }
    .tb-chip.batch b { color: var(--primary); }

    .tb-tabs { display: flex; align-items: center; gap: 6px; }
    .tb-tab {
      font-size: 12px; padding: 5px 12px; border-radius: 7px;
      background: var(--primary-dim); color: var(--primary); font-weight: 600;
      white-space: nowrap;
    }
    .tb-tab-add {
      width: 24px; height: 24px; border-radius: 6px; border: 1px dashed var(--border);
      color: var(--muted); display: flex; align-items: center; justify-content: center;
      font-size: 15px; cursor: pointer;
    }

    .tb-right { margin-left: auto; display: flex; align-items: center; gap: 16px; }
    .legend { display: flex; align-items: center; gap: 10px; font-size: 12px; color: var(--sub); }
    .legend .dot { width: 8px; height: 8px; border-radius: 50%; display: inline-block; margin-right: 4px; vertical-align: middle; }
    .legend .item { white-space: nowrap; }
    .dot.chong { background: var(--chong); }
    .dot.wen   { background: var(--wen); }
    .dot.bao   { background: var(--bao); }
    .btn-primary {
      display: inline-flex; align-items: center; gap: 6px;
      background: var(--primary); color: #fff; border: none;
      border-radius: 8px; padding: 8px 18px; font-size: 13px; font-weight: 600;
      cursor: pointer; transition: background .15s, box-shadow .15s;
      white-space: nowrap;
    }
    .btn-primary:hover { background: var(--primary-600); box-shadow: 0 4px 14px rgba(90,91,230,0.3); }
    .btn-primary svg { width: 15px; height: 15px; }

    /* ===================== 主体 ===================== */
    .main { padding: 14px 18px 60px; }

    /* ---- 多维筛选面板 ---- */
    .filter-panel {
      background: var(--surface);
      border: 1px solid var(--border);
      border-radius: 12px;
      padding: 12px 16px;
      margin-bottom: 12px;
    }
    .filter-head { display: flex; align-items: center; gap: 12px; margin-bottom: 10px; }
    .filter-toggle {
      border: none; background: transparent; color: var(--primary);
      font-size: 13px; font-weight: 600; cursor: pointer; white-space: nowrap;
      display: inline-flex; align-items: center; gap: 5px;
    }
    .filter-toggle svg { width: 14px; height: 14px; }
    .search-box { flex: 1; display: flex; align-items: center; gap: 8px;
      background: #F7F8FA; border: 1px solid var(--border); border-radius: 8px; padding: 7px 12px; }
    .search-box svg { width: 16px; height: 16px; color: var(--muted); flex-shrink: 0; }
    .search-box input { flex: 1; border: none; background: transparent; outline: none; font-size: 13px; color: var(--fg); }
    .search-box input::placeholder { color: var(--muted); }

    .filter-body { display: flex; flex-direction: column; gap: 9px; }
    .filter-body.collapsed { display: none; }
    .filter-row { display: flex; align-items: flex-start; gap: 12px; }
    .filter-label {
      font-size: 13px; color: var(--muted); white-space: nowrap;
      padding-top: 5px; min-width: 60px; flex-shrink: 0;
    }
    .pills { display: flex; flex-wrap: wrap; gap: 7px; }
    .pill {
      font-size: 13px; padding: 4px 14px; border-radius: 15px;
      border: 1px solid transparent; background: transparent; color: var(--sub);
      cursor: pointer; transition: all .15s; white-space: nowrap;
    }
    .pill:hover { color: var(--primary); background: var(--primary-dim); }
    .pill.active { color: var(--primary); background: var(--primary-dim); font-weight: 600; }
    .pill.limit.active { color: var(--primary); }

    /* ---- 冲稳保分段选项卡 ---- */
    .strategy-bar {
      display: flex; align-items: flex-end; justify-content: space-between;
      gap: 12px; margin-bottom: 0; flex-wrap: wrap;
    }
    .strategy-tabs { display: flex; align-items: flex-end; gap: 4px; }
    .stab {
      border: 1px solid transparent; border-bottom: none;
      background: transparent; color: var(--sub);
      font-size: 14px; font-weight: 600; cursor: pointer;
      padding: 10px 20px; border-radius: 10px 10px 0 0;
      display: flex; align-items: center; gap: 6px; transition: all .15s;
    }
    .stab em { font-style: normal; font-size: 12px; color: var(--muted); font-weight: 700; }
    .stab:hover { color: var(--primary); }
    .stab.active {
      background: var(--surface); color: var(--primary);
      border-color: var(--border); position: relative; top: 1px;
    }
    .stab.active em { color: var(--primary); }
    .stab.disabled { color: #C9CDD4; cursor: not-allowed; }
    .stab.disabled:hover { color: #C9CDD4; }
    .strategy-hint { font-size: 12px; color: var(--muted); padding-bottom: 8px; }
    .strategy-hint b { color: var(--primary); font-weight: 600; }

    /* ---- 数据表 ---- */
    .table-wrap {
      background: var(--surface);
      border: 1px solid var(--border);
      border-radius: 0 12px 12px 12px;
      overflow: hidden;
    }
    .table-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; }
    .data-table { width: 100%; border-collapse: collapse; min-width: 860px; font-size: 13px; }
    .data-table thead th {
      background: #FAFAFC; color: var(--muted); font-size: 12px; font-weight: 600;
      text-align: left; padding: 11px 16px; border-bottom: 1px solid var(--border);
      white-space: nowrap;
    }
    .data-table tbody td { padding: 14px 16px; border-bottom: 1px solid var(--border-soft); vertical-align: top; }
    .data-table tbody tr:last-child td { border-bottom: none; }
    .data-table tbody tr:hover td { background: #FBFBFE; }
    tr.kr-chong td.col-school { box-shadow: inset 3px 0 0 var(--chong); }
    tr.kr-wen   td.col-school { box-shadow: inset 3px 0 0 var(--wen); }
    tr.kr-bao   td.col-school { box-shadow: inset 3px 0 0 var(--bao); }
    tr.kr-dian  td.col-school { box-shadow: inset 3px 0 0 var(--dian); }
    /* 列宽固定，表头与数据对齐 */
    .data-table { min-width: 940px; }
    .col-school   { width: auto; min-width: 280px; }
    .col-plan26   { width: 132px; white-space: nowrap; }
    .col-histlabel{ width: 64px; white-space: nowrap; }
    .col-yr       { width: 100px; white-space: nowrap; }
    .col-act      { width: 118px; text-align: right; vertical-align: middle; }

    /* 26年计划 */
    .p26-num { font-size: 17px; font-weight: 800; color: var(--fg); }
    .p26-num .u { font-size: 11px; font-weight: 600; margin-left: 1px; }
    .p26-sub { font-size: 12px; color: var(--muted); margin-top: 4px; line-height: 1.4; }
    /* 历年数据块：标签列与各年份列逐行对齐（用行高排布，避免文字叠加）*/
    .hcell .r { line-height: 26px; min-height: 26px; font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
    .col-histlabel .r { color: var(--muted); font-size: 12px; }
    .hcell .r.score { font-weight: 700; font-size: 15px; color: var(--fg); }
    .hcell .r.rank  { color: var(--sub); font-size: 12px; }
    .hd-up { color: var(--chong); font-weight: 600; }
    .hd-down { color: var(--bao); font-weight: 600; }
    .hd-muted { color: var(--muted); }

    .pos-badge {
      display: inline-flex; align-items: baseline; gap: 3px;
      vertical-align: middle; margin-right: 6px;
      padding: 2px 8px; border-radius: 6px; font-size: 12px; font-weight: 700;
    }
    .pos-badge em { font-style: normal; font-size: 10px; font-weight: 600; opacity: .85; }
    .pos-badge.chong { background: var(--chong-bg); color: var(--chong); }
    .pos-badge.wen   { background: var(--wen-bg);   color: var(--wen); }
    .pos-badge.bao   { background: var(--bao-bg);   color: var(--bao); }
    .pos-badge.high  { background: #F2F3F5; color: var(--muted); }

    .school-idx { font-size: 11px; color: var(--muted); margin-bottom: 2px; }
    .school-name { font-size: 15px; font-weight: 700; color: var(--fg); line-height: 1.5; }
    .school-title { color: var(--fg); }
    .school-meta { font-size: 12px; color: var(--muted); margin-top: 3px; }
    .school-tags { display: flex; gap: 6px; margin-top: 6px; flex-wrap: wrap; }
    .stag {
      font-size: 11px; padding: 1px 8px; border-radius: 4px;
      background: #F2F3F5; color: var(--sub);
    }
    .stag.gov { background: var(--wen-bg); color: var(--wen); }
    .stag.priv { background: #FFF7E8; color: var(--amber); }
    .row-actions { display: flex; gap: 14px; margin-top: 8px; }
    .row-action { font-size: 12px; color: var(--muted); cursor: pointer; display: inline-flex; align-items: center; gap: 3px; }
    .row-action:hover { color: var(--primary); }
    .row-action.ai { color: var(--primary); font-weight: 600; }

    .year-cell { min-width: 92px; }
    .y-score { font-size: 15px; font-weight: 700; color: var(--fg); }
    .y-rank { font-size: 11px; color: var(--muted); margin-top: 2px; }
    .y-empty { color: #C9CDD4; }

    .plan-chg { font-size: 12px; font-weight: 600; }
    .plan-up { color: var(--amber); }
    .plan-down { color: var(--bao); }
    .plan-none { color: var(--muted); font-weight: 400; }

    .trend-badge {
      display: inline-flex; align-items: center; gap: 4px;
      padding: 4px 10px; border-radius: 100px; font-size: 12px; font-weight: 600;
      cursor: pointer; border: 1px solid transparent; transition: all .15s;
    }
    .trend-badge:hover { filter: brightness(0.97); }
    .trend-badge.up   { background: var(--chong-bg); color: var(--chong); }
    .trend-badge.down { background: var(--bao-bg);   color: var(--bao); }
    .trend-badge.flat { background: #F2F3F5;         color: var(--sub); }
    .trend-badge.na   { background: #F7F8FA;         color: var(--muted); }

    .empty-row td { text-align: center; color: var(--muted); padding: 40px 0; }

    /* ---- 趋势弹窗 ---- */
    .chart-modal {
      display: none; position: fixed; inset: 0;
      background: rgba(29,33,41,0.45); z-index: 300;
      align-items: center; justify-content: center;
    }
    .chart-modal.open { display: flex; }
    .chart-modal-content {
      background: var(--surface); border-radius: 16px; padding: 28px;
      max-width: 440px; width: 90%; position: relative;
      box-shadow: 0 20px 60px rgba(0,0,0,0.2);
    }
    .chart-modal-close { position: absolute; top: 16px; right: 18px; background: none; border: none; color: var(--muted); font-size: 20px; cursor: pointer; }
    .chart-modal-title { font-size: 17px; font-weight: 700; margin-bottom: 22px; }
    .mini-chart { display: flex; align-items: flex-end; gap: 28px; height: 130px; justify-content: center; }
    .mini-chart .bar { display: flex; flex-direction: column; align-items: center; gap: 6px; }
    .mini-chart .bar .bar-value { font-size: 13px; font-weight: 700; color: var(--fg); }
    .mini-chart .bar .col { width: 46px; border-radius: 6px 6px 0 0; }
    .mini-chart .bar .bar-label { font-size: 11px; color: var(--muted); text-align: center; }
    .chart-note { text-align: center; margin-top: 18px; font-size: 13px; color: var(--sub); }

    /* ---- 底部操作条 ---- */
    .footer-bar {
      position: fixed; bottom: 0; left: var(--rail-w); right: 0;
      background: rgba(255,255,255,0.92); backdrop-filter: blur(10px);
      border-top: 1px solid var(--border); z-index: 105;
      display: flex; align-items: center; justify-content: flex-end; gap: 12px;
      padding: 10px 20px;
    }
    .footer-info { margin-right: auto; font-size: 12px; color: var(--muted); }
    .footer-info b { color: var(--fg); }
    .btn-ghost {
      border: 1px solid var(--border); background: var(--surface); color: var(--sub);
      border-radius: 8px; padding: 8px 18px; font-size: 13px; font-weight: 600; cursor: pointer;
      transition: all .15s;
    }
    .btn-ghost:hover { border-color: var(--primary); color: var(--primary); }

    /* ===================== 加入志愿表按钮 ===================== */
    .add-btn {
      border: 1px solid var(--primary); background: var(--primary-dim); color: var(--primary);
      border-radius: 7px; padding: 5px 12px; font-size: 12px; font-weight: 600; cursor: pointer;
      transition: all .15s; white-space: nowrap;
    }
    .add-btn:hover { background: var(--primary); color: #fff; }
    .add-btn.added { background: var(--bao-bg); border-color: var(--bao); color: var(--bao); }
    .add-btn.added:hover { background: #FFECE8; border-color: var(--chong); color: var(--chong); }

    /* ===================== 志愿表侧滑抽屉 ===================== */
    .vt-handle {
      position: fixed; right: 0; top: 42%; z-index: 130;
      background: var(--primary); color: #fff; cursor: pointer;
      border-radius: 12px 0 0 12px; padding: 14px 10px; text-align: center;
      box-shadow: -4px 4px 16px rgba(90,91,230,0.35);
      writing-mode: vertical-lr; letter-spacing: 2px; font-weight: 700; font-size: 14px;
      display: flex; flex-direction: column; align-items: center; gap: 8px;
      transition: transform .2s;
    }
    .vt-handle:hover { transform: translateX(-2px); }
    .vt-handle .vt-count {
      writing-mode: horizontal-tb; background: #fff; color: var(--primary);
      min-width: 22px; height: 22px; border-radius: 11px; font-size: 12px; font-weight: 800;
      display: flex; align-items: center; justify-content: center; padding: 0 6px;
    }
    .vt-overlay {
      position: fixed; inset: 0; background: rgba(29,33,41,0.4);
      z-index: 190; opacity: 0; pointer-events: none; transition: opacity .28s;
    }
    .vt-overlay.open { opacity: 1; pointer-events: auto; }
    .vt-drawer {
      position: fixed; top: 0; right: 0; bottom: 0; width: 440px; max-width: 92vw;
      background: var(--surface); z-index: 200; display: flex; flex-direction: column;
      transform: translateX(100%); transition: transform .3s cubic-bezier(.4,0,.2,1);
      box-shadow: -8px 0 32px rgba(0,0,0,0.15);
    }
    .vt-drawer.open { transform: none; }
    .vt-head { padding: 16px 20px; border-bottom: 1px solid var(--border); }
    .vt-head-top { display: flex; align-items: center; justify-content: space-between; }
    .vt-title { font-size: 16px; font-weight: 700; }
    .vt-title small { font-size: 12px; color: var(--muted); font-weight: 500; margin-left: 6px; }
    .vt-close { border: none; background: transparent; font-size: 20px; color: var(--muted); cursor: pointer; }
    .vt-dist { display: flex; gap: 8px; margin-top: 12px; }
    .vt-dist .chip {
      flex: 1; text-align: center; border-radius: 8px; padding: 8px 0; font-size: 12px; font-weight: 600;
    }
    .vt-dist .chip b { display: block; font-size: 17px; margin-top: 2px; }
    .vt-dist .c-chong { background: var(--chong-bg); color: var(--chong); }
    .vt-dist .c-wen   { background: var(--wen-bg);   color: var(--wen); }
    .vt-dist .c-bao   { background: var(--bao-bg);   color: var(--bao); }

    .tb-tab em { font-style: normal; font-size: 11px; margin-left: 5px; background: var(--primary); color: #fff; border-radius: 8px; padding: 0 5px; }
    .tb-tab { cursor: pointer; }
    .tb-tab.active { background: var(--primary); color: #fff; }
    .tb-tab.active em { background: rgba(255,255,255,.28); }

    .vt-sheets { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 12px; }
    .vt-sheet { font-size: 12px; padding: 5px 12px; border-radius: 7px; border: 1px solid var(--border); color: var(--sub); cursor: pointer; background: var(--surface); }
    .vt-sheet:hover { border-color: var(--primary); color: var(--primary); }
    .vt-sheet.active { background: var(--primary-dim); border-color: var(--primary); color: var(--primary); font-weight: 700; }
    .vt-sheet.add { border-style: dashed; color: var(--muted); }
    .vt-sheetbar { display: flex; align-items: center; gap: 14px; margin-top: 12px; }
    .vt-sheetname { font-size: 13px; font-weight: 700; margin-right: auto; }
    .vt-act { font-size: 12px; color: var(--muted); cursor: pointer; }
    .vt-act:hover { color: var(--primary); }
    .vt-act.danger:hover { color: var(--chong); }
    .vt-adjust { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; color: var(--sub); margin-top: 6px; cursor: pointer; }
    .vt-adjust input { accent-color: var(--primary); width: 14px; height: 14px; }

    .vt-hint-box {
      margin: 14px 16px 0; padding: 14px 16px;
      background: linear-gradient(135deg, #FFF7E6, #FFF1CC);
      border: 1.5px solid #FFCF8B; border-radius: 10px;
      display: flex; align-items: center; gap: 10px;
      box-shadow: 0 2px 8px rgba(255, 160, 0, 0.12);
    }
    .vt-hint-icon { font-size: 22px; line-height: 1; }
    .vt-hint-text { font-size: 14px; color: #8A5A00; line-height: 1.5; }
    .vt-hint-text b { color: #D25F00; }

    .vt-talent-hint {
      margin: 0 14px 8px; padding: 8px 12px;
      background: var(--wen-bg); border: 1px solid rgba(22,93,255,.2); border-radius: 8px;
      display: flex; align-items: flex-start; gap: 8px;
      font-size: 12px; color: var(--wen); line-height: 1.5;
    }
    .vt-talent-icon { font-size: 16px; line-height: 1; flex-shrink: 0; margin-top: 1px; }
    .vt-talent-body b { font-weight: 700; }

    .vt-tip { font-size: 12px; color: var(--muted); padding: 10px 20px 0; display: flex; align-items: center; gap: 6px; }
    .vt-list { flex: 1; overflow-y: auto; padding: 10px 14px 14px; }
    .vt-item {
      display: flex; align-items: center; gap: 10px;
      background: var(--surface); border: 1px solid var(--border); border-radius: 10px;
      padding: 10px 12px; margin-bottom: 8px; cursor: grab;
      transition: box-shadow .15s, border-color .15s;
    }
    .vt-item:hover { border-color: var(--primary); }
    .vt-item.dragging { opacity: .5; cursor: grabbing; box-shadow: 0 8px 20px rgba(0,0,0,0.12); border-color: var(--primary); }
    .vt-grip { color: #C9CDD4; font-size: 16px; line-height: 1; flex-shrink: 0; }
    .vt-idx {
      width: 24px; height: 24px; border-radius: 50%; background: var(--primary); color: #fff;
      font-size: 12px; font-weight: 700; display: flex; align-items: center; justify-content: center; flex-shrink: 0;
    }
    .vt-body { flex: 1; min-width: 0; }
    .vt-name { font-size: 14px; font-weight: 700; display: flex; align-items: center; gap: 6px; }
    .vt-badge { font-size: 11px; font-weight: 700; padding: 1px 6px; border-radius: 5px; }
    .vt-badge.chong { background: var(--chong-bg); color: var(--chong); }
    .vt-badge.wen   { background: var(--wen-bg);   color: var(--wen); }
    .vt-badge.bao   { background: var(--bao-bg);   color: var(--bao); }
    .vt-badge.high  { background: #F2F3F5; color: var(--muted); }
    .vt-sub { font-size: 12px; color: var(--muted); margin-top: 2px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
    .vt-remove { border: none; background: transparent; color: #C9CDD4; font-size: 16px; cursor: pointer; flex-shrink: 0; }
    .vt-remove:hover { color: var(--chong); }
    .vt-empty { text-align: center; color: var(--muted); padding: 60px 20px; font-size: 13px; }
    .vt-empty svg { width: 40px; height: 40px; color: #D8DCE3; margin-bottom: 12px; }
    .vt-foot { padding: 14px 20px; border-top: 1px solid var(--border); display: flex; gap: 10px; }
    .vt-foot .btn-primary { flex: 1; justify-content: center; }
    .vt-foot .btn-ghost { flex: 1; }

    /* ===================== 工具箱 · 院校库弹出面板 ===================== */
    .lib-mask {
      position: fixed; top: 0; left: var(--rail-w); right: 0; bottom: 0;
      background: rgba(29,33,41,0.3); z-index: 150;
      opacity: 0; pointer-events: none; transition: opacity .25s;
    }
    .lib-mask.open { opacity: 1; pointer-events: auto; }
    .lib-panel {
      position: fixed; top: 0; left: var(--rail-w); right: 0; bottom: 0; z-index: 160;
      background: var(--surface); border-radius: 16px 0 0 0;
      transform: translateY(100%); transition: transform .32s cubic-bezier(.4,0,.2,1);
      display: flex; flex-direction: column;
      box-shadow: 0 -8px 40px rgba(0,0,0,0.12);
    }
    .lib-panel.open { transform: none; }
    .lib-head { padding: 22px 28px 8px; display: flex; align-items: center; gap: 12px; }
    .lib-head h2 { font-size: 20px; font-weight: 800; }
    .lib-head .lib-count { font-size: 13px; color: var(--muted); font-weight: 500; }
    .lib-close { margin-left: auto; border: none; background: transparent; font-size: 22px; color: var(--muted); cursor: pointer; }
    .lib-close:hover { color: var(--fg); }
    .lib-toolbar { padding: 8px 28px 16px; display: flex; gap: 12px; align-items: center; }
    .lib-filter {
      display: inline-flex; align-items: center; gap: 8px;
      border: 1px solid var(--border); border-radius: 8px; padding: 9px 14px;
      font-size: 13px; font-weight: 600; color: var(--sub); cursor: pointer; background: var(--surface);
    }
    .lib-filter:hover { border-color: var(--primary); color: var(--primary); }
    .lib-filter svg { width: 15px; height: 15px; }
    .lib-search {
      flex: 1; max-width: 560px; display: flex; align-items: center; gap: 8px;
      background: #F7F8FA; border: 1px solid var(--border); border-radius: 8px; padding: 9px 14px;
    }
    .lib-search svg { width: 16px; height: 16px; color: var(--muted); }
    .lib-search input { flex: 1; border: none; background: transparent; outline: none; font-size: 14px; color: var(--fg); }
    .lib-list { flex: 1; overflow-y: auto; padding: 0 28px 28px; }
    .lib-item {
      display: flex; gap: 16px; align-items: flex-start;
      padding: 16px 0; border-bottom: 1px solid var(--border-soft);
    }
    .lib-logo {
      width: 50px; height: 50px; border-radius: 50%; flex-shrink: 0;
      display: flex; align-items: center; justify-content: center;
      font-size: 15px; font-weight: 800; letter-spacing: 1px;
    }
    .lib-info { flex: 1; min-width: 0; }
    .lib-name { font-size: 17px; font-weight: 800; color: var(--fg); }
    .lib-meta { font-size: 13px; color: var(--muted); margin-top: 4px; }
    .lib-tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 9px; }
    .lib-tag {
      font-size: 11px; padding: 2px 9px; border: 1px solid var(--border);
      border-radius: 5px; color: var(--sub); background: #FCFCFD;
    }
    .lib-tag.hot { border-color: var(--chong); color: var(--chong); background: var(--chong-bg); }
    .lib-item .add-btn { align-self: center; flex-shrink: 0; }

    .lib-item { cursor: pointer; transition: background .12s; }
    .lib-item:hover { background: #FBFBFE; }
    .lib-item:hover .lib-name { color: var(--primary); }

    /* ===================== 院校详情页 ===================== */
    .detail-panel {
      position: fixed; top: 0; left: var(--rail-w); right: 0; bottom: 0; z-index: 170;
      background: var(--bg); transform: translateX(100%);
      transition: transform .3s cubic-bezier(.4,0,.2,1);
      display: flex; flex-direction: column;
    }
    .detail-panel.open { transform: none; }
    .dt-top { background: var(--surface); border-bottom: 1px solid var(--border); padding: 14px 28px; display: flex; align-items: center; gap: 14px; }
    .dt-back { border: none; background: transparent; color: var(--sub); font-size: 14px; font-weight: 600; cursor: pointer; display: inline-flex; align-items: center; gap: 4px; }
    .dt-back:hover { color: var(--primary); }
    .dt-divider { width: 1px; height: 26px; background: var(--border); }
    .dt-logo { width: 46px; height: 46px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-weight: 800; font-size: 15px; flex-shrink: 0; }
    .dt-htitle { font-size: 20px; font-weight: 800; }
    .dt-hmeta { font-size: 13px; color: var(--muted); margin-top: 2px; }
    .dt-tier { margin-left: auto; font-size: 13px; font-weight: 700; padding: 6px 14px; border-radius: 8px; background: var(--primary-dim); color: var(--primary); }
    .dt-body { flex: 1; overflow-y: auto; padding: 22px 28px 48px; }
    .dt-hero { display: flex; gap: 14px; margin-bottom: 20px; flex-wrap: wrap; }
    .dt-stat { flex: 1; min-width: 130px; background: var(--surface); border: 1px solid var(--border); border-radius: 12px; padding: 15px 18px; }
    .dt-stat .k { font-size: 12px; color: var(--muted); }
    .dt-stat .v { font-size: 24px; font-weight: 800; margin-top: 4px; }
    .dt-stat .v.small { font-size: 16px; }
    .dt-sec { background: var(--surface); border: 1px solid var(--border); border-radius: 12px; padding: 18px 20px; margin-bottom: 16px; }
    .dt-sec h3 { font-size: 15px; font-weight: 800; margin-bottom: 14px; display: flex; align-items: center; gap: 8px; }
    .dt-sec h3::before { content: ''; width: 4px; height: 15px; background: var(--primary); border-radius: 2px; }
    .dt-sec h3 small { font-size: 11px; font-weight: 500; color: var(--muted); }
    .dt-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 14px 20px; }
    .dt-field .fk { font-size: 12px; color: var(--muted); }
    .dt-field .fv { font-size: 15px; font-weight: 700; margin-top: 3px; }
    .dt-field .fv.na { color: #B0B7C3; font-weight: 500; }
    .dt-table { width: 100%; border-collapse: collapse; font-size: 13px; }
    .dt-table th, .dt-table td { padding: 9px 10px; border-bottom: 1px solid var(--border-soft); text-align: center; }
    .dt-table th { color: var(--muted); font-weight: 600; background: #FAFAFC; }
    .dt-table td.lbl { text-align: left; color: var(--muted); }
    .dt-table td b { font-size: 15px; }
    .dt-note { font-size: 12px; color: var(--muted); margin-top: 12px; line-height: 1.7; }
    .dt-tags2 { display: flex; flex-wrap: wrap; gap: 8px; }
    .dt-chip { font-size: 12px; padding: 4px 11px; border-radius: 6px; background: var(--primary-dim); color: var(--primary); font-weight: 600; }
    .dt-chip.g { background: var(--bao-bg); color: var(--bao); }
    .dt-chip.o { background: #FFF7E8; color: var(--amber); }
    .dt-special { background: linear-gradient(135deg, var(--primary-dim), #F3F0FF); border: 1px solid #E4E0FA; border-radius: 10px; padding: 14px 16px; font-size: 14px; line-height: 1.6; }
    .dt-special b { color: var(--primary); }
    .dt-link { color: var(--primary); text-decoration: none; font-weight: 600; }
    .dt-link:hover { text-decoration: underline; }

    /* ===================== 用户管理 ===================== */
    .um-mask { position: fixed; top: 0; left: var(--rail-w); right: 0; bottom: 0; background: rgba(29,33,41,0.3); z-index: 150; opacity: 0; pointer-events: none; transition: opacity .25s; }
    .um-mask.open { opacity: 1; pointer-events: auto; }
    .um-panel { position: fixed; top: 0; left: var(--rail-w); right: 0; bottom: 0; z-index: 160; background: var(--surface); border-radius: 16px 0 0 0; transform: translateY(100%); transition: transform .32s cubic-bezier(.4,0,.2,1); display: flex; flex-direction: column; box-shadow: 0 -8px 40px rgba(0,0,0,0.12); }
    .um-panel.open { transform: none; }
    .um-head { padding: 20px 28px 12px; display: flex; align-items: center; gap: 12px; border-bottom: 1px solid var(--border); }
    .um-head h2 { font-size: 20px; font-weight: 800; }
    .um-head .um-sub { font-size: 13px; color: var(--muted); }
    .um-body { flex: 1; display: flex; min-height: 0; }
    .um-groups { width: 180px; border-right: 1px solid var(--border); padding: 16px 12px; overflow-y: auto; flex-shrink: 0; }
    .um-groups .gt { font-size: 12px; color: var(--muted); font-weight: 600; padding: 0 8px 8px; }
    .um-group { display: flex; align-items: center; gap: 6px; padding: 8px 10px; border-radius: 8px; font-size: 13px; color: var(--sub); cursor: pointer; margin-bottom: 2px; }
    .um-group:hover { background: #F7F8FA; }
    .um-group.active { background: var(--primary-dim); color: var(--primary); font-weight: 700; }
    .um-gname { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
    .um-group .n { font-size: 12px; color: var(--muted); }
    .um-group.active .n { color: var(--primary); }
    .um-gact { display: none; gap: 8px; align-items: center; }
    .um-gact .gi { cursor: pointer; color: var(--muted); font-size: 12px; }
    .um-gact .gi:hover { color: var(--primary); }
    .um-gact .gi.del:hover { color: var(--chong); }
    .um-group.has-act:hover .n { display: none; }
    .um-group.has-act:hover .um-gact { display: inline-flex; }
    .um-newgroup { margin-top: 8px; padding: 8px 10px; border: 1px dashed var(--border); border-radius: 8px; font-size: 13px; color: var(--muted); cursor: pointer; text-align: center; }
    .um-newgroup:hover { border-color: var(--primary); color: var(--primary); }
    .um-main { flex: 1; display: flex; flex-direction: column; min-width: 0; }
    .um-toolbar { display: flex; align-items: center; gap: 10px; padding: 14px 24px; flex-wrap: wrap; }
    .um-toolbar .lib-search { max-width: 260px; }
    .um-toolbar select { border: 1px solid var(--border); border-radius: 8px; padding: 8px 12px; font-size: 13px; color: var(--sub); background: var(--surface); outline: none; cursor: pointer; }
    .um-toolbar .spacer { flex: 1; }
    .um-batchbar { display: none; align-items: center; gap: 14px; padding: 8px 24px; background: var(--primary-dim); font-size: 13px; color: var(--primary); }
    .um-batchbar.show { display: flex; }
    .um-batchbar b { font-weight: 800; }
    .um-batchbar .act { cursor: pointer; font-weight: 600; }
    .um-batchbar .act:hover { text-decoration: underline; }
    .um-batchbar .act.danger { color: var(--chong); }
    .um-tablewrap { flex: 1; overflow: auto; padding: 0 24px 24px; }
    .um-table { width: 100%; border-collapse: collapse; font-size: 13px; min-width: 780px; }
    .um-table th { position: sticky; top: 0; background: #FAFAFC; color: var(--muted); font-size: 12px; font-weight: 600; text-align: left; padding: 11px 12px; border-bottom: 1px solid var(--border); white-space: nowrap; z-index: 1; }
    .um-table td { padding: 12px; border-bottom: 1px solid var(--border-soft); vertical-align: middle; white-space: nowrap; }
    .um-table tbody tr:hover td { background: #FBFBFE; }
    .um-uname { font-weight: 700; }
    .um-score b { color: var(--primary); }
    .um-grouptag { font-size: 11px; padding: 2px 8px; border-radius: 5px; background: #F2F3F5; color: var(--sub); }
    .um-view { border: 1px solid var(--border); background: var(--surface); color: var(--primary); border-radius: 7px; padding: 5px 12px; font-size: 12px; font-weight: 600; cursor: pointer; }
    .um-view:hover { border-color: var(--primary); }
    .um-del { border: none; background: transparent; color: var(--muted); cursor: pointer; font-size: 13px; margin-left: 6px; }
    .um-del:hover { color: var(--chong); }
    .um-empty { text-align: center; color: var(--muted); padding: 50px; }
    .um-ck { width: 15px; height: 15px; accent-color: var(--primary); cursor: pointer; }

    /* 响应式适配统一见 assets/mobile.css */

    /* ===================== 垫 ===================== */
    .dot.dian { background: var(--dian); }
    .c-dian { background: var(--dian-bg); color: var(--dian); }
    .c-dian b { color: var(--dian); }
    .pos-badge.dian { background: var(--dian-bg); color: var(--dian); }
    .pos-badge.dian em { color: var(--dian); }
    .vt-badge.dian { background: var(--dian-bg); color: var(--dian); }
    /* 学校名称按层次着色 */
    .school-link.strat-chong { color: var(--chong); }
    .school-link.strat-wen   { color: var(--wen); }
    .school-link.strat-bao   { color: var(--bao); }
    .school-link.strat-dian  { color: var(--dian); }
