/* OevuAI Research Portal — institutional stylesheet
   White / near-black / neutral gray. 1px rules, no shadows, no gradients. */

/* Geist (Vercel, SIL OFL) — variable weight 100-900, Latin only.
   CJK fallback: self-hosted Noto Sans SC (/fonts/noto-sans-sc.css). */
@font-face {
  font-family: 'Geist';
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url(/fonts/geist-sans-latin.woff2) format('woff2');
}

@font-face {
  font-family: 'Geist';
  font-style: normal;
  font-display: swap;
  font-weight: 100 900;
  src: url(/fonts/geist-sans-latin.woff2) format('woff2');
}

@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-display: swap;
  font-weight: 400;
  src: url(/fonts/jetbrains-mono-0ea4f670.woff2) format('woff2');
}

:root{
  --bg:#ffffff;
  --text:#111213;
  --sub:#5c6066;
  --faint:#8b9097;
  --line:#e7e8ea;
  --line-strong:#d2d4d8;
  --hover:#f6f7f8;
  --link:#1c4fbe;
  --sans:'Geist','Noto Sans SC',-apple-system,'Segoe UI','PingFang SC','Microsoft YaHei',sans-serif;
  --mono:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --maxw:1400px;
  --pad-x:clamp(20px,4vw,48px);
}

*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%;}
body{font-family:var(--sans);font-size:15px;line-height:1.75;color:var(--text);
  background:var(--bg);overflow-x:hidden;-webkit-font-smoothing:antialiased;}
a{color:inherit;text-decoration:none;}
img{display:block;max-width:100%;}
button{font-family:inherit;cursor:pointer;}
::selection{background:#e8eef9;}

/* ---------- header ---------- */
.rp-head{position:sticky;top:0;z-index:100;background:rgba(255,255,255,.96);
  border-bottom:1px solid var(--line);
  backdrop-filter:saturate(150%) blur(6px);-webkit-backdrop-filter:saturate(150%) blur(6px);}
.rp-head-in{max-width:var(--maxw);margin:0 auto;padding:0 var(--pad-x);
  height:58px;display:flex;align-items:center;gap:28px;}
.rp-brand{display:flex;align-items:baseline;gap:10px;flex-shrink:0;}
.rp-brand .b1{font-size:15.5px;font-weight:600;letter-spacing:-.01em;}
.rp-brand .b1 em{font-style:normal;color:var(--faint);font-weight:400;}
.rp-nav{display:flex;align-items:center;gap:22px;margin-left:8px;}
.rp-nav a{font-size:13.5px;color:var(--sub);padding:4px 0;border-bottom:1px solid transparent;}
.rp-nav a:hover{color:var(--text);}
.rp-nav a[aria-current="page"]{color:var(--text);border-bottom-color:var(--text);}
.rp-head-right{margin-left:auto;display:flex;align-items:center;gap:18px;}
.rp-searchlink{display:flex;align-items:center;gap:7px;font-size:13.5px;color:var(--sub);}
.rp-searchlink:hover{color:var(--text);}
.rp-searchlink svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:1.6;}
.rp-ext{font-size:13.5px;color:var(--sub);white-space:nowrap;}
.rp-ext:hover{color:var(--text);}
.rp-menu-btn{display:none;background:none;border:1px solid var(--line);border-radius:2px;
  width:36px;height:32px;align-items:center;justify-content:center;}
.rp-menu-btn svg{width:16px;height:16px;stroke:var(--text);stroke-width:1.6;fill:none;}

/* ---------- layout ---------- */
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 var(--pad-x);}
.prose{max-width:780px;}
.section{padding:56px 0 8px;}
.sec-head{display:flex;align-items:baseline;justify-content:space-between;gap:16px;
  border-top:1px solid var(--text);padding-top:14px;margin-bottom:26px;}
.sec-head h2{font-size:12px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;}
.sec-head .more{font-size:13px;color:var(--sub);white-space:nowrap;}
.sec-head .more:hover{color:var(--text);}

/* ---------- hero ---------- */
/* ---------- layout: asymmetric two-column (desktop) ---------- */
.layout{display:grid;grid-template-columns:250px minmax(0,1fr);gap:56px;align-items:start;}
.layout > .side{position:sticky;top:80px;}
.side .side-label{font-size:10.5px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;
  color:var(--faint);margin-bottom:8px;}
