/* ============================================================================
   site.css — shared design system for index.html and storm.html
   Behzad Bozorgtabar · Aarhus University · redesign, October 2026

   Only these two pages link this file. Legacy project pages keep main.css.
   Organisation: tokens → fonts → base → layout → components → utilities →
   responsive → motion → print.  Spec: see DESIGN.md (not shipped).
   ============================================================================ */

/* ----------------------------------------------------------------------------
   1. TOKENS
   ---------------------------------------------------------------------------- */
:root{
  color-scheme:dark;

  /* surfaces (warm-neutral near-black; 1–3 % lightness steps) */
  --bg:#0a0a0b;            /* page */
  --surface-1:#111113;     /* cards, panels, toolbar */
  --surface-2:#17171a;     /* hover / raised */
  --surface-3:#1e1e22;     /* diagram nodes, strongest fill */
  --stage:#000;            /* video stage, flush with the STORM animation */
  --nav-bg:rgba(10,10,11,.78);
  --plate:#f5f4f0;         /* light plate for white-background figures and icons */
  --plate-line:#dad8d1;

  /* ink */
  --text-1:#f2f1ec;        /* headings, primary */
  --text-2:#b4b3ac;        /* body / secondary */
  --text-3:#8c8b85;        /* muted, meta (4.86:1 on surface-3, AA) */

  /* lines */
  --line:rgba(255,255,255,.08);
  --line-strong:rgba(255,255,255,.14);

  /* accent: sage, taken from the STORM animation keyword colour (#aeba6c) */
  --accent:#b5bf75;
  --accent-strong:#d2da95;
  --accent-ink:#0a0a0b;    /* text on accent fills */
  --accent-tint:rgba(181,191,117,.12);
  --accent-line:rgba(181,191,117,.38);

  /* semantic colours for the STORM concept diagram only */
  --signal:#9dbbd0;        /* tactile signal trace (light steel blue) */
  --risk:#e07a70;          /* contact mismatch / risk */
  --safe:#b5bf75;          /* safe correction (= accent) */

  /* miscellanea category tints (hue at low alpha over surface-1) */
  --tint-sage-fg:#c9d08f;  --tint-sage-bg:rgba(181,191,117,.10);  --tint-sage-line:rgba(181,191,117,.26);
  --tint-sky-fg:#b4cde0;   --tint-sky-bg:rgba(157,187,208,.10);   --tint-sky-line:rgba(157,187,208,.26);
  --tint-amber-fg:#e8c48a; --tint-amber-bg:rgba(226,179,107,.10); --tint-amber-line:rgba(226,179,107,.26);
  --tint-rose-fg:#eab3b3;  --tint-rose-bg:rgba(227,154,154,.10);  --tint-rose-line:rgba(227,154,154,.26);
  --tint-lilac-fg:#c9bde8; --tint-lilac-bg:rgba(184,169,224,.10); --tint-lilac-line:rgba(184,169,224,.26);
  --tint-teal-fg:#a9d6cd;  --tint-teal-bg:rgba(120,180,170,.10);  --tint-teal-line:rgba(120,180,170,.26);

  /* type */
  --font-sans:"Inter Variable",ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;
  --font-serif:"Newsreader Variable",Georgia,"Times New Roman",serif;
  --fs-xs:.75rem;                                   /* 12  eyebrows, badges */
  --fs-sm:.875rem;                                  /* 14  meta, nav, authors */
  --fs-body:clamp(1rem,.95rem + .25vw,1.0625rem);   /* 16–17 */
  --fs-md:clamp(1.0625rem,1rem + .35vw,1.1875rem);  /* 17–19 lead, statement */
  --fs-lg:clamp(1.25rem,1.1rem + .6vw,1.5rem);      /* 20–24 theme titles, h3 */
  --fs-xl:clamp(1.75rem,1.4rem + 1.4vw,2.375rem);   /* 28–38 section titles */
  --fs-2xl:clamp(2.5rem,1.2rem + 3vw,3.75rem);      /* 40–60 name, page title */
  --lh-tight:1.1; --lh-body:1.6;
  --track-sans:-.02em; --track-serif:-.012em; --track-caps:.1em;

  /* spacing (4 px base) */
  --s-1:.25rem; --s-2:.5rem; --s-3:.75rem; --s-4:1rem; --s-5:1.5rem;
  --s-6:2rem; --s-7:3rem; --s-8:4rem; --s-9:6rem;
  --section-gap:clamp(4rem,2.5rem + 5vw,7rem);      /* 64–112 between sections */
  --gutter:clamp(1rem,4vw,2.5rem);                  /* 16–40 side gutters */

  /* shape */
  --r-sm:6px; --r-md:10px; --r-lg:14px; --r-xl:20px; --r-pill:999px;
  --shadow-sm:0 1px 2px rgba(0,0,0,.4);
  --shadow-md:0 8px 24px -12px rgba(0,0,0,.6);
  --shadow-lg:0 24px 60px -30px rgba(0,0,0,.8);

  /* motion */
  --t-fast:160ms; --t-base:200ms; --t-slow:420ms;
  --ease-out:cubic-bezier(.2,.7,.2,1);

  /* layout */
  --maxw:1120px; --measure:68ch; --nav-h:60px;
}

