/* ============================================================================
   Aman Pawar — personal academic site
   Identity: "Sumi & Kin" (ink & gold). Fraunces display + Hanken Grotesk body.
   Bronze-on-paper by day; lantern-gold on true black by night. The living
   ambient background (field / sakura / fireflies) is the one signature.
   Plain CSS + custom properties (no preprocessor) so local == GitHub Pages.
   ========================================================================== */

/* -------- Self-hosted fonts (GDPR-friendly, no external calls) ------------ */
@font-face{font-family:'Fraunces';font-style:normal;font-weight:500;font-display:swap;src:url('/assets/fonts/fraunces-500.woff2') format('woff2');}
@font-face{font-family:'Fraunces';font-style:normal;font-weight:600;font-display:swap;src:url('/assets/fonts/fraunces-600.woff2') format('woff2');}
@font-face{font-family:'Fraunces';font-style:normal;font-weight:700;font-display:swap;src:url('/assets/fonts/fraunces-700.woff2') format('woff2');}
@font-face{font-family:'Fraunces';font-style:italic;font-weight:400;font-display:swap;src:url('/assets/fonts/fraunces-400-italic.woff2') format('woff2');}
@font-face{font-family:'Hanken Grotesk';font-style:normal;font-weight:400;font-display:swap;src:url('/assets/fonts/hanken-400.woff2') format('woff2');}
@font-face{font-family:'Hanken Grotesk';font-style:normal;font-weight:500;font-display:swap;src:url('/assets/fonts/hanken-500.woff2') format('woff2');}
@font-face{font-family:'Hanken Grotesk';font-style:normal;font-weight:600;font-display:swap;src:url('/assets/fonts/hanken-600.woff2') format('woff2');}
@font-face{font-family:'Hanken Grotesk';font-style:normal;font-weight:700;font-display:swap;src:url('/assets/fonts/hanken-700.woff2') format('woff2');}
@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:400;font-display:swap;src:url('/assets/fonts/jetbrains-mono-400.woff2') format('woff2');}
@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:500;font-display:swap;src:url('/assets/fonts/jetbrains-mono-500.woff2') format('woff2');}

/* -------- Design tokens : light (default, "day / washi") ------------------ */
:root{
  --bg:#f4f5f2;
  --bg-soft:#eceee7;
  --surface:#fbfcf9;
  --surface-2:#edefe8;
  --border:#e0e2d9;
  --border-strong:#cccfc3;
  --text:#15171b;
  --text-soft:#474b4c;
  --text-mute:#676b63;
  --accent:#7a5e12;
  --accent-2:#9a7818;
  --accent-ink:#5f4a0e;
  --accent-soft:rgba(150,116,26,.10);
  --accent-line:rgba(150,116,26,.26);
  --on-accent:#ffffff;
  --btn-bg:#181a1e;
  --btn-fg:#f6f7f3;
  --btn-hover:#2c2f34;
  --shadow-sm:0 1px 2px rgba(20,20,14,.05), 0 1px 3px rgba(20,20,14,.05);
  --shadow-md:0 8px 24px -10px rgba(20,20,14,.16);
  --shadow-lg:0 24px 52px -22px rgba(20,20,14,.24);
  --ambient-opacity:.52;

  --font-sans:'Hanken Grotesk',system-ui,-apple-system,'Segoe UI',Roboto,Helvetica,Arial,sans-serif;
  --font-display:'Fraunces','Hanken Grotesk',Georgia,'Times New Roman',serif;
  --font-mono:'JetBrains Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;

  --radius:14px;
  --radius-sm:10px;
  --radius-lg:22px;
  --maxw:1120px;
  --gutter:clamp(1.15rem,4vw,2.5rem);
}

/* -------- Design tokens : dark (opt-in, "night & lantern gold") ----------- */
:root[data-theme="dark"]{
  --bg:#060709;
  --bg-soft:#0b0d11;
  --surface:#0f1217;
  --surface-2:#0a0c10;
  --border:#1c2027;
  --border-strong:#2b313a;
  --text:#eceef2;
  --text-soft:#a9b0bb;
  --text-mute:#767d89;
  --accent:#e3b23c;
  --accent-2:#f0c766;
  --accent-ink:#f2cf7e;
  --accent-soft:rgba(227,178,60,.13);
  --accent-line:rgba(227,178,60,.30);
  --on-accent:#0a0a06;
  --btn-bg:#e3b23c;
  --btn-fg:#0a0a06;
  --btn-hover:#f0c766;
  --shadow-sm:0 1px 2px rgba(0,0,0,.5);
  --shadow-md:0 10px 30px -12px rgba(0,0,0,.7);
  --shadow-lg:0 28px 64px -24px rgba(0,0,0,.85);
  --ambient-opacity:.5;
}

/* -------- Reset ----------------------------------------------------------- */
*,*::before,*::after{box-sizing:border-box;}
*{margin:0;}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;}
@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto;}}
body{
  font-family:var(--font-sans);
  background:var(--bg);
  color:var(--text);
  line-height:1.65;
  font-size:clamp(1rem,.97rem + .15vw,1.08rem);
  -webkit-font-smoothing:antialiased;
  text-rendering:optimizeLegibility;
  overflow-x:hidden;
  min-height:100vh;
}
img,svg,video{display:block;max-width:100%;height:auto;}
a{color:inherit;text-decoration:none;}
button{font:inherit;color:inherit;cursor:pointer;background:none;border:none;}
ul,ol{list-style:none;padding:0;}
:focus-visible{outline:2.5px solid var(--accent);outline-offset:3px;border-radius:4px;}
::selection{background:var(--accent);color:var(--on-accent);}

