/* ============================================================
   CHRISTIE PANG — Personal Website  ·  style.css
   ============================================================
   ┌─ THEME TOKENS ─────────────────────────────────────────┐
   │ Edit ONLY the :root and [data-theme="dark"] blocks to  │
   │ retheme the entire site. Nothing else needs touching.  │
   └────────────────────────────────────────────────────────┘ */

:root {
  /* Brand — light mode: warm brown primary, teal secondary */
  --clr-primary:        #af755b;
  --clr-primary-light:  #c9917a;
  --clr-primary-dark:   #8d5d46;
  --clr-secondary:      #75a69f;
  --clr-secondary-light:#93bdb7;
  --clr-secondary-dark: #5a8882;

  /* Light surfaces */
  --clr-bg:             #faf8f6;
  --clr-bg-alt:         #f3ede8;
  --clr-surface:        #ffffff;
  --clr-surface-2:      #f7f3ef;

  /* Light text */
  --clr-text:           #2a2420;
  --clr-text-muted:     #7a6a60;
  --clr-text-light:     #b0a49e;

  /* Light borders / shadows */
  --clr-border:         #e5ddd7;
  --clr-border-strong:  #cfc4bc;
  --clr-shadow:         rgba(175,117,91,0.09);
  --clr-shadow-md:      rgba(175,117,91,0.17);
  --clr-shadow-lg:      rgba(0,0,0,0.12);

  /* Nav sidebar card */
  --clr-nav-surface:    #e8f4f2;
  --clr-nav-item-hover: rgba(117,166,159,0.16);
  --clr-nav-icon-bg:    rgba(117,166,159,0.14);

  /* Loader */
  --clr-loader-bg:      #faf8f6;
  --clr-loader-page:    #ffffff;
  --clr-loader-line:    #e5ddd7;

  /* Icon filter for dark-on-transparent PNGs */
  --icon-filter:        none;
  --icon-filter-muted:  opacity(0.35);

  /* Typography — change here only */
  --font-heading: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  --font-body:    'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  --font-sketch:  'Caveat', 'Patrick Hand', cursive;

  /* Layout */
  --nav-collapsed:  70px;
  --nav-expanded:   218px;
  --nav-float:      10px;   /* offset from screen edges */
  --content-max:    860px;
  --right-w:        78px;

  /* Motion */
  --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
  --ease-out:    cubic-bezier(0.4, 0, 0.2, 1);
  --dur-fast:    0.14s;
  --dur-base:    0.24s;
  --dur-slow:    0.40s;
  --dur-nav:     0.32s;
}

[data-theme="dark"] {
  /* Dark mode: teal becomes the accent, brown becomes secondary */
  --clr-primary:        #75a69f;
  --clr-primary-light:  #93bdb7;
  --clr-primary-dark:   #5a8882;
  --clr-secondary:      #af755b;
  --clr-secondary-light:#c9917a;
  --clr-secondary-dark: #8d5d46;

  --clr-bg:             #1a1714;
  --clr-bg-alt:         #211d1a;
  --clr-surface:        #252118;
  --clr-surface-2:      #2e2922;

  --clr-text:           #e8ddd5;
  --clr-text-muted:     #9a8c82;
  --clr-text-light:     #6a5e56;

  --clr-border:         #3a342e;
  --clr-border-strong:  #4a433c;
  --clr-shadow:         rgba(0,0,0,0.28);
  --clr-shadow-md:      rgba(0,0,0,0.44);
  --clr-shadow-lg:      rgba(0,0,0,0.60);

  /* Nav sidebar (dark) */
  --clr-nav-surface:    #1e1c19;
  --clr-nav-item-hover: rgba(117,166,159,0.16);
  --clr-nav-icon-bg:    rgba(117,166,159,0.14);

  --clr-loader-bg:      #1a1714;
  --clr-loader-page:    #2e2922;
  --clr-loader-line:    #3a342e;

  --icon-filter:        invert(1) brightness(0.88);
  --icon-filter-muted:  invert(1) brightness(0.88) opacity(0.35);
}

/* ============================================================
   RESET & BASE
   ============================================================ */
*,*::before,*::after { box-sizing: border-box; margin: 0; padding: 0; }
html { font-size: 16px; scroll-behavior: smooth; }
body {
  font-family: var(--font-body);
  background: var(--clr-bg);
  color: var(--clr-text);
  min-height: 100vh;
  line-height: 1.6;
  transition: background var(--dur-base), color var(--dur-base);
  overflow-x: hidden;
}
a { color: var(--clr-primary); text-decoration: none; }
a:hover { text-decoration: underline; }
img { display: block; max-width: 100%; }
button { cursor: pointer; border: none; background: none; font-family: inherit; }

/* Accessibility text-only mode */
body.text-only-mode .hide-in-text-mode { display: none !important; }
body.text-only-mode .show-in-text-mode { display: block !important; }
.show-in-text-mode { display: none; }

/* ============================================================
   PAGE LOADER  (3D book)
   ============================================================ */
.page-loader {
  position: fixed; inset: 0;
  background: var(--clr-loader-bg);
  z-index: 9999;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  gap: 28px;
  opacity: 0; pointer-events: none;
  transition: opacity 0.3s var(--ease-out);
}
.page-loader.active { opacity: 1; pointer-events: all; }

.loader-logo {
  position: absolute;
  top: 50%; left: 50%;
  transform: translate(-50%, -50%);
  width: 110px; height: 110px;
  object-fit: contain;
  z-index: 10;
  animation: logoBounce 1.8s ease-in-out infinite;
}
@keyframes logoBounce {
  0%, 100% { transform: translate(-50%, -50%) translateY(0); }
  50%       { transform: translate(-50%, -50%) translateY(-7px); }
}

