@font-face {
  font-family: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(/fonts/IBMPlexMono-400.woff2) format('woff2');
  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: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(/fonts/IBMPlexMono-400-ext.woff2) format('woff2');
  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: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/IBMPlexMono-500.woff2) format('woff2');
  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: 'IBM Plex Mono';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/IBMPlexMono-500-ext.woff2) format('woff2');
  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';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(/fonts/Inter-400.woff2) format('woff2');
  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';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(/fonts/Inter-400-ext.woff2) format('woff2');
  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';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/Inter-500.woff2) format('woff2');
  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';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/Inter-500-ext.woff2) format('woff2');
  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';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(/fonts/Inter-600.woff2) format('woff2');
  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';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(/fonts/Inter-600-ext.woff2) format('woff2');
  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: 'Schibsted Grotesk';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(/fonts/SchibstedGrotesk-400.woff2) format('woff2');
  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: 'Schibsted Grotesk';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(/fonts/SchibstedGrotesk-400-ext.woff2) format('woff2');
  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: 'Schibsted Grotesk';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/SchibstedGrotesk-500.woff2) format('woff2');
  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: 'Schibsted Grotesk';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(/fonts/SchibstedGrotesk-500-ext.woff2) format('woff2');
  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: 'Schibsted Grotesk';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/SchibstedGrotesk-700.woff2) format('woff2');
  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: 'Schibsted Grotesk';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url(/fonts/SchibstedGrotesk-700-ext.woff2) format('woff2');
  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: 'Schibsted Grotesk';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url(/fonts/SchibstedGrotesk-800.woff2) format('woff2');
  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: 'Schibsted Grotesk';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url(/fonts/SchibstedGrotesk-800-ext.woff2) format('woff2');
  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;
}
:root{
  --paper:#FCFBF8; --ink:#16181D; --graphite:#4F545C; --wash:#F4F2EC; --card:#FFFFFF;
  --hairline:#E7E4DC;
  --amber:#DE9612;        /* decorative only: the spectrum rules keep the solar accent */
  --accent-ink:#0E6A63;   /* text accent — hydrogen teal, AA on --paper */
  --violet:#5A46C4;       /* text-safe violet */
  --disp:'Schibsted Grotesk',system-ui,sans-serif;
  --body:'Inter',system-ui,-apple-system,sans-serif;
  --mono:'IBM Plex Mono',ui-monospace,monospace;
}
*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
body{background:var(--paper);color:var(--ink);font-family:var(--body);font-size:16.5px;line-height:1.65;-webkit-font-smoothing:antialiased}
.wrap{max-width:1120px;margin:0 auto;padding:0 28px}
.narrow{max-width:780px}
a{color:inherit}
a:focus-visible,button:focus-visible{outline:2px solid var(--violet);outline-offset:3px;border-radius:2px}
img{max-width:100%;height:auto}
/* skip link */
.skip{position:absolute;left:-9999px;top:0;z-index:100;background:var(--ink);color:var(--paper);padding:12px 20px;font-size:14px;text-decoration:none;border-radius:0 0 6px 0}
.skip:focus{left:0}
/* back to top */
.to-top{position:fixed;right:24px;bottom:24px;z-index:50;display:flex;align-items:center;justify-content:center;
  width:44px;height:44px;border-radius:50%;background:var(--ink);color:var(--paper);
  border:1px solid var(--ink);box-shadow:0 4px 14px rgba(22,24,29,.18);
  opacity:0;visibility:hidden;transform:translateY(10px);transition:opacity .2s,transform .2s,visibility .2s}