/* -------- Typographic helpers -------------------------------------------- */
h1,h2,h3,h4{font-family:var(--font-display);font-weight:600;line-height:1.14;letter-spacing:-.008em;color:var(--text);}
.display{font-size:clamp(2.6rem,1.7rem + 3.8vw,4.4rem);font-weight:600;letter-spacing:-.015em;line-height:1.03;}
.kicker{font-family:var(--font-mono);font-size:.72rem;font-weight:500;letter-spacing:.18em;text-transform:uppercase;color:var(--accent);display:inline-flex;align-items:center;gap:.55rem;}
.kicker::before{content:"";width:1.6rem;height:1px;background:var(--accent-line);}
.eyebrow{font-family:var(--font-mono);font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;color:var(--text-mute);}
.lead{font-size:clamp(1.1rem,1.02rem + .5vw,1.32rem);color:var(--text-soft);line-height:1.6;}
.muted{color:var(--text-mute);}
.accent{color:var(--accent);}

/* -------- Layout ---------------------------------------------------------- */
.container{width:100%;max-width:var(--maxw);margin-inline:auto;padding-inline:var(--gutter);}
.container-narrow{max-width:760px;}
.section{padding-block:clamp(3.5rem,2.5rem + 4vw,6rem);}
.section-tight{padding-block:clamp(2.5rem,2rem + 2vw,3.5rem);}
.section-head{max-width:64ch;margin-bottom:2.6rem;}
.section-head h2{font-size:clamp(1.7rem,1.4rem + 1.4vw,2.4rem);margin-top:.7rem;}
.section-head .lead{margin-top:.9rem;}
.divider{height:1px;background:linear-gradient(90deg,transparent,var(--border),transparent);border:0;}
.grid{display:grid;gap:1.15rem;}
.stack{display:flex;flex-direction:column;}
.about-grid{display:grid;grid-template-columns:.85fr 1.15fr;gap:clamp(1.5rem,4vw,3rem);align-items:start;}

/* -------- Skip link ------------------------------------------------------- */
.skip-link{position:fixed;left:-999px;top:.6rem;z-index:200;background:var(--accent);color:var(--on-accent);
  padding:.55rem 1rem;border-radius:8px;font-weight:600;}
.skip-link:focus{left:.6rem;}

/* -------- Ambient background ---------------------------------------------- */
#ambient{position:fixed;inset:0;z-index:-1;pointer-events:none;opacity:var(--ambient-opacity);
  transition:opacity .8s ease;}
.ambient-veil{position:fixed;inset:0;z-index:-1;pointer-events:none;
  background:radial-gradient(60% 55% at 78% -5%,var(--accent-soft),transparent 70%),
             radial-gradient(50% 45% at 8% 8%,var(--accent-soft),transparent 70%);}

/* -------- Header / nav ---------------------------------------------------- */
.site-header{position:sticky;top:0;z-index:100;background:color-mix(in srgb,var(--bg) 82%,transparent);
  backdrop-filter:saturate(160%) blur(12px);-webkit-backdrop-filter:saturate(160%) blur(12px);
  border-bottom:1px solid transparent;transition:border-color .3s,background .3s;}
.site-header.is-stuck{border-bottom-color:var(--border);}
.nav{display:flex;align-items:center;justify-content:space-between;gap:1rem;height:64px;}
.brand{display:inline-flex;align-items:center;gap:.6rem;font-family:var(--font-display);font-weight:700;
  letter-spacing:-.02em;font-size:1.05rem;}
.brand .mark{width:30px;height:30px;border-radius:9px;background:#15171b;border:1px solid var(--accent-line);
  color:var(--accent);display:grid;place-items:center;font-size:.78rem;font-weight:700;box-shadow:var(--shadow-sm);
  font-family:var(--font-mono);letter-spacing:-.02em;}
.nav-links{display:flex;align-items:center;gap:.15rem;}
.nav-links a{font-size:.92rem;font-weight:500;color:var(--text-soft);padding:.5rem .7rem;border-radius:8px;
  transition:color .2s,background .2s;position:relative;}
.nav-links a:hover{color:var(--text);background:var(--accent-soft);}
.nav-links a.active{color:var(--accent);}
.nav-tools{display:flex;align-items:center;gap:.3rem;}
.icon-btn{width:38px;height:38px;border-radius:10px;display:grid;place-items:center;color:var(--text-soft);
  border:1px solid transparent;transition:.2s;}
.icon-btn:hover{color:var(--text);background:var(--surface);border-color:var(--border);}
.icon-btn svg{width:19px;height:19px;}
.nav-toggle{display:none;}
.theme-moon,.theme-sun{display:inline-flex;line-height:0;}
.theme-sun{display:none;}
:root[data-theme="dark"] .theme-sun{display:inline-flex;}
:root[data-theme="dark"] .theme-moon{display:none;}

/* ambient / theme menus */
.menu-wrap{position:relative;}
.menu{position:absolute;right:0;top:calc(100% + 8px);min-width:170px;background:var(--surface);
  border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow-lg);padding:.4rem;z-index:120;}
.menu[hidden]{display:none;}
.menu-title{font-family:var(--font-mono);font-size:.64rem;letter-spacing:.14em;text-transform:uppercase;
  color:var(--text-mute);padding:.35rem .55rem .2rem;}