/* Optional light theme: tokens only, no toggle is shipped (dark is the product). */
[data-theme="light"]{
  color-scheme:light;
  --bg:#f7f6f2; --surface-1:#fdfcfa; --surface-2:#f1efe9; --surface-3:#e8e5dc; --nav-bg:rgba(247,246,242,.82);
  --text-1:#15150f; --text-2:#45453d; --text-3:#6a6a61;
  --line:rgba(0,0,0,.09); --line-strong:rgba(0,0,0,.16);
  --accent:#596a12; --accent-strong:#3f4c0a; --accent-ink:#fff; --accent-tint:rgba(89,106,18,.10); --accent-line:rgba(89,106,18,.4);
  --shadow-md:0 8px 24px -12px rgba(0,0,0,.25); --shadow-lg:0 24px 60px -30px rgba(0,0,0,.3);
}

/* ----------------------------------------------------------------------------
   2. FONTS (self-hosted, SIL OFL; unicode-ranges from fontsource)
   ---------------------------------------------------------------------------- */
@font-face{font-family:"Inter Variable";font-style:normal;font-weight:100 900;font-display:swap;
  src:url("fonts/inter-latin-wght-normal.woff2") format("woff2-variations");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Inter Variable";font-style:italic;font-weight:100 900;font-display:swap;
  src:url("fonts/inter-latin-wght-italic.woff2") format("woff2-variations");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Inter Variable";font-style:normal;font-weight:100 900;font-display:swap;
  src:url("fonts/inter-latin-ext-wght-normal.woff2") format("woff2-variations");
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:"Inter Variable";font-style:italic;font-weight:100 900;font-display:swap;
  src:url("fonts/inter-latin-ext-wght-italic.woff2") format("woff2-variations");
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:"Newsreader Variable";font-style:normal;font-weight:200 800;font-display:swap;
  src:url("fonts/newsreader-latin-wght-normal.woff2") format("woff2-variations");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Newsreader Variable";font-style:italic;font-weight:200 800;font-display:swap;
  src:url("fonts/newsreader-latin-wght-italic.woff2") format("woff2-variations");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}

/* ----------------------------------------------------------------------------
   3. BASE (small reset; element rules kept to the minimum)
   ---------------------------------------------------------------------------- */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:calc(var(--nav-h) + 1rem)}
body{margin:0;background:var(--bg);color:var(--text-1);font:400 var(--fs-body)/var(--lh-body) var(--font-sans);
  -webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow-x:clip;overflow-wrap:break-word}
img,video{max-width:100%;height:auto}
svg{max-width:100%}
a{color:var(--accent);text-decoration:underline;text-decoration-color:var(--accent-line);text-decoration-thickness:1px;
  text-underline-offset:.18em;transition:color var(--t-fast) var(--ease-out),text-decoration-color var(--t-fast) var(--ease-out)}
a:hover{color:var(--accent-strong);text-decoration-color:currentColor}
::selection{background:var(--accent);color:var(--accent-ink)}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:var(--r-sm)}
.skip-link{position:absolute;left:var(--s-4);top:-6rem;z-index:100;padding:.6rem 1rem;border-radius:var(--r-md);
  background:var(--accent);color:var(--accent-ink);font-weight:600;text-decoration:none}
.skip-link:focus{top:var(--s-4)}

/* ----------------------------------------------------------------------------
   4. LAYOUT
   ---------------------------------------------------------------------------- */
.wrap{max-width:calc(var(--maxw) + 2*var(--gutter));margin-inline:auto;padding-inline:var(--gutter)}
.section{padding-block:var(--section-gap)}
.section + .section{background:linear-gradient(var(--line),var(--line)) var(--gutter) 0 / calc(100% - 2*var(--gutter)) 1px no-repeat}
.section-head{margin-bottom:clamp(1.5rem,1rem + 2vw,2.5rem);max-width:var(--measure)}
.eyebrow{display:block;margin:0 0 var(--s-3);font-size:var(--fs-xs);font-weight:600;letter-spacing:var(--track-caps);
  text-transform:uppercase;color:var(--accent)}
.section-title{margin:0;font-family:var(--font-serif);font-weight:500;font-size:var(--fs-xl);line-height:var(--lh-tight);
  letter-spacing:var(--track-serif);color:var(--text-1)}
.section-lead{margin:var(--s-4) 0 0;font-size:var(--fs-md);color:var(--text-2);max-width:var(--measure)}
.h3{margin:0 0 var(--s-3);font-size:var(--fs-lg);font-weight:500;letter-spacing:var(--track-sans);line-height:1.25;color:var(--text-1)}
.prose > *{max-width:var(--measure)}
.prose p{margin:0 0 var(--s-4);color:var(--text-2)}
.prose p:last-child{margin-bottom:0}
.prose strong,.prose b{color:var(--text-1);font-weight:500}
.prose h3{margin:var(--s-6) 0 var(--s-3);font-family:var(--font-serif);font-weight:500;font-size:var(--fs-lg);letter-spacing:var(--track-serif);line-height:1.25}
.prose ul{margin:0 0 var(--s-4);padding-left:1.2rem;color:var(--text-2)}
.prose li{margin:.3rem 0}
.prose li::marker{color:var(--text-3)}

