* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body {
    font-family: "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
    background: #fff;
    color: #000;
    min-height: 100vh;
    display: flex;
    flex-direction: column;
}

/* ===== 顶部导航（浅色，吸顶） ===== */
.nav {
    background: #fff;
    color: #000;
    border-bottom: 1px solid #e5e5e5;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0 32px;
    height: 64px;
    position: sticky;
    top: 0;
    z-index: 100;
}

.nav .logo {
    font-size: 20px;
    font-weight: 700;
    color: #000;
    text-decoration: none;
    margin-right: 40px;
    letter-spacing: 1px;
    display: flex;
    align-items: center;
    gap: 8px;
}

.nav .logo img {
    height: 50px;
    vertical-align: middle;
}

.nav a.link {
    color: #666;
    text-decoration: none;
    padding: 0 18px;
    height: 56px;
    line-height: 56px;
    font-size: 15px;
}

.nav a.link:hover {
    color: #000;
}

.nav a.link.active {
    color: #000;
    font-weight: 600;
    box-shadow: inset 0 -3px 0 #000;
}

/* ===== 主内容 ===== */
main {
    flex: 1;
    width: 100%;
    max-width: 1200px;
    margin: 0 auto;
    padding: 32px 24px 64px;
}

h1.page-title {
    font-size: 24px;
    font-weight: 700;
    margin-bottom: 24px;
}

p.list-legend {
    color: #888;
    font-size: 13px;
    margin: -16px 0 24px;
}

/* ===== 表格 ===== */
table.list {
    width: 100%;
    border-collapse: collapse;
    font-size: 15px;
}

table.list th,
table.list td {
    border-bottom: 1px solid #ddd;
    padding: 10px 12px;
    text-align: left;
}

table.list th {
    border-bottom: 2px solid #000;
    font-weight: 600;
    white-space: nowrap;
}

table.list tbody tr:hover {
    background: #f2f2f2;
}

table.list td a {
    color: #000;
    text-decoration: none;
}

table.list td a:hover {
    text-decoration: underline;
}

/* ===== 详情页 ===== */
.info-grid {
    display: flex;
    flex-wrap: wrap;
    gap: 12px 32px;
    border: 1px solid #000;
    padding: 16px 20px;
    margin-bottom: 32px;
    font-size: 15px;
}

.info-grid .item span {
    color: #777;
    margin-right: 6px;
}

h2.section-title {
    font-size: 18px;
    font-weight: 700;
    margin-bottom: 12px;
}

td.rank {
    font-variant-numeric: tabular-nums;
    color: #555;
    width: 60px;
}

/* 筛选状态下 No. 列里的"/总排名"：灰色小字 */
.sub-rank {
    color: #aaa;
    font-size: 12px;
}

/* 竞争分析·最强选手列表：本人所在行高亮（浅红底，与本选手折线同色系的淡色） */
.list tr.self-row td {
    background: #fdecec;
}

td.num {
    font-variant-numeric: tabular-nums;
    text-align: right;
}

th.r {
    text-align: right;
}

.empty {
    color: #999;
}

/* ===== 分页 ===== */
.pager {
    margin-top: 24px;
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
}

.pager button {
    border: 1px solid #000;
    background: #fff;
    color: #000;
    padding: 6px 14px;
    font-size: 14px;
    cursor: pointer;
}

.pager button:hover:not(:disabled) {
    background: #000;
    color: #fff;
}

.pager button:disabled {
    border-color: #ccc;
    color: #ccc;
    cursor: default;
}

.pager button.cur {
    background: #000;
    color: #fff;
}

.pager .info {
    color: #777;
    font-size: 13px;
    margin-left: 8px;
}

/* ===== 比赛页 ===== */
/* 比赛页：3 列网格，每块默认 6 条纵向排列 */
.series-wrap {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 24px;
    align-items: start;
}

.series-block {
    position: relative;
    min-width: 0;
    display: flex;
    flex-direction: column;
}

.series-block h2 {
    font-size: 18px;
    border-bottom: 2px solid #000;
    padding-bottom: 6px;
    margin-bottom: 12px;
}