.menu button{display:flex;width:100%;align-items:center;gap:.55rem;padding:.5rem .55rem;border-radius:8px;
  font-size:.88rem;color:var(--text-soft);text-align:left;}
.menu button:hover{background:var(--accent-soft);color:var(--text);}
.menu button[aria-checked="true"]{color:var(--accent);font-weight:600;}
.menu button .dot{width:7px;height:7px;border-radius:50%;background:currentColor;opacity:.85;}

/* -------- Search ---------------------------------------------------------- */
/* The overlay is a larger sibling of .menu above: same surface, same border,
   same shadow, so search feels like part of the header rather than a bolt-on. */
.search-btn{width:auto;padding:0 .5rem 0 .62rem;gap:.45rem;grid-auto-flow:column;}
.search-kbd{font-family:var(--font-mono);font-size:.66rem;letter-spacing:.02em;color:var(--text-mute);
  border:1px solid var(--border);border-radius:6px;padding:.15rem .34rem;line-height:1.25;}
.search-btn:hover .search-kbd{border-color:var(--border-strong);color:var(--text-soft);}

.search-overlay{position:fixed;inset:0;z-index:150;display:flex;justify-content:center;
  align-items:flex-start;   /* size the panel to its results, not to the screen */
  padding:clamp(3rem,11vh,8rem) var(--gutter) 2rem;
  background:color-mix(in srgb,var(--bg) 68%,transparent);
  backdrop-filter:saturate(150%) blur(10px);-webkit-backdrop-filter:saturate(150%) blur(10px);}
.search-overlay[hidden]{display:none;}
body.search-open{overflow:hidden;}
.search-panel{width:100%;max-width:660px;min-height:0;max-height:100%;display:flex;flex-direction:column;
  background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius-lg);
  box-shadow:var(--shadow-lg);overflow:hidden;}
.js .search-overlay .search-panel{animation:search-in .16s ease-out;}
@keyframes search-in{from{opacity:0;transform:translateY(-10px);}to{opacity:1;transform:none;}}
@media (prefers-reduced-motion:reduce){.js .search-overlay .search-panel{animation:none;}}

.search-field{display:flex;align-items:center;gap:.7rem;padding:.9rem 1rem;border-bottom:1px solid var(--border);}
.search-field .ic{width:19px;height:19px;color:var(--accent);flex:none;}
#search-input{flex:1;min-width:0;background:none;border:0;outline:none;color:var(--text);
  font-family:var(--font-sans);font-size:1.05rem;line-height:1.45;padding:.1rem 0;}
#search-input::placeholder{color:var(--text-mute);}
#search-input:focus-visible{outline:none;}
.search-close{font-family:var(--font-mono);font-size:.68rem;color:var(--text-mute);flex:none;
  border:1px solid var(--border);border-radius:6px;padding:.24rem .42rem;line-height:1.2;transition:.2s;}
.search-close:hover{color:var(--text);border-color:var(--border-strong);}

.search-results{overflow-y:auto;overscroll-behavior:contain;padding:.4rem;flex:1;}
.search-group{font-family:var(--font-mono);font-size:.64rem;letter-spacing:.14em;text-transform:uppercase;
  color:var(--text-mute);padding:.75rem .6rem .3rem;}
.search-hit{display:block;padding:.55rem .6rem;border-radius:9px;border:1px solid transparent;}
.search-hit .t{display:block;font-weight:600;color:var(--text);font-size:.95rem;line-height:1.35;}
.search-hit .s{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;
  color:var(--text-mute);font-size:.84rem;line-height:1.45;margin-top:.15rem;}
.search-hit mark{background:var(--accent-soft);color:var(--accent-ink);border-radius:3px;padding:0 .1em;}
.search-hit[aria-selected="true"]{background:var(--accent-soft);border-color:var(--accent-line);}
.search-hit[aria-selected="true"] .t{color:var(--accent-ink);}
.search-empty{padding:2rem 1.2rem 2.3rem;text-align:center;color:var(--text-soft);font-size:.94rem;}
.search-hint{display:block;color:var(--text-mute);font-size:.86rem;margin-top:.4rem;}

.search-foot{display:flex;flex-wrap:wrap;gap:.9rem;padding:.55rem 1rem;border-top:1px solid var(--border);
  background:var(--surface-2);color:var(--text-mute);font-size:.74rem;}
.search-foot span{display:inline-flex;align-items:center;gap:.3rem;}
.search-foot kbd{font-family:var(--font-mono);font-size:.68rem;line-height:1;color:var(--text-soft);
  background:var(--surface);border:1px solid var(--border-strong);border-bottom-width:2px;
  border-radius:5px;padding:.2rem .32rem;}
.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;
  clip:rect(0 0 0 0);white-space:nowrap;border:0;}

/* -------- Buttons --------------------------------------------------------- */
/* default inline-icon size (buttons/nav override below with fixed px) */
.ic{width:1.1em;height:1.1em;flex:none;display:inline-block;vertical-align:-0.15em;}
.btn{display:inline-flex;align-items:center;gap:.5rem;padding:.7rem 1.15rem;border-radius:10px;font-weight:600;
  font-size:.92rem;border:1px solid transparent;transition:transform .15s,box-shadow .2s,background .2s,border-color .2s;}