/* ----------------------------------------------------------------------------
   5. COMPONENTS
   ---------------------------------------------------------------------------- */

/* 5.1 Top navigation ------------------------------------------------------- */
.site-nav{position:sticky;top:0;z-index:50;background:var(--nav-bg);-webkit-backdrop-filter:blur(14px) saturate(140%);
  backdrop-filter:blur(14px) saturate(140%);border-bottom:1px solid var(--line)}
.nav-inner{position:relative;display:flex;align-items:center;justify-content:space-between;gap:var(--s-4);min-height:var(--nav-h)}
.nav-brand{font-family:var(--font-serif);font-weight:500;font-size:1.25rem;letter-spacing:var(--track-serif);color:var(--text-1);
  text-decoration:none;white-space:nowrap}
.nav-brand:hover{color:var(--accent-strong)}
.nav-links{display:flex;flex-wrap:wrap;align-items:center;gap:2px;margin:0;padding:0;list-style:none}
.nav-links a{display:inline-flex;align-items:center;min-height:36px;padding:0 .7rem;border-radius:var(--r-sm);font-size:var(--fs-sm);
  font-weight:500;color:var(--text-2);text-decoration:none;transition:color var(--t-fast) var(--ease-out),background var(--t-fast) var(--ease-out)}
.nav-links a:hover{color:var(--text-1);background:var(--surface-2)}
.nav-links a[aria-current="page"]{color:var(--text-1)}
.nav-links .nav-storm{margin-left:var(--s-2);color:var(--accent);border:1px solid var(--accent-line)}
.nav-links .nav-storm:hover{background:var(--accent-tint);color:var(--accent-strong)}
.nav-toggle{display:none;appearance:none;width:44px;height:44px;padding:0;border:1px solid var(--line-strong);border-radius:var(--r-md);
  background:transparent;color:var(--text-1);cursor:pointer;place-items:center}
.nav-toggle-bars,.nav-toggle-bars::before,.nav-toggle-bars::after{display:block;width:18px;height:2px;border-radius:2px;background:currentColor;
  transition:transform var(--t-base) var(--ease-out),opacity var(--t-fast)}
.nav-toggle-bars{position:relative}
.nav-toggle-bars::before,.nav-toggle-bars::after{content:"";position:absolute;left:0}
.nav-toggle-bars::before{top:-6px}
.nav-toggle-bars::after{top:6px}
.nav-toggle[aria-expanded="true"] .nav-toggle-bars{background:transparent}
.nav-toggle[aria-expanded="true"] .nav-toggle-bars::before{transform:translateY(6px) rotate(45deg)}
.nav-toggle[aria-expanded="true"] .nav-toggle-bars::after{transform:translateY(-6px) rotate(-45deg)}

/* 5.2 Hero ------------------------------------------------------------------ */
.hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(300px,46%);grid-template-rows:1fr 1fr;
  column-gap:clamp(2rem,2rem + 3vw,4.5rem);row-gap:var(--s-5);padding-block:clamp(2.5rem,1.5rem + 4vw,5rem) clamp(2rem,1rem + 3vw,4rem)}
.hero-head{grid-column:1;grid-row:1;align-self:end}
.hero-body{grid-column:1;grid-row:2;align-self:start}
.hero-media{grid-column:2;grid-row:1 / span 2;align-self:center;margin:0}
.hero-name{margin:0 0 var(--s-3);font-family:var(--font-serif);font-weight:500;font-size:var(--fs-2xl);line-height:1.02;
  letter-spacing:var(--track-serif);color:var(--text-1)}
.hero-role{margin:0;font-size:var(--fs-md);font-weight:500;color:var(--text-1)}
.hero-affil{margin:var(--s-1) 0 0;font-size:var(--fs-body);color:var(--text-2)}
.hero-statement{margin:0 0 var(--s-5);font-size:var(--fs-md);line-height:1.6;color:var(--text-2);max-width:var(--measure)}
.hero-statement strong,.hero-statement b{color:var(--text-1);font-weight:500}
.hero-links{display:flex;flex-wrap:wrap;gap:var(--s-2);margin:0 0 var(--s-5)}
.profile-links{display:flex;flex-wrap:wrap;gap:var(--s-2);margin:0;padding:0;list-style:none}
.profile-links a{display:grid;place-items:center;width:44px;height:44px;border-radius:var(--r-md);background:var(--plate);
  border:1px solid var(--plate-line);transition:transform var(--t-fast) var(--ease-out),box-shadow var(--t-fast) var(--ease-out)}
.profile-links a:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}
.profile-links img{display:block;width:22px;height:22px;object-fit:contain}
.portrait{margin:0;border-radius:var(--r-xl);overflow:hidden;border:1px solid var(--line-strong);background:var(--surface-2);box-shadow:var(--shadow-lg)}
.portrait img{display:block;width:100%;height:auto;aspect-ratio:800 / 534;object-fit:cover}

/* 5.3 Research themes (native details) -------------------------------------- */
.themes{border-top:1px solid var(--line)}
.theme{border-bottom:1px solid var(--line)}
.theme-summary{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:var(--s-5);align-items:center;padding:var(--s-5) var(--s-2);
  list-style:none;cursor:pointer;border-radius:var(--r-sm);transition:background var(--t-fast) var(--ease-out)}
