/* ---- Self-hosted web fonts (subset copies of the Google Fonts builds; no third-party requests) ---- */
@font-face{font-family:"Manrope";font-style:normal;font-weight:400 800;font-display:swap;src:url(fonts/Manrope-400-800-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Manrope";font-style:normal;font-weight:400 800;font-display:swap;src:url(fonts/Manrope-400-800-latin-ext.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:"DM Mono";font-style:normal;font-weight:400;font-display:swap;src:url(fonts/DMMono-400-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"DM Mono";font-style:normal;font-weight:400;font-display:swap;src:url(fonts/DMMono-400-latin-ext.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:"DM Mono";font-style:normal;font-weight:500;font-display:swap;src:url(fonts/DMMono-500-latin.woff2) format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"DM Mono";font-style:normal;font-weight:500;font-display:swap;src:url(fonts/DMMono-500-latin-ext.woff2) format("woff2");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}

/* ---- Tokens ---- */
:root{--navy:#0b1528;--navy-2:#101f39;--ink:#172235;--muted:#748097;--line:#e7ecf3;--canvas:#f6f8fb;--cyan:#23c6bd;--blue:#4e76ff;--orange:#ff9d57;--paper:#fff;--paper-2:#fafbfc;--chip-bg:#edf8f7;--chip-fg:#399d97;--avatar-bg:#e8edff;--avatar-fg:#4e6dde;--row-hover:#f5f9ff;--row-line:#eff2f6;--shadow:0 18px 44px rgba(16,35,66,.08);--mono:"DM Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace}
html.dark{--canvas:#0d1729;--paper:#122039;--paper-2:#15243c;--ink:#eef4ff;--muted:#94a6c3;--line:#233553;--chip-bg:#173a3b;--chip-fg:#63d6cf;--avatar-bg:#1d2f55;--avatar-fg:#9fb4ff;--row-hover:#182a46;--row-line:#1c2c47;color-scheme:dark}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{margin:0;background:var(--canvas);color:var(--ink);font-family:Manrope,-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif}
button,input,select{font:inherit}
button{border:0;background:none;cursor:pointer;color:inherit}
:focus-visible{outline:2px solid var(--blue);outline-offset:2px}

/* ---- Layout ---- */
.app-shell{display:flex;min-height:100vh}
.main-content{width:100%;min-width:0}
.topbar{height:74px;padding:0 48px;border-bottom:1px solid var(--line);background:rgba(246,248,251,.86);display:flex;align-items:center;justify-content:space-between;backdrop-filter:blur(10px);position:sticky;top:0;z-index:5}
html.dark .topbar{background:rgba(13,23,41,.87)}
.breadcrumb{display:flex;gap:13px;align-items:center;font:10px var(--mono);letter-spacing:1px;color:var(--muted)}
.breadcrumb strong{color:var(--blue);font-weight:500}
.breadcrumb i{color:#c4cad3;font-style:normal}
.top-actions{display:flex;align-items:center;gap:15px}
.topbar-meta{font:9px var(--mono);letter-spacing:1px;color:var(--muted)}
.lang-toggle{font:10px var(--mono);letter-spacing:.5px;color:var(--blue);border:1px solid var(--line);border-radius:5px;padding:6px 8px;background:var(--paper)}
.icon-btn{font-size:17px;color:#7b899f;width:34px}
.content-wrap{max-width:1340px;margin:0 auto;padding:35px 48px 70px}

/* ---- Hero ---- */
.hero-grid{min-height:276px;border-radius:18px;background:linear-gradient(112deg,#13264a,#0e1a32 62%,#102b41);color:#fff;display:grid;grid-template-columns:1fr 350px;overflow:hidden;position:relative;box-shadow:var(--shadow)}
.hero-grid:after{content:"";position:absolute;inset:0;background-image:radial-gradient(#6b82ad22 1px,transparent 1px);background-size:17px 17px;mask-image:linear-gradient(90deg,transparent 25%,#000 80%);pointer-events:none}
.hero-copy{padding:40px 46px;position:relative;z-index:1}
.eyebrow,.card-label{font:10px var(--mono);letter-spacing:1.5px;color:#8ea4c8}
.hero-copy h1{font-size:39px;line-height:1.13;letter-spacing:-1.8px;margin:18px 0 13px}
.hero-copy h1 span{color:#65ddd4}
.hero-copy p{font-size:12px;color:#aebbd0;max-width:390px;line-height:1.8;margin:0}
.hero-orbit{position:relative;z-index:1;display:grid;place-items:center}
.orbit{position:absolute;border:1px solid #3d608477;border-radius:50%;transform:rotate(-25deg)}
.o1{width:260px;height:130px}
.o2{width:196px;height:96px;transform:rotate(48deg)}
.o3{width:307px;height:155px;transform:rotate(68deg);border-color:#35d2ca44}
.orbit-core{width:78px;height:78px;border-radius:50%;background:#18375c;border:1px solid #59d6d2;display:grid;place-items:center;text-align:center;font:14px var(--mono);letter-spacing:2px;color:#e5ffff;box-shadow:0 0 50px #32cfc966}
.orbit-core small{font-size:7px;letter-spacing:1px;color:#75b5c0;margin-top:-20px}
.node{position:absolute;width:8px;height:8px;background:var(--cyan);border-radius:50%;box-shadow:0 0 0 5px #25bdb933}
.n1{top:52px;right:77px}
.n2{bottom:58px;right:92px;background:var(--orange)}
.n3{top:117px;left:45px;background:#7b99ff}

/* ---- Metrics ---- */
.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:1px;background:var(--line);border:1px solid var(--line);margin:25px 0 45px;border-radius:12px;overflow:hidden}
.metric{background:var(--paper);padding:19px 22px}
.metric-label{font:10px var(--mono);color:var(--muted);letter-spacing:1px}
.metric-value{font-size:27px;font-weight:700;letter-spacing:-1px;margin-top:8px}
.metric-foot{font-size:10px;color:#8d99ac;margin-top:5px}

/* ---- Section headings ---- */
.section-heading{display:flex;justify-content:space-between;align-items:end;margin:0 0 17px}
.section-heading>div:first-child{display:grid;grid-template-columns:auto 1fr;column-gap:11px;align-items:baseline}
.section-number{font:11px var(--mono);color:var(--cyan);grid-row:span 2}
.section-heading h2{font-size:20px;margin:0;letter-spacing:-.6px}
.section-heading p{font-size:11px;color:var(--muted);margin:4px 0 0}
.segmented{display:flex;gap:5px;background:#eef1f6;padding:4px;border-radius:8px}
.seg{font-size:11px;padding:7px 12px;border-radius:5px;color:#8490a5}
.seg.active{background:#fff;color:var(--blue);box-shadow:0 2px 8px #394b7015}
html.dark .segmented{background:#182844}
html.dark .seg.active{background:#203452}

/* ---- Charts ---- */
.pulse-grid{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(260px,.8fr);gap:18px;margin-bottom:47px}
.chart-card,.insight-card,.table-card,.venue-card{background:var(--paper);border:1px solid var(--line);border-radius:12px}
.chart-card{padding:24px 25px 18px;min-height:267px}
.chart-header{display:flex;justify-content:space-between;align-items:start}
.chart-title{font-size:13px;font-weight:700}
.chart-subtitle{font-size:10px;color:var(--muted);margin-top:5px}
.legend{display:flex;gap:14px;font-size:10px;color:var(--muted)}
.legend span:before{content:"";display:inline-block;width:7px;height:7px;border-radius:2px;background:var(--blue);margin-right:5px}
.legend span:last-child:before{background:var(--cyan)}
.bar-chart{height:166px;display:flex;gap:17px;align-items:end;padding:19px 4px 0;border-bottom:1px solid var(--line);position:relative}
.bar-chart:before,.bar-chart:after{content:"";position:absolute;left:0;right:0;border-top:1px dashed var(--line)}
.bar-chart:before{top:42px}
.bar-chart:after{top:91px}
.year-bar{height:100%;flex:1;display:flex;align-items:end;gap:5px;position:relative;z-index:1;cursor:pointer}
.bar{flex:1;min-width:5px;border-radius:4px 4px 0 0;background:linear-gradient(#748dff,#4e76ff)}
.bar.alt{background:linear-gradient(#5ce2d4,#20bbb4)}
.year-bar label{position:absolute;bottom:-22px;width:100%;text-align:center;font:9px var(--mono);color:#8590a2}
.insight-card{padding:25px;background:linear-gradient(140deg,#122341,#102b42);color:#fff;position:relative;overflow:hidden}
.insight-card:after{content:"✳";position:absolute;right:22px;top:26px;color:#65ddd4;font-size:30px;opacity:.7}
.insight-card .card-label{color:#78a4c5}
.insight-card h3{font-size:20px;line-height:1.35;margin:28px 0 14px;letter-spacing:-.7px}
.insight-card h3 span{color:#62d9d1}
.insight-card p{font-size:11px;line-height:1.85;color:#a8bad0;margin:0}
.insight-stat{display:flex;align-items:center;gap:13px;margin-top:23px;padding-top:16px;border-top:1px solid #ffffff1b}
.insight-stat strong{font-size:25px}
.insight-stat span{font-size:10px;line-height:1.6;color:#8296b3}

/* ---- Ranking table ---- */
.table-heading{margin-bottom:18px}
.text-button{font-size:11px;color:var(--blue)}
.text-button span{font-size:15px;margin-left:4px}
.table-card{overflow:hidden}
.table-toolbar{display:flex;align-items:center;gap:16px;padding:14px 18px;border-bottom:1px solid var(--line)}
.table-tabs{display:flex;gap:18px}
.table-tab{font-size:12px;color:var(--muted);padding:7px 0}
.table-tab.active{color:var(--ink);font-weight:700;border-bottom:2px solid var(--cyan)}
.search-box{display:flex;align-items:center;gap:7px;margin-left:auto;width:190px;background:var(--canvas);border:1px solid var(--line);padding:0 9px;border-radius:6px;color:#95a0b1}
.search-box input{border:0;outline:0;background:transparent;width:100%;font-size:11px;color:var(--ink);height:31px}
.table-toolbar select{border:1px solid var(--line);background:var(--paper);color:var(--muted);border-radius:6px;font-size:11px;padding:7px;max-width:150px}
html.dark .table-toolbar select,html.dark .search-box input{color:var(--ink)}
.table-scroll{overflow-x:auto}
table{width:100%;border-collapse:collapse;min-width:650px}
th{font:9px var(--mono);letter-spacing:1px;color:#8b97aa;text-align:left;padding:13px 18px;background:var(--paper-2);border-bottom:1px solid var(--line);white-space:nowrap}
td{padding:15px 18px;border-bottom:1px solid var(--row-line);font-size:12px}
tbody tr[data-name]{transition:.15s;cursor:pointer}
tbody tr[data-name]:hover,tbody tr[data-name]:focus-visible{background:var(--row-hover);outline:none}
tbody tr[data-name]:focus-visible td:first-child{box-shadow:inset 3px 0 var(--blue)}
td:first-child{font:11px var(--mono);color:#9aa6b8;width:62px}
td.empty{text-align:center;color:var(--muted);padding:34px 18px}
td.error{color:#d05a5a}
.entity-cell{display:flex;align-items:center;gap:11px;min-width:240px}
.entity-avatar{width:29px;height:29px;flex:none;border-radius:8px;display:grid;place-items:center;background:var(--avatar-bg);color:var(--avatar-fg);font-size:11px;font-weight:700}
.entity-name strong{display:block;font-size:12px}
.entity-name small{display:block;color:#9aa4b3;font-size:9px;margin-top:3px;max-width:360px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.paper-count{font-weight:700}
.venue-chips{display:flex;gap:3px}
.venue-chip{font:8px var(--mono);padding:4px 5px;background:var(--chip-bg);color:var(--chip-fg);border-radius:4px;white-space:nowrap}
.trend-line{display:flex;align-items:end;gap:3px;height:32px;min-width:62px;padding:0 2px;cursor:pointer}
.trend-line i{display:block;width:6px;min-height:4px;background:#acdeda;border-radius:2px}
.trend-line i:last-child{background:var(--cyan)}
.table-footer{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:13px 18px;color:#9aa4b3;font-size:10px}
.load-more{color:var(--blue);font-size:11px;white-space:nowrap}
.load-more span{font-size:15px;margin-left:3px}
.load-more[hidden]{display:none}
#table-sentinel{height:1px}

/* ---- Venue matrix ---- */
.venue-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}
.venue-card{padding:16px;cursor:pointer}
.venue-card-top{display:flex;justify-content:space-between;align-items:start}
.venue-code{font:12px var(--mono);color:var(--blue)}
.venue-name{font-size:10px;color:var(--muted);margin-top:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.venue-total{font-size:19px;font-weight:700}
.venue-spark{height:34px;display:flex;align-items:end;gap:3px;margin-top:13px}
.venue-spark i{flex:1;background:#ced8ff;border-radius:2px 2px 0 0}
.venue-spark i:last-child{background:var(--blue)}
html.dark .venue-spark i{background:#2b3f6a}
html.dark .venue-spark i:last-child{background:var(--blue)}

/* ---- Footer ---- */
.footer{padding:22px 48px;border-top:1px solid var(--line);font:9px var(--mono);letter-spacing:1px;color:#9aa6b8;display:flex;justify-content:space-between}
.noscript-note{margin:0;padding:14px 48px;background:#fff4e5;color:#7a4b00;font-size:12px}

/* ---- Modal ---- */
.modal{position:fixed;inset:0;z-index:30;display:grid;place-items:center}
.modal.hidden{display:none}
.modal-backdrop{position:absolute;inset:0;background:#071226b8;backdrop-filter:blur(5px)}
.modal-panel{position:relative;z-index:1;width:min(520px,calc(100% - 30px));max-height:calc(100vh - 40px);overflow:auto;background:var(--paper);border-radius:16px;padding:29px;box-shadow:0 30px 80px #04102555}
.modal-close{position:absolute;right:16px;top:13px;font-size:24px;color:#8b97aa}
.modal-kicker{font:10px var(--mono);color:var(--cyan);letter-spacing:1px}
.modal-panel h2{font-size:25px;margin:12px 0 5px;line-height:1.2;padding-right:28px}
.modal-panel>p,.modal-panel .modal-sub{color:var(--muted);font-size:11px;margin:0}
.modal-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line);margin:23px 0;border:1px solid var(--line)}
.modal-stat{background:var(--paper-2);padding:13px}
.modal-stat small{display:block;color:var(--muted);font-size:10px}
.modal-stat strong{display:block;font-size:20px;margin-top:4px}
.modal-section{font:10px var(--mono);letter-spacing:1px;color:var(--muted);margin:18px 0 8px}
.modal-list{display:grid;gap:9px}
.modal-list-row{display:flex;justify-content:space-between;gap:12px;font-size:11px;border-bottom:1px solid var(--row-line);padding-bottom:8px}
.modal-list-row span{color:var(--muted)}
.modal-list-row strong{white-space:nowrap}
.modal-trend{display:flex;align-items:end;gap:6px;height:56px;margin-top:6px}
.modal-trend div{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:end;height:100%;font:9px var(--mono);color:var(--muted);gap:4px}
.modal-trend i{display:block;width:100%;max-width:26px;min-height:3px;background:linear-gradient(#748dff,#4e76ff);border-radius:3px 3px 0 0}

/* ---- Tooltip ---- */
.data-tooltip{position:fixed;z-index:100;max-width:246px;padding:8px 10px;border-radius:6px;background:#10213d;color:#fff;font-size:11px;line-height:1.5;pointer-events:none;box-shadow:0 8px 24px #07122633;opacity:0;transform:translateY(4px);transition:opacity .12s,transform .12s}
.data-tooltip.visible{opacity:1;transform:translateY(0)}

/* ---- Responsive ---- */
@media(max-width:1050px){
  .content-wrap{padding-left:28px;padding-right:28px}
  .hero-grid{grid-template-columns:1fr 250px}
  .pulse-grid{grid-template-columns:1fr}
  .insight-card{min-height:205px}
  .venue-grid{grid-template-columns:repeat(3,1fr)}
}
@media(max-width:720px){
  .app-shell{display:block}
  .topbar{height:56px;padding:0 16px}
  .topbar-meta{display:none}
  .content-wrap{padding:20px 15px 45px}
  .hero-grid{min-height:310px;display:block}
  .hero-copy{padding:27px 25px}
  .hero-copy h1{font-size:34px}
  .hero-orbit{position:absolute;right:-35px;bottom:-30px;width:300px;height:180px;opacity:.7}
  .metrics{grid-template-columns:repeat(2,1fr);margin:16px 0 36px}
  .metric{padding:15px}
  .metric-value{font-size:22px}
  .section-heading{align-items:start;gap:14px;display:block}
  .segmented{margin-top:15px;width:max-content}
  .table-heading .text-button{margin-top:10px}
  .pulse-grid{margin-bottom:37px}
  .chart-card{padding:18px 13px;overflow:hidden}
  .bar-chart{gap:9px}
  .insight-card{padding:21px}
  .table-toolbar{flex-wrap:wrap;gap:10px}
  .search-box{order:3;margin-left:0;width:100%}
  .table-toolbar select{flex:1 1 40%;max-width:none}
  .venue-grid{grid-template-columns:repeat(2,1fr)}
  .venue-card{padding:13px}
  .footer{padding:18px 15px;display:block;line-height:2}
  .footer span{display:block}
  .noscript-note{padding:12px 16px}
}
@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  tbody tr[data-name],.data-tooltip{transition:none}
}