.btn svg{width:17px;height:17px;}
.btn-primary{background:var(--btn-bg);color:var(--btn-fg);box-shadow:var(--shadow-sm);}
.btn-primary:hover{background:var(--btn-hover);transform:translateY(-2px);box-shadow:var(--shadow-md);}
.btn-ghost{background:var(--surface);color:var(--text);border-color:var(--border-strong);}
.btn-ghost:hover{border-color:var(--accent);color:var(--accent);transform:translateY(-2px);}
.btn-plain{padding:.4rem 0;color:var(--accent);font-weight:600;}
.btn-plain .arrow{transition:transform .2s;}
.btn-plain:hover .arrow{transform:translateX(4px);}

/* -------- Chips / tags ---------------------------------------------------- */
.chips{display:flex;flex-wrap:wrap;gap:.4rem;}
.chip{font-family:var(--font-mono);font-size:.72rem;letter-spacing:.02em;color:var(--text-soft);
  background:var(--surface-2);border:1px solid var(--border);border-radius:999px;padding:.25rem .6rem;}
.chip-accent{color:var(--accent);background:var(--accent-soft);border-color:var(--accent-line);}

/* -------- Cards ----------------------------------------------------------- */
.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.5rem;
  box-shadow:var(--shadow-sm);transition:transform .2s,box-shadow .25s,border-color .25s;position:relative;}
.card:hover{transform:translateY(-4px);box-shadow:var(--shadow-md);border-color:var(--border-strong);}
.card h3{font-size:1.14rem;letter-spacing:-.01em;}
.card-link::after{content:"";position:absolute;inset:0;border-radius:inherit;}
.card .card-index{font-family:var(--font-mono);font-size:.72rem;color:var(--text-mute);}

/* pillar cards */
.pillars{display:grid;grid-template-columns:repeat(auto-fit,minmax(255px,1fr));gap:1.1rem;}
.pillar{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:1.5rem;
  transition:transform .2s,box-shadow .25s,border-color .25s;}
.pillar:hover{transform:translateY(-4px);box-shadow:var(--shadow-md);border-color:var(--accent-line);}
.pillar .num{font-family:var(--font-mono);font-size:.78rem;color:var(--accent);}
.pillar h3{margin:.7rem 0 .5rem;font-size:1.16rem;}
.pillar p{color:var(--text-soft);font-size:.96rem;}
.pillar .chips{margin-top:.9rem;}

/* project cards grid */
/* auto-fit, not auto-fill: with three featured projects on a wide screen the
   spare track collapses and the row fills, instead of leaving a hole. */
.cards-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:1.15rem;}
.project h3{margin-bottom:.5rem;}
.project p{color:var(--text-soft);font-size:.95rem;margin-bottom:1rem;}
.project .meta{display:flex;align-items:center;justify-content:space-between;gap:.75rem;margin-top:auto;}
.project{display:flex;flex-direction:column;}
.project-links{display:flex;gap:.75rem;align-items:center;}
.project-links a{display:inline-flex;align-items:center;gap:.35rem;font-size:.84rem;font-weight:600;color:var(--accent);}
.project-links a:hover{text-decoration:underline;}

/* -------- Hero ------------------------------------------------------------ */
.hero{padding-block:clamp(3rem,2rem + 6vw,6.5rem) clamp(2.5rem,2rem + 3vw,4.5rem);position:relative;}
.hero-grid{display:grid;grid-template-columns:1.4fr .85fr;gap:clamp(1.5rem,4vw,4rem);align-items:center;}
.hero-eyebrow{display:inline-flex;align-items:center;gap:.6rem;font-family:var(--font-mono);font-size:.78rem;
  letter-spacing:.05em;color:var(--text-soft);background:var(--surface);border:1px solid var(--border);
  padding:.4rem .8rem;border-radius:999px;box-shadow:var(--shadow-sm);}
.hero-eyebrow .pulse{width:8px;height:8px;border-radius:50%;background:#22c55e;box-shadow:0 0 0 0 rgba(34,197,94,.5);
  animation:pulse 2.4s infinite;}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(34,197,94,.5);}70%{box-shadow:0 0 0 8px rgba(34,197,94,0);}100%{box-shadow:0 0 0 0 rgba(34,197,94,0);}}
@media (prefers-reduced-motion:reduce){.hero-eyebrow .pulse{animation:none;}}
.hero h1{margin:1.15rem 0 0;}
.hero .role{font-family:var(--font-display);font-weight:500;font-size:clamp(1.05rem,1rem + .5vw,1.3rem);
  color:var(--accent);margin-top:.7rem;}
.hero .hero-lead{margin-top:1.15rem;max-width:52ch;}
.hero-cta{display:flex;flex-wrap:wrap;gap:.7rem;margin-top:1.7rem;}
.hero-social{display:flex;gap:.5rem;margin-top:1.5rem;}
.hero-portrait{position:relative;}
.hero-portrait .frame{border-radius:var(--radius-lg);overflow:hidden;border:1px solid var(--border);
  box-shadow:var(--shadow-lg);background:var(--surface);aspect-ratio:1/1;}
.hero-portrait img{width:100%;height:100%;object-fit:cover;}
.hero-portrait .badge{position:absolute;bottom:-14px;left:-14px;background:var(--surface);border:1px solid var(--border);
  border-radius:12px;padding:.6rem .85rem;box-shadow:var(--shadow-md);display:flex;align-items:center;gap:.55rem;
  font-size:.8rem;font-weight:600;}
.hero-portrait .badge img{width:26px;height:26px;object-fit:contain;border-radius:6px;}

/* -------- Highlights strip ------------------------------------------------ */
.highlights{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:1px;background:var(--border);
  border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;}