.theme-summary::-webkit-details-marker{display:none}
.theme-summary:hover{background:var(--surface-1)}
.theme-summary:focus-visible{outline-offset:-2px}
.theme-title{display:block;grid-column:1;margin:0;font-family:var(--font-serif);font-weight:500;font-size:var(--fs-lg);line-height:1.2;
  letter-spacing:var(--track-serif);color:var(--text-1)}
.theme-question{display:block;grid-column:1;margin:var(--s-1) 0 0;font-family:var(--font-serif);font-style:italic;font-size:1.0625rem;
  line-height:1.4;color:var(--text-2)}
.theme-summary::after{content:"";grid-column:2;grid-row:1 / span 2;width:11px;height:11px;margin-right:var(--s-2);
  border-right:1.5px solid var(--text-3);border-bottom:1.5px solid var(--text-3);transform:translateY(-3px) rotate(45deg);
  transition:transform var(--t-base) var(--ease-out),border-color var(--t-fast)}
.theme[open] .theme-summary::after{transform:translateY(3px) rotate(-135deg);border-color:var(--accent)}
.theme-body{padding:var(--s-2) var(--s-2) var(--s-6)}
.theme-body p{margin:0 0 var(--s-5);max-width:var(--measure);color:var(--text-2)}
.theme-papers{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:var(--s-3);margin:0;padding:0;list-style:none}
.mini{display:grid;grid-template-columns:112px minmax(0,1fr);gap:var(--s-3);padding:var(--s-3);border:1px solid var(--line);border-radius:var(--r-lg);
  background:var(--surface-1);transition:border-color var(--t-fast) var(--ease-out),background var(--t-fast) var(--ease-out)}
.mini:hover{border-color:var(--line-strong);background:var(--surface-2)}
.mini .plate{aspect-ratio:3 / 2;align-self:start}
.mini-title{margin:0;font-size:var(--fs-sm);font-weight:500;line-height:1.35;color:var(--text-1)}
.mini-title a{color:inherit;text-decoration:none}
.mini-title a:hover{color:var(--accent-strong)}
.mini-venue{margin:2px 0 0;font-size:var(--fs-xs);color:var(--text-3)}
.mini-links{margin:var(--s-1) 0 0;font-size:var(--fs-xs)}

/* 5.4 Featured project band ------------------------------------------------ */
.feature{display:grid;grid-template-columns:minmax(260px,420px) minmax(0,1fr);gap:clamp(1.5rem,1rem + 3vw,3rem);align-items:center;
  padding:clamp(1.25rem,1rem + 1.5vw,2rem);border:1px solid var(--line);border-radius:var(--r-xl);background:var(--surface-1)}
.feature-media{margin:0}
.feature-title{margin:0 0 var(--s-3);font-family:var(--font-serif);font-weight:500;font-size:clamp(1.5rem,1.2rem + 1vw,2rem);line-height:1.15;letter-spacing:var(--track-serif)}
.feature-title .mark{color:var(--accent)}
.feature-desc{margin:0;color:var(--text-2);max-width:var(--measure)}
.feature-facts{display:flex;flex-wrap:wrap;gap:var(--s-4) var(--s-6);margin:var(--s-5) 0;padding:var(--s-4) 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.feature-facts dt{margin:0 0 2px;font-size:var(--fs-xs);font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--text-3)}
.feature-facts dd{margin:0;font-size:var(--fs-sm);color:var(--text-1)}
.feature-actions{display:flex;flex-wrap:wrap;gap:var(--s-3)}

/* 5.5 Video stage (homepage feature + STORM page) --------------------------- */
.video-stage{position:relative;margin:0;aspect-ratio:1 / 1;overflow:hidden;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--stage)}
.video-stage video{display:block;width:100%;height:100%;object-fit:contain;background:var(--stage)}
.video-stage--large{max-width:680px;margin-inline:auto;box-shadow:var(--shadow-lg)}
.video-caption{margin:var(--s-3) 0 0;font-size:var(--fs-sm);line-height:1.5;color:var(--text-3)}
.video-controls[hidden]{display:none}
.video-controls{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--s-2);margin-top:var(--s-3)}

/* 5.6 News ------------------------------------------------------------------ */
.news-list{margin:0;padding:0;list-style:none}
.news-item{display:grid;grid-template-columns:7.5rem minmax(0,1fr);gap:var(--s-4);padding:var(--s-3) 0;border-bottom:1px solid var(--line)}
.news-date{padding-top:.1em;font-size:var(--fs-sm);color:var(--text-3);font-variant-numeric:tabular-nums;white-space:nowrap}
.news-text{margin:0;color:var(--text-2)}
.news-text strong,.news-text b{color:var(--text-1);font-weight:500}
.news-archive{margin-top:var(--s-4)}
.news-archive > summary{list-style:none;cursor:pointer;width:max-content}
.news-archive > summary::-webkit-details-marker{display:none}
.news-archive[open] > summary{margin-bottom:var(--s-4)}
.news-archive[open] .when-closed,.news-archive:not([open]) .when-open{display:none}

