*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{--bg:#f0f2f5;--card:#fff;--text:#1a1a2e;--muted:#666;--accent:#4361ee;--chong:#e63946;--wen:#f4a261;--bao:#2a9d8f;--radius:12px;--shadow:0 2px 8px rgba(0,0,0,.08)}
body{font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Noto Sans SC",sans-serif;background:var(--bg);color:var(--text);line-height:1.6;min-height:100vh}
header{background:linear-gradient(135deg,#4361ee,#7209b7);color:#fff;padding:2rem 1rem;text-align:center}
header h1{font-size:1.8rem;margin-bottom:.25rem}
header p{opacity:.85;font-size:.95rem}
main{max-width:1200px;margin:0 auto;padding:1rem}
.search-form{background:var(--card);border-radius:var(--radius);padding:.85rem 1rem;box-shadow:var(--shadow);margin-bottom:1rem}
.form-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:.5rem;align-items:end}
.form-grid+.form-grid{margin-top:.4rem}
.form-group{min-width:0}
.form-group label{display:block;font-size:.72rem;font-weight:600;color:var(--muted);margin-bottom:.2rem}
.form-group input,.form-group select{width:100%;padding:.4rem .5rem;border:1px solid #ddd;border-radius:6px;font-size:.82rem;background:#fafafa}
.form-group input:focus,.form-group select:focus{outline:2px solid var(--accent);border-color:transparent}
.grid-span-2{grid-column:span 2}
.grid-span-3{grid-column:span 3}
.grid-span-4{grid-column:span 4}
.grid-span-5{grid-column:span 5}
.grid-span-6{grid-column:span 6}
.form-actions{display:flex;flex-direction:column;justify-content:end;align-items:end}
.form-actions button{padding:.4rem 1.2rem;background:var(--accent);color:#fff;border:none;border-radius:6px;font-size:.85rem;cursor:pointer;white-space:nowrap;transition:background .2s;height:fit-content}
.form-actions button:hover{background:#3a56d4}
.checkbox-list{display:flex;flex-wrap:wrap;gap:.25rem .35rem;padding-top:.1rem}
.purity-tip{display:inline-flex;align-items:center;justify-content:center;width:1em;height:1em;border-radius:50%;border:1px solid #aaa;color:#888;font-size:.65rem;font-weight:700;cursor:help;vertical-align:super;margin-left:.1em}
.tag-check,.prefer-radio{display:inline-flex;align-items:center;gap:.15rem;font-size:.82rem;cursor:pointer;padding:.1em .35em;border-radius:4px;border:1px solid #ddd;transition:all .15s}
.tag-check:has(input:checked),.prefer-radio:has(input:checked){border-color:var(--accent);background:#eef1ff;color:var(--accent);font-weight:600}
.tag-check input,.prefer-radio input{width:auto;margin:0;accent-color:var(--accent)}
.htmx-indicator{display:none;text-align:center;padding:1rem;color:var(--muted);font-size:.9rem}
#loading.htmx-request{display:block}
.results-meta{display:flex;justify-content:space-between;padding:.5rem 0;color:var(--muted);font-size:.85rem}
.tier-toolbar{position:sticky;top:0;z-index:100;display:flex;align-items:center;gap:12px;background:var(--bg);padding:8px 0;border-bottom:1px solid #e0e0e0;margin-bottom:8px}
.tier-nav{display:flex;gap:6px}
.tier-nav-link{font-size:.82rem;font-weight:600;padding:4px 12px;border-radius:20px;background:var(--card);color:var(--text);text-decoration:none;border:1px solid #ddd;transition:all .15s}
.tier-nav-link:hover{border-color:var(--accent);color:var(--accent)}
.tier-search{flex:1;max-width:320px;padding:.35rem .6rem;border:1px solid #ddd;border-radius:6px;font-size:.82rem;background:var(--card)}
.tier-search:focus{outline:2px solid var(--accent);border-color:transparent}
.tier-export{font-size:.82rem;padding:4px 12px;border-radius:6px;border:1px solid var(--accent);background:var(--card);color:var(--accent);cursor:pointer;white-space:nowrap;transition:all .15s}
.tier-export:hover{background:var(--accent);color:#fff}
#tier-chong,#tier-wen,#tier-bao{scroll-margin-top:58px}
.section-header{display:flex;align-items:baseline;gap:.75rem;margin:1.5rem 0 .75rem;padding-bottom:.5rem;border-bottom:2px solid #eee}
.section-title{font-size:1.15rem;font-weight:700}
.section-chong{color:var(--chong)}
.section-wen{color:var(--wen)}
.section-bao{color:var(--bao)}
.section-count{font-size:.82rem;color:var(--muted)}
.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:1rem}
.card{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden;display:flex;flex-direction:column;border-top:4px solid var(--accent)}
.card-chong{border-top-color:var(--chong)}
.card-wen{border-top-color:var(--wen)}
.card-bao{border-top-color:var(--bao)}
.card-header{display:flex;align-items:flex-start;padding:1rem 1rem 0 1rem;gap:.5rem}
.card-title{flex:1;min-width:0}
.card-title h2{font-size:1.15rem;font-weight:700;line-height:1.3;display:inline;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.card-group{font-size:.78rem;color:var(--muted);margin-left:.4rem}
.group-id{color:var(--accent);background:#eef1ff;border-radius:4px;padding:0 .3em;font-weight:700}
.card-score{font-size:.85rem;font-weight:700;color:var(--accent);background:#eef1ff;border-radius:6px;padding:.15em .6em;white-space:nowrap;flex-shrink:0;cursor:help}
.card-score svg{display:block;flex-shrink:0}
.card-info{display:flex;flex-wrap:wrap;gap:.4rem .8rem;padding:.3rem 1rem;font-size:.82rem;color:var(--muted);align-items:center}
.card-city{white-space:nowrap}
.card-city::before{content:"📍";margin-right:2px}
.card-tags{word-break:break-all}
.card-meta{display:flex;flex-wrap:wrap;gap:.5rem 1rem;padding:.5rem 1rem;font-size:.88rem;align-items:center}
.tier{display:inline-block;padding:2px 10px;border-radius:20px;font-weight:700;font-size:.8rem;color:#fff}
.tier-chong{background:var(--chong)}
.tier-wen{background:var(--wen);color:#333}
.tier-bao{background:var(--bao)}
.card-history{display:flex;flex-direction:column;gap:.25rem;padding:.35rem 1rem;font-size:.8rem;background:#f8f9ff;border-top:1px solid #f0f0f0;border-bottom:1px solid #f0f0f0}
.history-item{display:inline-flex;align-items:center;gap:.35rem}
.history-year{font-weight:700;color:var(--muted);min-width:2.8em;font-size:.78rem}
.history-rank{color:var(--text);font-weight:600}
.history-score{color:var(--muted)}
.history-trend{font-size:.7rem;padding:1px 7px;border-radius:10px;font-weight:600;white-space:nowrap}
.trend-badge{font-size:.7rem;padding:1px 7px;border-radius:10px;font-weight:600;white-space:nowrap;display:inline-block}
.trend-竞争加剧{background:#ffe8e8;color:#c62828}
.trend-竞争缓和{background:#e8f5e9;color:#2e7d32}
.trend-基本稳定{background:#fff8e1;color:#f57f17}
.card-majors{padding:0 1rem 1rem}
.major-header{display:flex;align-items:center;gap:.6rem;padding:.5rem 0 .2rem}
.major-header .majors-btn{margin-left:auto}
.major-title{font-size:.85rem;font-weight:600}
.major-purity{font-size:.78rem;color:var(--muted)}
.purity-row{display:flex;align-items:center;gap:8px;margin-bottom:6px}
.purity-label{font-size:.75rem;color:var(--muted);white-space:nowrap;min-width:3em}
.purity-bar-bg{flex:1;height:6px;background:#f0f0f0;border-radius:3px;overflow:hidden}
.purity-fill{height:100%;border-radius:3px;transition:width .3s}
.purity-text{font-size:.75rem;color:var(--muted);white-space:nowrap}
.major-list{}
.major-item{border-bottom:1px solid #f0f0f0;padding:8px 0}
.major-item:last-child{border-bottom:none}
.major-name{font-weight:600;font-size:.9rem;line-height:1.5}
.major-meta{display:flex;flex-wrap:wrap;gap:4px 16px;font-size:.8rem;color:var(--muted);margin-top:1px}
.major-history{display:flex;flex-wrap:wrap;gap:2px 16px;font-size:.8rem;color:var(--muted);margin-top:2px}
.major-note{font-size:.78rem;color:#b8860b;background:#fffde7;border-radius:4px;padding:3px 8px;margin-top:4px;line-height:1.5}
.major-names{font-size:.8rem;color:var(--muted);padding:6px 0 2px;line-height:1.6}
.majors-btn{display:inline-block;font-size:.8rem;color:var(--accent);background:none;border:none;cursor:pointer;padding:.3rem 0;text-decoration:underline}
.majors-dialog{border:none;border-radius:12px;padding:0;box-shadow:0 8px 32px rgba(0,0,0,.2);max-width:520px;width:90vw;max-height:70vh;overflow:auto;position:fixed;inset:0;margin:auto}
.majors-dialog::backdrop{background:rgba(0,0,0,.4)}
.majors-dialog-header{display:flex;justify-content:space-between;align-items:center;padding:.75rem 1rem;border-bottom:1px solid #eee;font-size:.9rem;font-weight:600;position:sticky;top:0;background:#fff}
.majors-close{background:none;border:none;font-size:1.1rem;cursor:pointer;color:var(--muted);padding:.2em .4em}
.majors-dialog .major-list{padding:4px 1rem 1rem}
.reason-dialog{border:none;border-radius:12px;padding:1rem;box-shadow:0 8px 32px rgba(0,0,0,.2);max-width:400px;width:90vw;position:fixed;inset:0;margin:auto}
.reason-dialog::backdrop{background:rgba(0,0,0,.4)}
.reason-dialog-header{display:flex;justify-content:space-between;align-items:flex-start;gap:.75rem;font-size:.9rem;line-height:1.6}
.empty{text-align:center;padding:3rem 1rem;color:var(--muted);font-size:1.1rem}
.error{text-align:center;padding:1rem;color:var(--chong);background:#ffe0e0;border-radius:8px}

@media(max-width:640px){
  .form-grid{grid-template-columns:1fr 1fr}
  .grid-span-2,.grid-span-3,.grid-span-4,.grid-span-5,.grid-span-6{grid-column:span 2}
  .card-grid{grid-template-columns:1fr}
  .card-header{flex-wrap:wrap}
  .card-meta{flex-wrap:wrap;gap:.5rem}
}
@media(max-width:400px){
  .form-grid{grid-template-columns:1fr}
}

.card-tags{display:flex;flex-wrap:wrap;gap:2px}
.tag-pill{display:inline-block;font-size:.7rem;line-height:1.4;padding:0 .5em;border-radius:10px;background:#eef1ff;color:var(--accent);margin:1px 0;white-space:nowrap}
/* ========== School Detail Page ========== */
.school-detail{max-width:960px;margin:0 auto;padding:1rem}
.detail-header{display:flex;align-items:center;gap:1rem;flex-wrap:wrap;margin-bottom:1.5rem}
.detail-header h1{font-size:1.8rem;margin:0}
.school-tags{display:flex;gap:.4rem}
.tag-badge{background:linear-gradient(135deg,#4361ee,#7209b7);color:#fff;font-size:.75rem;font-weight:700;padding:2px 10px;border-radius:20px}
.school-link{color:inherit;text-decoration:none}
.school-link:hover{color:var(--accent);text-decoration:underline}

/* tabs */
.detail-tabs{background:var(--card);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}
.tab-labels{display:flex;border-bottom:2px solid #eee;background:#fafafa}
.tab-label{padding:.75rem 1.5rem;font-size:.9rem;font-weight:600;color:var(--muted);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-2px;transition:all .15s}
.tab-label:hover{color:var(--text)}
#tab-overview:checked~.tab-labels label[for=tab-overview],
#tab-intro:checked~.tab-labels label[for=tab-intro],
#tab-degrees:checked~.tab-labels label[for=tab-degrees],
#tab-majors:checked~.tab-labels label[for=tab-majors]{color:var(--accent);border-bottom-color:var(--accent)}
.tab-panels{position:relative}
.tab-panel{display:none;padding:1.5rem}
#tab-overview:checked~.tab-panels #panel-overview,
#tab-intro:checked~.tab-panels #panel-intro,
#tab-degrees:checked~.tab-panels #panel-degrees,
#tab-majors:checked~.tab-panels #panel-majors{display:block}

/* info table */
.info-table{width:100%;border-collapse:collapse;font-size:.88rem}
.info-table th,.info-table td{padding:.5rem .75rem;border-bottom:1px solid #f0f0f0;vertical-align:top}
.info-table th{color:var(--muted);font-weight:600;white-space:nowrap;width:7em;text-align:right}
.info-table td{color:var(--text)}
.info-table a{color:var(--accent);text-decoration:none}
.info-table a:hover{text-decoration:underline}

/* sections */
.detail-section{margin-top:1.5rem}
.detail-section h3{font-size:1rem;font-weight:700;margin-bottom:.75rem;color:var(--text)}

/* rankings */
.rank-list{display:flex;flex-wrap:wrap;gap:.5rem 1.5rem}
.rank-item{display:inline-flex;align-items:baseline;gap:.4rem;font-size:.88rem}
.rank-name{font-weight:600;color:var(--accent);background:#eef1ff;border-radius:4px;padding:.15em .5em}
.rank-value{color:var(--muted)}
.rank-value:not(:empty)::before{content:"第"}

/* addresses */
.addr-list{padding:0;margin:0;list-style:none}
.addr-list li{padding:.35rem 0;font-size:.88rem;color:var(--text);border-bottom:1px solid #f5f5f5}
.addr-list li::before{content:"📍";margin-right:.35rem}

/* intro text */
.intro-text{font-size:.9rem;line-height:1.8;color:var(--text)}

/* majors grid */
.major-grid{display:flex;flex-wrap:wrap;gap:.5rem}
.major-chip{display:inline-block;background:#f5f7ff;border:1px solid #e0e5ff;border-radius:20px;padding:.25rem .8rem;font-size:.82rem;color:var(--text);transition:all .15s}
.major-chip:hover{background:#eef1ff;border-color:var(--accent);color:var(--accent)}