.highlight-item{background:var(--surface);padding:1.3rem 1.4rem;}
.highlight-item .n{font-family:var(--font-display);font-weight:700;font-size:1.7rem;color:var(--accent);letter-spacing:-.03em;}
.highlight-item .l{font-size:.86rem;color:var(--text-soft);margin-top:.25rem;}

/* -------- Affiliations logo row ------------------------------------------ */
.affil{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:.9rem;}
.affil a{display:inline-flex;align-items:center;background:#ffffff;border:1px solid var(--border);
  border-radius:12px;padding:9px 15px;box-shadow:var(--shadow-sm);
  transition:transform .25s,box-shadow .25s,border-color .25s;}
.affil a:hover{transform:translateY(-2px);box-shadow:var(--shadow-md);border-color:var(--accent-line);}
.affil img{height:30px;width:auto;object-fit:contain;filter:grayscale(1);opacity:.78;
  transition:filter .3s,opacity .3s;}
.affil a:hover img{filter:grayscale(0);opacity:1;}
:root[data-theme="dark"] .affil a{background:#f5f7f4;border-color:transparent;}

/* -------- Page header ----------------------------------------------------- */
.page-head{padding-block:clamp(2.6rem,2rem + 4vw,4.5rem) 1.5rem;}
.page-head h1{font-size:clamp(2rem,1.6rem + 2vw,3rem);margin-top:.7rem;}
.page-head .lead{margin-top:1rem;max-width:60ch;}

/* -------- News ------------------------------------------------------------ */
.news-list{display:flex;flex-direction:column;gap:1.1rem;}
.news-item{display:grid;grid-template-columns:150px 1fr;gap:1.4rem;background:var(--surface);
  border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;box-shadow:var(--shadow-sm);
  transition:border-color .25s,box-shadow .25s,transform .2s;}
.news-item:hover{border-color:var(--border-strong);box-shadow:var(--shadow-md);transform:translateY(-3px);}
.news-thumb{background:var(--surface-2);position:relative;min-height:118px;}
.news-thumb img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;}
.news-thumb.placeholder{display:grid;place-items:center;
  background:radial-gradient(circle at 30% 30%,var(--accent-soft),transparent 70%),var(--surface-2);color:var(--accent);}
.news-thumb.placeholder svg{width:34px;height:34px;opacity:.55;}
.news-body{padding:1.15rem 1.3rem 1.15rem 0;}
.news-date{font-family:var(--font-mono);font-size:.74rem;color:var(--text-mute);letter-spacing:.03em;}
.news-badge{font-family:var(--font-mono);font-size:.66rem;letter-spacing:.08em;text-transform:uppercase;
  color:var(--accent);background:var(--accent-soft);border:1px solid var(--accent-line);border-radius:999px;
  padding:.1rem .5rem;margin-left:.5rem;}
.news-body h3{font-size:1.08rem;margin:.4rem 0 .35rem;}
.news-body p{color:var(--text-soft);font-size:.94rem;}

/* -------- Publications ---------------------------------------------------- */
.pub-list{display:flex;flex-direction:column;gap:1rem;}
.pub{display:grid;grid-template-columns:auto 1fr;gap:1.1rem;padding:1.3rem 1.4rem;background:var(--surface);
  border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-sm);
  transition:border-color .25s,box-shadow .25s;}
.pub:hover{border-color:var(--border-strong);box-shadow:var(--shadow-md);}
.pub-year{font-family:var(--font-mono);font-size:.82rem;font-weight:500;color:var(--accent);padding-top:.15rem;}
.pub-title{font-weight:600;color:var(--text);line-height:1.4;}
.pub-authors{color:var(--text-soft);font-size:.92rem;margin-top:.3rem;}
.pub-authors b{color:var(--text);}
.pub-venue{color:var(--text-mute);font-size:.9rem;font-style:italic;margin-top:.2rem;}
.pub-links{display:flex;gap:.9rem;margin-top:.55rem;flex-wrap:wrap;}
.pub-links a{font-size:.8rem;font-weight:600;color:var(--accent);display:inline-flex;align-items:center;gap:.3rem;}
.pub-links a:hover{text-decoration:underline;}
.tag-granted{color:#16a34a;background:rgba(22,163,74,.1);border:1px solid rgba(22,163,74,.28);
  border-radius:999px;padding:.05rem .5rem;font-family:var(--font-mono);font-size:.66rem;text-transform:uppercase;letter-spacing:.08em;}
.tag-filed{color:var(--text-mute);background:var(--surface-2);border:1px solid var(--border);
  border-radius:999px;padding:.05rem .5rem;font-family:var(--font-mono);font-size:.66rem;text-transform:uppercase;letter-spacing:.08em;}

/* -------- Timeline (education / experience) ------------------------------- */
.timeline{display:flex;flex-direction:column;gap:.2rem;}
.tl-item{display:grid;grid-template-columns:54px 1fr;gap:1.1rem;padding:1.15rem 0;border-bottom:1px solid var(--border);}
.tl-item:last-child{border-bottom:0;}
.tl-logo{width:54px;height:54px;border-radius:12px;background:var(--surface);border:1px solid var(--border);
  display:grid;place-items:center;overflow:hidden;padding:6px;}
.tl-logo img{max-width:100%;max-height:100%;object-fit:contain;}
.tl-head{display:flex;flex-wrap:wrap;justify-content:space-between;gap:.4rem;align-items:baseline;}
.tl-role{font-weight:600;color:var(--text);}
.tl-place{color:var(--accent);font-size:.94rem;font-weight:500;}
.tl-date{font-family:var(--font-mono);font-size:.76rem;color:var(--text-mute);white-space:nowrap;}
.tl-desc{color:var(--text-soft);font-size:.93rem;margin-top:.4rem;}