/* 5.7 Publications ---------------------------------------------------------- */
.pub-toolbar{display:grid;gap:var(--s-3);margin:0 0 var(--s-5);padding:var(--s-4) var(--s-5);border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface-1)}
.chip-group{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s-2)}
.chip-group-label{min-width:3.25rem;font-size:var(--fs-xs);font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--text-3)}
.chip{appearance:none;min-height:36px;padding:.3rem .85rem;border:1px solid var(--line-strong);border-radius:var(--r-pill);background:transparent;
  font:500 var(--fs-sm)/1.2 var(--font-sans);color:var(--text-2);cursor:pointer;
  transition:color var(--t-fast) var(--ease-out),border-color var(--t-fast) var(--ease-out),background var(--t-fast) var(--ease-out)}
.chip:hover{color:var(--text-1);border-color:var(--text-3)}
.chip[aria-pressed="true"]{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.pub-count{margin:0;font-size:var(--fs-sm);color:var(--text-3)}
.pub-list{margin:0;padding:0;list-style:none;border-top:1px solid var(--line)}
.pub{display:grid;grid-template-columns:168px minmax(0,1fr);gap:var(--s-5);padding:var(--s-5) 0;border-bottom:1px solid var(--line)}
.pub .plate{width:168px;height:112px}
.pub-title{margin:0 0 var(--s-1);font-size:1.0625rem;font-weight:500;line-height:1.35;letter-spacing:-.005em;color:var(--text-1)}
.pub-title a{color:inherit;text-decoration:none}
.pub-title a:hover{color:var(--accent-strong)}
.pub-authors{margin:0;font-size:var(--fs-sm);line-height:1.5;color:var(--text-2)}
.pub-authors b,.pub-authors strong{color:var(--text-1);font-weight:600}
.pub-venue{margin:var(--s-1) 0 0;font-size:var(--fs-sm);color:var(--text-3)}
.pub-venue strong,.pub-venue b{color:var(--text-2);font-weight:500}
.pub-links{display:flex;flex-wrap:wrap;align-items:center;margin:var(--s-2) 0 0;font-size:var(--fs-sm)}
.pub-links a{text-decoration:none}
.pub-links a:hover{text-decoration:underline}
.pub-links a + a::before{content:"·";margin:0 .55rem;color:var(--text-3)}
.pub-hidden{display:none !important}
.pub-empty{margin:var(--s-5) 0 0;padding:var(--s-6);text-align:center;color:var(--text-3);border:1px dashed var(--line-strong);border-radius:var(--r-lg)}
.pub-empty[hidden]{display:none}
.badge{display:inline-block;margin-left:.4rem;padding:.12em .5em;border:1px solid var(--accent-line);border-radius:var(--r-sm);
  font-size:.6875rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;line-height:1.5;color:var(--accent);vertical-align:.12em}
.tag-new{display:inline-block;margin-right:.45rem;padding:.3em .55em;border-radius:var(--r-pill);background:var(--accent);color:var(--accent-ink);
  font-size:.6875rem;font-weight:700;letter-spacing:.1em;line-height:1;text-transform:uppercase;vertical-align:.25em}

/* 5.8 A3 Lab band and people --------------------------------------------------- */
.lab{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);gap:clamp(2rem,1rem + 4vw,4rem);padding:clamp(1.5rem,1rem + 2vw,2.5rem);
  border:1px solid var(--line);border-radius:var(--r-xl);background:linear-gradient(180deg,var(--surface-2),var(--surface-1))}
.lab-title{margin:0 0 var(--s-3);font-family:var(--font-serif);font-weight:500;font-size:var(--fs-xl);line-height:1.12;letter-spacing:var(--track-serif)}
.lab-desc{margin:0 0 var(--s-5);color:var(--text-2);max-width:var(--measure)}
.lab-actions{display:flex;flex-wrap:wrap;gap:var(--s-3)}
.people{margin:0;padding:0;list-style:none}
.people-group{margin:var(--s-5) 0 var(--s-2);font-size:var(--fs-xs);font-weight:600;letter-spacing:var(--track-caps);text-transform:uppercase;color:var(--text-3)}
.people-group:first-child{margin-top:0}
.people li{padding:var(--s-2) 0;border-bottom:1px solid var(--line);font-size:var(--fs-sm);line-height:1.45;color:var(--text-2)}
.people li:last-child{border-bottom:0}
.people-name{color:var(--text-1);font-weight:500}
.people-tag{display:inline-block;margin-right:.4rem;padding:.1em .45em;border:1px solid var(--line-strong);border-radius:var(--r-sm);
  font-size:.6875rem;font-weight:600;letter-spacing:.04em;color:var(--text-3);vertical-align:.1em}
.people-meta{color:var(--text-3)}

/* 5.9 Miscellanea ----------------------------------------------------------- */
.misc{display:grid;gap:var(--s-6)}
.misc-row{display:grid;grid-template-columns:240px minmax(0,1fr);gap:var(--s-6);align-items:start}
.misc-cat{position:sticky;top:calc(var(--nav-h) + 1rem);display:flex;align-items:center;justify-content:center;min-height:5.75rem;margin:0;
  padding:var(--s-4) var(--s-5);border:1px solid var(--tint-line);border-radius:var(--r-lg);background:var(--tint-bg);
  font-family:var(--font-serif);font-weight:500;font-size:1.375rem;line-height:1.2;letter-spacing:var(--track-serif);text-align:center;color:var(--tint-fg)}
