:root{
  --brand-700:#0d7a4a; --brand-600:#12945a; --brand-500:#17a866; --brand-100:#e6f6ee;
  --bg:#fbfdfb; --surface:#ffffff; --surface-2:#f6fbf8; --surface-3:#eef7f2;
  --text-900:#1a1f1c; --text-700:#2f3a33; --muted-500:#6b7c73; --border:#dfe8e3;
  --shadow:0 1px 2px rgba(0,0,0,.04), 0 12px 36px rgba(0,0,0,.06);
  --shadow-lg:0 18px 50px rgba(9,36,22,.10);
  --radius:18px; --radius-lg:24px; --maxw:1120px;
  --navh:54px;
  --hex-size:38px;
  --hex-ink:23,168,102;
  --hex-alpha:.045;
}
*{box-sizing:border-box}
html,body{min-height:100%}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{
  margin:0;
  background:
    radial-gradient(circle at 100% 0, rgba(23,168,102,.08), transparent 24%),
    radial-gradient(circle at 0 100%, rgba(13,122,74,.06), transparent 22%),
    var(--bg);
  color:var(--text-900);
  font-family:"Inter","Noto Sans SC",system-ui,-apple-system,Segoe UI,Roboto,Arial,"PingFang SC","Hiragino Sans GB","Microsoft Yahei",sans-serif;
  line-height:1.68;
  word-wrap:break-word; overflow-wrap:break-word;
  -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;
  -webkit-overflow-scrolling:touch;
  -webkit-tap-highlight-color:transparent;
  padding-bottom:88px;
}
body[data-theme="dark"]{
  --bg:#0f1511; --surface:#151e18; --surface-2:#1a241d; --surface-3:#203026;
  --text-900:#eef6f0; --text-700:#d5e3d9; --muted-500:#9bb1a3; --border:#2a3a30;
  --shadow:0 1px 2px rgba(0,0,0,.20), 0 16px 40px rgba(0,0,0,.24);
  --shadow-lg:0 18px 48px rgba(0,0,0,.30);
  --hex-ink:23,168,102;
  --hex-alpha:.07;
}
a{color:inherit}
img{max-width:100%;display:block}
.geo-hex, body.geo-hex{
  background-image:
    radial-gradient(circle at 0 50%, rgba(var(--hex-ink), var(--hex-alpha)) 1.2px, transparent 1.3px),
    radial-gradient(circle at 50% 0, rgba(var(--hex-ink), var(--hex-alpha)) 1.2px, transparent 1.3px),
    radial-gradient(circle at 100% 50%, rgba(var(--hex-ink), var(--hex-alpha)) 1.2px, transparent 1.3px),
    radial-gradient(circle at 50% 100%, rgba(var(--hex-ink), var(--hex-alpha)) 1.2px, transparent 1.3px);
  background-size:var(--hex-size) var(--hex-size);
  background-attachment:fixed;
}
.topbar{
  position:sticky; top:0; z-index:40;
  background:rgba(255,255,255,.84); background-color:rgba(255,255,255,.84);
  border-bottom:1px solid var(--border);
  backdrop-filter:saturate(180%) blur(8px);
  -webkit-backdrop-filter:saturate(180%) blur(8px);
  transform:translateZ(0);
}
body[data-theme="dark"] .topbar{background:rgba(21,30,24,.88)}
.topbar-inner{
  max-width:var(--maxw); margin:0 auto;
  padding:10px 18px; display:flex; align-items:center; justify-content:space-between; gap:14px;
}
.actions > *{flex:0 0 auto}
.brand{display:flex; align-items:center; gap:10px; font-weight:800; color:var(--brand-700); letter-spacing:.2px}
body[data-theme="dark"] .brand{color:#91e2b4}
.brand .dot{width:10px;height:10px;border-radius:50%;background:var(--brand-500);box-shadow:0 0 0 5px var(--brand-100)}
.actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.btn{
  appearance:none; -webkit-appearance:none; border:1px solid var(--border);
  background:var(--surface); color:var(--text-900); border-radius:999px;
  padding:9px 13px; font:600 14px/1 "Inter","Noto Sans SC",sans-serif; cursor:pointer;
  transition:transform .18s ease,border-color .18s ease,background .18s ease,color .18s ease,box-shadow .18s ease;
  box-shadow:0 1px 0 rgba(255,255,255,.3) inset;
}
.btn:hover,.btn:focus-visible{transform:translateY(-1px); border-color:var(--brand-500); color:var(--brand-700)}
.btn.primary{background:linear-gradient(135deg,var(--brand-600),var(--brand-700)); color:#fff; border-color:transparent; box-shadow:0 10px 24px rgba(13,122,74,.18)}
.btn.primary:hover,.btn.primary:focus-visible{background:linear-gradient(135deg,var(--brand-500),var(--brand-700)); color:#fff}
.lang-fallback{display:none !important}
.wrap{max-width:var(--maxw);margin:26px auto 64px;padding:0 18px;position:relative}
.scroll-progress{position:sticky;top:0;z-index:41;height:3px;background:transparent}
.scroll-progress span{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--brand-500),var(--brand-700));box-shadow:0 0 16px rgba(23,168,102,.35)}
.section-nav{
  position:sticky; top:56px; z-index:35;
  padding:10px 0 2px; background:linear-gradient(to bottom, rgba(251,253,251,.88), rgba(251,253,251,.55), transparent);
  backdrop-filter:saturate(180%) blur(10px); -webkit-backdrop-filter:saturate(180%) blur(10px);
}
body[data-theme="dark"] .section-nav{background:linear-gradient(to bottom, rgba(15,21,17,.92), rgba(15,21,17,.56), transparent)}
.section-nav-inner{
  max-width:var(--maxw); margin:0 auto; padding:0 18px;
  display:flex; gap:10px; overflow:auto; scrollbar-width:none; -ms-overflow-style:none;
}
.section-nav-inner::-webkit-scrollbar{display:none}
.section-link{
  flex:0 0 auto; display:inline-flex; align-items:center; gap:6px; white-space:nowrap;
  text-decoration:none; padding:8px 12px; border-radius:999px; border:1px solid var(--border);
  background:rgba(255,255,255,.85); color:var(--text-700); font-size:13px; font-weight:700;
  transition:all .18s ease;
}
body[data-theme="dark"] .section-link{background:rgba(21,30,24,.86)}
.section-link.is-active,.section-link:hover{background:var(--brand-600); color:#fff; border-color:var(--brand-600); transform:translateY(-1px)}
.card,.section,.stat,.impact-card,.timeline-item,.project-item,.portfolio-card,.skill-item,.pub-item,.ft-inner{
  background:var(--surface); border:1px solid var(--border); box-shadow:var(--shadow);
}
.hero-card{
  position:relative; overflow:hidden;
  border-radius:28px; padding:28px;
  background:
    radial-gradient(circle at top right, rgba(23,168,102,.16), transparent 28%),
    linear-gradient(135deg, rgba(230,246,238,.72), rgba(255,255,255,.96));
}
body[data-theme="dark"] .hero-card{
  background:
    radial-gradient(circle at top right, rgba(23,168,102,.18), transparent 26%),
    linear-gradient(135deg, rgba(24,43,32,.98), rgba(21,30,24,.96));
}
.hero{display:grid;grid-template-columns:136px 1fr;gap:24px;align-items:center}
.avatar{
  width:136px;height:136px;border-radius:50%;position:relative;overflow:hidden;
  display:flex;align-items:center;justify-content:center;
  border:4px solid rgba(255,255,255,.9);
  background:linear-gradient(135deg,#dff5ec,#f4fbf8);
  box-shadow:0 18px 34px rgba(32,65,136,.12);
  transition:border-color .25s ease,transform .18s ease;
}
.avatar img{
  width:100%;height:100%;object-fit:cover;
  transform:rotate(0turn) scale(1); transition:transform .35s ease;
  will-change:transform; -webkit-backface-visibility:hidden; backface-visibility:hidden;
}
.avatar:hover,.avatar.is-active{border-color:var(--brand-700)}
.avatar:hover img,.avatar.rotating img,.avatar.is-active img{transform:rotate(1turn) scale(1.04)}
.avatar::after{
  content:""; position:absolute; inset:0; left:-150%;
  background:linear-gradient(110deg,transparent 0,rgba(255,255,255,.35) 45%,transparent 55%);
  transform:skewX(-20deg); transition:transform .6s ease;
}
.avatar:hover::after,.avatar.is-active::after{transform:translateX(220%) skewX(-20deg)}
.title h1{margin:0 0 8px; font-size:clamp(2rem,3vw,2.9rem); line-height:1.06; letter-spacing:-.03em}
.subtitle{margin:0 0 14px;color:var(--muted-500);font-weight:700;font-size:1rem}
.intro{margin:0 0 16px;max-width:820px;color:var(--text-700)}
.meta,.hero-tags,.quick-links,.stack,.ft-links,.paper-flags,.filter-group{
  display:flex; flex-wrap:wrap; column-gap:10px; row-gap:10px;
}
.chip,.tag,.quick-link,.stack span{
  display:inline-flex; align-items:center; justify-content:center; gap:8px; position:relative;
  min-height:34px; padding:8px 12px; border-radius:999px; border:1px solid var(--border);
  background:rgba(255,255,255,.82); text-decoration:none; line-height:1.15; white-space:nowrap;
  vertical-align:middle; margin:1px 0;
}
body[data-theme="dark"] .chip,body[data-theme="dark"] .tag,body[data-theme="dark"] .quick-link,body[data-theme="dark"] .stack span{background:rgba(255,255,255,.03)}
.chip{
  color:var(--text-700); box-shadow:0 6px 16px rgba(31,49,86,.04);
  transition:transform .18s ease, background .18s ease, color .18s ease, border-color .18s ease, box-shadow .18s ease;
}
.chip i,.quick-link i{color:var(--brand-600)}
.chip:hover,.chip.is-active,.chip:focus-within,.quick-link:hover{background:var(--brand-600);color:#fff;border-color:var(--brand-600);transform:translateY(-1px)}
.chip:hover i,.chip.is-active i,.quick-link:hover i{color:#fff}
.chip a{text-decoration:none;color:inherit}
.copy-hint{
  margin-left:4px;padding:2px 7px;border-radius:999px;font-size:11px;font-weight:700;
  background:rgba(23,168,102,.10); color:var(--brand-700);
}
.chip[data-copy]{cursor:pointer}
.quick-link{
  color:var(--text-700); font-weight:700; transition:all .18s ease;
}
.quick-link:hover{box-shadow:0 10px 22px rgba(13,122,74,.16)}
.tag{background:var(--brand-100);color:var(--brand-700);font-weight:700;transition:transform .16s ease, box-shadow .16s ease}
.tag:hover,.tag.is-active{transform:translateY(-1px) scale(1.03); box-shadow:0 8px 18px rgba(0,0,0,.08)}
.wx-name{white-space:nowrap}
.chip.wechat{overflow:visible; z-index:12}
.wx-qr{
  position:absolute; left:50%; bottom:calc(100% + 10px);
  transform:translateX(-50%) scale(.96) translateZ(0);
  opacity:0; pointer-events:none; width:160px;
  background:var(--surface); border:1px solid var(--border); border-radius:14px; padding:8px; box-shadow:var(--shadow-lg);
  transition:opacity .18s ease, transform .18s ease; z-index:22;
}
.wx-qr::after{content:""; position:absolute; top:100%; left:50%; transform:translateX(-50%); border:7px solid transparent; border-top-color:var(--surface)}
.chip.wechat:hover .wx-qr,.chip.wechat.is-active .wx-qr,.chip.wechat:focus-within .wx-qr{opacity:1; transform:translateX(-50%) scale(1) translateZ(0); pointer-events:auto}
.stats{
  margin:20px 0 0; display:grid; grid-template-columns:repeat(5,minmax(0,1fr)); gap:14px;
}
.stat{
  padding:18px 16px; border-radius:18px; text-align:center; transition:transform .18s ease, box-shadow .18s ease, border-color .18s ease;
}
.stat strong{display:block;font-size:1.7rem;line-height:1.1;color:var(--brand-700);margin-bottom:6px}
.stat span{display:block;color:var(--muted-500);font-size:.95rem}
.stat:hover,.stat.is-active{transform:translateY(-2px); border-color:var(--brand-500); box-shadow:var(--shadow-lg)}
.section{
  position:relative; overflow:hidden;
  margin-top:22px; padding:24px; border-radius:22px;
  transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease;
}
.section:hover,.section.is-active{transform:translateY(-2px); box-shadow:var(--shadow-lg); border-color:var(--brand-500)}
.section > :not(.sec-h) + :not(.sec-h){margin-top:16px}
.impact-grid + .highlight-grid,.pub-note + .pub-grid{margin-top:16px}
.impact-grid,.highlight-grid,.split,.pub-grid,.portfolio-grid,.skills-grid{align-items:start}
.sec-h h2{line-height:1.25}
.sec-h{display:flex;align-items:center;gap:10px;margin:0 0 14px;color:var(--brand-700);justify-content:space-between;flex-wrap:wrap}
.sec-h .bar{width:6px;height:18px;border-radius:6px;background:var(--brand-500)}
.sec-h h2{margin:0;font-size:1.18rem}
.section-tools{margin-left:auto}
.ghost-toggle{
  appearance:none;border:1px solid var(--border);background:var(--surface-2);color:var(--brand-700);
  border-radius:999px;padding:7px 12px;font:700 13px/1 "Inter","Noto Sans SC",sans-serif;cursor:pointer;
}
.ghost-toggle:hover{background:var(--brand-100)}
.impact-grid,.highlight-grid,.skill-grid,.skills-grid,.pub-grid{display:grid;gap:14px}
.impact-grid{grid-template-columns:repeat(4,minmax(0,1fr))}
.highlight-grid,.skill-grid,.skills-grid,.pub-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
.impact-card,.timeline-item,.skill-item,.pub-item{
  padding:18px;border-radius:16px;transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease,background .18s ease;
}
.impact-card strong,.timeline-item h3,.project-item h3,.portfolio-card h3,.skill-item h3,.pub-item h3{margin:0 0 6px}
.impact-card span,.muted{color:var(--muted-500)}
.pub-inline-note{margin:-2px 0 12px;font-size:.92rem;line-height:1.6}
.award-item{padding:18px;border:1px solid var(--border);border-radius:18px;background:var(--surface);box-shadow:var(--shadow)}
.award-item + .award-item{margin-top:14px}
.award-item h3{margin:0 0 6px;line-height:1.3}
.award-item details{margin-top:12px;border-top:1px dashed var(--border);padding-top:12px}
.award-item summary{list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:12px;font-weight:800;color:var(--brand-700)}
.award-item summary::-webkit-details-marker{display:none}
.award-item summary::after{content:"+";display:inline-grid;place-items:center;width:26px;height:26px;border-radius:50%;border:1px solid var(--border);background:var(--surface-2)}
.award-item details[open] summary::after{content:"–"}
.award-layout{display:grid;gap:16px}
.award-columns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;align-items:start}
.award-col{display:grid;gap:14px}
.award-hero{padding:20px}
.award-headline{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap}
.award-headline h3{margin-bottom:8px}
.award-metrics{display:flex;flex-wrap:wrap;gap:8px}
.compact-list.columns-2{columns:2;column-gap:22px}
.compact-list.columns-2 li{break-inside:avoid-column;-webkit-column-break-inside:avoid;page-break-inside:avoid}
.split{display:grid;grid-template-columns:1.15fr .85fr;gap:16px}
.clean{margin:8px 0 0;padding-left:1.1em}
.clean li{margin:.45em 0}
.impact-card{display:flex;flex-direction:column;justify-content:flex-start;padding:20px 18px;border-radius:18px}
.impact-card strong{display:block;margin:0 0 10px;line-height:1.2;font-size:1.02rem}
.impact-card span{display:block;line-height:1.72;padding-top:2px}
.highlight-grid .timeline-item p{margin:10px 0 0;line-height:1.72}
.education-section{overflow:visible}
.edu-grid{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(280px,.9fr);gap:18px;align-items:start}
.edu-main,.edu-side{display:grid;gap:16px}
.edu-card,.edu-panel{background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:18px;padding:18px;transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease,background .18s ease}
.edu-card:hover,.edu-panel:hover{transform:translateY(-2px);border-color:var(--brand-500);box-shadow:var(--shadow-lg);background:var(--surface-2)}
.edu-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;padding-bottom:12px;border-bottom:1px solid var(--border)}
.edu-title{margin:0;font-size:1.08rem;line-height:1.3}
.edu-subtitle{margin:6px 0 0;color:var(--muted-500);line-height:1.6}
.edu-date{flex:0 0 auto;display:inline-flex;align-items:center;min-height:32px;padding:7px 11px;border-radius:999px;border:1px solid var(--border);background:var(--surface-2);color:var(--brand-700);font:800 12px/1 "Inter","Noto Sans SC",sans-serif;white-space:nowrap}
.edu-badges{display:flex;flex-wrap:wrap;gap:8px;margin-top:14px}
.edu-list{margin-top:12px}
.edu-list li{margin:.58em 0;line-height:1.72}
.edu-panel h3{margin:0 0 12px;font-size:1rem;line-height:1.25}
.compact-list{margin:0;padding-left:1.1em}
.compact-list li{margin:.5em 0;line-height:1.66}
.edu-facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.edu-fact{padding:14px 12px;border-radius:16px;background:var(--surface-2);border:1px solid var(--border)}
.edu-fact strong{display:block;margin:0 0 6px;color:var(--brand-700);font-size:1rem;line-height:1.1}
.edu-fact span{display:block;color:var(--muted-500);line-height:1.5;font-size:.92rem}
.project-item{
  position:relative; margin:12px 0 0; padding:18px 18px 18px 22px; border-radius:18px;
  transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease,background .18s ease;
}
.project-item::before{
  content:""; position:absolute; left:0; top:14px; bottom:14px; width:5px; border-radius:5px;
  background:linear-gradient(180deg,var(--brand-500),var(--brand-700)); transform:scaleY(0); transform-origin:top; transition:transform .22s ease,width .22s ease;
}
.project-item:hover,.project-item.is-active{transform:translateY(-2px);background:var(--surface-2);border-color:var(--brand-500);box-shadow:var(--shadow-lg)}
.project-item:hover::before,.project-item.is-active::before{transform:scaleY(1);width:7px}
.portfolio-toolbar{
  display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;
  padding:0 0 14px;
}
.portfolio-search{
  flex:1 1 240px; display:flex; align-items:center; gap:10px;
  padding:10px 12px; border-radius:999px; border:1px solid var(--border); background:var(--surface-2); color:var(--muted-500);
}
.portfolio-search input{
  flex:1; border:none; outline:none; background:transparent; color:var(--text-900); font:600 14px/1.2 "Inter","Noto Sans SC",sans-serif;
}
.filter-group{display:flex;flex-wrap:wrap;gap:8px}
.filter-chip{
  appearance:none; border:1px solid var(--border); background:var(--surface); color:var(--text-700);
  border-radius:999px; padding:8px 12px; font:700 13px/1 "Inter","Noto Sans SC",sans-serif; cursor:pointer;
  transition:all .18s ease;
}
.filter-chip:hover,.filter-chip.is-active{background:var(--brand-600); color:#fff; border-color:var(--brand-600)}
.portfolio-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.portfolio-card{
  position:relative; overflow:hidden; padding:18px; border-radius:18px; min-height:210px;
  transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease, background .18s ease;
}
.portfolio-card::before{
  content:""; position:absolute; inset:auto -24px -24px auto; width:90px; height:90px; border-radius:50%;
  background:radial-gradient(circle, rgba(23,168,102,.18), transparent 70%);
}
.portfolio-card:hover,.portfolio-card.is-active{transform:translateY(-3px); border-color:var(--brand-500); box-shadow:var(--shadow-lg); background:var(--surface-2)}
.portfolio-card[hidden]{display:none !important}
.portfolio-type{
  display:inline-flex; padding:6px 10px; border-radius:999px; background:var(--brand-100); color:var(--brand-700);
  font-size:12px; font-weight:800; letter-spacing:.02em; margin-bottom:10px;
}
.stack{margin-top:12px}
.stack span{font-size:12px; font-weight:700}
.pub-item details{
  margin-top:12px; border-top:1px dashed var(--border); padding-top:12px;
}
.fold-body{padding-top:4px}
.pub-item summary{
  list-style:none; cursor:pointer; display:flex; align-items:center; justify-content:space-between; gap:12px;
  font-weight:800; color:var(--brand-700);
}
.pub-item summary::-webkit-details-marker{display:none}
.pub-item summary::after{
  content:"+"; display:inline-grid; place-items:center; width:26px;height:26px;border-radius:50%;
  border:1px solid var(--border); background:var(--surface-2);
}
.pub-item details[open] summary::after{content:"–"}
.pub-list{counter-reset:pub; list-style:none; margin:10px 0 0; padding:0}
.pub-list.is-continuation{counter-reset:pub 5}
.pub-list li{
  counter-increment:pub; position:relative; margin:14px 0; padding:16px 16px 16px 18px;
  border:1px solid var(--border); border-radius:16px; background:var(--surface); transition:transform .16s ease, box-shadow .16s ease, border-color .16s ease, background .16s ease;
}
.pub-list li::before{
  content:counter(pub); position:absolute; top:0; left:0; transform:translate(-10px,-10px);
  width:30px; height:30px; display:grid; place-items:center; font:800 13px/1 "Inter","Noto Sans SC",sans-serif; border-radius:10px;
  box-shadow:0 6px 14px rgba(0,0,0,.10);
}
.pub-list.papers li::before{background:linear-gradient(135deg,var(--brand-600),var(--brand-700));color:#fff}
.pub-list.patents li::before{background:var(--surface);color:var(--brand-700);border:2px solid var(--brand-500)}
.pub-list li:hover,.pub-list li.is-active{transform:translateY(-2px);border-color:var(--brand-500);box-shadow:0 10px 24px rgba(0,0,0,.08)}
.pub-list li a{text-decoration:none;color:var(--text-900)}
.pub-list li a:hover{color:var(--brand-600)}
.paper-flags{
  margin-top:12px; align-items:center; align-content:flex-start; padding-top:2px;
}
.paper-flag{
  display:inline-flex; align-items:center; gap:7px;
  min-height:30px; padding:6px 11px; border-radius:999px; border:1px solid var(--border);
  background:var(--surface-2); color:var(--text-700);
  font:800 12px/1.05 "Inter","Noto Sans SC",sans-serif; letter-spacing:.01em; white-space:nowrap;
  box-shadow:0 4px 12px rgba(10,30,18,.04); margin:1px 0;
}
.paper-flag::before{
  content:""; width:8px; height:8px; border-radius:50%; flex:0 0 8px;
  background:var(--brand-500); box-shadow:0 0 0 4px rgba(23,168,102,.14);
}
.paper-flag.level::before{
  background:#3b82f6; box-shadow:0 0 0 4px rgba(59,130,246,.14);
}
.paper-flag.accent::before{
  background:#f59e0b; box-shadow:0 0 0 4px rgba(245,158,11,.16);
}
body[data-theme="dark"] .paper-flag{
  background:rgba(255,255,255,.04); border-color:rgba(255,255,255,.08); color:#dfe8e3;
  box-shadow:none;
}
@media (max-width:760px){
  .meta,.hero-tags,.quick-links,.stack,.ft-links,.paper-flags,.filter-group{column-gap:8px; row-gap:8px}
  .paper-flag{min-height:28px; padding:5px 10px; font-size:11px}
  .chip,.tag,.quick-link,.stack span,.filter-chip{min-height:32px}
}
@media print{
  .paper-flags{column-gap:6px; row-gap:6px; margin-top:7px; padding-top:0}
  .paper-flag{min-height:auto; padding:3px 8px; font-size:10px; background:#fff; box-shadow:none; margin:0}
  .paper-flag::before{width:6px; height:6px; flex-basis:6px; box-shadow:none}
}
.site-footer{max-width:var(--maxw);margin:28px auto 24px}
.ft-inner{
  border-radius:18px; padding:16px 18px; display:flex; align-items:center; justify-content:space-between; gap:12px;
  transition:transform .18s ease,box-shadow .18s ease,border-color .18s ease;
}
.ft-inner:hover,.ft-inner.is-active{transform:translateY(-2px); box-shadow:var(--shadow-lg); border-color:var(--brand-500)}
.ft-links a{
  display:inline-flex; align-items:center; padding:7px 10px; border-radius:999px; border:1px solid var(--border);
  text-decoration:none; color:var(--text-700); transition:all .18s ease;
}
.ft-links a:hover{background:var(--brand-600); color:#fff; border-color:var(--brand-600)}
.reveal{
  opacity:0; transform:translateY(20px); transition:opacity .45s ease, transform .45s ease;
}
.reveal.in-view{opacity:1; transform:translateY(0)}
.lang-panel{display:none}
.lang-panel.is-active{display:block}
.lang-switch{
  --h:28px; --w:54px; position:relative; display:inline-flex; align-items:center; gap:8px;
  font:700 14px/1 "Inter","Noto Sans SC",system-ui,-apple-system; -webkit-tap-highlight-color:transparent; touch-action:manipulation;
}
.lang-switch .label{min-width:36px; text-align:right; color:var(--text-700)}
.lang-switch .track{
  position:relative; width:var(--w); height:var(--h); border-radius:999px; cursor:pointer; isolation:isolate;
  background:#e6f6ee; border:1px solid var(--border); transition:background .2s ease,border-color .2s ease;
}
.lang-switch .thumb{
  position:absolute; top:2px; left:2px; width:calc(var(--h) - 4px); height:calc(var(--h) - 4px);
  border-radius:999px; background:#fff; box-shadow:0 1px 2px rgba(0,0,0,.22); transition:transform .2s ease; will-change:transform;
}
.lang-switch[aria-checked="true"] .track{background:linear-gradient(90deg,var(--brand-500),var(--brand-700)); border-color:transparent}
.lang-switch[aria-checked="true"] .thumb{transform:translateX(calc(var(--w) - var(--h)))}
.lang-switch:focus-visible .track{outline:2px solid rgba(23,168,102,.35); outline-offset:2px}
.toast{
  position:fixed; left:50%; bottom:104px; transform:translateX(-50%) translateY(16px);
  background:rgba(20,32,25,.96); color:#fff; border-radius:999px; padding:10px 14px; font-size:13px; font-weight:700;
  opacity:0; pointer-events:none; z-index:70; transition:opacity .22s ease, transform .22s ease;
}
.toast.is-visible{opacity:1; transform:translateX(-50%) translateY(0)}
.floating-top{
  position:fixed; right:18px; bottom:104px; z-index:55; width:44px; height:44px; border-radius:999px;
  border:1px solid var(--border); background:var(--surface); color:var(--brand-700); box-shadow:var(--shadow); cursor:pointer;
  display:grid; place-items:center; opacity:0; pointer-events:none; transform:translateY(12px); transition:all .18s ease;
}
.floating-top.is-visible{opacity:1; pointer-events:auto; transform:translateY(0)}
.mobile-dock{
  position:fixed; left:50%; bottom:calc(16px + env(safe-area-inset-bottom, 0px)); transform:translateX(-50%); z-index:60;
  width:min(680px, calc(100vw - 24px)); display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:8px;
  padding:8px; border-radius:18px; border:1px solid var(--border); background:rgba(255,255,255,.92); box-shadow:var(--shadow-lg);
  backdrop-filter:saturate(180%) blur(8px); -webkit-backdrop-filter:saturate(180%) blur(8px);
}
body[data-theme="dark"] .mobile-dock{background:rgba(21,30,24,.92)}
.dock-item{
  appearance:none; text-decoration:none; border:none; background:transparent; color:var(--text-700);
  min-height:52px; border-radius:14px; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:5px;
  font:700 12px/1 "Inter","Noto Sans SC",sans-serif; cursor:pointer;
}
.dock-item:hover,.dock-item:focus-visible{background:var(--surface-2); color:var(--brand-700)}
@media (hover:none){
  .card:active,.section:active,.chip:active,.project-item:active,.portfolio-card:active,.pub-list li:active,.tag:active,.ft-inner:active,.stat:active{transform:translateY(-1px)}
}
@media (max-width:980px){
  .impact-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .highlight-grid,.skill-grid,.skills-grid,.pub-grid,.split,.edu-grid,.award-columns{grid-template-columns:1fr}
  .edu-facts{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media (max-width:760px){
  .edu-head{flex-direction:column;gap:10px}
  .edu-date{white-space:normal}
  .edu-facts{grid-template-columns:1fr 1fr}
  body{padding-bottom:calc(108px + env(safe-area-inset-bottom, 0px))}
  .topbar-inner{padding:10px 14px}
  .section-nav{top:54px}
  .wrap{padding:0 14px}
  .hero-card{padding:22px}
  .hero{grid-template-columns:1fr; text-align:center}
  .avatar{margin:0 auto}
  .meta,.hero-tags,.quick-links{justify-content:center}
  .stats{grid-template-columns:repeat(2,minmax(0,1fr))}
  .portfolio-grid{grid-template-columns:1fr}
  .section,.stat{padding:18px}
  .section > :not(.sec-h) + :not(.sec-h){margin-top:14px}
  .ft-inner{flex-direction:column; align-items:flex-start}
}
@media (max-width:480px){
  .title h1{font-size:1.9rem}
  .impact-card{padding:18px 16px}
  .impact-card strong{margin-bottom:8px}
  .edu-card,.edu-panel{padding:16px}
  .edu-facts{grid-template-columns:1fr}
  .topbar-inner{align-items:flex-start}
  .actions{width:100%; justify-content:flex-start}
  .btn{padding:9px 11px; font-size:13px}
  .brand{font-size:14px}
  .stats{grid-template-columns:1fr 1fr}
  .impact-grid{grid-template-columns:1fr}
  .section{padding:16px}
  .project-item,.portfolio-card,.skill-item,.pub-item,.timeline-item,.impact-card{padding:16px}
  .portfolio-toolbar{align-items:stretch}
  .portfolio-search{width:100%}
}
@media print{
  .topbar,.section-nav,.mobile-dock,.floating-top,.toast,.ghost-toggle,#theme-toggle,.copy-hint{display:none !important}
  body{padding-bottom:0;background:#fff;color:#000}
  .wrap{margin:0;padding:0}
  .hero-card,.section,.stat,.impact-card,.timeline-item,.project-item,.portfolio-card,.skill-item,.pub-item,.ft-inner{box-shadow:none !important; break-inside:avoid}
  .ft-inner{display:none}
}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  .reveal,.chip,.project-item,.portfolio-card,.pub-list li,.tag,.stat,.section,.btn,.quick-link,.ft-inner,.floating-top,.section-link,.lang-switch .thumb,.lang-switch .track,.avatar img,.avatar::after{transition:none !important}
  .reveal{opacity:1 !important; transform:none !important}
}

.portfolio-type,.filter-chip{white-space:nowrap; line-height:1.1; margin:1px 0;}