/* -------- Courses (Notes index + course page) ---------------------------- */
.course-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:1.15rem;}
.course-card{display:flex;flex-direction:column;gap:.7rem;}
.course-card .top{display:flex;align-items:center;gap:.8rem;}
.course-card .top img{width:44px;height:44px;object-fit:contain;border-radius:8px;background:var(--surface-2);padding:5px;border:1px solid var(--border);}
.course-hero{display:grid;grid-template-columns:1fr;gap:1.4rem;}
.course-banner{border-radius:var(--radius-lg);overflow:hidden;border:1px solid var(--border);box-shadow:var(--shadow-md);max-height:340px;}
.course-banner img{width:100%;height:100%;object-fit:cover;}
.schedule{display:flex;flex-direction:column;gap:.55rem;margin-top:1.5rem;}
.sch-row{display:grid;grid-template-columns:120px 1fr;gap:1rem;padding:.85rem 1.1rem;background:var(--surface);
  border:1px solid var(--border);border-radius:var(--radius-sm);align-items:baseline;transition:border-color .2s,transform .15s;}
.sch-row:hover{border-color:var(--accent-line);transform:translateX(3px);}
.sch-day{font-family:var(--font-mono);font-size:.78rem;color:var(--accent);font-weight:500;}
.sch-topic{color:var(--text);font-weight:500;}
.sch-topic a{color:var(--accent);}
.sch-topic a:hover{text-decoration:underline;}
.sch-sub{color:var(--text-soft);font-size:.9rem;font-weight:400;display:block;margin-top:.2rem;}
.lecture-nav{display:flex;justify-content:space-between;gap:1rem;margin-top:2.5rem;padding-top:1.5rem;border-top:1px solid var(--border);}

/* -------- Prose (blog + lecture content) --------------------------------- */
.prose{max-width:70ch;color:var(--text);font-size:1.05rem;line-height:1.75;}
.prose>*+*{margin-top:1.15rem;}
.prose h1{font-size:1.7rem;margin-top:2.6rem;margin-bottom:.2rem;}
.prose h2{font-size:1.6rem;margin-top:2.6rem;margin-bottom:.2rem;padding-top:.4rem;}
.prose h3{font-size:1.28rem;margin-top:2rem;}
.prose h4{font-size:1.08rem;margin-top:1.6rem;font-family:var(--font-display);}
.prose p,.prose li{color:var(--text);}
.prose a{color:var(--accent);text-decoration:underline;text-decoration-color:var(--accent-line);
  text-underline-offset:3px;transition:text-decoration-color .2s;}
.prose a:hover{text-decoration-color:var(--accent);}
.prose strong{font-weight:600;}
.prose ul,.prose ol{padding-left:1.4rem;display:flex;flex-direction:column;gap:.5rem;}
.prose ul>li{list-style:disc;}
.prose ol>li{list-style:decimal;}
.prose ul>li::marker,.prose ol>li::marker{color:var(--accent);}
.prose blockquote{border-left:3px solid var(--accent);background:var(--accent-soft);border-radius:0 10px 10px 0;
  padding:.9rem 1.2rem;color:var(--text-soft);font-style:italic;}
.prose blockquote p{color:var(--text-soft);}
.prose img{border-radius:12px;border:1px solid var(--border);box-shadow:var(--shadow-sm);margin-inline:auto;}
.prose figure{margin-block:1.8rem;}
.prose figcaption{text-align:center;font-size:.85rem;color:var(--text-mute);margin-top:.6rem;font-family:var(--font-mono);}
.prose hr{margin-block:2.5rem;height:1px;background:var(--border);border:0;}
.prose code{font-family:var(--font-mono);font-size:.86em;background:var(--surface-2);border:1px solid var(--border);
  border-radius:6px;padding:.1rem .4rem;}
.prose pre{background:var(--surface-2);border:1px solid var(--border);border-radius:12px;padding:1.1rem 1.2rem;
  overflow-x:auto;font-size:.88rem;line-height:1.6;}
.prose pre code{background:none;border:0;padding:0;font-size:.88rem;}
.prose table{width:100%;border-collapse:collapse;font-size:.92rem;display:block;overflow-x:auto;}
.prose th,.prose td{border:1px solid var(--border);padding:.55rem .8rem;text-align:left;}
.prose th{background:var(--surface-2);font-weight:600;}
.katex-display{overflow-x:auto;overflow-y:hidden;padding:.35rem 0;}
.katex-display>.katex{white-space:nowrap;}
.katex-block{margin:1.5rem 0;overflow-x:auto;overflow-y:hidden;}
.prose .katex{font-size:1.04em;}

/* callout for blog */
.callout{background:var(--surface);border:1px solid var(--border);border-left:3px solid var(--accent);
  border-radius:0 12px 12px 0;padding:1.1rem 1.3rem;margin-block:1.8rem;}
.callout .callout-title{font-family:var(--font-mono);font-size:.72rem;letter-spacing:.1em;text-transform:uppercase;
  color:var(--accent);margin-bottom:.4rem;}

/* article header */
.article-head{max-width:70ch;}
.article-meta{display:flex;flex-wrap:wrap;gap:.9rem;align-items:center;color:var(--text-mute);font-size:.86rem;
  font-family:var(--font-mono);margin-top:1rem;}
