:root {
    --primary: #2b6cf3;
    --primary-dark: #1e56cf;
    --primary-light: #eaf1ff;
    --ok: #16a34a;
    --warn: #d97706;
    --err: #dc2626;
    --bg: #f4f6fb;
    --card: #ffffff;
    --line: #e3e8f2;
    --text: #1f2a44;
    --text2: #64748b;
    --radius: 10px;
    --shadow: 0 6px 24px rgba(30, 64, 175, .08);
}

* { margin: 0; padding: 0; box-sizing: border-box; }
html, body { height: 100%; }
body {
    font-family: "Segoe UI", "Microsoft YaHei", "PingFang SC", sans-serif;
    background: var(--bg);
    color: var(--text);
    font-size: 14px;
    overflow: hidden;
}
#app { height: 100vh; display: flex; flex-direction: column; }
.hidden { display: none !important; }
button { font-family: inherit; cursor: pointer; }
input, select { font-family: inherit; }

/* ---------- 通用按钮 ---------- */
.btn {
    border: 1px solid transparent;
    border-radius: 8px;
    padding: 8px 16px;
    font-size: 14px;
    background: #fff;
    transition: all .15s;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    white-space: nowrap;
}
.btn:disabled { opacity: .55; cursor: not-allowed; }
.btn-primary { background: var(--primary); color: #fff; }
.btn-primary:hover:not(:disabled) { background: var(--primary-dark); }
.btn-ghost { border-color: var(--line); background: #fff; color: var(--text); }
.btn-ghost:hover { border-color: var(--primary); color: var(--primary); }
.btn-ghost-sm { border: 0; background: transparent; color: var(--text2); padding: 6px 10px; border-radius: 8px; }
.btn-ghost-sm:hover { background: rgba(0,0,0,.05); color: var(--text); }
.btn-block { width: 100%; }
.btn-sm { padding: 4px 10px; font-size: 13px; }
.btn-main { background: var(--primary); color: #fff; border: 1px solid var(--primary); }
.btn-main:hover:not(:disabled) { background: var(--primary-dark); color: #fff; }

/* ---------- 登录页 ---------- */
.view { height: 100vh; overflow-y: auto; position: relative; }
#view-login {
    display: flex;
    align-items: center;
    justify-content: center;
    background:
        radial-gradient(1000px 500px at 15% -10%, rgba(43,108,243,.18), transparent 60%),
        radial-gradient(800px 500px at 110% 110%, rgba(94,143,255,.16), transparent 60%),
        linear-gradient(160deg, #eef3ff, #f7f9ff);
}
.login-bg { position: absolute; inset: 0; pointer-events: none; }
.login-card {
    width: 380px;
    background: #fff;
    border-radius: 18px;
    box-shadow: 0 20px 60px rgba(30, 64, 175, .16);
    padding: 34px 34px 24px;
    position: relative;
    z-index: 2;
}
/* 登录页：卡片 + 右侧信息框并排（2026-09-15 新增）。
   右侧框由后台发布，没有内容时带 hidden（display:none），卡片自动回到居中原样。 */
.login-row {
    /* 顶部对齐（用户 2026-09-15 要求）：右侧信息框的顶边与登录卡片顶边齐平。
       原先 align-items:center 会让它垂直居中，看起来"掉在中间"。 */
    align-items: flex-start;
    display: flex; justify-content: center;
    gap: 22px; position: relative; z-index: 2;
}
.login-side {
    /* 用户 2026-09-15 要求：「框」本身不可见，但文字必须仍待在原来那个框的范围内。
       → 只关掉三项"看得见"的装饰：白底 background、投影 box-shadow（圆角在无底无影时
         本来就看不出来，一并留作结构信息）。
       → 框的几何与文字内缩（width / max-height / overflow-y / padding）原样保留，
         因此文字的排布位置、换行宽度、与登录卡片的间距和"有框时"一模一样，
         用户只是看不见那个框子。 */
    width: 330px; max-height: 76vh; overflow-y: auto;
    background: transparent;
    box-shadow: none;
    border-radius: 18px;
    padding: 24px 24px 20px;
    font-size: 13px; line-height: 1.85; color: #3a4456;
    word-break: break-word;
}
.login-side img { max-width: 100%; height: auto; border-radius: 8px; }
.login-side h3 { font-size: 15px; margin: 0 0 8px; color: #1a3a6b; }
.login-side a { color: var(--primary); }
.login-side table { border-collapse: collapse; }
.login-side td, .login-side th { border: 1px solid #c9d5ea; padding: 3px 8px; }
/* 窄屏放不下两列：只留登录卡片（信息框隐藏） */
@media (max-width: 900px) { .login-side { display: none; } }
.brand-hero { text-align: center; margin-bottom: 24px; }
.brand-logo {
    width: 64px; height: 64px; margin: 0 auto 12px;
    border-radius: 18px;
    background: linear-gradient(135deg, #3b82f6, #1d4ed8);
    color: #fff; font-size: 32px; font-weight: 700;
    display: flex; align-items: center; justify-content: center;
    box-shadow: 0 8px 20px rgba(37, 99, 235, .35);
}
.brand-hero h1 { font-size: 24px; letter-spacing: 2px; }
.brand-sub { color: var(--text2); margin-top: 6px; font-size: 13px; }
.brand-sub .wx { color: #e53935; font-weight: 700; }
.field { display: block; margin-bottom: 14px; }
.field span { display: block; font-size: 13px; color: var(--text2); margin-bottom: 6px; }
.field input {
    width: 100%; padding: 10px 12px;
    border: 1px solid var(--line); border-radius: 8px;
    font-size: 14px; outline: none;
    transition: border .15s, box-shadow .15s;
    background: #fbfcfe;
}
.field input:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(43,108,243,.12); background: #fff; }
.login-err { color: var(--err); font-size: 13px; min-height: 20px; margin-bottom: 6px; }
.login-tip { font-size: 12px; color: var(--text2); line-height: 1.7; margin: 6px 0 4px; background: #f8fafd; padding: 10px 12px; border-radius: 8px; border: 1px dashed #d7e0f0; }
/* 版本号只在窗口标题显示（软件名 + 版本号），界面内不展示，避免遮挡内容 */

/* ---------- 顶栏 ---------- */
.topbar {
    height: 56px;
    background: #fff;
    border-bottom: 1px solid var(--line);
    display: flex;
    align-items: center;
    padding: 0 18px;
    gap: 14px;
    flex-shrink: 0;
    box-shadow: 0 1px 4px rgba(30,64,175,.05);
    z-index: 5;
}
.brand-mini { display: flex; align-items: center; gap: 8px; font-size: 17px; }
.brand-logo-mini {
    width: 30px; height: 30px; border-radius: 8px;
    background: linear-gradient(135deg, #3b82f6, #1d4ed8);
    color: #fff; display: inline-flex; align-items: center; justify-content: center;
    font-size: 15px; font-weight: 700;
}
.topbar-right { margin-left: auto; display: flex; align-items: center; gap: 6px; }
.user-chip {
    background: var(--primary-light); color: var(--primary-dark);
    padding: 4px 12px; border-radius: 999px; font-size: 13px;
    max-width: 220px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.q-title-wrap { display: flex; align-items: baseline; gap: 10px; }
.q-title-wrap h1 { font-size: 19px; }
.q-year { color: var(--primary); font-size: 13px; background: var(--primary-light); padding: 2px 8px; border-radius: 999px; }

/* ---------- 首页省份 ---------- */
.home-body { padding: 26px 30px; max-width: 1280px; width: 100%; margin: 0 auto; }
.page-title { font-size: 20px; margin-bottom: 4px; }
.page-title .sub { font-size: 13px; color: var(--text2); font-weight: 400; margin-left: 10px; }
.home-tip {
    margin: 12px 0;
    padding: 12px 16px;
    background: #fff7e6; border: 1px solid #f5d99a; color: #9a6b00;
    border-radius: 10px; line-height: 1.8;
}
/* 「授权范围」行 + 紧贴文字左侧的激活按钮（按钮长度约为原来 2 倍） */
.scope-line { display: flex; align-items: center; justify-content: flex-start; gap: 10px; flex-wrap: wrap; }
.scope-line .scope-text { flex: 0 1 auto; min-width: 0; }
.btn-activate {
    flex: none; min-width: 156px; padding: 7px 16px; border: none; border-radius: 8px; cursor: pointer;
    background: linear-gradient(135deg, #ff9a3c, #ff7a1a); color: #fff;
    font-size: 13px; font-weight: 700; letter-spacing: .5px; text-align: center;
    box-shadow: 0 2px 8px rgba(255, 122, 26, .35);
}
.btn-activate:hover { background: linear-gradient(135deg, #ff8f28, #f26a08); }
.btn-activate:active { transform: translateY(1px); }
.sites {
    margin-top: 16px;
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(252px, 1fr));
    gap: 12px;
}
.prov {
    background: #fff;
    border: 1px solid var(--line);
    border-radius: var(--radius);
    padding: 12px 14px;
    box-shadow: var(--shadow);
}
.prov.no-data { opacity: .6; }
.prov-name { font-size: 16px; font-weight: 600; display: flex; align-items: center; gap: 8px; }
.prov-name .cnt { font-size: 12px; color: var(--text2); font-weight: 400; }
.prov .years { margin-top: 10px; display: flex; flex-wrap: wrap; gap: 8px; }
.year-btn {
    border: 1px solid var(--line);
    background: #f8fafd;
    color: var(--text2);
    border-radius: 8px;
    padding: 5px 14px;
    font-size: 13px;
    transition: all .15s;
}
.year-btn.on { background: var(--primary); border-color: var(--primary); color: #fff; font-weight: 600; }
.year-btn.off { opacity: .45; cursor: not-allowed; }
.year-btn.off:hover { background: #f8fafd; border-color: var(--line); color: var(--text2); }
.prov-empty { grid-column: 1 / -1; text-align: center; color: var(--text2); padding: 40px; }

/* ---------- 查询筛选 ---------- */
#view-query { display: flex; flex-direction: column; }
.filter-panel {
    background: #fff; border-bottom: 1px solid var(--line);
    padding: 14px 18px 12px;
    flex-shrink: 0;
    box-shadow: var(--shadow);
}
.f-row { display: flex; align-items: flex-end; gap: 12px; flex-wrap: wrap; margin-bottom: 10px; }
.f-item { font-size: 13px; color: var(--text2); display: flex; flex-direction: column; gap: 5px; }
.f-item select, .f-item input {
    border: 1px solid var(--line); border-radius: 8px;
    padding: 7px 10px; font-size: 14px; outline: none; background: #fff;
    min-width: 132px;
    transition: border .15s;
}
.f-item select:focus, .f-item input:focus { border-color: var(--primary); }
.f-item.grow { flex: 1; }
.f-item.grow input { width: 100%; }
.f-item .grow { width: 100%; min-width: 200px; }
.f-item select { min-width: 120px; }
.center-v { align-items: center; }
.input-wrap { position: relative; display: flex; align-items: center; }
.input-wrap input { padding-right: 26px; width: 100%; }
.sug-clear {
    position: absolute; right: 8px; top: 50%; transform: translateY(-50%);
    color: #c3cede; font-style: normal; cursor: pointer; font-size: 16px; padding: 0 2px;
}
.sug-clear:hover { color: var(--text2); }
.sug-box {
    position: absolute; top: 100%; left: 0; right: 0; z-index: 30;
    background: #fff; border: 1px solid var(--line); border-radius: 8px;
    margin-top: 2px; max-height: 280px; overflow-y: auto; box-shadow: 0 10px 30px rgba(0,0,0,.12);
    display: none;
}
.f-item { position: relative; }
.sug-box.show { display: block; }
.sug-item { padding: 7px 12px; cursor: pointer; font-size: 13px; border-bottom: 1px solid #f2f4f9; }
.sug-item:last-child { border-bottom: 0; }
.sug-item:hover { background: var(--primary-light); }
.sug-item .sm { color: var(--primary); font-size: 11px; margin-right: 8px; }
.sug-empty { padding: 10px 12px; color: #9aa8c3; font-size: 13px; text-align: center; }
.seg { display: inline-flex; border: 1px solid var(--line); border-radius: 9px; overflow: hidden; background: #fff; }
.seg-btn { padding: 8px 14px; font-size: 14px; cursor: pointer; border-left: 1px solid var(--line); transition: background .15s; }
.seg-btn:first-child { border-left: 0; }
.seg-btn.active { background: var(--primary-light); color: var(--primary); font-weight: 600; }
.seg-btn input { display: none; }
.grp { display: flex; align-items: center; gap: 8px; }
.num-input {
    width: 130px; border: 1px solid var(--line); border-radius: 8px; padding: 7px 10px;
    font-size: 14px; outline: none;
}
.num-input:focus { border-color: var(--primary); }
.num-input.w-70 { width: 86px; }
.grp-hint { color: var(--text2); font-size: 13px; }
.grp-note { color: #9aa8c3; font-size: 12px; }
.tag-title { color: var(--text2); font-size: 13px; line-height: 28px; }
.tag-box { display: flex; flex-wrap: wrap; gap: 6px; }
.tag-chip {
    border: 1px solid var(--line); border-radius: 999px; padding: 3px 12px;
    font-size: 12px; color: var(--text2); cursor: pointer; user-select: none;
    background: #f8fafd; transition: all .15s;
}
.tag-chip.on { background: var(--primary); border-color: var(--primary); color: #fff; }
.f-actions { display: flex; align-items: center; gap: 12px; margin-top: 4px; }
.f-actions .btn-primary { padding: 9px 28px; font-size: 15px; }
.loading { display: inline-flex; align-items: center; gap: 8px; color: var(--text2); font-size: 13px; }
.spinner {
    width: 14px; height: 14px; border-radius: 50%;
    border: 2px solid #dbe4f5; border-top-color: var(--primary);
    animation: rot .8s linear infinite;
}
@keyframes rot { to { transform: rotate(360deg); } }

/* ---------- 结果 ---------- */
.result-head {
    padding: 8px 20px; color: var(--text2); font-size: 13px;
    display: flex; align-items: center; gap: 14px; background: #fff;
    border-bottom: 1px solid var(--line); flex-shrink: 0;
}
.result-head b { color: var(--primary); font-size: 16px; }
.table-scroll { flex: 1; overflow: auto; padding: 0 18px 10px; }
.table-scroll table { width: 100%; border-collapse: collapse; background: #fff; }
.table-scroll th {
    position: sticky; top: 0; z-index: 2;
    background: #f2f5fb; color: var(--text2); font-weight: 600;
    font-size: 13px; text-align: left; padding: 10px 12px;
    border-bottom: 1px solid var(--line);
}
.table-scroll td { padding: 8px 12px; font-size: 14px; border-bottom: 1px solid #eef1f7; vertical-align: middle; }
.sch-row td { background: var(--primary-light); cursor: pointer; border-bottom: 0; }
.sch-row:hover td { background: #e3edff; }
.sch-main { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.caret { transition: transform .15s; color: var(--primary); font-size: 12px; width: 14px; text-align: center; }
.sch-row.open .caret { transform: rotate(90deg); }
.sch-name { font-weight: 700; font-size: 15px; color: var(--text); }
.sch-type { color: var(--text2); font-size: 12px; border: 1px solid var(--line); border-radius: 4px; padding: 1px 6px; background: #fff; }
.sch-count { color: var(--primary); font-size: 12px; font-weight: 600; margin-left: auto; }
.badge {
    border-radius: 4px; font-size: 11px; padding: 1px 6px; color: #fff; font-weight: 600;
}
.badge.b-985 { background: #2563eb; } .badge.b-211 { background: #4f46e5; }
.badge.b-双一流 { background: #7c3aed; } .badge.b-国重点 { background: #0e7490; }
.badge.b-省重点 { background: #15803d; } .badge.b-保研资格 { background: #b45309; }
.badge.b-保研率 { background: #be185d; } .badge.b-双高计划 { background: #0f766e; }
.badge.b-示范高职 { background: #a16207; } .badge.b-骨干高职 { background: #9d174d; }
.badge.b-乡村计划 { background: #15803d; }
.badge.w-val { background: #eab308; color: #402e03; }
.maj-name { font-weight: 500; color: #26324e; }
.sub-meta { color: var(--text2); font-size: 12px; }
.num-strong { font-weight: 700; color: var(--primary); }
.num-dim { color: #b6c2d8; }
.empty-tip { text-align: center; padding: 70px 0; color: #9aa8c3; }
.empty-tip .big { font-size: 42px; margin-bottom: 12px; }

/* ---------- 分页 ---------- */
.pager {
    display: flex; align-items: center; justify-content: center; gap: 6px;
    padding: 12px 0; flex-shrink: 0; background: #fff; border-top: 1px solid var(--line);
}
.pg-btn {
    min-width: 32px; height: 32px; padding: 0 6px;
    border: 1px solid var(--line); border-radius: 8px; background: #fff;
    color: var(--text2); font-size: 13px;
    display: inline-flex; align-items: center; justify-content: center;
}
.pg-btn:hover:not(:disabled) { border-color: var(--primary); color: var(--primary); }
.pg-btn.cur { background: var(--primary); border-color: var(--primary); color: #fff; font-weight: 600; }
.pg-btn:disabled { opacity: .4; cursor: not-allowed; }
.pg-ellipsis { color: var(--text2); padding: 0 2px; }
.pg-info { color: var(--text2); font-size: 13px; margin-left: 12px; }

/* ---------- 模态 ---------- */
.modal-root {
    position: fixed; inset: 0; background: rgba(15, 23, 42, .45);
    display: flex; align-items: center; justify-content: center; z-index: 100;
    backdrop-filter: blur(2px);
}
.modal {
    background: #fff; border-radius: 16px; box-shadow: 0 24px 80px rgba(0,0,0,.25);
    width: 520px; max-width: 92vw; max-height: 86vh; overflow: auto; padding: 22px 24px;
}
.modal h3 { font-size: 17px; margin-bottom: 16px; display: flex; align-items: center; gap: 8px; }
.m-field { display: block; margin-bottom: 12px; }
.m-field > span { display: block; font-size: 13px; color: var(--text2); margin-bottom: 5px; }
.m-field input, .m-field select {
    width: 100%; padding: 8px 10px; border: 1px solid var(--line); border-radius: 8px; font-size: 14px; outline: none;
}
.m-field input:focus { border-color: var(--primary); }
.m-row { display: flex; gap: 10px; }
.m-row .m-field { flex: 1; }
.m-actions { display: flex; gap: 10px; justify-content: flex-end; margin-top: 14px; }
.m-note { font-size: 12px; color: #9aa8c3; line-height: 1.8; margin: 8px 0; }
.imp-result { margin-top: 10px; font-size: 12px; color: var(--text2); background: #f8fafd; border-radius: 8px; padding: 8px 10px; max-height: 180px; overflow: auto; line-height: 1.9; }
.imp-result .ok { color: var(--ok); }
.imp-result .bad { color: var(--err); }
.di-line { font-size: 13px; color: var(--text2); margin: 6px 0; }
.di-line b { color: var(--text); }
.dbstat { margin-top: 8px; font-size: 12px; color: #9aa8c3; line-height: 2; word-break: break-all; }

/* ---------- toast ---------- */
.toast {
    position: fixed; left: 50%; bottom: 60px; transform: translateX(-50%);
    background: rgba(20, 30, 55, .92); color: #fff; padding: 10px 22px;
    border-radius: 999px; font-size: 14px; z-index: 300; box-shadow: 0 8px 24px rgba(0,0,0,.2);
    max-width: 80vw;
}
.toast.ok { background: rgba(22, 163, 74, .95); }
.toast.err { background: rgba(220, 38, 38, .95); }

.f-item.right { margin-left: auto; flex: none; }
.f-item.right input { width: 260px; }
.f-item select { cursor: pointer; }
.sch-row td .sch-main .badge { margin-left: 2px; }

/* 滚动条 */
::-webkit-scrollbar { width: 8px; height: 8px; }
::-webkit-scrollbar-thumb { background: #c8d2e5; border-radius: 8px; }
::-webkit-scrollbar-thumb:hover { background: #a9b8d6; }
::-webkit-scrollbar-track { background: transparent; }

/* ============================================================
   泛达无忧桌面 · 网站同款皮肤（查询页 / 站点顶栏）
   ============================================================ */
.site-nav {
    height: 54px;
    flex: 0 0 54px;
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 0 20px;
    background: #ffffff;
    border-bottom: 1px solid var(--line);
}
.nav-right { margin-left: auto; display: flex; align-items: center; gap: 6px; }
.nav-btn {
    border: 1px solid var(--line);
    background: #fff;
    color: var(--text);
    border-radius: 7px;
    padding: 6px 12px;
    font-size: 13px;
    transition: all .15s;
    white-space: nowrap;
}
.nav-btn:hover { border-color: var(--primary); color: var(--primary); }
#q-back { font-size: 13px; }
.site-nav-title { color: var(--text2); font-size: 13px; }
.user-chip { color: var(--primary); font-size: 13px; margin-right: 2px; }

/* 「我的账号」未读消息红点（按钮内右上角角标） */
.nav-btn { position: relative; }
.navdot {
    position: absolute; top: -5px; right: -5px;
    width: 9px; height: 9px; border-radius: 50%;
    background: #ff3b30; border: 2px solid #fff;
    box-shadow: 0 0 0 1px rgba(255, 59, 48, .35);
    pointer-events: none;
}

/* ---------- 查询页容器 ---------- */
#view-query .container {
    max-width: 1240px;
    margin: 0 auto;
    padding: 20px 24px 40px;
}
.title-row { display: flex; align-items: center; justify-content: space-between; gap: 14px; margin-bottom: 2px; flex-wrap: wrap; }
.title-row h1 { font-size: 22px; font-weight: 800; letter-spacing: .5px; }
.title-row h1 .q-prov { color: #e53935; }
#view-query .sub { color: var(--text2); font-size: 13px; margin-bottom: 14px; }

/* 查询页大标题右侧广告位（富文本内容由后台发布） */
.query-ad {
    flex: none; max-width: 55%; text-align: right;
    color: var(--text2); font-size: 13px; line-height: 1.6;
}
.query-ad img { max-width: 100%; height: auto; border-radius: 6px; vertical-align: middle; }
.query-ad table { border-collapse: collapse; margin: 4px auto; }
.query-ad td, .query-ad th { border: 1px solid #d9e1ef; padding: 3px 8px; }
.query-ad ul, .query-ad ol { margin: 2px 0 2px 18px; }
.query-ad p { margin: 2px 0; }
.query-ad a { color: var(--primary); text-decoration: underline; }

/* 首页（选择地区页）顶栏广告位（home_ad） */
.home-ad {
    flex: 1 1 auto; min-width: 0;
    text-align: center;
    color: var(--text2); font-size: 13px; line-height: 1.6;
    display: flex; align-items: center; justify-content: center; gap: 8px;
    flex-wrap: wrap;
}
.home-ad img { max-width: 100%; height: auto; border-radius: 6px; vertical-align: middle; }
.home-ad table { border-collapse: collapse; margin: 4px auto; }
.home-ad td, .home-ad th { border: 1px solid #d9e1ef; padding: 3px 8px; }
.home-ad ul, .home-ad ol { margin: 2px 0 2px 18px; }
.home-ad p { margin: 2px 0; }
.home-ad a { color: var(--primary); text-decoration: underline; }
.home-ad .hidden { display: none; }

/* ---------- 筛选卡（与网站同款） ---------- */
.filter-box {
    background: #fff;
    border: 1px solid var(--line);
    border-radius: 12px;
    padding: 6px 18px 14px;
    box-shadow: var(--shadow);
}
.frow { display: flex; gap: 26px; flex-wrap: wrap; padding: 10px 0 2px; }
.frow-full { align-items: center; }
.fitem { display: flex; align-items: center; gap: 6px; min-width: 0; flex: 0 1 auto; }
.fitem .ctl { position: relative; display: flex; align-items: center; gap: 4px; min-width: 0; }
.flabel {
    color: #50658a; font-size: 13px; font-weight: 600; white-space: nowrap;
    flex: 0 0 auto;
}
.flabel2 { color: #8796b0; font-size: 12px; }
#view-query select {
    border: 1px solid var(--line); border-radius: 6px; padding: 6px 8px;
    font-size: 13px; background: #fff; color: var(--text); outline: none;
    cursor: pointer;
}
#view-query select:focus, #view-query input:focus { border-color: var(--primary); }
#f-kelei, #f-pici, #f-shengfen { width: 112px; }
#f-xuanke, #f-schooltype { width: 128px; }
#view-query input[type="text"] {
    border: 1px solid var(--line); border-radius: 6px; padding: 6px 9px;
    font-size: 13px; background: #fff; color: var(--text); outline: none;
}
#f-xiaoming, #f-zhuanye { width: 168px; }
#f-zonghe { width: 240px; }
.num-inp { width: 100px; }
.num-inp-small { width: 60px; }
#view-query .ctl .btn {
    padding: 6px 12px; font-size: 13px; background: var(--primary); color: #fff;
    border-color: var(--primary);
}
#view-query .ctl .btn:hover { background: var(--primary-dark); }
.mini-select { width: auto; border: 0 !important; font-weight: 600; padding: 2px 2px !important; color: #50658a; }
.hint {
    position: absolute; top: 100%; left: 0; z-index: 60; min-width: 190px; max-height: 240px;
    overflow: auto; background: #fff; border: 1px solid var(--line); border-radius: 8px;
    box-shadow: 0 10px 30px rgba(20, 40, 90, .14);
}
.hint-item { padding: 7px 12px; font-size: 13px; cursor: pointer; }
.hint-item:hover { background: var(--primary-light); color: var(--primary); }

/* 院校标签 chips */
.tag-wrap { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; }
.tag-chip {
    border: 1px solid var(--line); background: #f7f9fd; color: #50658a;
    border-radius: 999px; padding: 3px 11px; font-size: 12px; cursor: pointer;
    user-select: none; transition: all .12s; white-space: nowrap;
}
.tag-chip:hover { border-color: var(--primary); color: var(--primary); }
.tag-chip.on {
    background: var(--primary); border-color: var(--primary); color: #fff; font-weight: 600;
}
.spacer { flex: 1; }
.btn-warm { background: #ff7a2f !important; border-color: #ff7a2f !important; color: #fff !important; }
.btn-warm:hover { background: #f0681a !important; }
.btn-plain { background: #fff !important; border-color: var(--line) !important; color: var(--text2) !important; }
.btn-plain:hover { color: var(--text) !important; border-color: #b9c5dd !important; }

/* ---------- 结果卡 ---------- */
.result-box {
    background: #fff; border: 1px solid var(--line); border-radius: 12px;
    margin-top: 14px; box-shadow: var(--shadow); overflow: hidden;
}
.rtitle {
    display: flex; align-items: center; gap: 10px; padding: 13px 18px;
    border-bottom: 1px solid var(--line); font-weight: 700; font-size: 15px;
    color: #1f2a44;
}
.rtitle #stat { color: var(--text2); font-size: 13px; font-weight: 400; }

/* 「查询结果」四个字 + 紧贴着它的小圆点。
   用户 2026-09-15 要求：点必须紧贴"查询结果"，而且要在括号（共 X 所大学）之前。
   所以点放进这个标签容器内部、只用 margin-left 留 3px；.rtitle 的 gap(14px)
   只作用在容器外侧，不会把点从标题旁推开。 */
.rt-label { display: inline-flex; align-items: center; }

/* 静默核对指示点（2026-09-15 用户要求）：
   闪 = 正在后台核对本机缓存是否还有效；不闪 = 核对完成。
   数据 99% 的情况不会变 → 很快就变成常亮浅绿。 */
.cmp-dot { display: none; width: 3px; height: 3px; border-radius: 50%; background: #9aa7bd; margin-left: 3px; flex: 0 0 auto; }
.cmp-dot.on { display: inline-block; animation: cmpBlink .9s ease-in-out infinite; }
.cmp-dot.done { display: inline-block; background: #34c06a; }
.cmp-dot.fail { display: inline-block; background: #b9c2cd; }
@keyframes cmpBlink { 0%, 100% { opacity: 1; } 50% { opacity: .12; } }
.rt-actions { margin-left: auto; display: flex; align-items: center; gap: 6px; }
.pg-mini {
    border: 1px solid var(--line); background: #fff; border-radius: 6px;
    padding: 3px 9px; font-size: 12px; color: var(--text2);
}
.pg-mini:hover:not(:disabled) { color: var(--primary); border-color: var(--primary); }
.pg-mini:disabled { opacity: .4; cursor: default; }
.pg-num {
    min-width: 26px; height: 26px; padding: 0 6px; border: 1px solid var(--line);
    background: #fff; color: var(--text2); border-radius: 6px; font-size: 12px;
}
.pg-num.on { background: var(--primary); border-color: var(--primary); color: #fff; font-weight: 700; }
.pg-dot { color: var(--text2); font-size: 12px; padding: 0 2px; }

/* 表格 */
.table-wrap { overflow-x: auto; }
#result { width: 100%; border-collapse: collapse; }
#result th {
    background: #f8fafd; color: #64748b; font-size: 13px; font-weight: 600;
    padding: 9px 10px; text-align: left; border-bottom: 1px solid var(--line);
    white-space: nowrap;
}
#result td { padding: 9px 10px; border-bottom: 1px solid #eef1f7; font-size: 13px; vertical-align: middle; }
#result tr:last-child td { border-bottom: 0; }
#result tbody tr:hover { background: #f8faff; }
.group-row { cursor: pointer; }
.group-row td { background: #fbfcff; }
.group-row.open td { background: #f2f6ff; }
.detail-row td { color: #4b5c77; }
.detail-row .col-seq, .detail-row .col-scl { color: transparent; }
.col-seq { color: #8a97b1; text-align: center; width: 52px; }
.col-scl { color: #2b6cf3; font-weight: 600; }
.school-name { font-size: 14px; }
.col-score { color: #e53935; font-weight: 700; font-size: 14px; }
.col-weici { color: #7b1fa2; font-weight: 600; }
.col-kelei { color: #68779b; }
.col-major { color: #4b5c77; line-height: 1.6; }
.col-pici, .col-group { color: #68779b; white-space: nowrap; }
.school-cell { display: flex; flex-direction: column; gap: 3px; }
.school-cell .school-type {
    align-self: flex-start; font-size: 11px; font-weight: 600;
    border-radius: 4px; padding: 1px 6px;
}
.type-gg { background: #e7f6ec; color: #16a34a; }
.type-mb { background: #fff3e0; color: #ed6c02; }
.sch-tags { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 1px; }
.daxue-tag {
    font-size: 11px; border-radius: 4px; padding: 1px 5px; color: #fff;
    background: #7ba2e0; display: inline-block;
}
.daxue-tag.l-985 { background: #f59f00; }
.daxue-tag.l-normal { background: #8f9bb3; }

/* 加载与空态 */
.loading { padding: 40px 0; text-align: center; color: var(--text2); font-size: 14px; }
.empty-tip { padding: 54px 0; text-align: center; color: var(--text2); font-size: 14px; }
.empty-tip .big { font-size: 34px; margin-bottom: 10px; }

/* 分页条 */
.pagerbar {
    display: flex; align-items: center; justify-content: center; gap: 8px;
    padding: 14px 0; border-top: 1px solid var(--line); flex-wrap: wrap;
}
.pg-big {
    border: 1px solid var(--line); background: #fff; border-radius: 8px;
    padding: 7px 16px; font-size: 13px; color: var(--text);
}
.pg-big:hover:not(:disabled) { border-color: var(--primary); color: var(--primary); }
.pg-big:disabled { opacity: .45; cursor: default; }
.pg-nums { display: flex; align-items: center; gap: 5px; }
.pg-total { margin-left: 10px; color: var(--text2); font-size: 13px; }

/* ---------- 首页站点 ---------- */
.home-welcome h2 { font-size: 20px; font-weight: 800; margin-bottom: 4px; }
.sites { display: grid; grid-template-columns: repeat(auto-fill, minmax(246px, 1fr)); gap: 12px; }
.site-card {
    background: #fff; border: 1px solid var(--line); border-radius: 12px;
    padding: 14px 16px; box-shadow: 0 2px 10px rgba(30, 64, 175, .05);
    transition: box-shadow .15s;
}
.site-card:hover { box-shadow: 0 8px 22px rgba(30, 64, 175, .12); }
.site-card.nodata { opacity: .6; }
.site-name { font-size: 16px; font-weight: 700; margin-bottom: 10px; }
.site-name span { font-size: 12px; color: var(--text2); font-weight: 400; margin-left: 4px; }
.site-years { display: flex; gap: 7px; }
.year-btn {
    border: 1px solid var(--line); background: #f6f8fd; border-radius: 7px;
    padding: 5px 0; flex: 1; font-size: 13px; color: var(--text2);
    transition: all .12s;
}
.year-btn.on { background: var(--primary); border-color: var(--primary); color: #fff; font-weight: 700; }
.year-btn.on:hover { background: var(--primary-dark); }
.year-btn.off { opacity: .5; cursor: not-allowed; }
.site-nav-title .dot { color: var(--ok); }

/* ---------- 设置弹窗（服务器接口） ---------- */
.modal { width: min(640px, 92vw); }
.st-group { padding: 6px 0 12px; }
.st-group + .st-group { border-top: 1px dashed var(--line); margin-top: 6px; }
.st-title { font-size: 13px; color: #50658a; font-weight: 700; margin-bottom: 10px; }
.st-tip { font-size: 12px; color: #8796b0; line-height: 1.6; margin-top: 6px; }
.lic-swap {
    display: flex; align-items: center; justify-content: center; gap: 5px;
    width: 100%; margin: -4px 0 10px; padding: 5px 0;
    border: 0; background: transparent; cursor: pointer;
    color: #2b6cf3; font-size: 12.5px; user-select: none;
}
.lic-swap:hover { color: #1b4fd8; }
.lic-swap::before, .lic-swap::after {
    content: ''; flex: 1; height: 1px; background: linear-gradient(90deg, transparent, #c3d0ea);
}
.lic-swap::before { background: linear-gradient(270deg, transparent, #c3d0ea); }
.db-cols { display: flex; gap: 10px; flex-wrap: wrap; }
.db-cols .field { flex: 1 1 30%; min-width: 140px; }
.db-sep { font-size: 12px; color: #8796b0; margin: 8px 0 6px; }
#modal-box .field span { display: block; font-size: 12px; color: #64748b; margin-bottom: 4px; }
#modal-box .field input {
    width: 100%; border: 1px solid var(--line); border-radius: 7px;
    padding: 7px 9px; font-size: 13px; outline: none;
}
#modal-box .field input:focus { border-color: var(--primary); }
.set-msg { font-size: 13px; padding: 8px 10px; border-radius: 8px; background: #f6f8fd; margin-top: 4px; }
.set-msg.ok { color: #16a34a; background: #ecfaf0; }
.set-msg.err { color: #dc2626; background: #fdf0f0; }

/* ---------- 登录页视觉微调 ---------- */
.login-card .field input {
    width: 100%; border: 1px solid var(--line); border-radius: 8px;
    padding: 10px 12px; font-size: 14px; outline: none; background: #fbfcff;
}
.login-card .field input:focus { border-color: var(--primary); background: #fff; }
.login-card .field span { font-size: 13px; color: var(--text2); margin-bottom: 6px; display: block; }

/* 记住账号密码 */
.remember-row {
    display: flex; align-items: center; gap: 8px;
    margin: 0 0 4px; padding-bottom: 10px;
    font-size: 13px; color: #3a4456; cursor: pointer; user-select: none;
}
.remember-row input {
    width: 15px; height: 15px; margin: 0;
    accent-color: var(--primary); cursor: pointer; flex: none;
}
.remember-row span { line-height: 1.4; }

/* ---------- 登录页：登录按钮行 / 广告 / 红字公告 / 注册入口 ---------- */
.login-actions { display: flex; gap: 10px; margin: 0 0 2px; }
.login-actions .btn { flex: 1 1 0; width: 0; padding: 11px 10px; font-size: 15px; min-width: 0; }
.login-ad { text-align: center; color: #7c8aa5; font-size: 12px; line-height: 1.6; }
.login-ad b, .login-ad strong { color: #d97706; }
.login-tip .login-ad { margin: 0; }
.login-tip .login-ad img { max-width: 100%; height: auto; border-radius: 6px; }
.login-tip .login-ad p { margin: 2px 0; }
.login-tip .login-ad table { border-collapse: collapse; margin: 4px auto; }
.login-tip .login-ad td, .login-tip .login-ad th { border: 1px solid #d9e1ef; padding: 3px 8px; }
.login-notice { font-size: 12px; color: #e53935; line-height: 1.7; margin: 0 0 6px; text-align: center; }
.login-notice b { color: #c62828; }
.reg-link {
    display: block; width: 100%; border: none; background: none; cursor: pointer;
    color: var(--primary); font-size: 13px; margin: 2px 0 12px; text-align: center;
}
.reg-link:hover { text-decoration: underline; }
.reg-link b { font-weight: 700; }

/* 登录页最下方「服务器设置」：只在客户端（本软件）内出现，做成低调的小链接 */
.shell-row { text-align: center; margin: 10px 0 0; }
.link-btn {
    border: none; background: none; cursor: pointer;
    color: #94a3b8; font-size: 12px; padding: 4px 10px; border-radius: 6px;
    transition: color .15s, background .15s;
}
.link-btn:hover { color: var(--primary); background: rgba(43, 108, 243, .06); }

/* ---------- 账号/注册/修改密码弹窗 ---------- */
.modal-narrow { width: min(460px, 92vw); }
.modal .modal-tip { font-size: 12px; color: var(--text2); line-height: 1.7; background: #f8fafd; border: 1px dashed #d7e0f0; border-radius: 8px; padding: 8px 12px; margin-bottom: 12px; }
.modal .modal-tip.ok { background: #eafaf1; border-color: #bfe8cf; color: #166534; }

/* ---------- 联系我们（后台发布的富文本） ---------- */
.modal-contact { width: min(600px, 92vw); }
.contact-body { font-size: 14px; line-height: 1.85; color: #2c3a57; max-height: 58vh; overflow: auto; word-break: break-word; }
.contact-body p { margin: 0 0 8px; }
.contact-body img { max-width: 100%; height: auto; border-radius: 6px; display: block; margin: 6px 0; }
.contact-body a { color: #1d4ed8; word-break: break-all; }
.contact-body ul, .contact-body ol { margin: 0 0 8px; padding-left: 22px; }
.contact-body table { border-collapse: collapse; max-width: 100%; }
.contact-body td, .contact-body th { border: 1px solid #d7e0f0; padding: 4px 8px; }
.acc-block { padding: 4px 0 12px; }
.acc-line { font-size: 13px; color: #33405c; line-height: 2.1; }
.acc-line b { color: #1d4ed8; font-weight: 700; }
.acc-badge {
    display: inline-block; background: #eef4ff; color: #1a3a6b; border: 1px solid #c5d8f7;
    padding: 0 7px; margin: 1px 3px 1px 0; border-radius: 4px; font-size: 12px; line-height: 20px;
}
.acc-badge.vip { background: #fff3e0; border-color: #ffcc80; color: #b26a00; font-weight: 700; }
.acc-badge.expired { background: #fdecea; border-color: #f5c6cb; color: #b71c1c; }
.acc-grid {
    display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
    gap: 8px; margin: 2px 0 10px;
}
.acc-grid .cell { background: #f6f8fd; border-radius: 8px; padding: 8px 10px; text-align: center; }
.acc-grid .cell b { display: block; font-size: 16px; color: #1d4ed8; }
.acc-grid .cell span { font-size: 12px; color: #8796b0; }
.acc-grid .cell.sec b { font-size: 12px; color: #475569; word-break: break-all; line-height: 1.6; }
.acc-login-list { font-size: 12px; color: #475569; line-height: 1.9; max-height: 150px; overflow: auto; padding-right: 4px; }
.acc-login-list i { color: #a0aec0; font-style: normal; }
.m-actions { display: flex; gap: 10px; margin-top: 16px; }
.m-actions .btn { flex: 1; padding: 9px 0; }
.m-actions .btn-main { background: var(--primary); color: #fff; border: 1px solid var(--primary); }
.m-actions .btn-main:hover { background: var(--primary-dark); }

/* ---------- 系统消息弹窗（阅后即焚） ---------- */
.modal-notice { width: min(640px, 92vw); }
.notice-list { display: flex; flex-direction: column; gap: 12px; }
.notice-card {
    border: 1px solid #e3e9f5; border-radius: 12px; background: #fbfcff;
    padding: 14px 16px; box-shadow: 0 1px 3px rgba(30, 64, 175, .05);
}
.notice-head { display: flex; align-items: baseline; gap: 10px; margin-bottom: 8px; }
.notice-title { font-size: 15px; font-weight: 700; color: #16233f; flex: 1; word-break: break-word; }
.notice-time { font-size: 12px; color: #93a1bb; white-space: nowrap; }
.notice-body {
    font-size: 14px; color: #2c3a57; line-height: 1.75;
    max-height: 260px; overflow: auto; word-break: break-word;
}
.notice-body p { margin: 0 0 8px; }
.notice-body img { max-width: 100%; height: auto; border-radius: 6px; }
.notice-body table { border-collapse: collapse; max-width: 100%; }
.notice-body td, .notice-body th { border: 1px solid #d7e0f0; padding: 4px 8px; }
.notice-body a { color: #1d4ed8; word-break: break-all; }
.notice-foot {
    display: flex; align-items: center; justify-content: space-between;
    gap: 10px; margin-top: 12px; padding-top: 10px; border-top: 1px dashed #e3e9f5;
}
.notice-from { font-size: 12px; color: #8796b0; }
.reg-prov { width: 100%; padding: 9px 12px; border: 1px solid var(--line); border-radius: 8px; font-size: 14px; outline: none; background: #fbfcfe; }
.reg-prov:focus { border-color: var(--primary); }

/* ============================================================
   与网站 index.php 同款：筛选三行等宽栅格
   ============================================================ */
#view-query .filter-box { padding: 14px 18px 16px; }
#view-query .frow {
    display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 12px 22px;
    padding: 10px 0 4px; margin-bottom: 0;
}
#view-query .frow-full { grid-template-columns: 1fr; padding-top: 6px; }
#view-query .fitem { flex: 1 1 auto; min-width: 0; display: flex; align-items: center; gap: 8px; }
#view-query .fitem .ctl { flex: 1; min-width: 0; }
#view-query .frow select {
    width: 100%; min-width: 0; padding: 7px 9px;
    border: 1px solid var(--line); border-radius: 6px; font-size: 13px;
    background: #fff; color: var(--text); outline: none; cursor: pointer;
}
#view-query .frow input[type="text"] {
    flex: 1; min-width: 0; width: auto; padding: 7px 9px;
    border: 1px solid var(--line); border-radius: 6px; font-size: 13px;
    background: #fff; color: var(--text); outline: none;
}
#view-query .frow input:focus, #view-query .frow select:focus { border-color: #3d7eff; }
#view-query .mini-select {
    width: auto !important; border: 0 !important; padding: 2px 0 !important;
    font-weight: 600; font-size: 13px !important; color: #50658a; background: transparent !important;
    cursor: pointer; outline: none;
}
#f-xiaoming, #f-zhuanye { flex: 1 !important; }
#f-zonghe { flex: 1 !important; }
.num-inp { width: 82px !important; flex: none !important; }
.num-inp-small { width: 54px !important; flex: none !important; }
.flabel2 { color: #8796b0; font-size: 13px; margin: 0 1px; flex: none; }
#view-query .ctl .btn {
    padding: 7px 14px; font-size: 13px; background: #3d7eff; color: #fff;
    border: none; border-radius: 5px; flex: none; cursor: pointer; white-space: nowrap;
}
#view-query .ctl .btn:hover { background: #2f66d4; }
.hint {
    position: absolute; top: 100%; left: 0; z-index: 99; min-width: 220px; max-height: 260px;
    overflow: auto; background: #fff; border: 1px solid #d5dae3; border-radius: 5px;
    box-shadow: 0 3px 10px rgba(0,0,0,.12);
}
.hint-item { padding: 7px 12px; font-size: 13px; cursor: pointer; border-bottom: 1px solid #f0f2f6; }
.hint-item:hover { background: #eef4ff; }
.hint-item:last-child { border-bottom: 0; }

/* ---------- 院校标签胶囊（与网站同款，选中彩色） ---------- */
#tag-box { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.tag-check {
    display: inline-flex; align-items: center; justify-content: center; cursor: pointer;
    font-size: 12px; padding: 3px 10px; border-radius: 10px; background: #f0f0f0; color: #666;
    transition: all .2s; user-select: none; white-space: nowrap;
}
.tag-check:hover { background: #e2e6ee; }
.tag-check input { display: none; }
.tag-check.t985:has(input:checked) { background: #e57373; color: #fff; }
.tag-check.t211:has(input:checked) { background: #64b5f6; color: #fff; }
.tag-check.tshuangyiliu:has(input:checked) { background: #ba68c8; color: #fff; }
.tag-check.tguozhongdian:has(input:checked) { background: #ffb74d; color: #fff; }
.tag-check.tshengzhongdian:has(input:checked) { background: #81c784; color: #fff; }
.tag-check.tbaoyan:has(input:checked) { background: #4db6ac; color: #fff; }
.tag-check.tshuanggao:has(input:checked) { background: #f06292; color: #fff; }
.tag-check.tshifangaogao:has(input:checked) { background: #a1887f; color: #fff; }
.tag-check.tgugangaogao:has(input:checked) { background: #90a4ae; color: #fff; }
.tag-check.txiangcun:has(input:checked) { background: #aed581; color: #fff; }

/* ============================================================
   与网站同款：结果表格
   ============================================================ */
.result-box { margin-top: 16px; }
.rtitle { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.rt-actions { margin-left: auto; display: flex; align-items: center; gap: 6px; }
.pg-nums { display: inline-flex; align-items: center; gap: 3px; }
.pg-mini {
    border: 1px solid #d5dae3; background: #eef1f7; color: #1a3a6b; border-radius: 4px;
    padding: 3px 10px; font-size: 12px; cursor: pointer;
}
.pg-mini:hover:not(:disabled) { color: #1a5ad6; }
.pg-mini:disabled { opacity: .5; cursor: default; }
.pg-num {
    border: 1px solid transparent; background: transparent; color: #3d7eff;
    padding: 2px 8px; font-size: 13px; border-radius: 4px; cursor: pointer; text-decoration: none;
    display: inline-block;
}
.pg-num:hover { background: #eef1f7; }
.pg-num.on { background: #3d7eff; color: #fff; font-weight: 700; }
.pg-dot { color: #999; font-size: 13px; padding: 0 2px; }

#emptyTip { display: block; }
#emptyTip .big { font-size: 34px; margin-bottom: 10px; }

#result { table-layout: fixed; min-width: 860px; }
#result th {
    background: #eef1f7; color: #1a3a6b; text-align: center; font-weight: 700;
    border: 1px solid #d5dae3; padding: 9px 8px; white-space: nowrap;
}
#result td { border: 1px solid #e2e5ec; padding: 7px 8px; vertical-align: middle; text-align: center; }
#result tbody tr { cursor: pointer; }
#result tbody tr:hover { background: #f0f5ff; }
#result tbody tr.group-expanded { background: #eef7f4; }
#result tbody tr.group-expanded:hover { background: #dff0ea; }
#result tbody tr.group-expanded td { border-top: 1px solid #cfe8df; }
td.col-no { color: #888; font-size: 12px; }
td.col-scl { text-align: center; font-weight: 700; color: #1f2a44; line-height: 1.4; }
.school-tag {
    font-size: 9px; font-weight: 400; padding: 1px 4px; border-radius: 3px;
    margin-right: 3px; vertical-align: middle; display: inline-block;
}
.school-tag.gongban { color: #1565c0; background: #e3f2fd; }
.school-tag.minban { color: #c62828; background: #ffebee; }
td.c-kelei { font-size: 12px; line-height: 1.4; color: #455a64; }
td.c-pici, td.c-zygroup { font-size: 12px; color: #607d8b; }
td.col-name { text-align: left; line-height: 1.6; color: #37474f; overflow: hidden; }
.major-inner { overflow: hidden; word-break: break-all; }
td.col-name.major-collapsed .major-inner { max-height: 6.5em; }
.major-tags { display: flex; flex-wrap: wrap; gap: 2px 4px; margin-bottom: 3px; line-height: 1.3; }
td.col-score { color: #e53935; font-weight: 700; }
td.c-weici { color: #7b1fa2; }
.daxue-tag {
    display: inline-block; padding: 1px 6px; border-radius: 10px;
    font-size: 11px; font-weight: 600; white-space: nowrap;
}
.daxue-tag.t985 { background: #fde8e8; color: #c62828; }
.daxue-tag.t211 { background: #e8f0fd; color: #1565c0; }
.daxue-tag.tshuangyiliu { background: #f5e8fd; color: #6a1b9a; }
.daxue-tag.tguozhongdian { background: #fff4e0; color: #e65100; }
.daxue-tag.tshengzhongdian { background: #e8f5e9; color: #2e7d32; }
.daxue-tag.tbaoyan { background: #e0f2f1; color: #00695c; }
.daxue-tag.tshuanggao { background: #fce4ec; color: #ad1457; }
.daxue-tag.tshifangaogao { background: #efebe9; color: #4e342e; }
.daxue-tag.tgugangaogao { background: #eceff1; color: #37474f; }
.daxue-tag.txiangcun { background: #f1f8e9; color: #558b2f; }
.daxue-tag.tbaoyanlv { background: #fff3e0; color: #e64a19; }
tr[data-gi] td:first-child { border-left: 0; }
tr[data-gi] td:last-child { border-right: 0; }
.table-wrap { overflow-x: auto; }

/* 底部大分页（与网站同款配色） */
.pagerbar {
    display: flex; align-items: center; justify-content: center; gap: 8px;
    padding: 14px 0 4px; border-top: 0; flex-wrap: wrap;
}
.pg-big {
    background: #3d7eff; color: #fff; border: none; border-radius: 5px;
    padding: 8px 20px; font-size: 14px; cursor: pointer;
}
.pg-big:hover:not(:disabled) { background: #2f66d4; }
.pg-big:disabled { opacity: .45; cursor: default; }
.pg-nums { align-items: center; }
.pg-total { margin-left: 15px; color: #666; font-size: 14px; }

/* ================================================================
   视觉强化：边框加深、正文转深黑、按钮右对齐、专业名列左对齐
   首页「地区」卡片与网站 area.php 同款
   ================================================================ */
:root {
    --line: #c2ccdb;
    --text: #14181f;
    --text2: #38415a;
}

/* ---------- 首页（地区选择）卡片 ---------- */
.sites {
    gap: 14px;
    grid-template-columns: repeat(auto-fill, minmax(228px, 1fr));
}
.site-card {
    background: #fff;
    border: 1px solid #dbe1ec;
    border-radius: 12px;
    padding: 14px 16px 16px;
    box-shadow: 0 2px 10px rgba(31, 45, 80, .06);
}
.site-card:hover { box-shadow: 0 8px 22px rgba(30, 64, 175, .14); }
.site-card.nodata { background: #f4f5f8; box-shadow: none; border-color: #e4e7ee; opacity: 1; }
.site-card.nodata:hover { box-shadow: none; }
.site-card.nodata .site-name { color: #8a93a4; }
.site-card.nodata .site-name span { color: #a9b0bf; }
.site-name {
    font-size: 16px; font-weight: 700; color: #1d2433;
    margin-bottom: 12px; display: flex; align-items: baseline; gap: 6px;
}
.site-name span { font-size: 12px; font-weight: 400; color: #9aa3b2; }
.site-years { display: flex; gap: 8px; }
.year-btn {
    flex: 1; padding: 6px 0; border-radius: 8px;
    font-size: 13px; font-weight: 500; border: 1px solid transparent;
    transition: all .12s;
}
.year-btn.cur { background: #3d7eff; border-color: #3d7eff; color: #fff; }
.year-btn.cur:hover { background: #2f66d4; border-color: #2f66d4; }
.year-btn.on { background: #3d7eff; border-color: #3d7eff; color: #fff; } /* 兼容旧标记 */
.year-btn.avail { background: #dee8fb; color: #2f5cb0; border-color: #cddbf6; }
.year-btn.avail:hover { background: #d3e0f6; color: #274a92; }
.year-btn.off { background: #f1f2f5; border-color: #e6e8ee; color: #b6bdcb; cursor: not-allowed; }
.year-btn.off:hover { background: #f1f2f5; border-color: #e6e8ee; color: #b6bdcb; }

/* ---------- 年份下方的「秒开缓存就绪」小绿线 ----------
   每个省×年份一盏灯，位置与上面四个年份按钮一一对齐（同为 flex:1 + 同 gap）。
   灰 = 本机还没缓存（预热中），绿 = 已就绪。刻意做得极小：2px 高、18px 宽。 */
.year-dots { display: flex; gap: 8px; margin-top: 4px; }
.year-dot { flex: 1; display: flex; justify-content: center; height: 2px; }
.year-dot::after {
    content: ''; display: block; width: 18px; height: 2px;
    border-radius: 1px; background: #e4e9f1; transition: background .2s;
}
.year-dot.on::after { background: #22c55e; }
/* 该年没有数据（按钮为 off）：不显示灯位，避免用户空等它变绿 */
.year-dot.empty::after { background: transparent; }

/* 账号授权省份全都没有数据时（如青海、西藏）：整行提示，占满 .sites 网格 */
.nodata-tip {
    grid-column: 1 / -1;
    background: #fff7e6; border: 1px solid #f5d99a; color: #9a6b00;
    border-radius: 12px; padding: 30px 20px; text-align: center;
    font-size: 15px; font-weight: 600; line-height: 1.8;
}

/* ---------- 查询页：边框加深 / 文字转深 ---------- */
#view-query .filter-box { border-color: #c2ccdb; }
#view-query .result-box { border-color: #c2ccdb; }
#view-query .frow input[type="text"],
#view-query .frow select {
    border-color: #b9c4d6;
    color: #161b26;
}
#view-query .frow input:focus,
#view-query .frow select:focus { border-color: #2b6cf3; }
.flabel { color: #111827; }
.flabel2 { color: #4b5568; }
#view-query .mini-select { color: #111827; }
#btnQuery { margin-left: auto; } /* 分数/位次按钮靠右，与上方“专业名称”查询按钮垂直对齐 */
.hint { border-color: #b9c4d6; }

/* 查询结果表格 */
#result th {
    background: #e7ecf5;
    border-color: #a8b4c8;
    color: #0f1830;
}
#result td { border-color: #c8d0dd; color: #1a2231; }
#result tbody tr:hover { background: #eef3fb; }
#result tbody tr.group-expanded { background: #ecf6f1; }
#result tbody tr.group-expanded:hover { background: #e2f1ea; }
#result tbody tr.group-expanded td { border-top-color: #c6ddd3; }
td.col-no { color: #4b5568; }
td.col-scl { color: #121a2b; }
td.c-kelei { color: #303b4f; }
td.c-pici, td.c-zygroup { color: #38415a; }
td.col-name { text-align: left !important; color: #141a26; }
td.col-score { color: #c62828; }
td.c-weici { color: #6a1b9a; }
#result td.col-scl { text-align: center; }

/* 结果标题 / 分页 */
.rtitle { border-bottom-color: #c2ccdb; }
.rtitle #stat { color: #3a4456; }
.pagerbar { border-top: 1px solid #dfe5ee; }
.pg-total { color: #303b4f; }
.pg-mini { border-color: #b9c4d6; color: #1e3a76; }
.pg-num { color: #1a56d4; }
.pg-num.on { background: #3d7eff; border-color: #3d7eff; }
.pg-big:disabled { opacity: .5; }

/* 标签胶囊（未选中）加深 */
.tag-check { color: #333c4c; }

/* ===== 纠错列（仅管理账号可见） ===== */
#result th.col-fix, #result td.col-fix { text-align: center; white-space: nowrap; }
.fix-link {
    color: #d97706; font-size: 12px; text-decoration: none;
    border-bottom: 1px dashed #d97706; cursor: pointer;
}
.fix-link:hover { color: #b45309; border-bottom-color: #b45309; }
.fix-btn {
    font-size: 12px; padding: 2px 7px; border-radius: 4px; cursor: pointer;
    border: 1px solid #cbd5e1; background: #fff; color: #334155;
}
.fix-btn + .fix-btn { margin-left: 4px; }
.fix-save { border-color: #3d7eff; background: #3d7eff; color: #fff; }
.fix-save:hover { background: #2f6fe8; }
.fix-input {
    width: 100%; box-sizing: border-box; font-family: inherit;
    font-size: 13px; line-height: 1.5; padding: 3px 6px;
    border: 1px solid #3d7eff; border-radius: 4px; outline: none;
}
.fix-area { resize: vertical; min-height: 62px; }
#result tr.row-editing > td { background: #fffbe9; }

/* 查询结果“最低分/最低位次”：保留原语义色（红/紫），不随正文变黑，且取消加粗 */
#result td.col-score { color: #c62828; font-weight: 400; }
#result td.c-weici { color: #6a1b9a; font-weight: 400; }

/* ============================================================
   导出长图（隐藏功能，仅 sipence 账号）：截图瞬间给 body 挂 .exporting，
   把滚动容器整页展开、去掉内部裁剪，让窗口里看不到的部分一起参与排版，
   截完立即移除，界面立即恢复原样。
   ============================================================ */
body.exporting { overflow: visible !important; }
body.exporting #app { height: auto !important; }
body.exporting .view { height: auto !important; min-height: 100vh; overflow: visible !important; }
body.exporting .table-wrap,
body.exporting .table-scroll,
body.exporting .result-box { overflow: visible !important; max-height: none !important; }
body.exporting #result th { position: static !important; }

/* ---------- 本机秒开数据准备进度（登录后后台预热，平时隐藏） ---------- */
.preheat-tip {
    margin: 14px 0 0;
    text-align: center;
    font-size: 13px;
    color: var(--text2);
    opacity: .85;
}

/* ============================================================
   王牌专业速查（原「全国高校大全」）
   入口：各省查询页右上角导航栏，与「导出长图」同排、在其左侧，
   样式即 .nav-btn（与「导出长图」「我的账号」等保持一致）。
   ============================================================ */

#view-daxue .container { max-width: 1280px; margin: 0 auto; padding: 18px 24px 40px; }
#view-daxue .title-row { display: flex; align-items: center; gap: 10px; }
#view-daxue .sub { color: #50658a; font-size: 13px; margin: 6px 0 14px; }

/* 筛选模块：每行 4 个、共 2 行；四列等宽 + 标签定宽，保证上下左右都对齐 */
#view-daxue .filter-box {
    background: #fff; border: 1px solid #dde5f2; border-radius: 10px;
    padding: 16px 18px; margin-bottom: 16px;
    display: grid; grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 14px 22px;
}
#view-daxue .fitem { display: flex; align-items: center; gap: 8px; min-width: 0; }
#view-daxue .flabel {
    color: #303b4f; font-size: 13px; white-space: nowrap;
    flex: none; width: 60px;
}
#view-daxue .ctl { display: flex; align-items: center; gap: 6px; flex: 1; min-width: 0; }
#view-daxue input[type="text"] {
    border: 1px solid #dde5f2; border-radius: 6px; padding: 7px 9px;
    font-size: 13px; background: #fff; color: #1e2a3d; outline: none; font-family: inherit;
    flex: 1; min-width: 0;
}
#view-daxue select {
    border: 1px solid #dde5f2; border-radius: 6px; padding: 7px 8px;
    font-size: 13px; background: #fff; color: #1e2a3d; outline: none; cursor: pointer;
    flex: 1; min-width: 0;
}
#view-daxue input:focus, #view-daxue select:focus { border-color: #3d7eff; }
#view-daxue .ctl .btn {
    padding: 7px 14px; font-size: 13px; background: #3d7eff; color: #fff;
    border: none; border-radius: 5px; flex: none; cursor: pointer; white-space: nowrap;
}
#view-daxue .ctl .btn:hover { background: #2f66d4; }

/* 结果表格：每所院校占两行（第 1 行 8 个字段；第 2 行：省份 | 王牌专业： | 专业内容） */
.daxue-table {
    width: 100%; border-collapse: collapse; background: #fff;
    border: 1px solid #dde5f2;
}
.daxue-table th {
    background: #f2f6fd; color: #1e3a76; font-size: 14px; font-weight: 600;
    padding: 10px 10px; text-align: left; border-bottom: 1px solid #dde5f2; white-space: nowrap;
}
.daxue-table th, .daxue-table td { border-right: 1px solid #e6ecf6; }
.daxue-table th:last-child, .daxue-table td:last-child { border-right: 0; }
.daxue-table td {
    padding: 8px 10px; font-size: 15px; color: #2b3648;
    border-bottom: 1px solid #eef2f8; vertical-align: middle;
}
.daxue-table tr.dx-main > td { border-bottom: 0; padding-bottom: 3px; }
.daxue-table tr.dx-sub > td { border-bottom: 1px solid #eef2f8; padding-top: 3px; padding-bottom: 10px; }
.daxue-table td.dx-idx {
    text-align: center; color: #8796b0; font-weight: 600; background: #fafcff;
    border-right: 1px solid #e6ecf6;
}
.daxue-table td.dx-name { font-weight: 600; color: #16305c; }
/* 院校名称下方那一行的「所在省份」：字号更小、黑色、不加粗、不带颜色 */
.daxue-table td.dx-prov { font-size: 12px; color: #000; font-weight: 400; }
.daxue-table td.dx-major-label { color: #000; white-space: nowrap; }
.daxue-table td.dx-major { color: #50658a; }

/* 「编辑」入口（仅管理账号 sipence）：位于「层次」「王牌专业」两格的首行，只有 2 个字 */
.dx-edit-head { line-height: 1.1; margin-bottom: 2px; }
.dx-edit-link {
    color: #d97706; font-size: 12px; font-weight: 400;
    text-decoration: none; border-bottom: 1px dashed #d97706; cursor: pointer;
}
.dx-edit-link:hover { color: #b45309; border-bottom-color: #b45309; }
.dx-edit-cur { color: #b0bccd; font-size: 12px; font-weight: 400; }
.dx-edit-ops { margin-top: 4px; white-space: nowrap; }
.daxue-table tr.row-editing > td { background: #fffbe9; }
.daxue-table td .fix-input { margin-top: 1px; }
.daxue-table tr.dx-main:hover > td,
.daxue-table tr.dx-sub:hover > td { background: #f6faff; }
.dx-none { color: #b0bccd; }

/* ============================================================
   一分一段表（2026 已上线 16 省）：版式与查询页结果表一致，没有查询模块
   ============================================================ */
.yfyd-table {
    width: 100%; border-collapse: collapse; background: #fff;
    border: 1px solid #dde5f2;
}
.yfyd-table th {
    background: #f2f6fd; color: #1e3a76; font-size: 14px; font-weight: 600;
    padding: 10px; text-align: left; border-bottom: 1px solid #dde5f2; white-space: nowrap;
}
.yfyd-table th, .yfyd-table td { border-right: 1px solid #e6ecf6; }
.yfyd-table th:last-child, .yfyd-table td:last-child { border-right: 0; }
.yfyd-table td {
    padding: 6px 10px; font-size: 14px; color: #2b3648;
    border-bottom: 1px solid #eef2f8; vertical-align: middle; white-space: nowrap;
}
.yfyd-table tbody tr:hover > td { background: #f6faff; }
/* 整表 908 行铺开：科类/批次换组时加一条更粗的分隔线，一眼能看出分段 */
.yfyd-table tr.yf-group > td { border-top: 2px solid #dde5f2; }
.yfyd-table td.yf-idx { text-align: center; color: #8796b0; font-weight: 600; background: #fafcff; }
.yfyd-table td.yf-kelei { color: #16305c; font-weight: 600; }
.yfyd-table td.yf-ctrl { color: #64748b; }
.yfyd-table td.yf-score { color: #c62828; font-weight: 700; font-size: 15px; }
.yfyd-table td.yf-num { color: #50658a; }
.yfyd-table td.yf-cum { color: #1a56d4; font-weight: 600; }
.yfyd-table td.yf-rank { color: #6a1b9a; }
.yfyd-table td.yf-hist { color: #64748b; font-size: 13px; }

/* 展示区收窄并居中：9 列窄表不需要铺满整屏，窄一点更聚神、长图也更好看 */
#view-yfyd .container { max-width: 1040px; margin: 0 auto; padding: 20px 24px 40px; }
#view-yfyd .result-box { border-color: #c2ccdb; }

/* 科类切换（物理类 / 历史类）：点哪个只显示哪一类，当前项高亮 */
.yf-tabs { display: inline-flex; align-items: center; gap: 6px; }
.yf-tab {
    border: 1px solid #c2ccdb; background: #eef1f7; color: #1a3a6b;
    border-radius: 16px; padding: 4px 16px; font-size: 13px; font-weight: 600;
    cursor: pointer; transition: all .12s;
}
.yf-tab:hover { border-color: #8fa6cc; color: #12305f; }
.yf-tab.on { background: var(--primary); border-color: var(--primary); color: #fff; }

/* ---------- 登录页「找回密码」入口（2026-09-16） ---------- */
.login-links { display: flex; justify-content: center; gap: 18px; margin-top: 10px; }
.login-links .link-btn { font-size: 13px; }

/* ---------- 选地区页：标题行右侧「免费续期」（2026-09-16） ---------- */
.hw-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.hw-row .link-btn { font-size: 13.5px; font-weight: 600; color: var(--primary); white-space: nowrap; }
.hw-row .link-btn:hover { text-decoration: underline; }

/* ---------- 免费续期弹窗（2026-09-16） ---------- */
.renew-box { background: #f6f8fd; border: 1px dashed #c7d5ee; border-radius: 10px; padding: 10px 12px; margin: 8px 0 4px; }
.renew-box .rk { font-size: 12px; color: #8796b0; margin-bottom: 6px; }
.renew-line { display: flex; gap: 8px; align-items: center; }
.renew-line input { flex: 1; min-width: 0; border: 1px solid var(--line); border-radius: 8px; padding: 8px 10px; font-size: 12.5px; background: #fff; color: #33405c; }
.renew-line .btn { flex: none; padding: 8px 12px; }
.renew-tip { font-size: 12px; color: #8796b0; line-height: 1.8; margin-top: 6px; }
.renew-tip b { color: #1d4ed8; letter-spacing: 1px; }
.renew-stat { font-size: 13px; color: #33405c; margin-top: 8px; line-height: 1.9; }
.renew-stat b { color: #1d4ed8; }

/* ---------- 「我的账号」里的续期记录（2026-09-16） ---------- */
.acc-renew-list { max-height: 140px; overflow: auto; font-size: 12px; color: #475569; line-height: 1.8; }
.acc-renew-list table { width: 100%; border-collapse: collapse; }
.acc-renew-list th { font-weight: 400; color: #8796b0; text-align: left; }
.acc-renew-list th, .acc-renew-list td { font-size: 12px; padding: 2px 6px 2px 0; white-space: nowrap; }

/* ---------- 站点页脚（2026-09-16）：ICP 备案号（链工信部）+ 登录页品牌名 ---------- */
.site-foot {
    position: fixed; left: 0; right: 0; bottom: 0; height: 32px; z-index: 60;
    display: flex; align-items: center; justify-content: center; gap: 8px;
    font-size: 12px; color: #93a0b4; letter-spacing: .2px;
    background: rgba(255, 255, 255, .88);
    border-top: 1px solid rgba(220, 227, 238, .9);
    pointer-events: none;   /* 不挡页面点击：只有链接/品牌名本身可点 */
}
.site-foot a { pointer-events: auto; color: #93a0b4; text-decoration: none; }
.site-foot a:hover { color: var(--primary); text-decoration: underline; }
.site-foot .foot-brand { pointer-events: auto; color: #7d8899; font-weight: 600; }
.site-foot .foot-brand::before { content: '·'; margin-right: 8px; color: #c6cedb; font-weight: 400; }
/* 页脚只在登录页显示（见 main.js 的 view()），其它页面不占版面，所以无需给容器补下留白 */
/* 导出长图时隐藏页脚（html2canvas 截的是内容容器，这里是双保险） */
body.exporting .site-foot { display: none !important; }