.contest-col {
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.more-btn {
    align-self: flex-end;
    margin-top: 4px;
    border: none;
    background: none;
    color: #000;
    padding: 2px 0;
    font-size: 13px;
    cursor: pointer;
    text-decoration: underline;
    text-underline-offset: 3px;
}

.more-btn:hover {
    background: #000;
    color: #fff;
    text-decoration: none;
}

/* 悬浮展开面板：覆盖在其他块上方，不撑破布局 */
.series-popup {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    z-index: 60;
    background: #fff;
    border: 1px solid #000;
    padding: 10px;
    max-height: 320px;
    overflow-y: auto;
    box-shadow: 4px 4px 0 rgba(0, 0, 0, 0.25);
}

@media (max-width: 900px) {
    .series-wrap {
        grid-template-columns: repeat(2, 1fr);
    }
}

@media (max-width: 600px) {
    .series-wrap {
        grid-template-columns: 1fr;
    }
}

.contest-item {
    padding: 3px 4px;
    font-size: 14px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    text-decoration: none;
    color: #000;
    gap: 8px;
}

.contest-item:hover {
    background: #000;
    color: #fff;
}

.contest-item:hover .cnt {
    color: #ccc;
}

.contest-item .name {
    font-weight: 600;
}

.contest-item .cnt {
    color: #888;
    font-size: 12px;
    white-space: nowrap;
}

/* ===== 获奖折线图 ===== */
.award-tabs {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-bottom: 16px;
}

.award-tabs button {
    border: 1px solid #000;
    background: #fff;
    color: #000;
    padding: 5px 14px;
    font-size: 13px;
    cursor: pointer;
}

.award-tabs button:hover {
    background: #eee;
}

.award-tabs button.cur {
    background: #000;
    color: #fff;
}

.chart-box {
    border: 1px solid #eee;
    padding: 16px 20px 8px;
    margin-bottom: 40px;
    height: 360px;
    position: relative;
}

.chart-box .empty {
    padding: 140px 0;
}

.chart-box.tall {
    height: 420px;
}

.badge-soon {
    border: 1px solid currentColor;
    font-size: 11px;
    padding: 1px 5px;
    margin-left: 6px;
    white-space: nowrap;
}

/* ===== 关于页：数据分析功能说明（横线与上文区分） ===== */
.about-analysis {
    margin-top: 40px;
    border-top: 1px solid #e5e5e5;
    padding-top: 8px;
}
.about-analysis .about-group {
    font-weight: 600;
    font-size: 15px;
    margin: 22px 0 2px;
    color: #000;
}
.about-analysis h3 {
    font-size: 15px;
    margin: 16px 0 4px;
}
.about-analysis h3 a {
    color: #000;
    text-decoration: none;
}
.about-analysis h3 a:hover {
    text-decoration: underline;
}
.about-analysis p {
    font-size: 14px;
    line-height: 1.9;
    color: #333;
    margin: 6px 0;
}
/* 锚点跳转避开吸顶导航 */
.about h2[id], .about h3[id] {
    scroll-margin-top: 80px;
}

.dim-list {
    margin: 0;
    padding-left: 18px;
    font-size: 13px;
    line-height: 2;
    color: #555;
}

.analysis-sub {
    font-size: 14px;
    font-weight: 400;
    color: #666;
    margin-left: 12px;
}

/* 搜索选手 */
.analysis-search {
    position: relative;
    max-width: 420px;
}

.analysis-search input {
    width: 100%;
    box-sizing: border-box;
    border: 1px solid #000;
    padding: 10px 14px;
    font-size: 15px;
}

.analysis-search input:focus {
    outline: 2px solid #000;
    outline-offset: 0;
}

.search-results {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    z-index: 50;
    list-style: none;
    margin: 0;
    padding: 0;
    background: #fff;
    border: 1px solid #000;
    max-height: 320px;
    overflow-y: auto;
}

.search-results li {
    display: flex;
    justify-content: space-between;
    padding: 8px 14px;
    cursor: pointer;
    font-size: 14px;
}

.search-results li:hover {
    background: #000;
    color: #fff;
}

.search-results .meta {
    color: #888;
    font-size: 12px;
}

.search-results li:hover .meta {
    color: #ccc;
}

/* 选手卡片 + 控件 */
.player-panel {
    display: grid;
    grid-template-columns: minmax(240px, 1fr) 2fr;
    gap: 16px;
    margin-bottom: 20px;
    position: sticky;
    top: 64px; /* 与导航同高（窄屏导航 56px，见媒体查询） */
    z-index: 50;
    background: #fff;
    padding: 8px 0;
}

/* 窄屏导航高度 56px */
@media (max-width: 768px) {
    .player-panel {
        top: 56px;
    }
}

.player-panel .controls {
    position: relative;
}

@media (max-width: 800px) {
    .player-panel {
        grid-template-columns: 1fr;
        position: static;
    }
}

.player-card2 {
    border: 1px solid #000;
    padding: 16px 18px;
}

.player-card2 h3 {
    margin: 0;
    font-size: 18px;
}

/* 姓名与积分同一行：姓名在左，积分贴底靠右 */
.pc-title {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 4px;
}

.pc-score {
    font-size: 17px;
    font-weight: 700;
    white-space: nowrap;
}

.pc-sub {
    color: #666;
    font-size: 13px;
    margin-bottom: 10px;
}

.pc-badges {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
}

.pc-badges span {
    border: 1px solid #000;
    font-size: 12px;
    padding: 2px 8px;
}

.controls {
    border: 1px solid #000;
    padding: 16px 18px;
    display: flex;
    flex-wrap: wrap;
    gap: 18px;
    align-items: flex-end;
}

.ctl > label {
    display: block;
    font-size: 12px;
    color: #666;
    margin-bottom: 6px;
}

.ctl select {
    border: 1px solid #000;
    background: #fff;
    padding: 6px 10px;
    font-size: 13px;
}

.seg-btns {
    display: flex;
    gap: 6px;
    flex-wrap: wrap;
}

.seg-btns button {
    border: 1px solid #000;
    background: #fff;
    color: #000;
    padding: 6px 14px;
    font-size: 13px;
    cursor: pointer;
}

.seg-btns button:hover {
    background: #000;
    color: #fff;
}

.seg-btns button.active {
    background: #000;
    color: #fff;
}

/* 开关（toggle switch）：黑白主题，开启=黑 */
.switch-row {
    display: flex;
    gap: 18px;
    flex-wrap: wrap;
}

.switch {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    cursor: pointer;
    user-select: none;
    font-size: 13px;
}

.switch input {
    display: none;
}

.switch .track {
    width: 34px;
    height: 18px;
    background: #ccc;
    border-radius: 9px;
    position: relative;
    transition: background .15s;
    flex-shrink: 0;
}

.switch .track::after {
    content: '';
    position: absolute;
    top: 2px;
    left: 2px;
    width: 14px;
    height: 14px;
    border-radius: 50%;
    background: #fff;
    transition: left .15s;
}

.switch input:checked + .track {
    background: #000;
}

.switch input:checked + .track::after {
    left: 18px;
}

.switch:hover .track {
    background: #999;
}

.switch input:checked:hover + .track {
    background: #333;
}

/* 彩色开关（与竞争分析图表的届别配色对应）：green=下届 amber=上届 blue=范围 */
.switch.green input:checked + .track { background: #059669; }
.switch.green input:checked:hover + .track { background: #047857; }
.switch.amber input:checked + .track { background: #d97706; }
.switch.amber input:checked:hover + .track { background: #b45309; }
.switch.blue input:checked + .track { background: #2563eb; }
.switch.blue input:checked:hover + .track { background: #1d4ed8; }

/* 三选一分段开关（iOS 式浮动指示器） */
.seg3 {
    display: inline-flex;
    background: #f1f1f1;
    border-radius: 999px;
    padding: 3px;
    gap: 2px;
}

.seg3 button {
    border: none;
    background: transparent;
    color: #666;
    padding: 6px 16px;
    font-size: 13px;
    cursor: pointer;
    border-radius: 999px;
    white-space: nowrap;
    transition: background .15s, color .15s, box-shadow .15s;
}

.seg3 button:hover {
    color: #000;
}

.seg3 button.on {
    background: #2563eb;
    color: #fff;
    box-shadow: 0 1px 4px rgba(0, 0, 0, .25);
}

.seg3 button.on:hover {
    background: #1d4ed8;
}

/* 届别配色：与图表一致 下届=青绿 上届=深蓝 本届=亮橙 */
.seg3 button.on.green { background: #14B8A6; }
.seg3 button.on.green:hover { background: #0d9488; }
.seg3 button.on.amber { background: #3B5998; }
.seg3 button.on.amber:hover { background: #2f477a; }
.seg3 button.blue {
    background: #F97316;
    color: #fff;
    cursor: default;
    box-shadow: 0 1px 4px rgba(0, 0, 0, .25);
}

/* 统计卡片 */
.stat-cards {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
    gap: 12px;
    margin-bottom: 30px;
}

.stat-card {
    border: 1px solid #000;
    padding: 12px 16px;
}

.stat-card .label {
    font-size: 12px;
    color: #666;
}

.stat-card .value {
    font-size: 24px;
    font-weight: 700;
    margin: 4px 0;
}

.stat-card .value.small {
    font-size: 18px;
}

.stat-card .sub {
    font-size: 12px;
    color: #888;
}

/* ===== 首页 ===== */
main.home {
    max-width: 1200px;
}

/* ===== 关于 ===== */
.loading {
    color: #999;
    padding: 40px 0;
    text-align: center;
}

/* 左目录 + 右内容 两栏布局 */
.about-body {
    display: flex;
    gap: 48px;
    align-items: flex-start;
}

.toc {
    width: 130px;
    flex-shrink: 0;
    position: sticky;
    top: 88px;
    font-size: 14px;
}

.toc a {
    display: block;
    padding: 5px 0 5px 10px;
    color: #999;
    text-decoration: none;
    border-left: 2px solid #eee;
}

.toc a.sub {
    padding-left: 22px;
    font-size: 13px;
}

.toc a:hover {
    color: #000;
    border-left-color: #000;
}

.about-content {
    flex: 1;
    min-width: 0;
}

@media (max-width: 800px) {
    .about-body {
        flex-direction: column;
        gap: 16px;
    }
    .toc {
        position: static;
        width: auto;
        display: flex;
        flex-wrap: wrap;
        gap: 4px 14px;
    }
    .toc a {
        border-left: none;
        padding-left: 0;
    }
}

.about p {
    line-height: 1.9;
    margin-bottom: 12px;
    max-width: 720px;
}

footer {
    text-align: center;
    color: #aaa;
    font-size: 13px;
    padding: 24px;
    border-top: 1px solid #eee;
}

footer a {
    color: #999;
    text-decoration: none;
}

footer a:hover {
    color: #333;
}

/* ===== 可复用文字弹窗 =====
   用法：<span class="tip" data-tip="说明文字">要标注的文字</span>
   悬停显示黑色气泡，自动换行，位置不够时尽量保持在视口内。 */
.tip {
    position: relative;
    border-bottom: 1px dashed #999;
    cursor: help;
}

.tip::after {
    content: attr(data-tip);
    display: none;
    position: absolute;
    bottom: calc(100% + 8px);
    left: 0;
    transform: translateX(-20%);
    background: #000;
    color: #fff;
    padding: 10px 14px;
    font-size: 13px;
    font-weight: 400;
    line-height: 1.7;
    width: max-content;
    max-width: 320px;
    white-space: normal;
    z-index: 100;
}

.tip::before {
    content: '';
    display: none;
    position: absolute;
    bottom: calc(100% - 2px);
    left: 20px;
    border: 6px solid transparent;
    border-top-color: #000;
    z-index: 100;
}

.tip:hover::after,
.tip:hover::before {
    display: block;
}

/* 表头筛选弹层 */
th.has-filter {
    position: relative;
}
button.col-filter {
    position: relative;
    z-index: 45;
    border: none;
    background: none;
    color: #000;
    opacity: 0.45;
    padding: 2px;
    margin-left: 4px;
    cursor: pointer;
    vertical-align: middle;
    line-height: 1;
}
button.col-filter:hover {
    opacity: 1;
}
button.col-filter.on {
    opacity: 1;
}
/* 清除筛选的 ×：筛选生效时出现于漏斗右侧，常显（方便发现） */
button.col-filter.reset {
    opacity: 0.75;
    font-size: 13px;
    font-weight: 700;
    padding: 0 2px;
    margin-left: 2px;
}
button.col-filter.reset:hover {
    opacity: 1;
}
.th-popup {
    position: absolute;
    top: 100%;
    left: 0;
    z-index: 50;
    background: #fff;
    border: 1px solid #000;
    padding: 8px;
    min-width: 160px;
}
.th-popup input {
    width: 100%;
    box-sizing: border-box;
    border: 1px solid #000;
    background: #fff;
    color: #000;
    padding: 5px 8px;
    font-size: 13px;
}
.th-popup input:focus {
    outline: 2px solid #000;
    outline-offset: 0;
}
.th-popup .opt-list {
    margin-top: 6px;
}
/* 文本筛选（姓名/学校名）展开时：表头行下方插入一整行搜索栏，
   表头保持原样，输入框不遮挡任何记录 */
tr.search-bar td {
    background: #f7f7f7;
    padding: 8px 12px;
}
tr.search-bar .search-bar-label {
    font-size: 13px;
    color: #666;
    margin-right: 8px;
}
tr.search-bar input {
    width: 220px;
    border: 1px solid #000;
    background: #fff;
    color: #000;
    padding: 5px 8px;
    font-size: 13px;
}
tr.search-bar input:focus {
    outline: 2px solid #000;
    outline-offset: 0;
}
tr.search-bar .search-bar-clear {
    margin-left: 8px;
    font-size: 12px;
    border: 1px solid #000;
    background: #fff;
    color: #000;
    padding: 4px 10px;
    cursor: pointer;
}
tr.search-bar .search-bar-clear:hover {
    background: #000;
    color: #fff;
}
/* 学校页学生列表"已升学"标记：最新获奖记录已不在本校 */
.moved-tag {
    color: #999;
    font-size: 12px;
    margin-left: 6px;
    cursor: help;
    white-space: nowrap;
}
/* 弹层内的可点列表（省份/评级） */
.opt-list {
    list-style: none;
    margin: 0;
    padding: 0;
    max-height: 260px;
    overflow-y: auto;
    min-width: 120px;
}
.opt-list li {
    padding: 5px 8px;
    cursor: pointer;
    white-space: nowrap;
}
.opt-list li:hover {
    background: #000;
    color: #fff;
}
.opt-list li.cur {
    font-weight: 700;
}
.opt-list li.cur::before {
    content: "✓ ";
}
/* 弹层快速搜索无匹配提示 */
.opt-list li.opt-none {
    color: #999;
    font-size: 12px;
    cursor: default;
}
.opt-list li.opt-none:hover {
    background: none;
    color: #999;
}
/* 多选弹层底部的"确定"按钮 */
.opt-actions {
    border-top: 1px solid #eee;
    margin-top: 4px;
    padding-top: 6px;
    text-align: center;
}
.opt-actions button {
    background: #000;
    color: #fff;
    border: none;
    padding: 4px 26px;
    font-size: 13px;
    cursor: pointer;
}
.opt-actions button:hover {
    background: #333;
}
/* 点击弹层外部区域时关闭（透明遮罩，位于弹层之下） */
.popup-overlay {
    position: fixed;
    inset: 0;
    z-index: 40;
}
.empty {
    text-align: center;
    color: #666;
    padding: 30px 0;
}

/* ===== 选手详情弹窗（可复用组件，配合 assets/oier-modal.js） ===== */
.modal-mask {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, .45);
    z-index: 300;
    display: flex;
    align-items: flex-start;
    justify-content: center;
    padding: 8vh 16px 16px;
    overflow-y: auto;
}

.modal-box {
    background: #fff;
    border: 1px solid #000;
    width: 100%;
    max-width: 860px;
}

.modal-head {
    display: flex;
    align-items: baseline;
    gap: 12px;
    padding: 14px 18px;
    border-bottom: 1px solid #000;
}

.modal-head .modal-sub {
    color: #666;
    font-size: 13px;
}

.modal-x {
    border: none;
    background: none;
    font-size: 22px;
    line-height: 1;
    cursor: pointer;
    color: #000;
    padding: 0 2px;
}

.modal-x:hover {
    color: #666;
}

.modal-body {
    padding: 16px 18px 20px;
    max-height: 72vh;
    overflow-y: auto;
}

.modal-body .section-title {
    margin-top: 18px;
}

/* 弹窗内"新窗口打开选手页"图标 */
.modal-ext {
    text-decoration: none;
    font-size: 14px;
    color: #666;
}

.modal-ext:hover {
    color: #000;
}

/* 弹窗标题行右侧组合（概要信息 + 竞争分析），靠右、基线对齐 */
.modal-head .head-side {
    display: flex;
    align-items: baseline;
    gap: 16px;
    flex-wrap: wrap;
    margin-left: auto;
}

.modal-head .modal-score {
    font-size: 13px;
    white-space: nowrap;
}
.modal-head .modal-score i {
    font-style: normal;
    color: #777;
    margin-right: 4px;
}

/* 弹窗右上角的"竞争分析"入口 */

/* 详情页标题行：姓名 + 右侧"竞争分析"链接 */
.page-head {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: 12px;
    flex-wrap: wrap;
    margin-bottom: 24px;
}
.page-head .page-title {
    margin-bottom: 0;
}

/* 标题行右侧组合：概要信息 + 操作链接（与姓名基线对齐） */
.page-head .head-side {
    display: flex;
    align-items: baseline;
    gap: 20px;
    flex-wrap: wrap;
}

/* 学校详情页标题行右侧的概要信息（无框，与校名基线对齐） */
.page-head .head-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 6px 20px;
    font-size: 14px;
}
.page-head .head-meta span i {
    font-style: normal;
    color: #777;
    margin-right: 6px;
}

/* "竞争分析"入口链接：黑色文字 + 灰度图标，非老式蓝色超链接 */
.page-head .head-link,
.modal-head .modal-ana {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    color: #000;
    text-decoration: none;
}
.page-head .head-link {
    font-size: 14px;
}
.page-head .head-link:hover,
.modal-head .modal-ana:hover {
    text-decoration: underline;
}
.modal-head .modal-ana:hover svg {
    stroke: #000;
}


/* ===== 导航栏图标（灰度，跟随文字颜色） ===== */
.nav a.link svg,
.nav .menu-toggle svg {
    width: 15px;
    height: 15px;
    vertical-align: -2px;
    margin-right: 6px;
}

/* ===== 下拉菜单（数据分析） ===== */
.nav .has-menu {
    position: relative;
}
.nav .menu-toggle {
    background: none;
    border: none;
    font: inherit;
    cursor: pointer;
    color: #666;
    padding: 0 18px;
    height: 56px;
    font-size: 15px;
    display: inline-flex;
    align-items: center;
}
.nav .menu-toggle:hover {
    color: #000;
}
.nav .has-menu.active > .menu-toggle {
    color: #000;
    font-weight: 600;
    box-shadow: inset 0 -3px 0 #000;
}
.nav .dropdown {
    display: none;
    position: absolute;
    top: 100%;
    left: 50%;
    transform: translateX(-50%);
    min-width: 210px;
    background: #fff;
    border: 1px solid #e5e5e5;
    border-radius: 8px;
    box-shadow: 0 8px 24px rgba(0, 0, 0, .08);
    padding: 6px 0;
}
.nav .has-menu.open > .dropdown {
    display: block;
}
.nav .dropdown .drop-group {
    padding: 8px 20px 2px;
    font-size: 13px;
    font-weight: 600;
    color: #000;
}
.nav .dropdown a {
    display: block;
    padding: 8px 20px 8px 36px;
    color: #666;
    text-decoration: none;
    font-size: 14px;
    white-space: nowrap;
}
.nav .dropdown a:hover {
    color: #000;
    background: #f5f5f5;
}
.nav .dropdown a .badge-soon {
    margin-left: 6px;
}

/* ===== 用户登录/登出 ===== */
.nav .nav-user {
    position: relative;
    margin-left: auto;
    margin-right: 8px;
}
.nav .nav-user.has-user {
    display: flex;
    align-items: center;
}
.nav .user-toggle {
    background: none;
    border: none;
    cursor: pointer;
    padding: 4px 12px;
    border: 1px solid #ddd;
    border-radius: 4px;
    font-size: 14px;
    color: #333;
    display: flex;
    align-items: center;
    gap: 4px;
}
.nav .user-toggle:hover {
    background: #f5f5f5;
    border-color: #ccc;
}
.nav .user-toggle::after {
    content: '';
    display: inline-block;
    width: 0;
    height: 0;
    border-left: 4px solid transparent;
    border-right: 4px solid transparent;
    border-top: 4px solid #666;
    margin-left: 4px;
}
.nav .nav-user.open .user-toggle::after {
    border-top: none;
    border-bottom: 4px solid #666;
}
.nav .user-dropdown {
    display: none;
    position: absolute;
    top: 100%;
    right: 0;
    min-width: 140px;
    background: #fff;
    border: 1px solid #e5e5e5;
    border-radius: 6px;
    box-shadow: 0 4px 16px rgba(0,0,0,0.1);
    padding: 6px 0;
    margin-top: 4px;
    z-index: 1000;
}
.nav .nav-user.open > .user-dropdown {
    display: block;
}
.nav .user-dropdown a {
    display: block;
    padding: 8px 16px;
    color: #333;
    text-decoration: none;
    font-size: 14px;
}
.nav .user-dropdown a:hover {
    background: #f5f5f5;
}
.nav .nav-user .login-link {
    color: #333;
    text-decoration: none;
    padding: 4px 12px;
    border: 1px solid #ddd;
    border-radius: 4px;
    font-size: 14px;
    transition: all .2s;
}
.nav .nav-user .login-link:hover {
    background: #f5f5f5;
    border-color: #ccc;
}

/* ===== 汉堡按钮（窄屏） ===== */
.nav .nav-burger {
    display: none;
    background: none;
    border: none;
    cursor: pointer;
    color: #666;
    padding: 8px;
}
.nav .nav-burger svg {
    width: 24px;
    height: 24px;
}

/* ===== 窄屏响应式：菜单收进汉堡，标题隐藏只留 LOGO ===== */
@media (max-width: 768px) {
    .nav {
        justify-content: space-between;
        padding: 0 12px;
        height: 56px;
        flex-wrap: wrap;
    }
    .nav .logo {
        margin-right: 0;
        font-size: 0;
        gap: 0;
        order: 0;
    }
    .nav .nav-burger {
        display: flex;
        align-items: center;
        order: 1;
        margin-left: auto;
    }
    .nav a.link,
    .nav .has-menu,
    .nav .nav-user {
        display: none;
        order: 2;
    }
    .nav.open {
        height: auto;
    }
    .nav.open a.link,
    .nav.open .has-menu,
    .nav.open .nav-user {
        display: flex;
        width: 100%;
        order: 3;
    }
    .nav.open .nav-user {
        justify-content: center;
        padding: 8px 12px;
        border-top: 1px solid #eee;
        margin-top: 8px;
    }
    .nav.open .user-toggle {
        width: 100%;
        justify-content: center;
    }
    .nav.open .user-dropdown {
        position: static;
        width: 100%;
        box-shadow: none;
        border: none;
        border-radius: 0;
        margin-top: 8px;
        padding: 0;
    }
    .nav.open .user-dropdown a {
        padding: 10px 12px;
    }
    .nav.open a.link {
        height: 44px;
        line-height: 44px;
        padding: 0 12px;
    }
    .nav.open .menu-toggle {
        width: 100%;
        height: 44px;
        padding: 0 12px;
        justify-content: flex-start;
        box-shadow: none !important;
    }
    .nav.open .has-menu.active > .menu-toggle {
        box-shadow: none !important;
        color: #000;
    }
    /* 窄屏：下拉改为就地展开 */
    .nav .dropdown,
    .nav.open .dropdown {
        position: static;
        transform: none;
        border: none;
        box-shadow: none;
        border-radius: 0;
        padding: 0 0 4px;
        min-width: 0;
    }
    .nav .dropdown a {
        padding: 8px 12px 8px 36px;
    }
    .nav .dropdown .drop-group {
        padding: 6px 12px 2px 24px;
    }
}
/* ===== 首页：金牌选手风采（居中） ===== */
.home-star {
    margin: 0 auto 48px;
    padding: 72px 0 24px;
    text-align: center;
}

.star-head {
    margin-bottom: 28px;
}

.star-name {
    font-size: 34px;
    font-weight: 700;
    color: #000;
    text-decoration: none;
}

.star-name:hover {
    text-decoration: underline;
    text-underline-offset: 5px;
}

.star-sub {
    color: #666;
    font-size: 14px;
    margin-top: 10px;
}

.star-meta {
    color: #666;
    font-size: 14px;
    margin-top: 6px;
}

/* 高光战绩：一行排开，自动换行；基线对齐，保证换行后同行文字对齐 */
.star-line {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    align-items: baseline;
    gap: 12px 22px;
    font-size: 17px;
}

.star-token {
    color: #000;
    text-decoration: none;
    white-space: nowrap;
}

.star-token:hover {
    text-decoration: underline;
    text-underline-offset: 3px;
}

/* 满分 AK：黑底白字小胶囊 */
.star-token.ak {
    background: #000;
    color: #fff;
    padding: 1px 10px;
    border-radius: 999px;
}

.star-token.ak:hover {
    text-decoration: none;
    opacity: .75;
}

/* Vue 加载完成前隐藏模板，避免 {{ }} 闪烁 */
[v-cloak] {
    display: none;
}

/* 战绩两行：奖牌行 与 AK 行 之间的间距 */
.star-line + .star-line {
    margin-top: 14px;
}

/* 毕业学校链接：黑色，悬停下划线 */
.star-meta a {
    color: #000;
    text-decoration: none;
    border-bottom: 1px solid #999;
}

.star-meta a:hover {
    border-bottom-color: #000;
}

/* 板块名：居中小字 */
.star-label {
    font-size: 13px;
    color: #999;
    letter-spacing: 2px;
    margin-bottom: 18px;
}

/* 分数形式显示时，分母（满分/参赛人数）用小一号字 */
.den {
    font-size: 12px;
}

/* ===== 宏观分析 ===== */
.macro-themes {
    margin: 18px 0 6px;
}

.macro-controls {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    margin: 18px 0 6px;
    font-size: 14px;
}

.macro-controls label {
    font-weight: 600;
    margin-right: 4px;
}

.macro-controls select {
    font-size: 14px;
    padding: 4px 8px;
    border: 1px solid #ccc;
    background: #fff;
    border-radius: 3px;
}

.macro-controls .ctl-note {
    color: #888;
    font-size: 12px;
}

.chart-note {
    color: #888;
    font-size: 13px;
    margin: 6px 0 18px;
}

/* 省份多选胶囊 */
.prov-picker {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin: 10px 0 14px;
}

.prov-picker button {
    border: 1px solid #ddd;
    background: #fff;
    border-radius: 999px;
    padding: 3px 12px;
    font-size: 13px;
    cursor: pointer;
    color: #666;
}

.prov-picker button.on {
    background: #000;
    border-color: #000;
    color: #fff;
}

/* 热力表 */
.heatmap-wrap {
    overflow-x: auto;
    margin-bottom: 24px;
}

.heatmap {
    border-collapse: collapse;
    font-size: 12px;
    min-width: 100%;
}

.heatmap th, .heatmap td {
    border: 1px solid #eee;
    padding: 4px 6px;
    text-align: center;
    min-width: 34px;
}

.heatmap th.name, .heatmap td.name {
    text-align: left;
    white-space: nowrap;
    font-weight: 600;
    position: sticky;
    left: 0;
    background: #fff;
}

/* 宏观页主题切换（seg-btns 里的链接样式，与按钮一致） */
.seg-btns a {
    border: 1px solid #000;
    background: #fff;
    color: #000;
    padding: 6px 14px;
    font-size: 13px;
    text-decoration: none;
}

.seg-btns a:hover {
    background: #000;
    color: #fff;
}

.seg-btns a.active {
    background: #000;
    color: #fff;
}

/* 微观分析切换条中被禁用的功能（成长预测点数不足） */
.seg-btns .off {
    border: 1px solid #eee;
    background: #fff;
    color: #ccc;
    padding: 6px 14px;
    font-size: 13px;
    cursor: not-allowed;
    user-select: none;
}

/* 图表标题行：标题居左、控件居右 */
.chart-title-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 16px;
    flex-wrap: wrap;
}

.chart-title-row .section-title {
    margin-bottom: 10px;
}

/* 双柄滑轴：年份/入学年范围选择（微观分析、宏观地域页共用） */
.em-range { max-width: 560px; }
.dual-range { position: relative; height: 24px; margin: 8px 0 2px; }
.dr-track { position: absolute; top: 10px; left: 0; right: 0; height: 4px; background: #e4e4e4; border-radius: 2px; }
.dr-fill { position: absolute; top: 10px; height: 4px; background: #222; border-radius: 2px; }
.dual-range input[type=range] { position: absolute; top: 0; left: 0; width: 100%; height: 24px; margin: 0; padding: 0;
    -webkit-appearance: none; appearance: none; background: none; pointer-events: none; }
.dual-range input[type=range]::-webkit-slider-runnable-track { background: none; border: none; height: 24px; }
.dual-range input[type=range]::-webkit-slider-thumb { -webkit-appearance: none; pointer-events: auto;
    width: 16px; height: 16px; margin-top: 4px; border-radius: 50%; background: #fff; border: 2px solid #222; cursor: grab; }
.dual-range input[type=range]::-moz-range-track { background: none; border: none; }
.dual-range input[type=range]::-moz-range-thumb { pointer-events: auto;
    width: 12px; height: 12px; border-radius: 50%; background: #fff; border: 2px solid #222; cursor: grab; }
.dr-scale { display: flex; justify-content: space-between; font-size: 11px; color: #999; }
.dr-values { font-size: 13px; color: #222; }
.dr-values b { font-weight: 600; }

/* 热力表累计列 */
.heatmap td.total { font-weight: 700; }

/* 内嵌控件行：去掉上下外边距 */
.macro-controls.inline {
    margin: 0 0 10px;
}

/* ===== 通用提示弹窗（配合 assets/common.js 的 showNotice） ===== */
.notice-mask {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, .45);
    z-index: 400;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 16px;
}

.notice-box {
    background: #fff;
    border: 1px solid #000;
    max-width: 420px;
    width: 100%;
    padding: 18px 20px;
}

.notice-title {
    font-weight: 700;
    font-size: 16px;
    margin-bottom: 10px;
}

.notice-body {
    font-size: 14px;
    line-height: 1.7;
    color: #333;
}

.notice-body p {
    margin: 0 0 8px;
}

.notice-foot {
    margin-top: 14px;
    text-align: right;
}

.notice-ok {
    border: 1px solid #000;
    background: #fff;
    padding: 5px 18px;
    cursor: pointer;
    font-size: 14px;
}

.notice-ok:hover {
    background: #000;
    color: #fff;
}

/* 机构名：外观同普通文字，可点击弹提示 */
.js-not-school {
    cursor: pointer;
}

.js-not-school:hover {
    opacity: .65;
}