.article-head h1{font-size:clamp(1.9rem,1.5rem + 2vw,2.9rem);margin-top:.8rem;}

/* -------- Blog list ------------------------------------------------------- */
.post-list{display:flex;flex-direction:column;gap:1.1rem;}
.post-row{display:block;padding:1.5rem;background:var(--surface);border:1px solid var(--border);
  border-radius:var(--radius);box-shadow:var(--shadow-sm);transition:transform .2s,box-shadow .25s,border-color .25s;}
.post-row:hover{transform:translateY(-3px);box-shadow:var(--shadow-md);border-color:var(--border-strong);}
.post-row .date{font-family:var(--font-mono);font-size:.76rem;color:var(--text-mute);}
.post-row h3{font-size:1.3rem;margin:.5rem 0 .5rem;}
.post-row p{color:var(--text-soft);font-size:.96rem;}
.post-row .chips{margin-top:.9rem;}

/* -------- Contact --------------------------------------------------------- */
.contact-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);
  padding:clamp(1.6rem,3vw,2.6rem);box-shadow:var(--shadow-md);position:relative;overflow:hidden;}
.contact-card::before{content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(60% 80% at 100% 0%,var(--accent-soft),transparent 60%);}
.contact-grid{display:grid;grid-template-columns:1.1fr .9fr;gap:2rem;align-items:center;position:relative;}
.email-row{display:flex;flex-wrap:wrap;align-items:center;gap:.6rem;margin-top:1rem;}
.email-pill{font-family:var(--font-mono);font-size:.9rem;background:var(--surface-2);border:1px solid var(--border);
  border-radius:10px;padding:.55rem .8rem;color:var(--text);}
.copy-btn{display:inline-flex;align-items:center;gap:.4rem;font-size:.82rem;font-weight:600;color:var(--accent);
  border:1px solid var(--accent-line);border-radius:10px;padding:.5rem .7rem;transition:.2s;}
.copy-btn:hover{background:var(--accent-soft);}
.subject-btns{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:1rem;}
.subject-btns a{font-size:.85rem;font-weight:500;color:var(--text-soft);border:1px solid var(--border);
  background:var(--surface-2);border-radius:999px;padding:.4rem .8rem;transition:.2s;}
.subject-btns a:hover{color:var(--accent);border-color:var(--accent);}

/* -------- Footer ---------------------------------------------------------- */
.site-footer{border-top:1px solid var(--border);margin-top:2rem;padding-block:2.6rem;background:var(--surface-2);}
.footer-grid{display:grid;grid-template-columns:1.5fr 1fr 1fr;gap:2rem;}
.footer-brand p{color:var(--text-soft);font-size:.92rem;margin-top:.7rem;max-width:34ch;}
.footer-col h4{font-family:var(--font-mono);font-size:.72rem;letter-spacing:.12em;text-transform:uppercase;
  color:var(--text-mute);margin-bottom:.8rem;font-weight:500;}
.footer-col a{display:block;color:var(--text-soft);font-size:.92rem;padding:.2rem 0;transition:color .2s;}
.footer-col a:hover{color:var(--accent);}
.footer-bottom{display:flex;flex-wrap:wrap;justify-content:space-between;gap:1rem;align-items:center;
  margin-top:2.2rem;padding-top:1.5rem;border-top:1px solid var(--border);color:var(--text-mute);font-size:.82rem;}
.footer-social{display:flex;gap:.4rem;}
.social-btn{width:36px;height:36px;border-radius:9px;display:grid;place-items:center;color:var(--text-soft);
  border:1px solid var(--border);background:var(--surface);transition:.2s;}
.social-btn:hover{color:var(--accent);border-color:var(--accent);transform:translateY(-2px);}
.social-btn svg{width:18px;height:18px;}

/* -------- Reveal on scroll ------------------------------------------------ */
.reveal{transition:opacity .7s cubic-bezier(.2,.7,.2,1),transform .7s cubic-bezier(.2,.7,.2,1);}
.js .reveal{opacity:0;transform:translateY(18px);}
.reveal.in{opacity:1;transform:none;}
@media (prefers-reduced-motion:reduce){.js .reveal{opacity:1 !important;transform:none !important;transition:none;}}

/* -------- Utilities ------------------------------------------------------- */
.mt-1{margin-top:.5rem;}.mt-2{margin-top:1rem;}.mt-3{margin-top:1.5rem;}.mt-4{margin-top:2rem;}
.mb-2{margin-bottom:1rem;}
.text-center{text-align:center;}
.flex-between{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap;}
.badge-note{display:inline-flex;align-items:center;gap:.4rem;font-size:.82rem;color:var(--text-soft);
  background:var(--surface);border:1px solid var(--border);border-radius:999px;padding:.3rem .7rem;}