.tint-sage{--tint-fg:var(--tint-sage-fg);--tint-bg:var(--tint-sage-bg);--tint-line:var(--tint-sage-line)}
.tint-sky{--tint-fg:var(--tint-sky-fg);--tint-bg:var(--tint-sky-bg);--tint-line:var(--tint-sky-line)}
.tint-amber{--tint-fg:var(--tint-amber-fg);--tint-bg:var(--tint-amber-bg);--tint-line:var(--tint-amber-line)}
.tint-rose{--tint-fg:var(--tint-rose-fg);--tint-bg:var(--tint-rose-bg);--tint-line:var(--tint-rose-line)}
.tint-lilac{--tint-fg:var(--tint-lilac-fg);--tint-bg:var(--tint-lilac-bg);--tint-line:var(--tint-lilac-line)}
.tint-teal{--tint-fg:var(--tint-teal-fg);--tint-bg:var(--tint-teal-bg);--tint-line:var(--tint-teal-line)}
.misc-entries{margin:0;padding:0;list-style:none}
.misc-entries li{padding:var(--s-2) 0;border-bottom:1px solid var(--line);color:var(--text-2);line-height:1.5}
.misc-entries li:last-child{border-bottom:0}
.misc-entries .when{margin-left:.5rem;font-size:var(--fs-sm);color:var(--text-3);font-variant-numeric:tabular-nums;white-space:nowrap}
.misc-entries strong,.misc-entries b{color:var(--text-1);font-weight:500}

/* 5.10 Contact cards and footer ---------------------------------------------- */
.contact-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:var(--s-4)}
.contact-card{padding:var(--s-5);border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface-1)}
.contact-card h3,.contact-card .contact-label{margin:0 0 var(--s-2);font-size:var(--fs-xs);font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--text-3)}
.contact-card p{margin:0;color:var(--text-2)}
.contact-card p + p{margin-top:var(--s-1)}
.contact-card strong{color:var(--text-1);font-weight:500}
.site-footer{margin-top:var(--section-gap);padding:var(--s-7) 0;border-top:1px solid var(--line);font-size:var(--fs-sm);color:var(--text-3)}
.footer-inner{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--s-5)}
.footer-links{display:flex;flex-wrap:wrap;gap:var(--s-4);margin:0;padding:0;list-style:none}
.footer-links a{display:inline-flex;align-items:center;min-height:44px;padding-inline:.25rem;color:var(--text-2);text-decoration:none}
.footer-links a:hover{color:var(--text-1)}
.visit-map{display:flex;align-items:center;min-height:2rem;opacity:.75;transition:opacity var(--t-fast)}
.visit-map:hover{opacity:1}
.colophon{margin:0}
.colophon a{color:var(--text-2)}

/* 5.11 STORM page components ------------------------------------------------- */
.page-hero{padding-block:clamp(2.5rem,1.5rem + 4vw,5rem) clamp(1.5rem,1rem + 2vw,3rem);max-width:58rem}
.page-title{margin:0 0 var(--s-4);font-family:var(--font-serif);font-weight:500;font-size:clamp(2rem,1.4rem + 2.4vw,3.25rem);line-height:1.08;
  letter-spacing:var(--track-serif);color:var(--text-1)}