.book-scene { perspective: 500px; width: 228px; height: 150px; position: relative; }
.book-body {
  position: absolute; inset: 0;
  display: flex; align-items: center; justify-content: center;
}
.book-left {
  width: 100px; height: 132px;
  background: linear-gradient(135deg, var(--clr-primary) 0%, var(--clr-primary-dark) 100%);
  border-radius: 4px 0 0 4px;
  box-shadow: -3px 3px 12px var(--clr-shadow-md);
  position: relative;
}
.book-left::after {
  content: ''; position: absolute; inset: 10px;
  border: 1px solid rgba(255,255,255,0.22); border-radius: 2px;
}
.book-spine { width: 14px; height: 132px; background: var(--clr-primary-dark); box-shadow: inset -2px 0 6px rgba(0,0,0,0.35); }
.book-right {
  width: 100px; height: 132px;
  background: linear-gradient(135deg, var(--clr-secondary) 0%, var(--clr-secondary-dark) 100%);
  border-radius: 0 4px 4px 0;
  box-shadow: 3px 3px 12px var(--clr-shadow-md);
  position: relative;
}
.book-right::after {
  content: ''; position: absolute; inset: 10px;
  border: 1px solid rgba(255,255,255,0.22); border-radius: 2px;
}
.page-flip-wrap {
  position: absolute; left: calc(50% + 7px); top: 9px;
  width: 100px; height: 132px; transform-origin: left center;
}
.flip-page {
  position: absolute; inset: 0;
  background: var(--clr-loader-page);
  border-radius: 0 4px 4px 0;
  transform-origin: left center; backface-visibility: hidden;
  box-shadow: 2px 0 8px rgba(0,0,0,0.08);
}
.flip-page::before {
  content: ''; position: absolute;
  top: 18px; left: 12px; right: 12px; bottom: 12px;
  background: repeating-linear-gradient(to bottom, transparent 0px, transparent 9px, var(--clr-loader-line) 9px, var(--clr-loader-line) 10px);
}
.flip-page.p1 { animation: flipPage 0.55s 0.30s var(--ease-out) forwards; z-index: 3; }
.flip-page.p2 { animation: flipPage 0.55s 0.85s var(--ease-out) forwards; z-index: 2; }
.flip-page.p3 { animation: flipPage 0.55s 1.40s var(--ease-out) forwards; z-index: 1; }
@keyframes flipPage {
  0%   { transform: rotateY(0deg); }
  60%  { transform: rotateY(-100deg); }
  100% { transform: rotateY(-175deg); }
}
.loader-text {
  font-family: var(--font-sketch);
  font-size: 20px; font-weight: 500;
  letter-spacing: 0.02em; text-align: center;
  color: var(--clr-text-muted); max-width: 320px; line-height: 1.4;
  animation: loaderPulse 1.4s ease-in-out infinite;
}
@keyframes loaderPulse { 0%,100%{opacity:.3} 50%{opacity:1} }

/* ============================================================
   SIDE NAVIGATION  — always-visible floating card (macOS sidebar style)
   ============================================================ */
.side-nav {
  position: fixed;
  left: var(--nav-float); top: var(--nav-float);
  width: var(--nav-collapsed);
  height: auto;
  background: transparent;
  border-radius: 16px;
  box-shadow: none;
  display: flex; flex-direction: column; align-items: flex-start;
  padding: 14px 0 20px;
  z-index: 900;
  transition: width var(--dur-nav) var(--ease-out),
              background var(--dur-nav) var(--ease-out),
              box-shadow var(--dur-nav) var(--ease-out);
  overflow: hidden;
}
.side-nav.expanded {
  width: var(--nav-expanded);
  background: var(--clr-nav-surface);
  box-shadow: 0 4px 30px var(--clr-shadow-lg);
}

/* Toggle button */
.nav-toggle {
  display: flex; align-items: center; justify-content: center;
  width: 40px; height: 40px;
  margin: 0 14px 10px;
  border-radius: 10px; flex-shrink: 0;
  transition: background var(--dur-fast);
  position: relative;
}
.nav-toggle:hover { background: var(--clr-nav-item-hover); }
.nav-toggle .icon-open,
.nav-toggle .icon-close {
  width: 26px; height: 26px;
  object-fit: contain; position: absolute;
  transition: opacity var(--dur-fast), transform var(--dur-fast);
  filter: var(--icon-filter);
}
.nav-toggle .icon-close { opacity: 0; transform: rotate(-90deg); }
.side-nav.expanded .nav-toggle .icon-open  { opacity: 0; transform: rotate(90deg); }
.side-nav.expanded .nav-toggle .icon-close { opacity: 1; transform: rotate(0deg); }

/* Avatar in nav — hidden when collapsed, top-right corner when expanded */
.nav-avatar {
  display: none;
}
.side-nav.expanded .nav-avatar {
  display: block;
  position: absolute;
  top: 14px; right: 14px;
  width: 46px; height: 46px;
  border-radius: 50%; overflow: hidden;
  flex-shrink: 0;
}
.nav-avatar img { width: 100%; height: 100%; object-fit: cover; }

/* Nav link list */
.nav-links {
  list-style: none; width: 100%;
  display: flex; flex-direction: column; gap: 2px;
  padding: 0 8px;
}
.nav-link {
  display: flex; align-items: center; gap: 10px;
  padding: 8px 7px;
  border-radius: 11px;
  color: var(--clr-text-muted); text-decoration: none;
  white-space: nowrap; overflow: hidden; min-width: 0;
  transition: background var(--dur-fast), color var(--dur-fast);
}
.nav-link:hover  { background: var(--clr-nav-item-hover); color: var(--clr-primary); text-decoration: none; }
.nav-link.active { background: var(--clr-nav-item-hover); color: var(--clr-primary); }

/* Icon wrapper — no background, just centering */
.nav-icon-wrap {
  width: 36px; height: 36px; flex-shrink: 0;
  display: flex; align-items: center; justify-content: center;
}
.nav-icon {
  width: 28px; height: 28px;
  object-fit: contain; flex-shrink: 0;
  filter: var(--icon-filter-muted);
  transition: filter var(--dur-fast), transform var(--dur-fast);
}
.nav-link:hover  .nav-icon,
.nav-link.active .nav-icon { filter: var(--icon-filter); transform: scale(1.08); }

/* Label — fades in when expanded */
.nav-label {
  font-family: var(--font-body);
  font-size: 14px; font-weight: 500; letter-spacing: 0.01em;
  opacity: 0; transform: translateX(-6px);
  transition: opacity var(--dur-nav) var(--ease-out),
              transform var(--dur-nav) var(--ease-out);
  pointer-events: none;
}
.side-nav.expanded .nav-label { opacity: 1; transform: translateX(0); }

/* ============================================================
   LAYOUT
   ============================================================ */