.to-top.on{opacity:.92;visibility:visible;transform:none}
.to-top:hover{opacity:1;background:var(--accent-ink);border-color:var(--accent-ink)}
@media(max-width:760px){.to-top{right:14px;bottom:14px;width:42px;height:42px}}
@media print{.to-top{display:none}}
/* spectral hairline — site signature */
.spectrum{height:2px;border:none;background:linear-gradient(90deg,#6F5BD6 0%,#3D6BD8 18%,#2E9E6B 40%,#C9C42A 58%,#DE9612 74%,#C4372B 100%);opacity:.85}
.spectrum.thin{height:1px;opacity:.5}
/* nav */
nav.site{display:flex;align-items:center;justify-content:space-between;padding:22px 0;gap:12px;flex-wrap:wrap}
.logo{font-family:var(--disp);font-weight:800;font-size:17px;letter-spacing:-.01em;text-decoration:none;color:var(--ink)}
.logo span{color:var(--accent-ink)}
.nav-links{display:flex;gap:24px;list-style:none;flex-wrap:wrap}
.nav-links a{text-decoration:none;color:var(--graphite);font-size:14.5px;font-weight:500;transition:color .15s}
.nav-links a:hover,.nav-links a.active{color:var(--ink)}
.nav-links a.active{border-bottom:2px solid var(--amber);padding-bottom:2px}
.nav-toggle{display:none;background:none;border:1px solid var(--hairline);border-radius:7px;padding:9px 10px;cursor:pointer}
.nav-toggle span{display:block;width:20px;height:2px;background:var(--ink);margin:4px 0}
/* page header */
.page-head{padding:56px 0 36px}
.eyebrow{font-family:var(--mono);font-size:13px;color:var(--graphite);margin-bottom:14px}
.eyebrow b{color:var(--violet);font-weight:500}
h1.page{font-family:var(--disp);font-weight:800;font-size:clamp(34px,5vw,52px);letter-spacing:-.025em;line-height:1.08}
.page-head p.sub{margin-top:16px;max-width:62ch;color:var(--graphite);font-size:17px}
h2{font-family:var(--disp);font-weight:700;font-size:26px;letter-spacing:-.015em}
h3{font-family:var(--disp);font-weight:700;font-size:19px;line-height:1.3}
section{padding:48px 0}
.card{border:1px solid var(--hairline);border-radius:10px;padding:26px;background:var(--card)}
/* footer */
footer.site{padding:48px 0 40px;color:var(--graphite);font-size:14px}
.foot-grid{display:flex;justify-content:space-between;gap:28px;flex-wrap:wrap;margin-top:28px}
.foot-grid .mono{font-family:var(--mono);font-size:12.5px;line-height:1.9}
.foot-grid a{color:var(--graphite)}
.foot-grid a:hover{color:var(--ink)}
/* blog feed */
.filters{display:flex;gap:10px;flex-wrap:wrap;margin:8px 0 34px}
.chip{font-family:var(--mono);font-size:12.5px;padding:7px 14px;border:1px solid var(--hairline);border-radius:999px;background:var(--card);cursor:pointer;color:var(--graphite)}
.chip:hover{border-color:var(--amber)}
.chip[aria-pressed="true"]{background:var(--ink);color:var(--paper);border-color:var(--ink)}
.post{display:grid;grid-template-columns:150px 1fr;gap:28px;padding:30px 0;border-bottom:1px solid var(--hairline)}
.post .meta{font-family:var(--mono);font-size:12.5px;color:var(--graphite);line-height:1.8}
.post .meta .cat{display:inline-block;color:var(--violet)}
.post .meta a{color:var(--graphite)}
.post .body p{max-width:64ch;white-space:pre-line}
.post .body a{color:var(--ink);text-decoration:none;border-bottom:1.5px solid var(--amber)}
.post .photos{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px}
.post .photos img{max-height:230px;width:auto;border-radius:8px;border:1px solid var(--hairline);background:var(--wash)}
.post .quoted{margin-top:12px;padding:12px 16px;border-left:3px solid var(--hairline);color:var(--graphite);font-size:14.5px;white-space:pre-line}
/* publications */
.pub{display:grid;grid-template-columns:110px 1fr auto;gap:20px;padding:20px 0;border-bottom:1px solid var(--hairline);align-items:baseline}
.pub .journal{font-family:var(--mono);font-size:12.5px;color:var(--accent-ink);font-weight:500}
.pub .title{font-weight:600;font-size:16px;line-height:1.45}
.pub .title small{display:block;font-weight:400;font-size:13.5px;color:var(--graphite);margin-top:4px}
.pub .title a{text-decoration:none;color:var(--ink)}
.pub .title a:hover{border-bottom:1.5px solid var(--amber)}
.pub .year{font-family:var(--mono);font-size:13px;color:var(--graphite)}
.yr-h{font-family:var(--disp);font-weight:700;font-size:22px;color:var(--accent-ink);margin:34px 0 6px}
.w{padding:16px 0;border-bottom:1px solid var(--hairline)}
.w .t{font-weight:600;font-size:16px;line-height:1.45}
.w .t a{text-decoration:none;color:var(--ink)}
.w .t a:hover{border-bottom:1.5px solid var(--amber)}
.w .m{font-size:13.5px;color:var(--graphite);margin-top:4px}
.w .m b{font-weight:600;color:var(--ink)}
.w .m .venue{font-weight:600;color:var(--ink)}
.w .c{font-family:var(--mono);font-size:12px;color:var(--violet);margin-top:3px}
.oa{font-family:var(--mono);font-size:10px;letter-spacing:.06em;color:var(--accent-ink);border:1px solid var(--accent-ink);border-radius:3px;padding:1px 5px;margin-left:8px;vertical-align:2px}
/* team */
.people{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
.person{border:1px solid var(--hairline);border-radius:10px;padding:22px;background:var(--card)}
.person .role{font-family:var(--mono);font-size:11.5px;color:var(--violet);margin-bottom:8px}
.person p{font-size:14px;color:var(--graphite);margin-top:6px}
ul.plain{list-style:none}
ul.plain li{padding:10px 0;border-bottom:1px solid var(--hairline)}
@media(max-width:760px){
  .post{grid-template-columns:1fr;gap:8px}
  .people{grid-template-columns:1fr}
  .pub{grid-template-columns:1fr;gap:5px}
}
@media(max-width:820px){
  .nav-toggle{display:block;order:2}
  .nav-links{display:none;order:3;width:100%;flex-direction:column;gap:0;border-top:1px solid var(--hairline);margin-top:8px}
  .nav-links.open{display:flex}
  .nav-links li{border-bottom:1px solid var(--hairline)}
  .nav-links a{display:block;padding:13px 2px;font-size:16px}
  .nav-links a.active{border-bottom:none;color:var(--accent-ink)}
}
@media (prefers-reduced-motion: reduce){*{transition:none!important;scroll-behavior:auto}}
@media print{
  nav.site,.filters,.skip,.spectrum{display:none}
  body{font-size:11pt;background:#fff}
  a[href^="http"]::after{content:" (" attr(href) ")";font-size:9pt;color:#555}
}