/* -------- Syntax highlighting (Rouge) — light ---------------------------- */
.highlight{background:transparent;}
.highlight .c,.highlight .cm,.highlight .c1,.highlight .cs{color:#8a94a6;font-style:italic;}
.highlight .k,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr{color:#7c3aed;}
.highlight .kc,.highlight .kt{color:#0e7490;}
.highlight .s,.highlight .s1,.highlight .s2,.highlight .sb,.highlight .sd,.highlight .se,.highlight .sh,.highlight .sr,.highlight .ss{color:#16a34a;}
.highlight .m,.highlight .mi,.highlight .mf,.highlight .mh,.highlight .il{color:#d97706;}
.highlight .nb,.highlight .bp{color:#0e7490;}
.highlight .nf,.highlight .fm{color:#2563eb;}
.highlight .nc,.highlight .nn{color:#c026d3;}
.highlight .nv,.highlight .vc,.highlight .vg,.highlight .vi{color:#0f172a;}
.highlight .o,.highlight .ow,.highlight .p{color:#64748b;}
.highlight .nd{color:#db2777;}
.highlight .err{color:#dc2626;}
.highlight .gd{color:#dc2626;}.highlight .gi{color:#16a34a;}

/* -------- Syntax highlighting (Rouge) — dark ----------------------------- */
:root[data-theme="dark"] .highlight .c,:root[data-theme="dark"] .highlight .cm,:root[data-theme="dark"] .highlight .c1,:root[data-theme="dark"] .highlight .cs{color:#6b7690;}
:root[data-theme="dark"] .highlight .k,:root[data-theme="dark"] .highlight .kd,:root[data-theme="dark"] .highlight .kn,:root[data-theme="dark"] .highlight .kp,:root[data-theme="dark"] .highlight .kr{color:#c4b5fd;}
:root[data-theme="dark"] .highlight .kc,:root[data-theme="dark"] .highlight .kt{color:#67e8f9;}
:root[data-theme="dark"] .highlight .s,:root[data-theme="dark"] .highlight .s1,:root[data-theme="dark"] .highlight .s2,:root[data-theme="dark"] .highlight .sb,:root[data-theme="dark"] .highlight .sd,:root[data-theme="dark"] .highlight .se,:root[data-theme="dark"] .highlight .sh,:root[data-theme="dark"] .highlight .sr,:root[data-theme="dark"] .highlight .ss{color:#86efac;}
:root[data-theme="dark"] .highlight .m,:root[data-theme="dark"] .highlight .mi,:root[data-theme="dark"] .highlight .mf,:root[data-theme="dark"] .highlight .mh,:root[data-theme="dark"] .highlight .il{color:#fbbf24;}
:root[data-theme="dark"] .highlight .nb,:root[data-theme="dark"] .highlight .bp{color:#67e8f9;}
:root[data-theme="dark"] .highlight .nf,:root[data-theme="dark"] .highlight .fm{color:#93c5fd;}
:root[data-theme="dark"] .highlight .nc,:root[data-theme="dark"] .highlight .nn{color:#f0abfc;}
:root[data-theme="dark"] .highlight .nv,:root[data-theme="dark"] .highlight .vc,:root[data-theme="dark"] .highlight .vg,:root[data-theme="dark"] .highlight .vi{color:#e9edf8;}
:root[data-theme="dark"] .highlight .o,:root[data-theme="dark"] .highlight .ow,:root[data-theme="dark"] .highlight .p{color:#94a3b8;}
:root[data-theme="dark"] .highlight .nd{color:#f9a8d4;}

/* -------- Responsive ------------------------------------------------------ */
/* Large displays. The 1120px measure is right for a laptop but leaves a wide
   monitor mostly empty, and strands orphan cards. Step the measure up twice:
   at 1500px the four featured projects close into one row, at 1800px the five
   research threads do too. Text blocks get a reading cap so lines that are no
   longer bounded by the container do not run past a comfortable length. */
@media (min-width:1500px){
  :root{--maxw:1360px;}
  .about-grid>div+div{max-width:66ch;}
  .news-body p,.tl-desc,.pillar p{max-width:84ch;}
  .pub-title,.pub-authors,.pub-venue{max-width:90ch;}
  .highlight-item{padding:1.45rem 1.6rem;}
}
@media (min-width:1800px){
  :root{--maxw:1440px;}
  .pillars{grid-template-columns:repeat(auto-fill,minmax(245px,1fr));}
}

/* The nav runs out of room for the shortcut hint before it runs out of room
   for the button itself. */
@media (max-width:1080px){
  .search-kbd{display:none;}
  .search-btn{width:38px;padding:0;}
}

@media (max-width:900px){
  .hero-grid{grid-template-columns:1fr;}
  .hero-portrait{max-width:340px;margin-top:1rem;order:-1;}
  .about-grid{grid-template-columns:1fr;}
  .contact-grid{grid-template-columns:1fr;}
  .footer-grid{grid-template-columns:1fr 1fr;}
  .footer-brand{grid-column:1 / -1;}
}
@media (max-width:720px){
  .nav-links{position:fixed;inset:64px 0 auto 0;flex-direction:column;align-items:stretch;gap:.1rem;
    background:var(--bg);border-bottom:1px solid var(--border);padding:.8rem var(--gutter) 1.2rem;
    transform:translateY(-120%);transition:transform .3s ease;box-shadow:var(--shadow-lg);}
  .nav-links.open{transform:translateY(0);}
  .nav-links a{padding:.75rem .6rem;font-size:1rem;}
  .nav-toggle{display:grid;}
  .news-item{grid-template-columns:1fr;}
  .news-thumb{min-height:150px;}
  .news-body{padding:1.15rem 1.3rem;}
  .pub{grid-template-columns:1fr;gap:.4rem;}
  .sch-row{grid-template-columns:1fr;gap:.3rem;}
  .footer-grid{grid-template-columns:1fr;}
  .tl-item{grid-template-columns:42px 1fr;gap:.85rem;}
  .tl-logo{width:42px;height:42px;}
}

/* print */
@media print{.site-header,.site-footer,#ambient,.ambient-veil,.hero-cta,.nav-tools{display:none !important;}}