.main-content {
  /* nav floats 10px from edge + nav width + 10px gap = nav + 20px */
  margin-left: calc(var(--nav-collapsed) + var(--nav-float) * 2);
  margin-right: var(--right-w);
  min-height: 100vh;
  transition: margin-left var(--dur-nav) var(--ease-out);
}
.side-nav.expanded ~ .main-content {
  margin-left: calc(var(--nav-expanded) + var(--nav-float) * 2);
}

/* ============================================================
   PAGES
   ============================================================ */
.page-section { display: none; min-height: 100vh; animation: pageFadeIn 0.38s var(--ease-out) both; }
.page-section.active { display: block; }
@keyframes pageFadeIn { from{opacity:0;transform:translateY(14px)} to{opacity:1;transform:translateY(0)} }

.section-inner { max-width: var(--content-max); margin: 0 auto; padding: 52px 44px 88px; }

/* Shared: two-column layout (content + right TOC) */
.page-layout-toc {
  display: grid;
  grid-template-columns: 1fr 185px;
  gap: 44px;
  max-width: calc(var(--content-max) + 229px);
  margin: 0 auto;
  padding: 52px 44px 88px;
  align-items: start;
}
.page-main { min-width: 0; }
.page-side-toc { position: sticky; top: 32px; }
.side-toc-nav {
  display: flex; flex-direction: column; gap: 4px;
  padding-left: 14px; border-left: 2px solid var(--clr-border);
}
.side-toc-link {
  font-size: 12px; font-weight: 500;
  color: var(--clr-text-muted); padding: 4px 0;
  transition: color var(--dur-fast);
}
.side-toc-link:hover, .side-toc-link.active { color: var(--clr-secondary); text-decoration: none; }

/* About-page TOC link (reuses same side-toc-nav, same styling) */
.about-toc-link {
  font-size: 12px; font-weight: 500;
  color: var(--clr-text-muted); padding: 4px 0;
  transition: color var(--dur-fast); text-decoration: none;
  display: block;
}
.about-toc-link:hover, .about-toc-link.active { color: var(--clr-primary); text-decoration: none; }

/* About page layout — mirrors page-layout-toc */
.about-layout {
  display: grid; grid-template-columns: 1fr 185px;
  gap: 44px; max-width: calc(var(--content-max) + 229px);
  margin: 0 auto; padding: 52px 44px 88px; align-items: start;
}
.about-main { min-width: 0; }
.about-sidebar { position: sticky; top: 32px; }
.about-toc {
  display: flex; flex-direction: column; gap: 4px;
  padding-left: 14px; border-left: 2px solid var(--clr-border);
}

/* Text-only mode: fix grids when thumbnail/icon columns are hidden */
body.text-only-mode .paper-item  { grid-template-columns: 1fr; }
body.text-only-mode .news-item   { grid-template-columns: 76px 1fr; }

/* Page header */
.page-header { margin-bottom: 36px; }
.page-title {
  font-family: var(--font-heading); font-size: clamp(26px,3.8vw,34px);
  font-weight: 700; letter-spacing: -0.02em; color: var(--clr-text);
  display: flex; align-items: center; gap: 10px; margin-bottom: 12px;
}
.title-logo { width: 44px; height: 44px; object-fit: contain; display: inline-block; vertical-align: middle; flex-shrink: 0; }
.page-subtitle { font-size: 14.5px; line-height: 1.72; color: var(--clr-text-muted); max-width: 620px; }

.section-heading {
  font-family: var(--font-heading); font-size: 18px; font-weight: 600;
  color: var(--clr-text); margin-bottom: 20px;
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
}

/* ============================================================
   HOME — HERO
   ============================================================ */
.home-hero {
  display: grid; grid-template-columns: 1fr 260px;
  gap: 48px; align-items: start; margin-bottom: 60px;
}
.home-greeting {
  font-family: var(--font-heading); font-size: clamp(22px,3.2vw,30px);
  font-weight: 700; letter-spacing: -0.02em;
  margin-bottom: 18px; color: var(--clr-text);
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
}
.home-intro { font-size: 14.5px; line-height: 1.78; color: var(--clr-text-muted); }
.home-intro p + p { margin-top: 12px; }

/* Profile column */
.home-profile { display: flex; flex-direction: column; align-items: flex-start; gap: 12px; }

.profile-stack {
  position: relative; width: 250px; height: 280px;
  cursor: pointer;
}
/* Two photos: default + hover */
.profile-photo {
  position: absolute; inset: 0; width: 100%; height: 100%;
  object-fit: cover; border-radius: 8px;
  box-shadow: 0 4px 24px var(--clr-shadow-md);
  transition: opacity 0.45s var(--ease-out);
}
.profile-photo.ph-default { opacity: 1; }
.profile-photo.ph-hover   { opacity: 0; }
.profile-stack:hover .ph-default { opacity: 0; }
.profile-stack:hover .ph-hover   { opacity: 1; }

/* Links list below photo — Amy Pavel style */
.home-links { display: flex; flex-direction: column; gap: 6px; width: 100%; }
.home-link-row { font-size: 13px; color: var(--clr-text-muted); line-height: 1.5; }
.home-link-label {
  font-size: 10.5px; font-weight: 700; letter-spacing: 0.06em;
  text-transform: uppercase; color: var(--clr-text-light);
  margin-right: 6px;
}
.home-link-row a { color: var(--clr-primary); font-weight: 500; transition: opacity var(--dur-fast); }
.home-link-row a:hover { opacity: 0.72; text-decoration: none; }

/* ============================================================
   HOME — NEWS
   ============================================================ */
.home-news { margin-bottom: 60px; }
/* Slash-separated filter (Latest / All) */
.filter-slash {
  display: inline-flex; align-items: center; gap: 5px;
  vertical-align: middle; margin-left: 4px;
}
.filter-slash-btn {
  font-family: var(--font-sketch); font-size: 15px; font-weight: 500;
  color: var(--clr-text-light); background: none;
  padding: 0; transition: color var(--dur-fast);
}
.filter-slash-btn.active, .filter-slash-btn:hover { color: var(--clr-primary); }
.filter-sep { font-size: 13px; color: var(--clr-border-strong); user-select: none; line-height: 1; }