.page-title .mark{color:var(--accent)}
.page-intro{margin:0;font-size:var(--fs-md);line-height:1.6;color:var(--text-2);max-width:var(--measure)}
.page-actions{display:flex;flex-wrap:wrap;gap:var(--s-3);margin-top:var(--s-5)}
.facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));margin:0;overflow:hidden;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface-1)}
.facts > div{padding:var(--s-4) var(--s-5);box-shadow:1px 1px 0 0 var(--line)}
.facts dt{margin:0;font-size:var(--fs-xs);font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--text-3)}
.facts dd{margin:var(--s-1) 0 0;font-size:var(--fs-sm);line-height:1.45;font-weight:500;color:var(--text-1)}
.facts dd .muted{font-weight:400}
.concept{margin:0;padding:clamp(1rem,.5rem + 2vw,2rem);overflow:hidden;border:1px solid var(--line);border-radius:var(--r-xl);background:var(--surface-1)}
.concept svg{display:block;width:100%;height:auto}
.concept figcaption{margin-top:var(--s-4);font-size:var(--fs-sm);line-height:1.5;color:var(--text-3);max-width:var(--measure)}
.concept figcaption b{color:var(--text-2);font-weight:500}
/* SVG palette for the concept diagram (inline SVG uses these classes) */
.c-node{fill:var(--surface-3);stroke:var(--line-strong);stroke-width:1}
.c-node-accent{fill:var(--accent-tint);stroke:var(--accent-line);stroke-width:1}
.c-edge{fill:none;stroke:var(--text-3);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
.c-arrow{fill:var(--text-3);stroke:none}
.c-icon{fill:none;stroke:var(--text-2);stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.c-label{fill:var(--text-1);font-family:var(--font-sans);font-size:14px;font-weight:500}
.c-sub{fill:var(--text-3);font-family:var(--font-sans);font-size:12px;font-weight:400}
.c-signal{fill:none;stroke:var(--signal);stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.c-risk{fill:none;stroke:var(--risk);stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.c-safe{fill:none;stroke:var(--safe);stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.c-dot-signal{fill:var(--signal)} .c-dot-risk{fill:var(--risk)} .c-dot-safe{fill:var(--safe)}
.c-text-signal{fill:var(--signal)} .c-text-risk{fill:var(--risk)} .c-text-safe{fill:var(--safe)}
/* Pipeline: four HTML steps (sensing → contact memory → risk assessment → correction or stop) with inline SVG icons */
.pipeline{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--s-4);margin:0;padding:0;list-style:none}
.step{position:relative;padding:var(--s-4) var(--s-4) var(--s-5);border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface-2)}
.step + .step::before{content:"";position:absolute;left:-12px;top:50%;width:8px;height:8px;border-top:1.5px solid var(--text-3);
  border-right:1.5px solid var(--text-3);transform:translateY(-50%) rotate(45deg)}
.step-icon{display:block;height:64px;margin:0 0 var(--s-3)}
.step-icon svg{display:block;height:100%;width:auto;max-width:100%}
.step-num{display:block;font-size:var(--fs-xs);font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--text-3)}
.step--signal .step-num{color:var(--signal)} .step--risk .step-num{color:var(--risk)} .step--safe .step-num{color:var(--safe)}
.step-title{margin:var(--s-1) 0 var(--s-1);font-size:var(--fs-body);font-weight:500;line-height:1.3;color:var(--text-1)}
.step-sub{margin:0;font-size:var(--fs-sm);line-height:1.45;color:var(--text-2)}
.portrait-aside{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:clamp(1.5rem,1rem + 3vw,3rem);align-items:center}
.portrait-aside figure{margin:0}
.portrait-aside figcaption{margin-top:var(--s-3);font-size:var(--fs-sm);line-height:1.5;color:var(--text-3)}
.press{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--s-4);align-items:center;padding:var(--s-5);border:1px solid var(--line);
  border-radius:var(--r-lg);background:var(--surface-1);color:inherit;text-decoration:none;
  transition:border-color var(--t-fast) var(--ease-out),background var(--t-fast) var(--ease-out)}
.press:hover{border-color:var(--line-strong);background:var(--surface-2);color:inherit}
.press-kicker{display:block;margin:0 0 var(--s-1);font-size:var(--fs-xs);font-weight:600;letter-spacing:.08em;text-transform:uppercase;color:var(--text-3)}
.press-title{display:block;margin:0;font-size:var(--fs-md);font-weight:500;line-height:1.35;color:var(--text-1)}
.press-meta{display:block;margin:var(--s-1) 0 0;font-size:var(--fs-sm);color:var(--text-3)}
.press-arrow{font-size:1.25rem;color:var(--accent);transition:transform var(--t-fast) var(--ease-out)}
.press:hover .press-arrow{transform:translateX(3px)}

/* ----------------------------------------------------------------------------
   6. UTILITIES
   ---------------------------------------------------------------------------- */
.plate{display:block;overflow:hidden;padding:6px;border:1px solid var(--plate-line);border-radius:var(--r-md);background:var(--plate)}
.plate img{display:block;width:100%;height:100%;object-fit:contain;border-radius:calc(var(--r-md) - 4px)}
.muted{color:var(--text-3)}
.visually-hidden{position:absolute !important;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:.45em;min-height:40px;padding:0 1.05rem;border:1px solid transparent;border-radius:var(--r-md);
  font:500 var(--fs-sm)/1 var(--font-sans);text-decoration:none;white-space:nowrap;cursor:pointer;
  transition:background var(--t-fast) var(--ease-out),border-color var(--t-fast) var(--ease-out),color var(--t-fast) var(--ease-out),transform var(--t-fast) var(--ease-out)}
.btn:hover{text-decoration:none}
.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}
.btn-primary:hover{background:var(--accent-strong);border-color:var(--accent-strong);color:var(--accent-ink)}
.btn-ghost{background:transparent;border-color:var(--line-strong);color:var(--text-1)}
.btn-ghost:hover{background:var(--surface-2);border-color:var(--text-3);color:var(--text-1)}
.btn .arrow{transition:transform var(--t-fast) var(--ease-out)}
.btn:hover .arrow{transform:translateX(3px)}
.pill{display:inline-flex;align-items:center;min-height:36px;padding:0 .95rem;border:1px solid var(--line-strong);border-radius:var(--r-pill);
  background:var(--surface-1);font-size:var(--fs-sm);font-weight:500;color:var(--text-1);text-decoration:none;
  transition:border-color var(--t-fast) var(--ease-out),background var(--t-fast) var(--ease-out),color var(--t-fast) var(--ease-out)}
.pill:hover{border-color:var(--accent-line);background:var(--surface-2);color:var(--accent-strong);text-decoration:none}
.grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s-6)}
.stack > * + *{margin-top:var(--s-4)}
.stack-lg > * + *{margin-top:var(--s-6)}
.flow > * + *{margin-top:var(--s-7)}

/* ----------------------------------------------------------------------------
   7. RESPONSIVE  (1440 desktop → ≤1024 tablet → ≤768 → ≤480 phone)
   ---------------------------------------------------------------------------- */
