:root{
  --ink:#10263d; --ink-2:#2b4058; --muted:#5f6b78; --line:#ddd5c7;
  --paper:#f7f3ec; --paper-2:#efe8dc; --white:#fffdf9;
  --coral:#b4513c; --coral-d:#913e2d; --sea:#2c6a6e;
  --font-display:'Noto Serif TC','Songti TC',serif;
  --font-body:'Noto Sans TC','PingFang TC',system-ui,sans-serif;
  --font-en:'Instrument Serif','Noto Serif TC',serif;
  --text-xs:clamp(.75rem,.72rem + .15vw,.82rem);
  --text-sm:clamp(.875rem,.85rem + .15vw,.95rem);
  --text-base:clamp(1rem,.97rem + .15vw,1.07rem);
  --text-lg:clamp(1.15rem,1.05rem + .45vw,1.4rem);
  --text-xl:clamp(1.55rem,1.3rem + 1.1vw,2.2rem);
  --text-hero:clamp(2.6rem,1.6rem + 4.6vw,5.4rem);
  --gut:clamp(1.25rem,4vw,3rem);
  --sec:clamp(3.5rem,8vw,7rem);
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
body{font-family:var(--font-body);font-size:var(--text-base);line-height:1.75;color:var(--ink);background:var(--paper);-webkit-font-smoothing:antialiased}
img{display:block;max-width:100%;height:auto}
a{color:inherit}
button{font:inherit;cursor:pointer}
.skip{position:absolute;left:-999px;top:0;background:var(--ink);color:#fff;padding:.5rem 1rem;z-index:99}
.skip:focus{left:1rem}
:focus-visible{outline:2px solid var(--coral);outline-offset:3px}
.wrap{width:min(1200px,100%);margin-inline:auto;padding-inline:var(--gut)}
.section{padding-block:var(--sec)}
.en{font-family:var(--font-en);letter-spacing:.01em}
.eyebrow{font-size:var(--text-xs);letter-spacing:.18em;text-transform:uppercase;color:var(--coral);font-weight:500;margin-bottom:.9rem}
.lead{font-size:var(--text-lg);line-height:1.7;color:var(--ink-2)}
h1,h2{font-family:var(--font-display);font-weight:700;line-height:1.25;letter-spacing:.02em}
h2{font-size:var(--text-xl)}
h3{font-size:var(--text-lg);font-weight:700;line-height:1.4}

/* header */
.header{position:sticky;top:0;z-index:50;background:rgba(247,243,236,.92);backdrop-filter:blur(10px);border-bottom:1px solid var(--line)}
.header__in{display:flex;align-items:center;justify-content:space-between;height:72px;gap:1rem}
.brand{text-decoration:none;display:flex;flex-direction:column;line-height:1.15}
.brand__zh{font-family:var(--font-display);font-weight:700;font-size:1.3rem;letter-spacing:.12em}
.brand__en{font-family:var(--font-en);font-size:.95rem;color:var(--muted)}
.nav{display:flex;align-items:center;gap:.25rem}
.nav a{text-decoration:none;font-size:var(--text-sm);padding:.5rem .7rem;border-radius:4px;color:var(--ink-2);white-space:nowrap;transition:color .2s,background .2s}
.nav a:hover{color:var(--coral)}
.nav a.active{color:var(--coral);font-weight:500}
.nav__group{position:relative}
.nav__sub{position:absolute;top:100%;left:0;min-width:160px;background:var(--white);border:1px solid var(--line);border-radius:6px;padding:.4rem;box-shadow:0 12px 30px -12px rgba(16,38,61,.25);opacity:0;visibility:hidden;transform:translateY(6px);transition:.18s}
.nav__sub a{display:block}
.nav__group:hover .nav__sub,.nav__group:focus-within .nav__sub{opacity:1;visibility:visible;transform:none}
.lang{margin-left:.5rem;border:1px solid var(--ink);background:none;border-radius:999px;padding:.25rem .8rem;font-size:var(--text-xs);letter-spacing:.1em;color:var(--ink)}
.lang:hover{background:var(--ink);color:var(--paper)}
.menu-btn{display:none;background:none;border:0;width:44px;height:44px;position:relative}
.menu-btn span{position:absolute;left:11px;right:11px;height:1.5px;background:var(--ink);transition:.25s}
.menu-btn span:first-child{top:17px}.menu-btn span:last-child{top:26px}
.menu-btn[aria-expanded=true] span:first-child{top:21px;transform:rotate(45deg)}
.menu-btn[aria-expanded=true] span:last-child{top:21px;transform:rotate(-45deg)}

@media (max-width:1020px){
  .menu-btn{display:block}
  .header{backdrop-filter:none;-webkit-backdrop-filter:none;background:var(--paper)}
  .nav{position:fixed;inset:72px 0 0 0;background:var(--paper);flex-direction:column;align-items:stretch;padding:1rem var(--gut) 2rem;gap:0;overflow-y:auto;transform:translateX(100%);visibility:hidden;transition:transform .3s,visibility .3s}
  .nav.open{transform:none;visibility:visible}
  .nav a{font-size:1.05rem;padding:.85rem 0;border-bottom:1px solid var(--line);border-radius:0}
  .nav__sub{position:static;opacity:1;visibility:visible;transform:none;border:0;box-shadow:none;background:none;padding:0 0 0 1rem}
  .nav__sub a{font-size:.95rem;color:var(--muted)}
  .lang{align-self:flex-start;margin:1.25rem 0 0}
}

/* hero */
.hero{position:relative;min-height:min(86vh,820px);display:flex;align-items:flex-end;color:var(--white);overflow:hidden}
.hero__img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center 40%}
.hero__veil{position:absolute;inset:0;background:linear-gradient(90deg,rgba(10,24,40,.88) 0%,rgba(10,24,40,.55) 45%,rgba(10,24,40,.1) 80%),linear-gradient(0deg,rgba(10,24,40,.6),transparent 40%)}
.hero__body{position:relative;padding-block:clamp(4rem,10vw,8rem)}
.hero .kicker{font-size:clamp(1.05rem,1rem + .4vw,1.35rem);color:#f0c7b8;margin-bottom:1rem}
.hero__title{font-size:var(--text-hero);line-height:1.12;letter-spacing:.06em;margin-bottom:1.5rem}
.hero__lead{max-width:36em;font-size:var(--text-base);color:rgba(255,253,249,.88)}
.hero__tags{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:2rem;max-width:720px}
.hero__tags span{font-family:var(--font-en);font-size:1rem;border:1px solid rgba(255,255,255,.35);border-radius:999px;padding:.2rem .9rem}

/* intro */
.intro{display:grid;grid-template-columns:1.25fr 1fr;gap:clamp(2rem,6vw,5rem);align-items:center}
.facts{display:grid;gap:1.25rem;margin-top:2.25rem;border-top:1px solid var(--line);padding-top:1.75rem}
.facts div{display:grid;grid-template-columns:7rem 1fr;gap:1rem}
.facts dt{font-size:var(--text-xs);letter-spacing:.12em;color:var(--muted);padding-top:.2rem}
.facts dd{font-size:var(--text-sm);line-height:1.7}
.intro__fig img{aspect-ratio:4/5;object-fit:cover;border-radius:2px}

/* band / pillars */
.band{background:var(--ink);color:var(--paper)}
.band .more{color:#f0c7b8}
.sec-head{display:flex;justify-content:space-between;align-items:baseline;gap:1rem;margin-bottom:2.5rem;flex-wrap:wrap}
.more{font-size:var(--text-sm);text-decoration:none;color:var(--coral);border-bottom:1px solid currentColor;padding-bottom:2px}
.pillars{display:grid;grid-template-columns:repeat(4,1fr);gap:1.5rem}
.pillar{background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.1);display:flex;flex-direction:column}
.pillar img{aspect-ratio:4/3;object-fit:cover}
.pillar__b{padding:1.4rem 1.3rem 1.6rem}
.pillar .num{font-size:1.6rem;color:#f0c7b8;line-height:1}
.pillar h3{margin:.6rem 0 .6rem;font-family:var(--font-display)}
.pillar p:last-child{font-size:var(--text-sm);color:rgba(247,243,236,.78);line-height:1.75}
@media (max-width:1020px){.pillars{grid-template-columns:repeat(2,1fr)}}
@media (max-width:820px){.intro{grid-template-columns:1fr}.intro__fig img{aspect-ratio:16/10}}
@media (max-width:560px){.pillars{grid-template-columns:1fr}.facts div{grid-template-columns:1fr;gap:.2rem}}

/* news */
.news{list-style:none;border-top:1px solid var(--ink)}
.news li{display:grid;grid-template-columns:9rem 7rem 1fr;gap:1.25rem;padding:1.25rem 0;border-bottom:1px solid var(--line);align-items:baseline}
.news time{font-family:var(--font-en);font-size:1.15rem;color:var(--muted)}
.news .cat{font-size:var(--text-xs);color:var(--coral);letter-spacing:.08em}
.news p{font-size:var(--text-base)}
@media (max-width:640px){.news li{grid-template-columns:1fr auto;gap:.25rem .75rem}.news li p{grid-column:1/-1}}

/* quote */
.quote{background:var(--paper-2);padding-block:var(--sec)}
.quote blockquote{font-family:var(--font-display);font-size:var(--text-xl);line-height:1.6;max-width:28em;letter-spacing:.03em}
.quote__by{margin-top:1.25rem;color:var(--muted)}

/* page head */
.page-head{padding-top:clamp(3rem,7vw,6rem);padding-bottom:clamp(1.5rem,3vw,2.5rem);border-bottom:1px solid var(--line)}
.page-head h1{font-size:var(--text-xl);font-size:clamp(2rem,1.5rem + 2vw,3.2rem)}
.page-head .sub{margin-top:.75rem;color:var(--muted);max-width:44em}
.page-head .sub.en{font-size:1.35rem}
.h2-sm{font-size:var(--text-lg);font-family:var(--font-body);margin:3.5rem 0 1.25rem}

/* about */
.about{display:grid;grid-template-columns:300px 1fr;gap:clamp(2rem,6vw,5rem);align-items:start}
.about__side{position:sticky;top:96px}
.portrait{aspect-ratio:4/5;background:linear-gradient(160deg,var(--ink) 0%,var(--sea) 100%);color:var(--paper);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem}
.portrait span{font-family:var(--font-display);font-size:5rem;line-height:1}
.portrait small{font-size:var(--text-xs);opacity:.7}
.contact-list{list-style:none;margin-top:1.5rem;font-size:var(--text-sm)}
.contact-list li{display:grid;grid-template-columns:3.5rem 1fr;padding:.6rem 0;border-bottom:1px solid var(--line)}
.contact-list strong{font-weight:500;color:var(--muted)}
.prose h2{margin:3rem 0 1.25rem;font-size:var(--text-lg);font-family:var(--font-display);padding-bottom:.6rem;border-bottom:1px solid var(--line)}
.timeline{list-style:none}
.timeline li{display:grid;grid-template-columns:5.5rem 1fr;gap:1rem;padding:.55rem 0;font-size:var(--text-sm)}
.timeline .t{color:var(--coral);font-weight:500}
.timeline strong{font-weight:500}
.cols{columns:2;column-gap:2.5rem;font-size:var(--text-sm);padding-left:1.1rem}
.cols li{break-inside:avoid;margin-bottom:.5rem}
.chips{display:flex;flex-wrap:wrap;gap:.5rem}
.chips span{font-size:var(--text-xs);background:var(--white);border:1px solid var(--line);padding:.35rem .8rem;border-radius:999px}
@media (max-width:820px){.about{grid-template-columns:1fr}.about__side{position:static;max-width:320px}.cols{columns:1}}

/* lab */
.lab-intro{display:grid;grid-template-columns:1.4fr 1fr;gap:clamp(2rem,6vw,5rem)}
.lab-intro .prose p+p{margin-top:1.1rem}
.lab-links{display:grid;gap:1rem;align-content:start}
.tile{display:flex;justify-content:space-between;align-items:baseline;text-decoration:none;border:1px solid var(--ink);padding:1.25rem 1.4rem;transition:.2s}
.tile span{font-size:1.25rem;color:var(--muted)}
.tile:hover{background:var(--ink);color:var(--paper)}
.tile:hover span{color:#f0c7b8}
.bleed img{width:100%;max-height:520px;object-fit:cover}
@media (max-width:820px){.lab-intro{grid-template-columns:1fr}}

/* team */
.team{display:grid;grid-template-columns:1fr 1fr;gap:1.5rem}
.member{display:grid;grid-template-columns:88px 1fr;gap:1.25rem;background:var(--white);border:1px solid var(--line);padding:1.75rem}
.avatar{width:88px;height:88px;border-radius:50%;background:var(--ink);color:var(--paper);display:grid;place-items:center;font-family:var(--font-display);font-size:2rem}
.avatar--open{background:none;border:1.5px dashed var(--coral);color:var(--coral)}
.role{font-size:var(--text-xs);color:var(--coral);letter-spacing:.06em;margin:.2rem 0 .6rem}
.member p:not(.role){font-size:var(--text-sm);color:var(--ink-2)}
.btn{display:inline-block;margin-top:1rem;background:var(--coral);color:#fff;text-decoration:none;font-size:var(--text-sm);padding:.55rem 1.2rem;border-radius:3px}
.btn:hover{background:var(--coral-d)}
.partners{list-style:none;display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--line)}
.partners li{padding:1rem 0;border-bottom:1px solid var(--line);font-size:var(--text-sm)}
@media (max-width:820px){.team{grid-template-columns:1fr}.partners{grid-template-columns:1fr 1fr}}
@media (max-width:480px){.member{grid-template-columns:1fr}.partners{grid-template-columns:1fr}}

/* gallery */
.gallery{display:grid;grid-template-columns:repeat(3,1fr);grid-auto-rows:240px;gap:1rem}
.g{position:relative;overflow:hidden}
.g img{width:100%;height:100%;object-fit:cover;transition:transform .6s}
.g:hover img{transform:scale(1.04)}
.g figcaption{position:absolute;left:0;bottom:0;right:0;padding:.8rem 1rem;color:#fff;font-size:var(--text-sm);background:linear-gradient(0deg,rgba(10,24,40,.75),transparent)}
.g--big{grid-column:span 2;grid-row:span 2}
@media (max-width:640px){.gallery{grid-template-columns:1fr;grid-auto-rows:220px}.g--big{grid-column:auto;grid-row:auto}}

/* projects */
.projects{display:grid;gap:3rem}
.pgroup h2{font-size:var(--text-lg);font-family:var(--font-display);display:flex;flex-wrap:wrap;gap:.2rem .8rem;align-items:baseline;margin-bottom:1rem}
.pgroup h2 .en{color:var(--coral);font-size:1.4rem;font-weight:400}
.ptable{width:100%;border-collapse:collapse;font-size:var(--text-sm)}
.ptable th{text-align:left;font-weight:500;color:var(--muted);font-size:var(--text-xs);letter-spacing:.08em;border-bottom:1px solid var(--ink);padding:.6rem .5rem}
.ptable td{padding:1rem .5rem;border-bottom:1px solid var(--line);vertical-align:top}
.ptable td:first-child{width:9rem;color:var(--muted)}
.ptable .pt{font-weight:500;color:var(--ink)}
.ptable .pd{color:var(--muted);margin-top:.25rem}
.status{display:inline-block;font-size:var(--text-xs);padding:.15rem .6rem;border-radius:999px;border:1px solid var(--sea);color:var(--sea);white-space:nowrap}
.status--plan{border-color:var(--coral);color:var(--coral)}
@media (max-width:640px){
  .ptable thead{display:none}
  .ptable tr{display:grid;grid-template-columns:1fr auto;padding:1rem 0;border-bottom:1px solid var(--line)}
  .ptable td{border:0;padding:.15rem 0}
  .ptable td:first-child{width:auto}
  .ptable td:nth-child(2){grid-column:1/-1;order:3}
}

/* pubs */
.filters{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:2rem}
.filters button{background:none;border:1px solid var(--line);border-radius:999px;padding:.4rem 1rem;font-size:var(--text-sm);color:var(--ink-2)}
.filters button.on{background:var(--ink);border-color:var(--ink);color:var(--paper)}
.pubs{list-style:none;counter-reset:p}
.pubs li{counter-increment:p;display:grid;grid-template-columns:3rem 1fr;padding:1.25rem 0;border-bottom:1px solid var(--line)}
.pubs li::before{content:counter(p,decimal-leading-zero);font-family:var(--font-en);font-size:1.3rem;color:var(--coral)}
.pubs .ti{font-weight:500;line-height:1.55}
.pubs .me{font-size:var(--text-sm);color:var(--muted);margin-top:.3rem}
.pubs .bd{display:inline-block;font-size:var(--text-xs);margin-top:.5rem;padding:.1rem .55rem;background:var(--paper-2);border-radius:3px}

/* patents */
.patents{display:grid;grid-template-columns:1fr 1fr;gap:1.5rem}
.patent{background:var(--white);border:1px solid var(--line);border-top:3px solid var(--coral);padding:2rem}
.patent__no{font-size:1.6rem;color:var(--coral)}
.patent h3{font-family:var(--font-display);font-size:var(--text-xl);margin:.3rem 0 1rem}
.patent p{font-size:var(--text-sm);color:var(--ink-2)}
.patent__next{margin-top:1.25rem;padding-top:1rem;border-top:1px dashed var(--line);color:var(--sea)!important}
@media (max-width:760px){.patents{grid-template-columns:1fr}}

/* courses */
.courses{display:grid;grid-template-columns:repeat(2,1fr);gap:0;border-top:1px solid var(--ink)}
.course{padding:2rem 2rem 2rem 0;border-bottom:1px solid var(--line)}
.course:nth-child(even){padding:2rem 0 2rem 2rem;border-left:1px solid var(--line)}
.where{font-size:var(--text-xs);color:var(--coral);letter-spacing:.06em}
.course h3{font-family:var(--font-display);font-size:var(--text-lg);margin-top:.5rem}
.en-t{font-family:var(--font-en);font-size:1.15rem;color:var(--muted);margin-bottom:.75rem}
.course p:last-child{font-size:var(--text-sm);color:var(--ink-2)}
@media (max-width:760px){.courses{grid-template-columns:1fr}.course,.course:nth-child(even){padding:1.75rem 0;border-left:0}}

/* talks */
.talks{list-style:none;border-top:1px solid var(--ink)}
.talks li{display:grid;grid-template-columns:8rem 1fr;gap:1.5rem;padding:1.5rem 0;border-bottom:1px solid var(--line)}
.talks .y{font-family:var(--font-en);font-size:2rem;line-height:1;color:var(--coral)}
.talks h3{font-family:var(--font-display)}
.talks p{font-size:var(--text-sm);color:var(--muted);margin-top:.3rem}
@media (max-width:560px){.talks li{grid-template-columns:1fr;gap:.5rem}}

/* articles */
.articles{display:grid;grid-template-columns:repeat(3,1fr);gap:1.75rem}
.art img{aspect-ratio:3/2;object-fit:cover;margin-bottom:1.1rem}
.tag{font-size:var(--text-xs);color:var(--coral);letter-spacing:.1em}
.art h3{font-size:var(--text-base);font-weight:700;margin:.3rem 0 .5rem;line-height:1.55}
.art p:last-child{font-size:var(--text-sm);color:var(--muted)}
@media (max-width:860px){.articles{grid-template-columns:1fr 1fr}}
@media (max-width:560px){.articles{grid-template-columns:1fr}}

/* footer */
.footer{background:var(--ink);color:rgba(247,243,236,.8);font-size:var(--text-sm);padding-block:3.5rem 2.5rem;margin-top:var(--sec)}
.footer__in{display:grid;grid-template-columns:1fr 1fr;gap:2rem}
.footer__name{font-family:var(--font-display);font-size:1.25rem;color:var(--paper);margin-bottom:.5rem}
.footer a{color:#f0c7b8}
.footer__copy{grid-column:1/-1;border-top:1px solid rgba(255,255,255,.12);padding-top:1.5rem;font-size:var(--text-xs);opacity:.7}
@media (max-width:640px){.footer__in{grid-template-columns:1fr}}

.page[data-page="/"]+.page{margin-top:0}
.page{animation:fade .35s ease}
@keyframes fade{from{opacity:.0}to{opacity:1}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
.pubs li.empty{display:block;counter-increment:none}.pubs li.empty::before{content:none}

/* v2 additions */
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.metrics-wrap{display:flex;flex-direction:column;align-items:flex-start;gap:1.25rem;padding-bottom:var(--sec)}
.metrics{display:grid;grid-template-columns:repeat(5,1fr);width:100%;border-top:1px solid var(--ink);border-bottom:1px solid var(--line)}
.metrics div{padding:1.4rem 1rem 1.3rem 0;display:flex;flex-direction:column;gap:.2rem}
.metrics div+div{padding-left:1.25rem;border-left:1px solid var(--line)}
.metrics strong{font-family:var(--font-en);font-weight:400;font-size:clamp(2.2rem,1.6rem + 2vw,3.4rem);line-height:1;color:var(--coral)}
.metrics span{font-size:var(--text-xs);color:var(--muted);letter-spacing:.06em}
.metrics--light{margin-bottom:2.5rem}
@media (max-width:760px){.metrics{grid-template-columns:repeat(2,1fr)}.metrics div,.metrics div+div{padding:1.1rem 0;border-left:0;border-bottom:1px solid var(--line)}.metrics div:nth-child(even){padding-left:1rem;border-left:1px solid var(--line)}}
.sel{list-style:none;border-top:1px solid var(--ink)}
.sel li,.essay li{display:grid;grid-template-columns:5rem 1fr;gap:1rem;padding:1.1rem 0;border-bottom:1px solid var(--line)}
.sel .y,.essay .y{font-size:1.4rem;color:var(--coral);line-height:1.2}
.sel .ti a,.pubs .ti a{text-decoration:none;background-image:linear-gradient(currentColor,currentColor);background-size:0 1px;background-repeat:no-repeat;background-position:0 100%;transition:background-size .3s}
.sel .ti a:hover,.pubs .ti a:hover{background-size:100% 1px;color:var(--coral-d)}
.sel .ti,.essay .ti{font-weight:500;line-height:1.55}
.sel .me,.essay .me{font-size:var(--text-sm);color:var(--muted);margin-top:.2rem}
.essay{list-style:none;border-top:1px solid var(--ink)}
.pub-tools{display:flex;justify-content:space-between;gap:1rem;flex-wrap:wrap;align-items:center;margin-bottom:1rem}
.pub-tools .filters{margin-bottom:0}
.search input{font:inherit;font-size:var(--text-sm);padding:.5rem .9rem;border:1px solid var(--line);border-radius:999px;background:var(--white);width:min(300px,100%);color:var(--ink)}
.search{flex:0 1 300px}
.search input:focus{outline:2px solid var(--coral);outline-offset:1px}
.first-only{display:inline-flex;gap:.5rem;align-items:center;font-size:var(--text-sm);color:var(--ink-2);margin-bottom:1.5rem;cursor:pointer}
.first-only input{accent-color:var(--coral);width:16px;height:16px}
.count{font-size:var(--text-xs);color:var(--muted);margin-bottom:.5rem}
.ygroup{display:grid;grid-template-columns:6rem 1fr;gap:1rem;border-top:1px solid var(--ink);padding-top:.5rem;margin-top:1.5rem}
.yh{font-size:1.9rem;font-weight:400;color:var(--coral);line-height:1.2;padding-top:.6rem}
.ygroup .pubs li{grid-template-columns:2.5rem 1fr}
.ygroup .pubs li:last-child{border-bottom:0}
.pubs .au{font-size:var(--text-sm);color:var(--ink-2);margin-top:.35rem}
.pubs .au b{color:var(--ink);font-weight:700}
.venue{font-style:normal}
.tags{display:flex;flex-wrap:wrap;gap:.4rem;align-items:center;margin-top:.5rem}
.tags .bd{margin:0}
.bd--first{background:#f3dcd4!important;color:var(--coral-d)}
.bd--cite{background:#dbe8e7!important;color:var(--sea)}
.doi{font-size:var(--text-xs);color:var(--sea);word-break:break-all}
.empty-msg{color:var(--muted);padding:2rem 0}
@media (max-width:640px){.ygroup{grid-template-columns:1fr;gap:0}.yh{padding-top:.3rem}.ygroup .pubs li{grid-template-columns:2rem 1fr}.search{flex:1 1 100%}.search input{width:100%}}
.keywords{font-size:var(--text-sm);color:var(--sea);margin-top:1rem}
.timeline small{color:var(--muted);font-size:var(--text-xs)}
.src{font-size:var(--text-xs);color:var(--muted);margin-top:2.5rem}
.src a{color:var(--sea)}
.status--done{border-color:var(--muted)!important;color:var(--muted)!important}
.table-wrap{overflow-x:auto}
.mono{font-family:ui-monospace,Menlo,monospace;font-size:var(--text-xs);white-space:nowrap}
.patent-table td:first-child{width:5rem}
a.art{text-decoration:none;display:block}
a.art:hover h3{color:var(--coral-d)}
a.art img{transition:opacity .3s}a.art:hover img{opacity:.88}
.articles{margin-bottom:1rem}
.page-head .sub a{color:var(--sea)}
@media (max-width:640px){
  .patent-table tr{grid-template-columns:4rem 1fr}
  .patent-table td:nth-child(2){grid-column:2;order:0}
  .patent-table td:nth-child(3),.patent-table td:nth-child(4){grid-column:2}
  .sel li,.essay li{grid-template-columns:3.5rem 1fr}
}
.sec-note{font-size:var(--text-sm);color:var(--muted);margin:-1.75rem 0 1.25rem}
.portrait-photo img{width:100%;aspect-ratio:5/6;object-fit:cover;object-position:center top;background:#c9c0b4}
.avatar--photo{object-fit:cover;object-position:center 15%;border:2px solid var(--line)}
.intro__fig img{object-position:center top}
.intro__fig figcaption{font-size:var(--text-xs);color:var(--muted);margin-top:.6rem}
@media (max-width:820px){.intro__fig{max-width:420px}.intro__fig img{aspect-ratio:4/5}}
.nowrap{white-space:nowrap}
.titles{display:grid;grid-template-columns:1fr 1fr;gap:1.5rem 2.5rem;border-top:1px solid var(--ink);padding-top:1.5rem}
.titles__g p{font-size:var(--text-sm);line-height:1.8}
.titles__g--main{grid-column:1/-1;padding-bottom:1.25rem;border-bottom:1px solid var(--line)}
.titles__g--main p{font-family:var(--font-display);font-size:var(--text-lg);font-weight:700;color:var(--ink);line-height:1.6}
.titles__k{font-size:var(--text-xs)!important;letter-spacing:.12em;color:var(--coral);font-weight:500;margin-bottom:.3rem}
@media (max-width:640px){.titles{grid-template-columns:1fr}}
.titles__g--wide{grid-column:1/-1}
.course .code{font-size:var(--text-xs);color:var(--sea);letter-spacing:.04em;margin:-.4rem 0 .6rem;font-weight:500}
.syl{margin-top:1rem;border-top:1px dashed var(--line);padding-top:.75rem}
.syl summary{cursor:pointer;font-size:var(--text-sm);color:var(--coral);font-weight:500;list-style:none;display:flex;align-items:center;gap:.4rem}
.syl summary::-webkit-details-marker{display:none}
.syl summary::before{content:'+';display:inline-grid;place-items:center;width:1.2rem;height:1.2rem;border:1px solid currentColor;border-radius:50%;font-size:.8rem;line-height:1}
.syl[open] summary::before{content:'−'}
.syl__h{font-size:var(--text-xs)!important;letter-spacing:.1em;color:var(--muted)!important;margin:1rem 0 .3rem;font-weight:500}
.syl p{font-size:var(--text-sm)}
.weeks{list-style:none;display:grid;gap:.15rem;font-size:var(--text-sm)}
.weeks li{display:grid;grid-template-columns:2.6rem 1fr;gap:.5rem;padding:.25rem 0;border-bottom:1px solid var(--paper-2)}
.weeks span{font-family:var(--font-en);color:var(--coral)}
.syl__src{margin-top:.75rem}.syl__src a{color:var(--sea);font-size:var(--text-xs)}
.course > p:not(.where):not(.en-t):not(.code){font-size:var(--text-sm);color:var(--ink-2)}
.partners{grid-template-columns:repeat(2,1fr);column-gap:2.5rem}@media (max-width:640px){.partners{grid-template-columns:1fr}}
/* research highlight */
.highlight{padding-bottom:0}
.hl-en{font-size:1.2rem;color:var(--coral)}
.hl{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.35fr);grid-template-areas:"fig body" "paper body";gap:1.75rem 3rem;border-top:1px solid var(--ink);padding-top:2rem;align-items:start}
.hl__fig{grid-area:fig}.hl__body{grid-area:body}.hl__paper{grid-area:paper}
.hl__fig img{aspect-ratio:4/3;object-fit:cover;width:100%}
.hl figcaption{font-size:var(--text-xs);color:var(--muted);margin-top:.5rem}
.hl__paper img{width:100%;border:1px solid var(--line);background:#fff;transition:box-shadow .3s}
.hl__paper a:hover img{box-shadow:0 14px 34px -16px rgba(16,38,61,.35)}
.hl__journal{font-size:1.15rem;color:var(--coral)}
.hl__title{font-size:var(--text-lg);line-height:1.45;margin:.4rem 0 .6rem}
.hl__title a{text-decoration:none}.hl__title a:hover{color:var(--coral-d)}
.hl__zh{font-family:var(--font-display);color:var(--ink-2);font-size:var(--text-base);line-height:1.6}
.hl__lead{margin-top:1rem;font-size:var(--text-sm);color:var(--sea);font-weight:500}
.hl__points{list-style:none;margin-top:1.25rem;display:grid;grid-template-columns:1fr 1fr;gap:1rem 1.5rem}
.hl__points li{font-size:var(--text-sm);color:var(--ink-2);border-top:2px solid var(--coral);padding-top:.6rem;line-height:1.7}
.hl__points strong{display:block;color:var(--ink);font-size:var(--text-base);margin-bottom:.2rem}
.hl__team{margin-top:1.75rem;background:var(--white);border:1px solid var(--line);padding:1.25rem 1.4rem}
.hl__k{font-size:var(--text-xs);letter-spacing:.12em;color:var(--coral);font-weight:500;margin-bottom:.5rem}
.hl__team ul{list-style:none}
.hl__team li{font-size:var(--text-sm);color:var(--muted);padding:.45rem 0;border-bottom:1px solid var(--paper-2)}
.hl__team li:last-child{border-bottom:0}
.hl__team strong{color:var(--ink);font-weight:700;margin-right:.6rem}
.hl__links{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem 1rem;margin-top:1.5rem}
.hl__links .btn{margin-top:0}
.bd--hl{background:var(--coral)!important;color:#fff!important;text-decoration:none}
@media (max-width:900px){.hl{grid-template-columns:1fr;grid-template-areas:"fig" "body" "paper"}.hl__paper{max-width:420px}}
@media (max-width:560px){.hl__points{grid-template-columns:1fr}.hl__team strong{display:block}}
#highlight{scroll-margin-top:80px}

/* v4.5 typography: avoid orphans & awkward breaks */
p,li,dd,dt,figcaption,td,th,summary,blockquote{text-wrap:pretty}
h1,h2,h3,.sub,.hl__lead,.hl__zh,.patent__next,.where,.btn,.tag,.cat{text-wrap:balance}
.nw{white-space:nowrap}
th{white-space:nowrap}
/* CJK: break at punctuation/phrase boundaries, never mid-phrase unless it cannot fit */
:lang(zh-Hant-TW) :is(h1,h2,h3,dt,th,.where,.tag,.cat,.hl__k,.titles__k,.patent__no,.role){word-break:keep-all;overflow-wrap:anywhere}
.en,.en-t,.hl__title{word-break:normal;overflow-wrap:break-word}
/* v4.5 highlight spacing, source block, partner links */
.hl figcaption{margin-top:.75rem;line-height:1.7}
.hl__journal{margin-top:.25rem;line-height:1.6}
.hl__title{line-height:1.5;margin:.6rem 0 .9rem}
.hl__zh{line-height:1.85;margin-bottom:.25rem}
.hl__lead{margin-top:1.25rem;line-height:1.85}
.hl__points{margin-top:1.75rem;gap:1.4rem 1.75rem}
.hl__points li{line-height:1.85;padding-top:.8rem}
.hl__points strong{margin-bottom:.4rem}
.hl__team{margin-top:2rem;padding:1.4rem 1.6rem}
.hl__k{margin-bottom:.75rem}
.hl__team li{line-height:1.8;padding:.7rem 0}
.hl__team strong{margin-right:.75rem}
.hl__src{margin-top:1.75rem;border-top:1px solid var(--line);padding-top:1.25rem}
.hl__cite{font-size:var(--text-sm);color:var(--ink-2);line-height:1.75}
.hl__doi{font-size:var(--text-sm);margin-top:.5rem;line-height:1.7;overflow-wrap:anywhere}
.hl__doi a{color:var(--sea);text-decoration:underline;text-underline-offset:3px}
.hl__doi a:hover{color:var(--coral-d)}
.hl__links{margin-top:1.1rem;gap:.75rem 1rem}
.btn--ghost{background:transparent;color:var(--coral);border:1px solid var(--coral)}
.btn--ghost:hover{background:var(--coral);color:#fff}
.partners a{display:flex;justify-content:space-between;align-items:baseline;gap:1rem;color:var(--ink);text-decoration:none;transition:color .2s}
.partners a:hover{color:var(--coral-d)}
.partners a:hover .ext{transform:translate(2px,-2px)}
.partners .ext{color:var(--coral);font-size:.9em;flex:none;transition:transform .2s}
@media (max-width:560px){.hl__team strong{margin-bottom:.2rem}}
.essay .ti a,.pubs .ti a{color:inherit;text-decoration:underline;text-decoration-color:rgba(180,81,60,.35);text-underline-offset:4px}
.essay .ti a:hover,.pubs .ti a:hover{color:var(--coral-d);text-decoration-color:currentColor}
.essay .doi,.pubs .doi{color:var(--sea);text-decoration:underline;text-underline-offset:3px}
.partners a{text-wrap:balance}
.ka{word-break:keep-all;overflow-wrap:anywhere}
/* v4.7 source links */
.patent-table td.mono a,.pd a,.patent__no a,.more-link,.talks a{color:var(--sea);text-decoration:underline;text-decoration-color:rgba(16,38,61,.3);text-underline-offset:3px}
.patent-table td.mono a:hover,.pd a:hover,.patent__no a:hover,.more-link:hover,.talks a:hover{color:var(--coral-d);text-decoration-color:currentColor}
.patent-table td.mono small{font-size:.78em;color:var(--ink-2)}
.patent-table .ext,.more-link .ext,.patent__no .ext{margin-left:.25em;color:var(--coral);font-size:.85em}
.more-link{white-space:nowrap;font-size:.92em}
.patent__no a{color:inherit}

/* 歷年研究計畫 */
.proj-h2{font-family:var(--font-display);font-size:var(--text-xl);margin:.2rem 0 1.5rem;display:flex;flex-wrap:wrap;align-items:baseline;gap:.3rem 1rem}
.proj-count{font-family:var(--font-body);font-size:var(--text-sm);color:var(--muted);font-weight:400}
.proj-count b{color:var(--coral);font-weight:600}
.proj-note{color:var(--muted);font-size:var(--text-sm);max-width:60rem;margin:-.5rem 0 1.5rem}
.proj-note a{color:var(--coral);text-decoration:underline;text-underline-offset:3px}
.pfilters{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:2rem}
.pfilters button{background:none;border:1px solid var(--line);border-radius:999px;padding:.4rem 1rem;font-size:var(--text-sm);color:var(--ink-2);display:inline-flex;gap:.45rem;align-items:center}
.pfilters button .n{font-size:var(--text-xs);color:var(--muted)}
.pfilters button.on{background:var(--ink);border-color:var(--ink);color:var(--paper)}
.pfilters button.on .n{color:var(--paper);opacity:.75}
.hyear{display:grid;grid-template-columns:9rem 1fr;gap:1.5rem;border-top:1px solid var(--ink);padding:1.2rem 0}
.hyear h3{display:flex;flex-direction:column;gap:.2rem;font-weight:400}
.hyear h3 .en{font-family:var(--font-display);font-size:2rem;line-height:1;color:var(--ink)}
.hyear h3 small{font-size:var(--text-xs);color:var(--muted);letter-spacing:.04em}
.hyear ul{list-style:none;margin:0;padding:0}
.hyear li{padding:.75rem 0;border-bottom:1px solid var(--line)}
.hyear li:last-child{border-bottom:0}
.hyear .pt{font-weight:500;color:var(--ink);overflow-wrap:anywhere}
.hyear .pd{margin-top:.35rem;display:flex;flex-wrap:wrap;gap:.4rem}
@media (max-width:640px){.hyear{grid-template-columns:1fr;gap:.4rem}.hyear h3{flex-direction:row;align-items:baseline;gap:.7rem}.hyear h3 .en{font-size:1.6rem}}
.proj-band{background:var(--paper-2);border-top:1px solid var(--line)}
.proj-hist .bd{display:inline-block;font-size:var(--text-xs);padding:.1rem .55rem;background:var(--white);border:1px solid var(--line);border-radius:3px;color:var(--ink-2)}
.proj-hist .bd--first{border-color:#f3dcd4}
.hyear li{display:grid;grid-template-columns:2.2rem 1fr;align-items:baseline}.hyear .pno{color:var(--coral);font-variant-numeric:tabular-nums}
/* OSA 研究小區 */
.nav__sub a.nav__child{padding-left:2rem!important;font-size:.92em;position:relative}
.nav__sub a.nav__child::before{content:"└";position:absolute;left:.9rem;color:var(--muted);font-size:.8em;top:50%;transform:translateY(-55%)}

.osa-teaser{padding-top:0}
.osa-teaser__card{display:grid;grid-template-columns:1.4fr 1fr;gap:2rem;align-items:center;border:1px solid var(--line);border-top:3px solid var(--coral);background:var(--white);padding:2rem;border-radius:6px;color:inherit;text-decoration:none;transition:box-shadow .2s}
.osa-teaser__card:hover{box-shadow:0 16px 36px -18px rgba(16,38,61,.35)}
.osa-teaser__card p{color:var(--ink-2);font-size:var(--text-sm);max-width:44rem}
.osa-teaser__card img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:4px}
.osa-teaser__stats{list-style:none;padding:0;margin:1.2rem 0;display:flex;flex-wrap:wrap;gap:1.5rem 2.5rem}
.osa-teaser__stats li{display:flex;flex-direction:column}
.osa-teaser__stats b{font-family:var(--font-display);font-size:1.6rem;color:var(--ink);font-weight:500;white-space:nowrap}
.osa-teaser__stats span{font-size:var(--text-xs);color:var(--muted)}
.osa-teaser__go{color:var(--coral);font-weight:500}
@media (max-width:760px){.osa-teaser__card{grid-template-columns:1fr;padding:1.4rem}.osa-teaser__card img{order:-1}}
.page-head .eyebrow a{color:inherit;text-decoration:underline;text-underline-offset:3px}
.osa-intro{display:grid;grid-template-columns:1.3fr 1fr;gap:3rem}
.osa-intro p{color:var(--ink-2);margin-bottom:1rem;max-width:44rem}
.osa-terms{margin:0;border-top:1px solid var(--ink)}
.osa-terms div{padding:.9rem 0;border-bottom:1px solid var(--line)}
.osa-terms dt{font-family:var(--font-display);color:var(--coral);font-size:1.15rem}
.osa-terms dd{margin:.2rem 0 0;font-size:var(--text-sm);color:var(--ink-2)}
@media (max-width:860px){.osa-intro{grid-template-columns:1fr;gap:1.5rem}}
.osa-line{list-style:none;margin:0;padding:0;border-top:1px solid var(--ink)}
.osa-line>li{display:grid;grid-template-columns:5rem 1fr;gap:1.5rem;padding:1.8rem 0;border-bottom:1px solid var(--line)}
.osa-line__no{font-family:var(--font-display);font-size:2.6rem;line-height:1;color:var(--coral)}
.osa-line h3{font-size:var(--text-lg);font-family:var(--font-display);margin:.5rem 0 .3rem;color:var(--ink)}
.osa-line .en-t{font-family:var(--font-display);font-style:italic;color:var(--muted);margin-bottom:.7rem}
.osa-line p{color:var(--ink-2);font-size:var(--text-sm);max-width:52rem}
.osa-line__meta{display:flex;flex-wrap:wrap;gap:.4rem 1rem;align-items:center;font-size:var(--text-xs)!important;color:var(--muted)!important}
.osa-line__meta span:not(.status){white-space:nowrap}
.osa-tags{display:flex;flex-wrap:wrap;gap:.4rem;margin-top:.8rem}
.osa-tags .bd,.osa-links .bd{display:inline-block;font-size:var(--text-xs);padding:.1rem .55rem;background:var(--white);border:1px solid var(--line);border-radius:3px;color:var(--ink-2);white-space:nowrap}
@media (max-width:640px){.osa-line>li{grid-template-columns:1fr;gap:.4rem}.osa-line__no{font-size:2rem}}
.osa-flow{list-style:none;margin:1.5rem 0 0;padding:0;display:grid;grid-template-columns:repeat(5,1fr);gap:1rem;counter-reset:f}
.osa-flow li{border-top:3px solid var(--ink);padding:1rem .2rem 0;position:relative}
.osa-flow li>span{font-family:var(--font-display);font-size:2rem;line-height:1;color:var(--coral)}
.osa-flow h3{font-size:var(--text-base);margin:.4rem 0;color:var(--ink);white-space:nowrap}
.osa-flow p{font-size:var(--text-sm);color:var(--ink-2)}
@media (max-width:1000px){.osa-flow{grid-template-columns:repeat(2,1fr)}}
@media (max-width:560px){.osa-flow{grid-template-columns:1fr}}
.osa-links{list-style:none;margin:0 0 1.5rem;padding:0;border-top:1px solid var(--ink)}
.osa-links li{display:grid;grid-template-columns:7rem 1fr;gap:1rem;align-items:baseline;padding:.9rem 0;border-bottom:1px solid var(--line)}
.osa-links a{color:var(--ink);text-decoration:underline;text-decoration-color:var(--coral);text-underline-offset:3px}
@media (max-width:560px){.osa-links li{grid-template-columns:1fr;gap:.3rem}}