.side .side-meta{border-top:1px solid var(--text);}
.side .side-meta > div{padding:9px 0;border-bottom:1px solid var(--line);font-size:12.5px;line-height:1.6;}
.side .side-meta .k{color:var(--faint);}
.side .side-meta .v{color:var(--text);}
.side .side-nav{margin-top:26px;}
.side .side-nav a{display:block;font-size:13px;color:var(--sub);padding:5px 0;}
.side .side-nav a:hover{color:var(--text);}
.side .side-nav a.here{color:var(--text);font-weight:500;}
.layout-main{min-width:0;}
@media (max-width:1020px){
  .layout{display:block;}
  .layout > .side{position:static;margin-bottom:6px;}
  .side .side-nav{margin-top:14px;columns:2;column-gap:28px;}
  .side .side-nav a{padding:4px 0;break-inside:avoid;}
}

/* ---------- hero split (desktop) ---------- */
.hero-split{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);gap:64px;align-items:end;}
.hero-split .desc{margin-top:0;}
@media (max-width:900px){
  .hero-split{display:block;}
  .hero-split .hero-right{margin-top:24px;}
}

.hero{padding:72px 0 20px;}
.hero h1{font-size:clamp(34px,4.6vw,52px);font-weight:600;letter-spacing:-.02em;line-height:1.15;}
.hero .zh-sub{margin-top:10px;font-size:16px;color:var(--sub);}
.hero .desc{margin-top:22px;max-width:640px;font-size:16.5px;line-height:1.8;}
.hero .hero-links{margin-top:26px;display:flex;gap:22px;flex-wrap:wrap;}
.hero .hero-links a{font-size:14.5px;border-bottom:1px solid var(--line-strong);padding-bottom:2px;}
.hero .hero-links a:hover{border-bottom-color:var(--text);}
.hero .meta-line{margin-top:34px;font-size:12.5px;color:var(--faint);}

/* ---------- editorial list (LATEST) ---------- */
.ed-list{border-top:1px solid var(--line);}
.ed-item{display:grid;grid-template-columns:150px 1fr 28px;gap:18px;
  padding:18px 0;border-bottom:1px solid var(--line);}
.ed-item .when{font-family:var(--mono);font-size:12px;color:var(--faint);padding-top:3px;}
.ed-item .what .t{font-size:15.5px;font-weight:500;line-height:1.5;}
.ed-item .what .t a:hover{text-decoration:underline;text-underline-offset:3px;}
.ed-item .what .s{margin-top:4px;font-size:13.5px;color:var(--sub);line-height:1.7;}
.ed-item .kind{font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--faint);border:1px solid var(--line);border-radius:2px;
  padding:2px 8px;white-space:nowrap;align-self:start;margin-top:2px;}
.ed-item .arr{color:var(--faint);font-size:15px;padding-top:3px;}
.ed-item:hover{background:var(--hover);}
.ed-item:hover .arr{color:var(--text);}

/* ---------- tables ---------- */
.tbl-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;}
table.tbl{width:100%;border-collapse:collapse;font-size:13.5px;}
.tbl th{text-align:left;font-size:11px;font-weight:600;letter-spacing:.09em;text-transform:uppercase;
  color:var(--faint);padding:10px 14px;border-bottom:1px solid var(--text);white-space:nowrap;}
.tbl td{padding:13px 14px;border-bottom:1px solid var(--line);vertical-align:top;line-height:1.6;}
.tbl tbody tr:hover td{background:var(--hover);}
.tbl .num{font-family:var(--mono);font-size:12.5px;}
.tbl a.dlink{font-weight:500;}
.tbl a.dlink:hover{text-decoration:underline;text-underline-offset:3px;}
.tbl .empty{color:var(--faint);}
.tbl caption{caption-side:top;text-align:left;font-size:12px;color:var(--faint);padding-bottom:10px;}

/* mobile data row: stacked key-value instead of squeezed table */
@media (max-width:720px){
  table.tbl.mdata thead{display:none;}
  table.tbl.mdata, table.tbl.mdata tbody{display:block;}
  table.tbl.mdata tr{display:block;border:1px solid var(--line);border-radius:2px;
    margin-bottom:14px;padding:6px 0;}
  table.tbl.mdata td{display:flex;justify-content:space-between;gap:16px;
    border-bottom:1px solid var(--line);padding:8px 14px;}
  table.tbl.mdata tr td:last-child{border-bottom:none;}
  table.tbl.mdata td::before{content:attr(data-th);
    font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--faint);
    flex-shrink:0;padding-top:2px;}
}