.news-list { display: flex; flex-direction: column; }
.news-item {
  display: grid; grid-template-columns: 76px 52px 1fr;
  gap: 10px 14px; align-items: start;
  padding: 17px 0; border-bottom: 1px solid var(--clr-border);
}
.news-item:first-child { border-top: 1px solid var(--clr-border); }
.news-date { font-size: 10.5px; font-weight: 700; letter-spacing: 0.05em; color: var(--clr-text-light); padding-top: 3px; text-transform: uppercase; }
.news-icon img { width: 46px; height: 46px; object-fit: contain; filter: var(--icon-filter); margin-top: 1px; }
.news-text { font-size: 13.5px; line-height: 1.67; color: var(--clr-text-muted); }

/* ============================================================
   HOME — RESEARCH HIGHLIGHTS
   ============================================================ */
.filter-tag {
  display: inline-block; font-size: 11px; font-weight: 600;
  color: var(--clr-primary); background: rgba(175,117,91,0.10);
  border-radius: 5px 11px 8px 10px / 10px 6px 12px 7px; padding: 2px 10px; vertical-align: middle;
}
.research-grid { display: grid; grid-template-columns: repeat(auto-fill,minmax(220px,1fr)); gap: 20px; margin-top: 4px; }
.research-card {
  background: var(--clr-surface); border: 1px solid var(--clr-border);
  border-radius: 12px; overflow: hidden;
  transition: box-shadow var(--dur-base), transform var(--dur-base);
  cursor: pointer;
}
.research-card:hover { box-shadow: 0 6px 24px var(--clr-shadow-md); transform: translateY(-3px); }
.card-image-wrap { width: 100%; height: 120px; overflow: hidden; background: var(--clr-bg-alt); }
.card-image-wrap img { width: 100%; height: 100%; object-fit: cover; }
.card-image-placeholder { width:100%;height:100%; background:linear-gradient(135deg,var(--clr-bg-alt) 0%,var(--clr-border) 100%); }
.card-info { padding: 14px 16px 16px; }
.card-info h3 { font-size: 13px; font-weight: 600; line-height: 1.4; margin-bottom: 6px; color: var(--clr-text); }
.card-venue { font-size: 11.5px; color: var(--clr-text-muted); margin-bottom: 8px; line-height: 1.4; }
.card-links { font-size: 12px; }
.card-links a { color: var(--clr-secondary); transition: color var(--dur-fast); }
.card-links a:hover { color: var(--clr-secondary-dark); }

/* ============================================================
   RESEARCH PAGE  — two-column with sticky right TOC
   ============================================================ */