@media (max-width:1024px){
  /* hero stacks: name/role → portrait → statement/links */
  .hero{grid-template-columns:minmax(0,1fr);grid-template-rows:auto auto auto;row-gap:var(--s-5)}
  .hero-head,.hero-body,.hero-media{grid-column:1}
  .hero-head{grid-row:1;align-self:auto}
  .hero-media{grid-row:2;max-width:620px}
  .hero-body{grid-row:3;align-self:auto}
  .feature{grid-template-columns:minmax(240px,340px) minmax(0,1fr)}
  .misc-row{grid-template-columns:200px minmax(0,1fr)}
  .misc-cat{font-size:1.25rem;min-height:5rem}
}
@media (max-width:920px){
  /* nav: links wrap under the brand without JS; with JS they collapse behind the toggle */
  .nav-inner{flex-wrap:wrap;padding-block:var(--s-2)}
  .nav-links{flex-basis:100%}
  html.js .nav-toggle{display:grid}
  html.js .nav-links{display:none;position:absolute;left:0;right:0;top:100%;flex-direction:column;align-items:stretch;gap:2px;
    padding:var(--s-3) var(--gutter) var(--s-4);background:var(--bg);border-bottom:1px solid var(--line);box-shadow:var(--shadow-lg)}
  html.js .site-nav.is-open .nav-links{display:flex}
  html.js .nav-links a{min-height:44px;font-size:var(--fs-body)}
  html.js .nav-links .nav-storm{margin:var(--s-2) 0 0}
}
@media (max-width:768px){
  .feature,.lab,.portrait-aside,.grid-2{grid-template-columns:minmax(0,1fr)}
  .feature-media{width:100%;max-width:460px;margin-inline:auto}
  .facts{grid-template-columns:repeat(2,minmax(0,1fr))}
  .misc-row{grid-template-columns:minmax(0,1fr);gap:var(--s-3)}
  .misc-cat{position:static;justify-content:flex-start;width:max-content;max-width:100%;min-height:0;padding:var(--s-2) var(--s-4);font-size:1.125rem;text-align:left}
  .misc{gap:var(--s-7)}
  .pub-toolbar{padding:var(--s-3) var(--s-4)}
  .pill,.chip,.nav-links a{min-height:44px}
  .press{grid-template-columns:minmax(0,1fr)}
  .press-arrow{display:none}
  .pipeline{grid-template-columns:minmax(0,1fr);gap:var(--s-5)}
  .step + .step::before{left:50%;top:-16px;transform:translateX(-50%) rotate(135deg)}
}
@media (max-width:640px){
  .pub{grid-template-columns:minmax(0,1fr);gap:var(--s-3)}
  .pub .plate{width:100%;max-width:280px;height:auto;aspect-ratio:3 / 2}
}
@media (max-width:480px){
  .facts{grid-template-columns:minmax(0,1fr)}
  .news-item{grid-template-columns:minmax(0,1fr);gap:var(--s-1)}
  .theme-summary{column-gap:var(--s-3)}
  .theme-papers{grid-template-columns:minmax(0,1fr)}
  .mini{grid-template-columns:96px minmax(0,1fr)}
  .feature-facts{gap:var(--s-3) var(--s-5)}
  .btn{min-height:44px}
  .footer-inner{flex-direction:column;align-items:flex-start}
  /* Phones: give the stage a black band below the square picture so the native
     control bar sits on black instead of over the poster's lettering. */
  .video-stage{aspect-ratio:1 / 1.16}
  .video-stage video{object-position:50% 0}
  /* Misc dates drop to their own line instead of wrapping as an indented orphan. */
  .misc-entries .when{display:block;margin:.15rem 0 0}
}

/* ----------------------------------------------------------------------------
   8. MOTION  (160–220 ms ease-out; one fade-up on hero load; all off under reduced motion)
   ---------------------------------------------------------------------------- */
@keyframes rise{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:no-preference){
  .hero-head,.hero-body,.hero-media,.page-hero{animation:rise var(--t-slow) var(--ease-out) both}
  .hero-body{animation-delay:80ms}
  .hero-media{animation-delay:140ms}
  .theme[open] .theme-body{animation:rise var(--t-base) var(--ease-out) both}
  .news-archive[open] > .news-list{animation:rise var(--t-base) var(--ease-out) both}
}
@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation:none !important;transition:none !important}
}

/* ----------------------------------------------------------------------------
   9. PRINT
   ---------------------------------------------------------------------------- */
@media print{
  :root{--bg:#fff;--surface-1:#fff;--surface-2:#f4f4f2;--surface-3:#ececea;--text-1:#111;--text-2:#333;--text-3:#555;
    --line:rgba(0,0,0,.18);--line-strong:rgba(0,0,0,.3);--accent:#3f4c0a;--accent-strong:#3f4c0a;--accent-ink:#fff;--accent-line:rgba(63,76,10,.5);
    --shadow-sm:none;--shadow-md:none;--shadow-lg:none}
  .site-nav,.skip-link,.video-stage,.video-controls,.visit-map,.nav-toggle,.pub-toolbar{display:none !important}
  .section{padding-block:1.5rem}
  .theme,.pub,.mini,.feature,.lab{break-inside:avoid}
  a{color:inherit;text-decoration:underline}
}