/* ---------- page head (subpages) ---------- */
.page-head{padding:52px 0 0;}
.page-head .kicker{font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--faint);}
.page-head h1{margin-top:10px;font-size:clamp(30px,4vw,42px);font-weight:600;letter-spacing:-.02em;}
.page-head .desc{margin-top:14px;max-width:680px;font-size:15.5px;color:var(--sub);}
.page-head .meta-row{margin-top:22px;display:flex;flex-wrap:wrap;gap:6px 26px;
  font-size:12.5px;color:var(--faint);font-family:var(--mono);}
.page-head .meta-row b{color:var(--text);font-weight:500;}

/* ---------- prose ---------- */
.prose h3{font-size:17px;font-weight:600;margin:34px 0 10px;}
.prose p{margin-bottom:14px;color:#2b2d31;}
.prose ul,.prose ol{margin:0 0 14px 20px;}
.prose li{margin-bottom:6px;color:#2b2d31;}
.prose .note{font-size:13px;color:var(--faint);border-left:2px solid var(--line-strong);
  padding-left:14px;margin:18px 0;}

/* ---------- inline metadata / key-value ---------- */
.kv{display:grid;grid-template-columns:210px 1fr;border-top:1px solid var(--text);}
.kv > div{padding:11px 0;border-bottom:1px solid var(--line);font-size:13.5px;line-height:1.65;}
.kv > div:nth-child(odd){color:var(--faint);padding-right:20px;}
.kv > div:nth-child(even){color:#2b2d31;}
.kv .mono{font-family:var(--mono);font-size:12px;word-break:break-all;}

/* ---------- badges ---------- */
.human-badge{display:inline-flex;align-items:center;gap:8px;font-size:12.5px;
  border:1px solid var(--text);border-radius:2px;padding:6px 12px;}
.human-badge i{width:7px;height:7px;border-radius:50%;background:#1a7f37;display:inline-block;}

/* ---------- filter bar ---------- */
.filterbar{display:flex;flex-wrap:wrap;gap:10px 18px;align-items:center;margin:22px 0 20px;}
.filterbar label{font-size:12px;color:var(--faint);letter-spacing:.06em;text-transform:uppercase;}
.filterbar select,.filterbar input[type="search"],.filterbar input[type="text"]{
  font-family:var(--sans);font-size:13.5px;color:var(--text);background:#fff;
  border:1px solid var(--line-strong);border-radius:2px;padding:7px 10px;min-width:150px;}
.filterbar select:focus,.filterbar input:focus{outline:none;border-color:var(--text);}
.ftabs{display:flex;gap:2px;flex-wrap:wrap;}
.ftabs button{background:none;border:none;font-size:13.5px;color:var(--sub);
  padding:6px 12px;border-bottom:1px solid transparent;}
.ftabs button:hover{color:var(--text);}
.ftabs button[aria-pressed="true"]{color:var(--text);border-bottom-color:var(--text);}

/* ---------- explorer ---------- */
.explorer{border:1px solid var(--line-strong);border-radius:2px;margin-top:22px;}
.ex-stage{position:relative;background:#f2f2f0;aspect-ratio:4/3;overflow:hidden;}
.ex-stage img{width:100%;height:100%;object-fit:cover;}
.ex-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:10px 16px;
  padding:12px 16px;border-bottom:1px solid var(--line);}
.ex-toolbar .idx{font-family:var(--mono);font-size:12px;color:var(--sub);}
.ex-toolbar .cat{font-size:11px;letter-spacing:.09em;text-transform:uppercase;
  color:var(--faint);border:1px solid var(--line);border-radius:2px;padding:2px 8px;}
.ex-nav{display:flex;gap:8px;margin-left:auto;}
.ex-nav button,.ex-toolbar .toggle{font-size:12.5px;background:#fff;color:var(--text);
  border:1px solid var(--line-strong);border-radius:2px;padding:6px 12px;}
.ex-nav button:hover,.ex-toolbar .toggle:hover{background:var(--hover);}
.ex-toolbar select{font-family:var(--sans);font-size:12.5px;border:1px solid var(--line-strong);
  border-radius:2px;padding:6px 8px;background:#fff;color:var(--text);}
.ex-caption{padding:16px 18px;}
.ex-caption .file{font-family:var(--mono);font-size:11.5px;color:var(--faint);word-break:break-all;}
.ex-caption .cap-text{margin-top:10px;font-size:14px;line-height:1.85;color:#2b2d31;}
.ex-caption .cap-text.tags{color:var(--sub);}
.ex-hint{margin-top:8px;font-size:11.5px;color:var(--faint);}

/* ---------- charts ---------- */
.chart{border:1px solid var(--line);border-radius:2px;padding:18px 18px 12px;margin-top:18px;}
.chart h4{font-size:13px;font-weight:600;margin-bottom:2px;}
.chart .src{font-size:11.5px;color:var(--faint);margin-bottom:12px;}
.chart svg{width:100%;height:auto;display:block;}
.chart-grid{display:grid;grid-template-columns:1fr 1fr;gap:18px;}
@media (max-width:860px){.chart-grid{grid-template-columns:1fr;}}

/* ---------- contact ---------- */
.contact-grid{display:grid;grid-template-columns:1.2fr .8fr;gap:36px;align-items:start;}
.contact-qr{margin:0;}
.contact-qr img{width:100%;max-width:170px;height:auto;border:1px solid var(--line);}
.contact-qr figcaption{margin-top:10px;font-size:12.5px;color:var(--faint);}
@media (max-width:860px){
  .contact-grid{grid-template-columns:1fr;gap:24px;}
}

/* ---------- empty state ---------- */
.empty-state{border:1px solid var(--line);border-radius:2px;padding:34px 28px;
  font-size:14.5px;color:var(--sub);}
.empty-state .t{font-weight:600;color:var(--text);margin-bottom:6px;}

/* ---------- footer ---------- */
.rp-foot{margin-top:88px;border-top:1px solid var(--text);padding:36px 0 46px;
  font-size:13px;}
.rp-foot-in{max-width:var(--maxw);margin:0 auto;padding:0 var(--pad-x);
  display:grid;grid-template-columns:1.4fr 1fr 1fr;gap:32px;}
.rp-foot .fcol h5{font-size:11px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;
  color:var(--faint);margin-bottom:12px;}
.rp-foot .fcol a{display:block;color:var(--sub);padding:3px 0;}
.rp-foot .fcol a:hover{color:var(--text);}
.rp-foot .fbrand .t{font-size:15px;font-weight:600;}
.rp-foot .fbrand .s{color:var(--faint);margin-top:4px;line-height:1.7;}
.rp-foot .legal{margin-top:30px;padding-top:16px;border-top:1px solid var(--line);
  display:flex;flex-wrap:wrap;gap:8px 22px;color:var(--faint);font-size:12px;}
.rp-foot .legal a{color:var(--faint);}
.rp-foot .legal a:hover{color:var(--text);}

/* ---------- focus / a11y ---------- */
a:focus-visible,button:focus-visible,select:focus-visible,input:focus-visible{
  outline:2px solid #1c4fbe;outline-offset:2px;border-radius:1px;}
.skip{position:absolute;left:-9999px;top:0;background:#111;color:#fff;padding:8px 16px;z-index:200;}
.skip:focus{left:8px;top:8px;}

/* ---------- responsive header ---------- */
@media (max-width:920px){
  .rp-head-in{gap:14px;}
  .rp-nav{display:none;position:absolute;left:0;right:0;top:58px;flex-direction:column;
    align-items:stretch;gap:0;background:#fff;border-bottom:1px solid var(--line);
    padding:6px 0 10px;}
  .rp-nav.open{display:flex;}
  .rp-nav a{padding:11px var(--pad-x);border-bottom:1px solid var(--line);font-size:14.5px;}
  .rp-nav a[aria-current="page"]{border-bottom-color:var(--line);}
  .rp-menu-btn{display:flex;}
  .rp-ext{display:none;}
  .ed-item{grid-template-columns:1fr;gap:6px;padding:16px 0;}
  .ed-item .when{padding-top:0;}
  .ed-item .arr{display:none;}
  .rp-foot-in{grid-template-columns:1fr;}
  .kv{grid-template-columns:1fr;}
  .kv > div:nth-child(odd){padding-right:0;padding-bottom:2px;}
}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto;}
  *{transition:none!important;animation:none!important;}
}