.research-filters { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 36px; }
.filter-chip {
  font-size: 12.5px; font-weight: 500; padding: 5px 15px;
  border-radius: 4px 13px 9px 11px / 10px 6px 13px 7px;
  border: 1px solid var(--clr-border);
  color: var(--clr-text-muted); background: var(--clr-surface);
  transition: all var(--dur-fast);
}
.filter-chip:nth-child(2n) { border-radius: 11px 6px 14px 8px / 7px 13px 5px 10px; }
.filter-chip:nth-child(3n) { border-radius: 8px 15px 6px 12px / 13px 7px 11px 5px; }
.filter-chip:nth-child(4n) { border-radius: 13px 7px 10px 5px / 5px 11px 8px 13px; }
.filter-chip.active,.filter-chip:hover { background:var(--clr-primary);border-color:var(--clr-primary);color:#fff; }

.research-section { margin-bottom: 52px; }
.subsection-title {
  font-family: var(--font-heading); font-size: 20px; font-weight: 600;
  letter-spacing: -0.01em; color: var(--clr-text);
  margin-bottom: 20px; padding-bottom: 10px; border-bottom: 1px solid var(--clr-border);
}
/* Research heading + filter chips on one line */
.subsection-header {
  display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
  border-bottom: 1px solid var(--clr-border);
  padding-bottom: 10px; margin-bottom: 20px;
}
.subsection-header .subsection-title {
  margin-bottom: 0; padding-bottom: 0; border-bottom: none; flex: 1;
}
.subsection-header .research-filters { margin-bottom: 0; }

/* About Me page header with right-aligned photo */
.about-page-header {
  display: flex; align-items: flex-start; gap: 22px;
  margin-bottom: 36px;
}
.about-page-header > div { flex: 1; min-width: 0; }
.about-profile-photo {
  width: 100px; border-radius: 12px; object-fit: cover;
  flex-shrink: 0; aspect-ratio: 4/5;
  box-shadow: 0 4px 16px var(--clr-shadow-md);
  order: 2;
}
.paper-list { display: flex; flex-direction: column; }
.paper-item {
  display: grid; grid-template-columns: 96px 1fr;
  gap: 18px; padding: 18px 0; border-bottom: 1px solid var(--clr-border); align-items: start;
}
/* border-top on first paper-item removed — heading border-bottom is the separator */
.paper-thumbnail { width:96px;height:68px;border-radius:8px;background:var(--clr-bg-alt);border:1px solid var(--clr-border);flex-shrink:0;overflow:hidden; }
.paper-thumbnail img { width:100%;height:100%;object-fit:cover; }
.paper-title { font-size:14px;font-weight:600;color:var(--clr-text);margin-bottom:4px;line-height:1.4; }
.paper-authors { font-size:12.5px;color:var(--clr-text-muted);margin-bottom:2px; }
.paper-venue { font-size:12px;color:var(--clr-secondary-dark);margin-bottom:6px;font-style:italic; }
.paper-link { font-size:12px;font-weight:600;color:var(--clr-primary);margin-right:8px;transition:color var(--dur-fast); }
.paper-link:hover { color:var(--clr-primary-dark);text-decoration:none; }

/* ============================================================
   ABOUT PAGE
   ============================================================ */
.about-block { margin-bottom: 48px; }
.about-heading {
  font-family: var(--font-heading); font-size: 18px; font-weight: 600;
  letter-spacing: -0.01em; color: var(--clr-text);
  margin-bottom: 18px; padding-bottom: 10px; border-bottom: 1px solid var(--clr-border);
  display: flex; align-items: center; gap: 10px;
}
.heading-icon { width: 28px; height: 28px; object-fit: contain; filter: var(--icon-filter); flex-shrink: 0; }
.about-entries { display: flex; flex-direction: column; gap: 22px; }
.about-entry { display: flex; justify-content: space-between; gap: 16px; align-items: start; }
.entry-institution { font-size:14px;font-weight:600;color:var(--clr-text);margin-bottom:3px; }
.entry-degree { font-size:13px;color:var(--clr-text-muted);margin-bottom:2px; }
.entry-note { font-size:12px;color:var(--clr-text-light); }
.entry-right { text-align:right;flex-shrink:0; }
.entry-date { font-size:13px;color:var(--clr-text-muted);white-space:nowrap; }
.entry-location { font-size:12px;color:var(--clr-text-light); }
.award-list,.teaching-list,.press-list { display:flex;flex-direction:column;gap:0; }
.award-item,.teaching-item,.press-item {
  padding: 13px 0;
  border-bottom: 1px solid var(--clr-border);
}
/* border-top on first items removed — heading border-bottom is the separator */
.award-name,.teaching-course,.press-title { font-size:13.5px;font-weight:500;color:var(--clr-text);margin-bottom:2px; }
.award-org,.teaching-role,.press-outlet { font-size:12px;color:var(--clr-text-muted); }
.press-date,.teaching-date { font-size:11px;color:var(--clr-text-light);margin-top:2px; }
.press-link-wrap { text-decoration:none;color:inherit;display:block; }
.press-link-wrap:hover .press-title { color:var(--clr-primary); }
.press-wire-outlets { display:flex;flex-wrap:wrap;gap:5px;margin-top:8px; }
.press-wire-link { font-size:11px;padding:2px 9px;border-radius:4px 10px 7px 12px / 9px 5px 11px 6px;border:1px solid var(--clr-border);color:var(--clr-text-muted);text-decoration:none;transition:background 0.15s,color 0.15s,border-color 0.15s; }
.press-wire-link:nth-child(2n) { border-radius: 10px 5px 12px 7px / 6px 12px 4px 10px; }
.press-wire-link:nth-child(3n) { border-radius: 7px 13px 5px 9px / 11px 6px 13px 5px; }
.press-wire-link:hover { background:var(--clr-primary);color:#fff;border-color:var(--clr-primary); }
.funding-list { display:flex;flex-direction:column;gap:0; }
.funding-item { display:flex;gap:16px;justify-content:space-between;align-items:start;padding:13px 0;border-bottom:1px solid var(--clr-border); }
/* border-top on first funding-item removed */
.funding-name { font-size:13.5px;font-weight:500;color:var(--clr-text);margin-bottom:2px; }
.funding-source { font-size:12px;color:var(--clr-text-muted); }
.funding-right { text-align:right;flex-shrink:0; }
.funding-amount { font-size:13px;font-weight:600;color:var(--clr-secondary-dark); }
.funding-date { font-size:11px;color:var(--clr-text-light); }
.service-header {
  display: flex; align-items: center; flex-wrap: wrap; gap: 14px;
  border-bottom: 1px solid var(--clr-border);
  padding-bottom: 12px; margin-bottom: 20px;
}
.service-header .about-heading {
  border-bottom: none; padding-bottom: 0; margin-bottom: 0; flex-shrink: 0;
}
.service-filters { display:flex;flex-wrap:wrap;gap:8px;margin-bottom:0; }
.service-list { display:flex;flex-direction:column;gap:0; }
.service-item { padding:11px 0;border-bottom:1px solid var(--clr-border); }
.service-item-main { display:flex;justify-content:space-between;gap:12px;align-items:start; }
.service-role { font-size:13px;font-weight:500;color:var(--clr-text);margin-bottom:2px; }
.service-detail { font-size:12px;color:var(--clr-text-muted); }
.service-scope { font-size:11px;color:var(--clr-text-light);white-space:nowrap;text-align:right; }

/* Paper item with no thumbnail */
.paper-item.no-thumb { grid-template-columns: 1fr; }

/* Teaching section quote (handwritten) */
.teaching-quote {
  font-family: var(--font-sketch);
  font-size: 17px; font-weight: 500;
  color: var(--clr-text-muted);
  line-height: 1.5; margin-bottom: 16px;
  font-style: italic;
}

/* AFP wire story collapsible */
.press-wire-details { margin-top: 8px; }
.press-wire-summary {
  font-size: 12.5px; font-weight: 500;
  color: var(--clr-primary);
  cursor: pointer; list-style: none;
  display: inline-flex; align-items: center; gap: 5px;
  user-select: none;
  transition: opacity var(--dur-fast);
}
.press-wire-summary::-webkit-details-marker { display: none; }
.press-wire-summary::marker { display: none; }
.press-wire-summary::after { content: ' ▶'; font-size: 9px; }
.press-wire-details[open] .press-wire-summary::after { content: ' ▼'; }
.press-wire-summary:hover { opacity: 0.75; }

/* ============================================================
   BLOG PAGE — full article layout
   ============================================================ */
.blog-list { display: flex; flex-direction: column; max-width: 680px; }
.blog-post { padding: 36px 0; border-bottom: 1px solid var(--clr-border); }
.blog-post:last-child { border-bottom: none; }
.blog-post-header { margin-bottom: 18px; }
.blog-post-meta { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; }
.blog-post-date { font-size: 11px; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase; color: var(--clr-text-light); }
.blog-tag { display:inline-block;font-size:10.5px;font-weight:600;letter-spacing:0.06em;text-transform:uppercase;color:var(--clr-secondary-dark);background:rgba(117,166,159,0.12);border-radius:6px 12px 9px 11px / 11px 7px 13px 8px;padding:2px 8px; }
.blog-post-title {
  font-family: var(--font-heading); font-size: clamp(18px, 2.4vw, 22px);
  font-weight: 700; letter-spacing: -0.02em; color: var(--clr-text);
  line-height: 1.3; margin: 0;
}
.blog-post-body { font-size: 14.5px; line-height: 1.80; color: var(--clr-text-muted); }
.blog-post-body p { margin-bottom: 14px; }
.blog-post-body p:last-child { margin-bottom: 0; }
.blog-post-body h3 {
  font-size: 15px; font-weight: 600; color: var(--clr-text);
  margin: 22px 0 8px; letter-spacing: -0.01em;
}

/* ============================================================
   YOUNGER ME
   ============================================================ */
.younger-grid { display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:16px; }
.younger-placeholder { grid-column:1/-1;min-height:260px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;background:var(--clr-surface-2);border-radius:16px;border:2px dashed var(--clr-border-strong);color:var(--clr-text-light);font-size:14px; }
.younger-open-btn { padding:10px 24px;border-radius:24px;border:none;background:var(--clr-primary);color:#fff;font-size:13.5px;font-family:inherit;cursor:pointer;transition:opacity 0.15s; }
.younger-open-btn:hover { opacity:0.85; }
/* Younger Me modal */
.ym-modal-overlay { position:fixed;inset:0;background:rgba(0,0,0,0.45);z-index:20000;display:flex;align-items:center;justify-content:center;backdrop-filter:blur(4px); }
.ym-modal-overlay[hidden] { display:none; }
.ym-modal { background:var(--clr-surface);border-radius:20px;padding:36px 40px;max-width:380px;width:90%;text-align:center;box-shadow:0 24px 64px rgba(0,0,0,0.25); }
.ym-modal-icon { font-size:36px;margin:0 0 12px;text-align:center; }
.ym-modal-icon-img { display:block;margin:0 auto;width:48px;height:48px;object-fit:contain;filter:var(--icon-filter); }
.ym-modal-title { font-size:17px;font-weight:600;color:var(--clr-text);margin:0 0 10px; }
.ym-modal-body { font-size:14px;color:var(--clr-text-muted);line-height:1.6;margin:0 0 24px; }
.ym-modal-actions { display:flex;gap:12px;justify-content:center; }
.ym-btn { padding:9px 22px;border-radius:24px;border:none;font-size:13.5px;font-family:inherit;cursor:pointer;transition:opacity 0.15s; }
.ym-btn-confirm { background:var(--clr-primary);color:#fff; }
.ym-btn-cancel { background:var(--clr-surface-2);color:var(--clr-text-muted);border:1px solid var(--clr-border); }
.ym-btn:hover { opacity:0.82; }

/* ============================================================
   RIGHT ACTION BUTTONS  — radial fan
   ============================================================
   Geometry (with 50px buttons, 80px gap between groups):
   Center-to-center between groups = 25 + 80 + 25 = 130 px.

   CONTACT (6 items, r = 84, 30° arc from 0° to −150°):
     0°   → (   0, −84)   straight up
    −30°  → ( −42, −73)
    −60°  → ( −73, −42)
    −90°  → ( −84,   0)   pure left
   −120°  → ( −73,  42)
   −150°  → ( −42,  73)   bottom item: 73 < 130−25 = 105 → clear ✓

   ACCESSIBILITY (4 items, r = 72, 45° arc from 0° to −135°):
     0°   → (   0, −72)   top item: distance from contact = 130−72 = 58 > 25+22 = 47 ✓
    −45°  → ( −51, −51)
    −90°  → ( −72,   0)
   −135°  → ( −51,  51)
   ============================================================ */

/* Sketched / organic circle animation */
@keyframes sketchMorph {
  0%   { border-radius: 62% 38% 56% 44% / 44% 54% 46% 56%; }
  17%  { border-radius: 46% 54% 62% 38% / 57% 43% 53% 47%; }
  34%  { border-radius: 55% 45% 44% 56% / 65% 35% 58% 42%; }
  51%  { border-radius: 38% 62% 50% 50% / 44% 56% 44% 56%; }
  68%  { border-radius: 56% 44% 38% 62% / 51% 49% 60% 40%; }
  85%  { border-radius: 50% 50% 58% 42% / 38% 62% 46% 54%; }
  100% { border-radius: 62% 38% 56% 44% / 44% 54% 46% 56%; }
}

.right-actions {
  position: fixed; right: 18px; top: 0;
  height: 100vh;
  display: flex; flex-direction: column;
  align-items: center; justify-content: center;
  gap: 80px;                             /* keeps fan items from overlapping across groups */
  z-index: 1000; pointer-events: none;
}

.action-group {
  position: relative; width: 62px; height: 62px;
  overflow: visible; pointer-events: all;
  display: flex; align-items: center; justify-content: center;
}

/* Main trigger button */
.action-btn {
  width: 62px; height: 62px;
  background: var(--clr-surface);
  border: 2px solid var(--clr-border);
  box-shadow: 0 2px 14px var(--clr-shadow-md);
  display: flex; align-items: center; justify-content: center;
  font-size: 22px; color: var(--clr-text-muted);
  transition: background var(--dur-base), border-color var(--dur-base),
              box-shadow var(--dur-base), transform var(--dur-base) var(--ease-spring), color var(--dur-fast);
  position: relative; z-index: 2; pointer-events: all; flex-shrink: 0;
  animation: sketchMorph 14s ease-in-out infinite;
}
.action-btn:hover, .action-group.open > .action-btn {
  background: var(--clr-primary); border-color: var(--clr-primary);
  color: #fff; box-shadow: 0 4px 22px var(--clr-shadow-md); transform: scale(1.1);
}
.action-btn img { width: 38px; height: 38px; object-fit: contain; filter: var(--icon-filter); transition: filter var(--dur-fast); }
.action-btn:hover img, .action-group.open > .action-btn img { filter: invert(1); }

/* Menu: zero-size anchor at button centre */
.action-menu { position: absolute; top: 50%; left: 50%; width: 0; height: 0; pointer-events: none; z-index: 1; }
.action-group.open .action-menu { pointer-events: all; }

/* Radial items  — centred on menu origin via margin hack */
.action-item {
  position: absolute; top: 0; left: 0;
  margin: -22px 0 0 -22px;            /* centres a 44px circle at origin */
  width: 44px; height: 44px;
  background: var(--clr-surface);
  border: 1.5px solid var(--clr-border);
  box-shadow: 0 2px 10px var(--clr-shadow);
  display: flex; align-items: center; justify-content: center;
  color: var(--clr-text-muted); text-decoration: none; font-size: 12px;
  transform: translate(0, 0) scale(0.25);
  opacity: 0;
  transition: transform 0.32s var(--ease-spring),
              opacity 0.22s var(--ease-out),
              background var(--dur-fast), border-color var(--dur-fast);
  pointer-events: none;
  animation: sketchMorph 10s ease-in-out infinite;
}
/* Offset animation phase per item */
.action-item:nth-child(1){animation-delay:-0.0s}
.action-item:nth-child(2){animation-delay:-2.0s}
.action-item:nth-child(3){animation-delay:-4.0s}
.action-item:nth-child(4){animation-delay:-6.0s}
.action-item:nth-child(5){animation-delay:-8.0s}
.action-item:nth-child(6){animation-delay:-1.0s}

.action-item img { width: 24px; height: 24px; object-fit: contain; filter: var(--icon-filter); transition: filter var(--dur-fast); }
.action-item:hover { background: var(--clr-secondary); border-color: var(--clr-secondary); text-decoration: none; }
.action-item:hover img { filter: invert(1); }

/* Tooltip */
.action-tooltip {
  position: absolute; right: calc(100% + 9px); top: 50%; transform: translateY(-50%);
  background: var(--clr-text); color: var(--clr-bg);
  font-size: 11px; font-weight: 500; padding: 3px 8px; border-radius: 6px;
  white-space: nowrap; opacity: 0; pointer-events: none; transition: opacity var(--dur-fast);
  z-index: 999;
}
.action-tooltip::after {
  content:''; position:absolute; left:100%; top:50%; transform:translateY(-50%);
  border: 4px solid transparent; border-left-color: var(--clr-text);
}
.action-item:hover .action-tooltip { opacity: 1; }

/* ── OPEN states: items fly to their radial positions ── */
.action-group.open .action-item { pointer-events: all; }

/* Contact (5 items, r=90, 45° spacing, semicircle top→left→bottom) */
.action-group.open .contact-menu .action-item:nth-child(1)
  { transform:translate(  0px,-90px)scale(1);opacity:1;transition-delay:0.00s }
.action-group.open .contact-menu .action-item:nth-child(2)
  { transform:translate(-64px,-64px)scale(1);opacity:1;transition-delay:0.04s }
.action-group.open .contact-menu .action-item:nth-child(3)
  { transform:translate(-90px,  0px)scale(1);opacity:1;transition-delay:0.08s }
.action-group.open .contact-menu .action-item:nth-child(4)
  { transform:translate(-64px, 64px)scale(1);opacity:1;transition-delay:0.12s }
.action-group.open .contact-menu .action-item:nth-child(5)
  { transform:translate(  0px, 90px)scale(1);opacity:1;transition-delay:0.16s }

/* Accessibility (5 items, r=90, 45° spacing, semicircle top→left→bottom) */
.action-group.open .access-menu .action-item:nth-child(1)
  { transform:translate(  0px,-90px)scale(1);opacity:1;transition-delay:0.00s }
.action-group.open .access-menu .action-item:nth-child(2)
  { transform:translate(-64px,-64px)scale(1);opacity:1;transition-delay:0.04s }
.action-group.open .access-menu .action-item:nth-child(3)
  { transform:translate(-90px,  0px)scale(1);opacity:1;transition-delay:0.08s }
.action-group.open .access-menu .action-item:nth-child(4)
  { transform:translate(-64px, 64px)scale(1);opacity:1;transition-delay:0.12s }
.action-group.open .access-menu .action-item:nth-child(5)
  { transform:translate(  0px, 90px)scale(1);opacity:1;transition-delay:0.16s }

/* Back-to-top */
.top-btn { pointer-events:all;opacity:0;transform:translateY(10px); transition:opacity var(--dur-base),transform var(--dur-base) var(--ease-spring),background var(--dur-fast),border-color var(--dur-fast); }
.top-btn.visible { opacity:1;transform:translateY(0); }
.top-btn .top-arrow { font-size:20px;line-height:1; }

/* ============================================================
   MORE PANEL  — slides up above mobile bottom nav
   ============================================================ */
.more-panel {
  display: none;                      /* only visible on mobile */
  position: fixed;
  bottom: 62px; left: 0; right: 0;
  background: var(--clr-surface);
  border-radius: 20px 20px 0 0;
  box-shadow: 0 -6px 40px var(--clr-shadow-lg);
  z-index: 950;
  padding: 8px 20px 28px;
  max-height: 72vh;
  overflow-y: auto;
  transform: translateY(105%);
  transition: transform 0.34s var(--ease-spring);
  -webkit-overflow-scrolling: touch;
}
.more-panel.open { transform: translateY(0); }
.more-handle {
  width: 38px; height: 4px;
  background: var(--clr-border-strong); border-radius: 2px;
  margin: 6px auto 14px;
}
.more-divider { height: 1px; background: var(--clr-border); margin: 12px 0; }
.more-section { margin-bottom: 4px; }
.more-section-label {
  font-size: 10px; font-weight: 700; letter-spacing: 0.08em;
  text-transform: uppercase; color: var(--clr-text-light);
  margin-bottom: 10px;
}
/* Younger Me row inside panel — reuses mobile-nav-link look */
.more-page-link {
  display: flex; align-items: center; gap: 12px;
  padding: 10px 4px; border-radius: 10px;
  color: var(--clr-text-muted); text-decoration: none;
  font-size: 13px; font-weight: 500;
  transition: color var(--dur-fast);
}
.more-page-link:hover, .more-page-link.active { color: var(--clr-primary); text-decoration: none; }
/* Grid of action buttons */
.more-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(60px, 1fr));
  gap: 8px;
}
.more-btn {
  display: flex; flex-direction: column; align-items: center; gap: 5px;
  padding: 10px 6px 9px;
  background: var(--clr-surface-2); border-radius: 12px;
  border: none; cursor: pointer;
  font-size: 10.5px; font-weight: 500; color: var(--clr-text-muted);
  text-decoration: none;
  transition: background var(--dur-fast), color var(--dur-fast);
  touch-action: manipulation; -webkit-tap-highlight-color: transparent;
}
.more-btn:hover, .more-btn:active { background: var(--clr-nav-item-hover); color: var(--clr-primary); }
.more-btn img { width: 24px; height: 24px; object-fit: contain; filter: var(--icon-filter); }
.more-arrow { font-size: 20px; line-height: 1; display: block; }
/* Backdrop — always in DOM, hidden via visibility so it never renders unless .open */
.more-backdrop {
  position: fixed; inset: 0;
  background: rgba(0,0,0,0.28);
  z-index: 945;
  opacity: 0; visibility: hidden; pointer-events: none;
  transition: opacity 0.24s var(--ease-out), visibility 0s 0.24s;
}
.more-backdrop.open {
  opacity: 1; visibility: visible; pointer-events: all;
  transition: opacity 0.24s var(--ease-out), visibility 0s 0s;
}

/* ============================================================
   MOBILE BOTTOM NAV
   ============================================================ */
.mobile-nav { display:none;position:fixed;bottom:0;left:0;right:0;height:62px;background:var(--clr-surface);border-top:1px solid var(--clr-border);z-index:960;justify-content:space-around;align-items:center;padding:0 4px;box-shadow:0 -4px 20px var(--clr-shadow); }
.mobile-nav-link { display:flex;flex-direction:column;align-items:center;gap:3px;padding:5px 8px;border-radius:10px;color:var(--clr-text-muted);text-decoration:none;font-size:10px;font-weight:500;transition:color var(--dur-fast);flex:1;justify-content:center;touch-action:manipulation;-webkit-tap-highlight-color:transparent; }
.mobile-nav-link:hover,.mobile-nav-link.active { color:var(--clr-primary);text-decoration:none; }
.mobile-nav-icon { width:30px;height:30px;object-fit:contain;filter:var(--icon-filter-muted);transition:filter var(--dur-fast); }
.mobile-nav-link.active .mobile-nav-icon, .mobile-nav-link:hover .mobile-nav-icon { filter:var(--icon-filter); }
/* More toggle button — same shape as mobile-nav-link */
.more-toggle { background: none; border: none; cursor: pointer; }
.more-dots { font-size: 18px; line-height: 1; letter-spacing: 1px; display: block; margin-bottom: 1px; }
.more-toggle.active { color: var(--clr-primary); }

/* ============================================================
   RESPONSIVE
   ============================================================ */
@media(max-width:900px) {
  .page-layout-toc { grid-template-columns:1fr;padding:32px 24px 80px; }
  .page-side-toc { display:none; }
  .about-layout { grid-template-columns:1fr;padding:32px 24px 80px; }
  .about-sidebar { display:none; }
  .home-hero { grid-template-columns:1fr;gap:28px; }
  .home-profile { flex-direction:row;flex-wrap:wrap;align-items:flex-start; }
  .profile-stack { width:170px;height:190px; }
}
@media(max-width:700px) {
  :root { --nav-float:0px;--right-w:0px; }
  .side-nav { display:none; }
  .mobile-nav { display:flex; }
  .main-content { margin-left:0!important;margin-right:0!important;padding-bottom:62px; }
  .section-inner { padding:32px 20px 76px; }
  .page-layout-toc { padding:32px 16px 76px; }
  .about-layout { padding:32px 16px 76px; }
  .right-actions { display:none!important; }
  .research-grid,.blog-grid { grid-template-columns:1fr; }
  .news-item { grid-template-columns:62px 44px 1fr; }
  .news-icon img { width:38px;height:38px; }
  .more-panel { display:block; }

  /* Home page: name → photo → links → intro */
  .home-hero { display:flex; flex-direction:column; gap:16px; }
  .home-text, .home-profile { display:contents; }
  .home-greeting { order:1; display:flex; flex-wrap:wrap; align-items:center; }
  .profile-stack, .home-profile .show-in-text-mode { order:2; }
  .profile-stack { width:160px; height:180px; }
  .home-links { order:3; width:100%; }
  .home-intro { order:4; }
}
@media(max-width:480px) {
  .paper-item { grid-template-columns:1fr; }
  .paper-thumbnail { width:100%;height:80px; }
  .about-entry { flex-direction:column; }
  .entry-right { text-align:left; }
  .funding-item { flex-direction:column; }
  .service-item { flex-direction:column;gap:2px; }
  .service-detail { text-align:left; }
}

/* ============================================================
   SCROLL PROGRESS BAR
   ============================================================ */
.scroll-progress {
  position: fixed;
  top: 0; left: 0;
  height: 4px;
  width: 0%;
  background: var(--clr-primary);
  z-index: 10000;
  pointer-events: none;
  transition: width 80ms linear;
  box-shadow: 0 1px 4px rgba(0,0,0,0.30);
}

/* ============================================================
   HANDWRITING HIGHLIGHTER
   Use <mark> or class="highlight" on any inline text.
   The marker is semi-transparent and sits behind the text.
   ============================================================ */
mark, .highlight {
  background: linear-gradient(
    104deg,
    rgba(117,166,159,0)   1%,
    rgba(117,166,159,0.32) 2.5%,
    rgba(117,166,159,0.26) 50%,
    rgba(117,166,159,0.32) 97.5%,
    rgba(117,166,159,0)   99%
  );
  /* Slight angle + irregular radius for hand-drawn feel */
  padding: 0.06em 0.28em;
  margin: 0 -0.1em;
  border-radius: 0.4em 0.2em 0.3em 0.15em / 0.15em 0.3em 0.2em 0.4em;
  -webkit-box-decoration-break: clone;
  box-decoration-break: clone;
  color: inherit;
  font-style: inherit;
}
[data-theme="dark"] mark,
[data-theme="dark"] .highlight {
  background: linear-gradient(
    104deg,
    rgba(117,166,159,0)   1%,
    rgba(117,166,159,0.22) 2.5%,
    rgba(117,166,159,0.18) 50%,
    rgba(117,166,159,0.22) 97.5%,
    rgba(117,166,159,0)   99%
  );
}

/* ============================================================
   SCROLL-REVEAL FADE-IN
   Skipped in text-only mode and for prefers-reduced-motion.
   ============================================================ */
@media (prefers-reduced-motion: no-preference) {
  body:not(.text-only-mode) .reveal {
    opacity: 0;
    transform: translateY(20px);
    transition: opacity 0.52s var(--ease-out),
                transform 0.52s var(--ease-out);
    transition-delay: var(--reveal-delay, 0s);
  }
  body:not(.text-only-mode) .reveal.visible {
    opacity: 1;
    transform: translateY(0);
  }
  /* Stagger variant: slight horizontal drift for card grids */
  body:not(.text-only-mode) .reveal-card {
    opacity: 0;
    transform: translateY(16px) scale(0.97);
    transition: opacity 0.48s var(--ease-out),
                transform 0.48s var(--ease-spring);
    transition-delay: var(--reveal-delay, 0s);
  }
  body:not(.text-only-mode) .reveal-card.visible {
    opacity: 1;
    transform: translateY(0) scale(1);
  }
}
