/* robertmyroniuk.com
   One stylesheet. No inline styles anywhere: the Content-Security-Policy forbids them.
   The colour lives in the frame (the olive band, the rust rule, the footer); the reading
   column stays quiet. Sibling palette to vlcbooks.com. */

@font-face {
  font-family: "Source Serif 4";
  src: url("/assets/fonts/source-serif-4-roman.woff2") format("woff2");
  font-weight: 200 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Source Serif 4";
  src: url("/assets/fonts/source-serif-4-italic.woff2") format("woff2");
  font-weight: 200 900;
  font-style: italic;
  font-display: swap;
}

:root {
  --band: #1c2016;
  --band-line: #343a2b;
  --on-band: #f4f2ea;
  --on-band-soft: #c3c1b2;
  --rule: #a3623a;

  --paper: #fafaf7;
  --paper-2: #f0efe8;
  --ink: #1e2318;
  --ink-soft: #4d5345;
  --line: #e0dfd6;
  --hair: #bdbcb0;
  --link: #8a4724;

  --t-ai: #b5582b;
  --t-leadership: #5d6a35;
  --t-faith: #7b5634;
  --t-fitness: #3f6a78;
  /* Buzzword clusters: the topic family plus plum and ochre. */
  --bz1: #b5582b; --bz2: #5d6a35; --bz3: #3f6a78; --bz4: #7a4a6e; --bz5: #a7801f; --bz6: #7b5634;

  --serif: "Source Serif 4", Georgia, "Times New Roman", serif;
  --sans: ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", sans-serif;
  --mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace;

  --shell: min(72rem, calc(100% - 2.5rem));
  --measure: 40rem;
  --step--1: 0.875rem;
  --step-0: 1.1875rem;
  --step-1: 1.4rem;
  --step-2: 1.75rem;
  --step-3: clamp(2.2rem, 1.5rem + 2.6vw, 3.5rem);
  --step-4: clamp(2.5rem, 1.3rem + 4vw, 4.5rem);
  --ease: cubic-bezier(0.22, 0.7, 0.2, 1);

  color-scheme: light;
}

@media (prefers-color-scheme: dark) {
  :root {
    --band: #1c2016;
    --band-line: #343a2b;
    --on-band: #efede3;
    --on-band-soft: #bdbbac;
    --rule: #b8622f;

    --paper: #11130c;
    --paper-2: #1a1d14;
    --ink: #ebe9df;
    --ink-soft: #b7b5a7;
    --line: #2a2f22;
    --hair: #4a5040;
    --link: #e8a07a;

    --t-ai: #d9814f;
    --t-leadership: #9fae68;
    --t-faith: #c49a6c;
    --t-fitness: #7eaebd;
    --bz1: #e08a59; --bz2: #a8b872; --bz3: #84b6c6; --bz4: #c792b7; --bz5: #d9b24f; --bz6: #c9a072;

    color-scheme: dark;
  }
}

/* ------------------------------------------------------------ base */

*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
body {
  margin: 0;
  background: var(--paper);
  color: var(--ink);
  font-family: var(--serif);
  font-size: var(--step-0);
  line-height: 1.6;
  font-optical-sizing: auto;
  font-variant-numeric: oldstyle-nums proportional-nums;
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
}
img { display: block; max-width: 100%; height: auto; }
h1, h2, h3, h4 { line-height: 1.15; text-wrap: balance; margin: 0; font-weight: 450; }
p { margin: 0; text-wrap: pretty; }
ul, ol { margin: 0; padding: 0; }
a { color: inherit; }
::selection { background: var(--rule); color: #fff; }
:focus-visible { outline: 2px solid var(--link); outline-offset: 3px; border-radius: 2px; }
main:focus { outline: none; }

.shell { width: var(--shell); margin-inline: auto; }

/* Small capitals, the label voice: margin labels, footer headings, year markers. Never above a heading. */
.rail dt, .foot-col h2, .year-h, .soon, .figure-name, .draft-tag {
  font-family: var(--serif); font-variant-caps: all-small-caps; letter-spacing: 0.09em;
  font-variant-numeric: lining-nums; font-weight: 500;
}

/* Underlines that draw in from the left on hover. */
.primary a, .intro-links a, .author-links a, .more-link a, .foot-col a, .crumbs a, .rail a {
  text-decoration: none;
  background: linear-gradient(currentColor, currentColor) left calc(100% - 0.1em) / 0 1px no-repeat;
  transition: background-size 420ms var(--ease), color 200ms ease-out;
}
.primary a:hover, .intro-links a:hover, .author-links a:hover, .more-link a:hover,
.foot-col a:hover, .crumbs a:hover, .rail a:hover { background-size: 100% 1px; }

.icon { width: 0.8em; height: 0.8em; flex: none; margin-left: 0.3em; vertical-align: -0.05em; }

.skip {
  position: absolute; left: 1rem; top: -4rem; z-index: 10;
  background: var(--on-band); color: var(--band);
  font: 600 var(--step--1)/1 var(--sans); padding: 0.85rem 1rem; text-decoration: none;
}
.skip:focus { top: 1rem; }

.draft-bar {
  background: var(--paper-2); color: var(--ink);
  font: 500 var(--step--1)/1.4 var(--sans); text-align: center; padding: 0.6rem 1rem;
  border-bottom: 1px solid var(--line);
}

/* ------------------------------------------------------------ the band (masthead) */

.band { background: var(--band); color: var(--on-band); }
.band :focus-visible { outline-color: var(--on-band); }
.band-inner {
  display: flex; align-items: center; justify-content: space-between; gap: 1rem 2.5rem;
  flex-wrap: wrap; padding-block: 1.6rem;
}
.nameplate { display: inline-flex; align-items: center; min-height: 2.75rem; text-decoration: none; }
.nameplate-name {
  font-size: 1.125rem; font-weight: 500; text-transform: uppercase;
  letter-spacing: 0.24em; line-height: 1; font-variation-settings: "opsz" 20;
}

.primary ul { display: flex; flex-wrap: wrap; gap: 0.25rem 2.25rem; list-style: none; }
.primary a {
  display: inline-flex; align-items: center; min-height: 2.75rem;
  font: 400 0.9375rem/1 var(--sans); letter-spacing: 0.01em; color: var(--on-band-soft);
  background-position: left calc(50% + 0.85em);
}
.primary a:hover { color: var(--on-band); }
.primary a[aria-current="page"] { color: var(--on-band); background-size: 100% 1px; background-image: linear-gradient(var(--rule), var(--rule)); }

/* The rust rule under the band. On essays it is the reading-progress line: it stays at
   the top of the viewport and fills as you read. Without scroll-driven animation support
   it is simply a full rule. */
.rule { height: 2px; background: var(--rule); }
.rule span { display: block; height: 100%; }
@supports (animation-timeline: scroll()) {
  .page-article .rule { position: sticky; top: 0; z-index: 5; background: color-mix(in srgb, var(--rule) 22%, var(--paper)); }
  .page-article .rule span {
    background: var(--rule); transform-origin: left; transform: scaleX(0);
    animation: read-progress linear both; animation-timeline: scroll(root);
  }
}
@keyframes read-progress { to { transform: scaleX(1); } }

/* ------------------------------------------------------------ home intro (inside the band) */

.intro {
  display: grid; grid-template-columns: 15rem minmax(0, 1fr) 20rem; gap: 4rem; align-items: start;
  padding-block: 4rem 5.5rem; border-top: 1px solid var(--band-line);
}
.intro-figure { margin: 0.6rem 0 0 0.6rem; }
.intro-portrait {
  width: 100%; aspect-ratio: 4 / 5; object-fit: cover;
  outline: 1px solid var(--band-line); outline-offset: 0.6rem;
}
.intro-figure figcaption { margin-top: 1.5rem; font: 400 var(--step--1)/1.45 var(--sans); color: var(--on-band-soft); }
.figure-name { display: block; font-size: 1.05rem; color: var(--on-band); margin-bottom: 0.15rem; }
.figure-title { display: block; color: var(--on-band); }
.figure-areas { display: grid; gap: 0.3rem; margin-top: 0.75rem; padding-top: 0.75rem; border-top: 1px solid var(--band-line); }
.intro-text { max-width: 38rem; }
.latest { padding-left: 2.5rem; border-left: 1px solid var(--band-line); }
.latest h2 { font-size: 1.3rem; font-variation-settings: "opsz" 30; padding-bottom: 0.9rem; border-bottom: 1px solid var(--band-line); }
.latest .entry { padding-block: 1.35rem; border-bottom-color: var(--band-line); }
.latest .entry-title { font-size: 1.35rem; line-height: 1.22; }
.latest .entry-dek { margin-top: 0.4rem; font-size: 1rem; line-height: 1.5; color: var(--on-band-soft); }
.latest .meta, .latest .topic { color: var(--on-band-soft); }
.latest .topic { color: var(--on-band); }
.latest .draft-tag { color: var(--on-band); }
.latest .empty { color: var(--on-band-soft); font-size: 1.05rem; padding-block: 1.1rem; }
.latest .more-link a { color: var(--on-band); }
.intro h1 {
  font-size: clamp(2.5rem, 1.3rem + 3vw, 4rem); font-weight: 400; letter-spacing: -0.026em; line-height: 1.04;
  font-variation-settings: "opsz" 60;
}
.intro-text > p:not(.intro-links) { margin-top: 2rem; font-size: 1.2rem; line-height: 1.65; color: var(--on-band-soft); max-width: 34rem; letter-spacing: 0.003em; }

/* One quiet line of public credentials, set like the margin labels. */
.credentials {
  display: flex; flex-wrap: wrap; list-style: none; margin-top: 1.75rem;
  font: 400 var(--step--1)/1.5 var(--sans); letter-spacing: 0.02em; color: var(--on-band);
}
.credentials li:not(:last-child)::after { content: "·"; margin-inline: 0.7rem; color: var(--rule); }

.intro-links { display: flex; flex-wrap: wrap; gap: 0.5rem 2.25rem; margin-top: 2.25rem; }
.intro-links a, .author-links a, .more-link a {
  display: inline-flex; align-items: center; min-height: 2.75rem;
  font: 500 0.9375rem/1 var(--sans); letter-spacing: 0.01em;
  background-image: linear-gradient(var(--rule), var(--rule)); background-size: 100% 1px;
  background-position: left calc(50% + 0.85em);
}
.intro-links a:hover, .author-links a:hover, .more-link a:hover { background-image: linear-gradient(currentColor, currentColor); }

/* ------------------------------------------------------------ shared pieces */

.section-h {
  font-size: 1.5rem; font-weight: 400; letter-spacing: -0.005em; padding-bottom: 1rem;
  border-bottom: 1px solid var(--hair); margin-bottom: 0.5rem;
}

.meta {
  display: flex; flex-wrap: wrap; align-items: center; gap: 0.15rem 0;
  font: 400 var(--step--1)/1.5 var(--sans); color: var(--ink-soft);
}
.sep { margin-inline: 0.55rem; }
.topic { display: inline-flex; align-items: center; gap: 0.5rem; color: var(--ink); font-weight: 450; }
.mark { display: inline-block; width: 0.5rem; height: 0.5rem; background: var(--t, var(--rule)); flex: none; }
.topic--ai { --t: var(--t-ai); }
.topic--leadership { --t: var(--t-leadership); }
.topic--faith { --t: var(--t-faith); }
.topic--fitness { --t: var(--t-fitness); }
.draft-tag { color: var(--link); font-size: 1.05rem; }

.entries { list-style: none; }
.entry { padding-block: 2rem; border-bottom: 1px solid var(--line); }
.entry-title { font-size: var(--step-2); font-weight: 450; letter-spacing: -0.012em; font-variation-settings: "opsz" 40; }
.entry-title a { text-decoration: none; transition: color 240ms ease-out; }
.entry-title a:hover { color: var(--link); }
.latest .entry-title a:hover { color: var(--on-band-soft); }
.entry-dek { margin-top: 0.5rem; color: var(--ink-soft); max-width: var(--measure); }
.entry .meta { margin-top: 0.75rem; }

.empty { padding-block: 1.75rem; color: var(--ink-soft); max-width: var(--measure); font-size: 1.25rem; }
.more-link { margin-top: 1.25rem; }

.crumbs { padding-top: 2.5rem; }
.crumbs ol { display: flex; flex-wrap: wrap; list-style: none; font: 400 var(--step--1)/1.5 var(--sans); color: var(--ink-soft); }
.crumbs li + li::before { content: "/"; margin-inline: 0.6rem; color: var(--line); }
.crumbs a { display: inline-block; padding-block: 0.6rem; background-position: left calc(100% - 0.55rem); }
.crumbs a[aria-current="page"] { color: var(--ink); }

.page-head { padding-block: 2.5rem 3.5rem; }
.page-head h1 { font-size: var(--step-3); letter-spacing: -0.02em; font-variation-settings: "opsz" 60; }
.dek { margin-top: 1rem; font-size: 1.3rem; line-height: 1.45; color: var(--ink-soft); max-width: 38rem; }

/* ------------------------------------------------------------ home */

.home { padding-block: 5.5rem 7rem; }
.topic-list { list-style: none; }
.topic-row {
  display: grid; grid-template-columns: 0.6rem 15rem minmax(0, 1fr) auto; column-gap: 1.25rem;
  align-items: baseline; padding-block: 1.5rem; border-bottom: 1px solid var(--line);
}
.topic-row .mark { margin-top: 0.55rem; }
.topic-row h3 { font-size: 1.3rem; font-variation-settings: "opsz" 30; }
.topic-row h3 a { text-decoration: none; transition: color 240ms ease-out; }
.topic-row h3 a:hover { color: var(--link); }
.topic-row p { grid-column: 3; font: 400 0.9375rem/1.5 var(--sans); color: var(--ink-soft); }
/* Weekly buzzword cloud: size carries weight, colour carries cluster, ↑ carries momentum.
   Terms drift gently (staggered by position); hover or tap lifts a term and shows why it ranks. */
.buzz { margin-bottom: 5rem; --bzmax: min(3.4rem, 5.3vh); }
.buzz { scroll-margin-top: 1rem; }
.buzz .section-h { font-size: min(var(--step-3), 6vh); letter-spacing: -0.02em; font-variation-settings: "opsz" 60; padding-bottom: min(1.1rem, 1.6vh); }
.buzz-meta { font: 400 var(--step--1)/1.5 var(--sans); color: var(--ink-soft); max-width: var(--measure); margin: min(1rem, 1.5vh) 0 min(1.5rem, 2vh); }
.buzz-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.5rem; margin-bottom: 0.5rem; }
.buzz-chip { font: 500 0.875rem/1 var(--sans); padding: 0.55rem 0.85rem; border: 1px solid var(--line); background: transparent;
  color: var(--ink-soft); cursor: pointer; border-radius: 999px; transition: background 200ms ease-out, color 200ms ease-out, border-color 200ms; }
.buzz-chip::before { content: ""; display: inline-block; width: 0.6rem; height: 0.6rem; border-radius: 50%; background: var(--bz, var(--hair)); margin-right: 0.45rem; vertical-align: -0.02em; }
.buzz-chip:hover, .buzz-chip[aria-pressed="true"] { color: var(--ink); border-color: var(--bz, var(--hair)); background: var(--paper-2); }
.buzz-cloud { list-style: none; display: flex; flex-wrap: wrap; justify-content: center; align-items: center;
  gap: min(0.7rem, 1.1vh) 0.8rem; padding: min(2.5rem, 3vh) 1rem; border-block: 1px solid var(--line); max-width: 58rem; margin-inline: auto; }
/* Each term is a bubble; size comes from --fs (buzz-sizes.css), so area tracks the term's weight. */
.buzz-term { display: inline-flex; align-items: center; white-space: nowrap; font: inherit; font-family: var(--serif);
  font-size: max(0.8rem, calc(var(--k, 0.35) * var(--bzmax))); line-height: 1; letter-spacing: -0.01em;
  color: color-mix(in srgb, var(--bz, var(--ink-soft)) 82%, var(--ink));
  background: color-mix(in srgb, var(--bz, var(--hair)) 13%, var(--paper));
  border: 1.5px solid color-mix(in srgb, var(--bz, var(--hair)) 55%, transparent);
  border-radius: 999px; padding: 0.42em 0.85em; cursor: pointer;
  box-shadow: 0 1px 0 color-mix(in srgb, var(--bz, var(--hair)) 25%, transparent), 0 6px 16px -10px color-mix(in srgb, var(--bz, var(--ink)) 60%, transparent);
  -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility;
  animation: buzz-drift 7s ease-in-out infinite;
  transition: transform 260ms var(--ease), opacity 260ms ease-out, background 200ms ease-out, box-shadow 260ms var(--ease); }
.buzz-term:hover, .buzz-term:focus-visible { background: color-mix(in srgb, var(--bz, var(--hair)) 22%, var(--paper));
  box-shadow: 0 2px 0 color-mix(in srgb, var(--bz, var(--hair)) 35%, transparent), 0 12px 26px -12px color-mix(in srgb, var(--bz, var(--ink)) 75%, transparent); }
.buzz-term[aria-pressed="true"] { background: var(--bz, var(--ink-soft)); color: var(--paper); border-color: var(--bz, var(--ink-soft)); }
.buzz-up { font: 700 0.55em/1 var(--sans); color: var(--rule); margin-left: 0.35em; }
.buzz-term[aria-pressed="true"] .buzz-up { color: var(--paper); }
.bz-1 { --bz: var(--bz1); } .bz-2 { --bz: var(--bz2); } .bz-3 { --bz: var(--bz3); }
.bz-4 { --bz: var(--bz4); } .bz-5 { --bz: var(--bz5); } .bz-6 { --bz: var(--bz6); }
.buzz-detail { max-width: 38rem; margin: 1.25rem auto 0; padding: 1rem 1.25rem; border-left: 3px solid var(--bz, var(--line));
  background: var(--paper-2); font: 400 0.9375rem/1.5 var(--sans); color: var(--ink-soft); }
.buzz-detail strong { display: block; font: 500 1.2rem/1.3 var(--serif); color: var(--bz, var(--ink)); margin-bottom: 0.2rem; }
.buzz-detail[hidden] { display: none; }
.buzz-themes { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.4rem 2rem; margin-top: min(1.25rem, 1.8vh);
  font: 400 0.9375rem/1.5 var(--sans); color: var(--ink-soft); }
@media (max-width: 720px) { .buzz { --bzmax: min(2rem, 2.8vh); } .buzz-cloud { padding-block: 1rem; } .buzz-meta { font-size: 0.8125rem; } .buzz-legend { gap: 0.35rem; } .buzz-cloud { gap: 0.45rem; padding-inline: 0; } .buzz-chip { padding: 0.45rem 0.65rem; font-size: 0.8125rem; } }
@media (prefers-reduced-motion: reduce) { .buzz-term { animation: none; } }

/* Teaser beside the profile: the week's top five as small bubbles on the dark band. */
.buzz-teaser { margin-top: 2.25rem; padding-top: 1.5rem; border-top: 1px solid var(--band-line); }
.buzz-teaser h2 { font-size: 1.15rem; font-variation-settings: "opsz" 30; color: var(--on-band); margin-bottom: 0.9rem; }
.buzz-minis { list-style: none; display: flex; flex-wrap: wrap; gap: 0.45rem; }
.buzz-mini { font: 500 0.875rem/1 var(--sans); padding: 0.45rem 0.7rem; border-radius: 999px;
  color: color-mix(in srgb, var(--bz, var(--on-band)) 35%, var(--on-band));
  background: color-mix(in srgb, var(--bz, var(--on-band-soft)) 22%, var(--band));
  border: 1px solid color-mix(in srgb, var(--bz, var(--on-band-soft)) 60%, transparent); }
.buzz-mini .buzz-up { font-size: 0.85em; margin-left: 0.3em; }
.buzz-teaser .more-link { margin-top: 0.75rem; }
.buzz-teaser .more-link a { color: var(--on-band); }
@media (prefers-reduced-motion: no-preference) { html { scroll-behavior: smooth; } }

.topics-later { margin-top: 1.5rem; font: 400 0.9375rem/1.5 var(--sans); color: var(--ink-soft); }
.soon { margin-right: 0.75rem; font-size: 1rem; color: var(--ink-soft); }

/* ------------------------------------------------------------ writing index */

.listing { padding-bottom: 5rem; }
.listing .entries { max-width: 48rem; }
.year { display: grid; grid-template-columns: 8rem minmax(0, 48rem); gap: 0 2rem; border-top: 1px solid var(--hair); }
.year-h { font-size: 1.15rem; line-height: 1; padding-top: 2.4rem; color: var(--ink-soft); }

.filters ul { display: flex; flex-wrap: wrap; gap: 0 2rem; list-style: none; margin-bottom: 3rem; }
.filters a {
  display: inline-flex; align-items: center; gap: 0.5rem; min-height: 2.75rem; text-decoration: none;
  font: 400 var(--step--1)/1 var(--sans); color: var(--ink-soft); border-bottom: 1px solid transparent;
  transition: color 200ms ease-out, border-color 200ms ease-out;
}
.filters a:hover { color: var(--ink); }
.filters a[aria-current="page"] { color: var(--ink); border-bottom-color: var(--rule); }

/* ------------------------------------------------------------ article */

.article {
  display: grid; grid-template-columns: 11rem minmax(0, var(--measure)) minmax(0, 1fr);
  column-gap: 3.5rem; padding-bottom: 3rem;
}
.article > * { grid-column: 2; }
.article-head { padding-block: 2.5rem 3rem; }
.article-head h1 {
  font-size: var(--step-3); font-weight: 400; letter-spacing: -0.024em; line-height: 1.06; font-variation-settings: "opsz" 60;
}
.byline { display: flex; align-items: center; gap: 0.85rem; margin-top: 2.25rem; font: 400 0.9375rem/1.4 var(--sans); color: var(--ink-soft); }
.byline a { font-weight: 500; color: var(--ink); text-decoration: none; }
.byline a:hover { color: var(--link); }
.avatar { width: 3rem; height: 3rem; border-radius: 50%; object-fit: cover; }
.avatar--lg { width: 4.5rem; height: 4.5rem; }

.rail { grid-column: 1; grid-row: 1 / span 6; padding-top: 3.15rem; }
.rail dl { position: sticky; top: 2.25rem; display: grid; gap: 1.4rem; margin: 0; font: 400 var(--step--1)/1.4 var(--sans); }
.rail dt { color: var(--ink-soft); font-size: 1.05rem; line-height: 1.2; }
.rail dd { margin: 0.2rem 0 0; color: var(--ink); }
.rail div:first-child { padding-top: 1.1rem; border-top: 1px solid var(--ink); }

.lead-figure { margin: 0 0 2.5rem; grid-column: 2 / 4; }
.lead-figure img { width: 100%; border-radius: 2px; }
.lead-figure figcaption { margin-top: 0.6rem; font: 400 0.8125rem/1.45 var(--sans); color: var(--ink-soft); }

/* ------------------------------------------------------------ prose */

.prose { max-width: var(--measure); }
.prose > * + * { margin-top: 1.5rem; }
.prose h2 { font-size: var(--step-2); font-weight: 450; margin-top: 3.5rem; letter-spacing: -0.012em; font-variation-settings: "opsz" 40; }
.prose h3 { font-size: var(--step-1); font-weight: 500; margin-top: 2.5rem; }
.prose h2 + *, .prose h3 + * { margin-top: 0.85rem; }
.prose a {
  color: var(--link); text-decoration: underline; text-decoration-thickness: 1px; text-underline-offset: 0.2em;
  text-decoration-color: color-mix(in srgb, var(--link) 45%, transparent); transition: text-decoration-color 240ms ease-out;
}
.prose a:hover { text-decoration-color: var(--link); }
.prose ul, .prose ol { padding-left: 1.4rem; }
.prose li + li { margin-top: 0.6rem; }
.prose li::marker { color: var(--rule); }
.prose strong { font-weight: 600; }
.pending {
  font: 500 var(--step--1)/1.45 var(--sans); color: var(--ink); background: var(--paper-2);
  padding: 0.7rem 0.9rem; border-radius: 3px; outline: 1px dashed var(--link); outline-offset: -1px;
}
.prose blockquote {
  font-style: italic; hanging-punctuation: first;
  margin: 3rem 0; padding: 0.25rem 0 0.25rem 1.75rem; border-left: 1px solid var(--rule);
  font-size: 1.65rem; font-weight: 400; line-height: 1.35; font-variation-settings: "opsz" 50; color: var(--ink);
}
.prose code { font-family: var(--mono); font-size: 0.85em; background: var(--paper-2); padding: 0.1em 0.35em; border-radius: 3px; }
.prose pre { background: var(--paper-2); padding: 1.1rem 1.25rem; overflow-x: auto; border-radius: 3px; font-size: 0.875rem; line-height: 1.55; }
.prose pre code { background: none; padding: 0; }
.prose hr { border: 0; border-top: 1px solid var(--line); margin-block: 2.5rem; }

.sources { margin-top: 4rem; padding-top: 1.5rem; border-top: 1px solid var(--hair); }
.sources h2 { font: 500 1.05rem/1.3 var(--serif); font-variant-caps: all-small-caps; letter-spacing: 0.09em; }
.sources ol { margin-top: 0.85rem; padding-left: 1.4rem; font: 400 0.9375rem/1.55 var(--sans); color: var(--ink-soft); }
.sources li + li { margin-top: 0.5rem; }
.sources li::marker { font-variant-numeric: lining-nums; }
.sources a { color: var(--link); text-underline-offset: 0.18em; }

/* Pictures inside an essay: full column width, a hairline frame, caption in the label voice. */
.prose .figure { margin: 2.25rem 0; }
.prose .figure img { display: block; width: 100%; height: auto; border: 1px solid var(--line); }
.prose .figure figcaption { margin-top: 0.6rem; font: 400 var(--step--1)/1.45 var(--sans); color: var(--ink-soft); }
.sources li { scroll-margin-top: 2rem; }
.sources li:target { color: var(--ink); background: var(--paper-2); box-shadow: -0.5rem 0 0 var(--paper-2), 0.5rem 0 0 var(--paper-2); }

/* Numbered citations in the essay text; line-height 0 keeps the paragraph's rhythm even. */
.cite { font: 500 0.66em/0 var(--sans); vertical-align: super; margin-left: 0.08em; font-variant-numeric: lining-nums; }
.cite a { color: var(--link); text-decoration: none; padding-inline: 0.05em; }
.cite a:hover { text-decoration: underline; }

.author-card {
  display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 1.25rem; align-items: start;
  margin-top: 3.5rem; padding: 2rem 0; border-top: 1px solid var(--line); border-bottom: 1px solid var(--line);
  font: 400 0.9375rem/1.55 var(--sans); color: var(--ink-soft);
}
.author-name { font: 500 1.3rem/1.2 var(--serif); color: var(--ink); margin-bottom: 0.4rem; }
.author-name a { text-decoration: none; }
.author-links { display: flex; flex-wrap: wrap; gap: 0 1.5rem; margin-top: 0.5rem; color: var(--ink); }

.more { padding-block: 1.5rem 7rem; max-width: calc(11rem + 3.5rem + var(--measure)); padding-left: calc(11rem + 3.5rem); }

/* ------------------------------------------------------------ about */

.about { padding-bottom: 7rem; }
.about-head {
  display: grid; grid-template-columns: 19rem minmax(0, 1fr); gap: 4.5rem; align-items: end;
  padding-block: 3rem 4.5rem; border-bottom: 1px solid var(--hair);
}
.about-portrait {
  width: calc(100% - 1.2rem); margin: 0.6rem; aspect-ratio: 4 / 5; object-fit: cover;
  outline: 1px solid var(--hair); outline-offset: 0.6rem;
}
.about-head h1 { font-size: var(--step-4); font-weight: 400; letter-spacing: -0.026em; line-height: 1.02; font-variation-settings: "opsz" 60; }
.focus { display: flex; flex-wrap: wrap; list-style: none; margin-top: 1.5rem; max-width: 38rem; font: 400 0.9375rem/1.8 var(--sans); color: var(--ink); }
.focus li:not(:last-child)::after { content: "/"; margin-inline: 0.6rem; color: var(--rule); }
.about-head .intro-links a { color: var(--ink); }

.about-body { max-width: none; }
.about-section {
  display: grid; grid-template-columns: 19rem minmax(0, var(--measure)); gap: 0 3.5rem;
  padding-block: 4rem 4.25rem; border-bottom: 1px solid var(--line);
}
.about-section > * { grid-column: 2; }
.about-section > * + * { margin-top: 1.5rem; }
.about-section h2 { grid-column: 1; grid-row: 1 / span 20; margin: 0; font-size: var(--step-2); font-weight: 400; letter-spacing: -0.012em; }
.about-section h2 + * { margin-top: 0; }
.about-section p:first-of-type { font-size: 1.3rem; line-height: 1.5; }

/* ------------------------------------------------------------ footer */

.foot { background: var(--band); color: var(--on-band); border-top: 2px solid var(--rule); }
.foot :focus-visible { outline-color: var(--on-band); }
.foot-inner {
  display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 1fr) minmax(0, 1fr); gap: 2.5rem;
  padding-block: 4.5rem 3.5rem;
}
.foot-name { font-size: 1.125rem; font-weight: 500; line-height: 1; text-transform: uppercase; letter-spacing: 0.24em; }
.foot-tagline { margin-top: 1rem; font: 400 var(--step--1)/1.5 var(--sans); color: var(--on-band-soft); max-width: 22rem; }
.foot-col h2 { font-size: 1rem; line-height: 1; color: var(--on-band-soft); margin-bottom: 0.75rem; }
.foot-col ul { list-style: none; }
.foot-col li { padding-block: 0.4rem; }
.foot-col a {
  display: inline; padding-block: 0.5rem;
  font: 400 0.9375rem/1.3 var(--sans);
}
.foot-base { padding-block: 1.25rem 2rem; border-top: 1px solid var(--band-line); font: 400 0.8125rem/1.5 var(--sans); color: var(--on-band-soft); }

/* ------------------------------------------------------------ resume */

.resume { padding-bottom: 7rem; }
.resume-head {
  display: grid; grid-template-columns: 11rem minmax(0, 1fr); column-gap: 3.5rem; align-items: start;
  padding-block: 3rem 4rem;
}
.resume-portrait {
  width: calc(100% - 1.2rem); margin: 0.6rem; aspect-ratio: 1; object-fit: cover;
  outline: 1px solid var(--hair); outline-offset: 0.6rem;
}
.resume-id { padding-top: 0.6rem; }
.resume-id h1 { font-size: var(--step-4); font-weight: 400; letter-spacing: -0.026em; line-height: 1.02; font-variation-settings: "opsz" 60; }
.resume-id .dek { max-width: 44rem; }
.resume-meta { margin-top: 1.25rem; font: 400 var(--step--1)/1.6 var(--sans); color: var(--ink-soft); }
.resume-meta a { color: var(--ink); text-decoration: none; }
.resume-meta a:hover { color: var(--link); }
.resume-actions { margin-top: 1.5rem; }
.print-btn, .theme-filter button {
  font: 400 var(--step--1)/1 var(--sans); color: var(--ink); background: none; cursor: pointer;
  min-height: 2.75rem;
}
.print-btn {
  padding: 0 1.15rem; border: 1px solid var(--hair); border-radius: 2px;
  transition: border-color 200ms ease-out, background-color 200ms ease-out;
}
.print-btn:hover { border-color: var(--ink); background: var(--paper-2); }
.download-btn { display: inline-flex; align-items: center; text-decoration: none; margin-right: 0.75rem; background: var(--ink); color: var(--paper); border-color: var(--ink); }
.download-btn:hover { background: var(--band); color: var(--on-band); border-color: var(--band); }

.resume-grid {
  display: grid; grid-template-columns: 11rem minmax(0, 46rem); column-gap: 3.5rem;
  border-top: 1px solid var(--hair);
}
.resume-toc ol { position: sticky; top: 2.25rem; list-style: none; padding-top: 3.25rem; }
.resume-toc a {
  display: flex; align-items: center; gap: 0.6rem; min-height: 2.5rem;
  font: 400 var(--step--1)/1.3 var(--sans); color: var(--ink-soft); text-decoration: none;
  transition: color 200ms ease-out;
}
.resume-toc a::before { content: ""; width: 0.4rem; height: 0.4rem; background: transparent; flex: none; transition: background-color 200ms ease-out; }
.resume-toc a:hover { color: var(--ink); }
.resume-toc a[aria-current] { color: var(--ink); }
.resume-toc a[aria-current]::before { background: var(--rule); }

.resume-section { padding-block: 3.25rem 1rem; scroll-margin-top: 1.5rem; }
.resume-section + .resume-section { border-top: 1px solid var(--line); margin-top: 2.5rem; }
.resume-section > h2 { font-size: var(--step-2); font-weight: 400; letter-spacing: -0.012em; margin-bottom: 1.75rem; }
.resume-summary { font-size: 1.3rem; line-height: 1.6; }
.sub-h { font-size: 1.25rem; font-weight: 450; margin: 3rem 0 1rem; }

.ledger { list-style: none; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); column-gap: 3rem; }
.ledger-row {
  display: grid; grid-template-columns: 7.25rem minmax(0, 1fr); column-gap: 1.25rem;
  padding-block: 1.4rem; border-top: 1px solid var(--line);
}
.ledger-figure {
  grid-row: span 2; font-size: 2.15rem; font-weight: 400; line-height: 1; letter-spacing: -0.02em;
  font-variant-numeric: lining-nums tabular-nums; font-variation-settings: "opsz" 60; color: var(--ink);
}
.ledger-label { font: 400 0.9375rem/1.45 var(--sans); color: var(--ink); }
.ledger-where {
  margin-top: 0.4rem; font-size: 0.95rem; color: var(--ink-soft);
  font-variant-caps: all-small-caps; letter-spacing: 0.08em; font-variant-numeric: lining-nums;
}

.achievements { list-style: none; }
.achievement {
  position: relative; padding-left: 1.4rem; font-size: 1.0625rem; line-height: 1.6;
  transition: opacity 320ms var(--ease);
}
.achievement + .achievement { margin-top: 0.85rem; }
.achievement::before {
  content: ""; position: absolute; left: 0; top: 0.8em; width: 0.6rem; height: 1px; background: var(--rule);
  transition: width 320ms var(--ease);
}
.achievement strong { font-weight: 600; }
.resume.is-filtered .achievement { opacity: 0.32; }
.resume.is-filtered .achievement.is-match { opacity: 1; }
.resume.is-filtered .achievement.is-match::before { width: 0.95rem; height: 2px; }

.timeline { display: flex; flex-direction: column; margin: 0 0 2.75rem; }
.tl-ticks { order: -1; position: relative; height: 1.5rem; list-style: none; }
.tl-ticks li {
  position: absolute; top: 0; transform: translateX(-50%);
  font: 400 0.75rem/1 var(--sans); color: var(--ink-soft); font-variant-numeric: lining-nums;
}
.tl-track { display: grid; gap: 3px; list-style: none; }
.tl-seg { min-width: 0; }
.tl-seg a { display: block; text-decoration: none; padding-bottom: 0.5rem; }
.tl-seg a::before {
  content: ""; display: block; height: 0.55rem; background: var(--tl); margin-bottom: 0.65rem;
  transform-origin: bottom; transition: transform 320ms var(--ease);
}
.tl-seg.is-lit a::before, .tl-seg a:hover::before { transform: scaleY(1.6); }
.tl-name { display: block; font: 500 0.8125rem/1.3 var(--sans); color: var(--ink); padding-right: 0.5rem; }
.tl-dates { display: block; margin-top: 0.15rem; font-size: 0.9rem; color: var(--ink-soft); font-variant-caps: all-small-caps; letter-spacing: 0.06em; font-variant-numeric: lining-nums; }
.tl-seg.is-narrow .tl-dates { display: none; }
.tl--leadership { --tl: var(--t-leadership); }
.tl--faith { --tl: var(--t-faith); }
.tl--fitness { --tl: var(--t-fitness); }
.tl--sap-earlier { --tl: var(--hair); }
.tl--ai { --tl: var(--t-ai); }
.timeline figcaption { margin-top: 0.75rem; font: 400 0.8125rem/1.45 var(--sans); color: var(--ink-soft); }

.theme-filter { display: flex; flex-wrap: wrap; align-items: center; gap: 0 1.75rem; padding-block: 0.75rem; margin-bottom: 1rem; border-block: 1px solid var(--line); }
.theme-filter[hidden] { display: none; }
.theme-filter-label { font-size: 1rem; color: var(--ink-soft); font-variant-caps: all-small-caps; letter-spacing: 0.09em; }
.theme-filter ul { display: flex; flex-wrap: wrap; gap: 0 1.5rem; list-style: none; }
.theme-filter button {
  padding: 0; border: 0; border-bottom: 1px solid transparent; color: var(--ink-soft);
  transition: color 200ms ease-out, border-color 200ms ease-out;
}
.theme-filter button:hover { color: var(--ink); }
.theme-filter button[aria-pressed="true"] { color: var(--ink); border-bottom-color: var(--rule); }
.theme-count { flex-basis: 100%; font: 400 0.8125rem/1.4 var(--sans); color: var(--ink-soft); }
.theme-count:empty { display: none; }

.org { padding-block: 2.25rem 0.5rem; border-top: 1px solid var(--line); }
.org:first-child { border-top: 0; }
.org-head { display: grid; grid-template-columns: minmax(0, 1fr) auto; column-gap: 1.5rem; align-items: baseline; }
.org-head h3 { font-size: 1.75rem; font-weight: 450; letter-spacing: -0.012em; }
.org-meta { font: 400 var(--step--1)/1.4 var(--sans); color: var(--ink-soft); text-align: right; }
.org-about { grid-column: 1 / -1; margin-top: 0.4rem; font-style: italic; color: var(--ink-soft); font-size: 1.0625rem; }
.role {
  margin: 1.5rem -1.25rem 0; padding: 1.25rem 1.25rem 1.5rem; border-radius: 3px;
  transition: background-color 320ms var(--ease); scroll-margin-top: 1.5rem;
}
.role.is-lit, .role:target { background: var(--paper-2); }
.role-head h4 { font-size: 1.3rem; font-weight: 500; line-height: 1.25; }
.role-sub { margin-top: 0.2rem; font: 400 0.9375rem/1.4 var(--sans); color: var(--ink-soft); }
.role-dates { margin-top: 0.45rem; font: 400 var(--step--1)/1.4 var(--sans); color: var(--ink-soft); }
.role-length { margin-left: 0.75rem; font-family: var(--serif); font-size: 0.95rem; font-variant-caps: all-small-caps; letter-spacing: 0.08em; font-variant-numeric: lining-nums; }
.role-summary { margin: 0.9rem 0 1.1rem; font-size: 1.125rem; line-height: 1.6; }

.skills { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 2.25rem 3rem; }
.skill-group h3 { font-size: 1.05rem; font-weight: 500; color: var(--ink-soft); font-variant-caps: all-small-caps; letter-spacing: 0.09em; padding-bottom: 0.6rem; border-bottom: 1px solid var(--hair); }
.skill-group ul { list-style: none; }
.skill-group li { padding-block: 0.55rem; border-bottom: 1px solid var(--line); font: 400 0.9375rem/1.4 var(--sans); }

.education { list-style: none; }
.education li { display: grid; gap: 0.2rem; padding-block: 1rem; border-top: 1px solid var(--line); }
.education strong { font-weight: 500; font-size: 1.15rem; }
.education span { font: 400 0.9375rem/1.4 var(--sans); color: var(--ink-soft); }

.awards { list-style: none; }
.award {
  display: grid; grid-template-columns: minmax(0, 1fr) auto; column-gap: 2rem; align-items: baseline;
  padding-block: 0.85rem; border-top: 1px solid var(--line);
}
.award-name { font-size: 1.0625rem; }
.award-detail { margin-left: 0.6rem; font-size: 0.95rem; color: var(--ink-soft); font-variant-caps: all-small-caps; letter-spacing: 0.08em; }
.award-when { font: 400 var(--step--1)/1.4 var(--sans); color: var(--ink-soft); text-align: right; font-variant-numeric: lining-nums; }

@media (max-width: 1080px) {
  .resume-grid { grid-template-columns: minmax(0, 46rem); justify-content: center; border-top: 0; }
  .resume-toc {
    position: sticky; top: 0; z-index: 4; background: var(--paper);
    border-block: 1px solid var(--line); margin-inline: calc(50% - 50vw); padding-inline: calc(50vw - 50%);
  }
  .resume-toc ol { position: static; display: flex; gap: 1.5rem; padding-top: 0; overflow-x: auto; scrollbar-width: none; }
  .resume-toc a { white-space: nowrap; }
}

@media (max-width: 720px) {
  .resume-head { grid-template-columns: 5.5rem minmax(0, 1fr); gap: 1.25rem 1.5rem; align-items: start; padding-block: 1.5rem 2.5rem; }
  .resume-portrait { width: calc(100% - 0.8rem); margin: 0.4rem; outline-offset: 0.4rem; }
  .resume-id { display: contents; }
  .resume-id h1 { grid-column: 2; align-self: center; font-size: clamp(2rem, 1.2rem + 4vw, 2.6rem); }
  .resume-id .dek, .resume-id .focus, .resume-meta, .resume-actions { grid-column: 1 / -1; }
  .resume-id .dek { margin-top: 0; }
  .ledger, .skills { grid-template-columns: minmax(0, 1fr); }
  .resume-id .focus { display: grid; gap: 0.15rem; }
  .resume-id .focus li::after { content: none; }
  .org-head { grid-template-columns: minmax(0, 1fr); }
  .org-meta { text-align: left; margin-top: 0.3rem; }
  .role { margin-inline: -0.75rem; padding-inline: 0.75rem; }
  .tl-name { font-size: 0.75rem; }
  .tl-dates, .tl-seg.is-narrow .tl-name { display: none; }
  .award { grid-template-columns: minmax(0, 1fr); }
  .award-when { text-align: left; }
}

@media print {
  @page { margin: 14mm 14mm 16mm; }
  .skip, .band, .rule, .foot, .crumbs, .resume-toc, .timeline, .theme-filter, .resume-actions, .draft-bar { display: none !important; }
  body { background: #fff; color: #000; font-size: 10pt; line-height: 1.45; }
  .shell { width: auto; }
  .resume { padding: 0; }
  .resume-head { padding-block: 0 10pt; grid-template-columns: 22mm minmax(0, 1fr); gap: 8mm; }
  .resume-portrait { outline: 0; margin: 0; width: 100%; }
  .resume-id h1 { font-size: 22pt; }
  .resume-id .dek { font-size: 11pt; margin-top: 4pt; color: #000; }
  .focus, .resume-meta { font-size: 8.5pt; margin-top: 4pt; color: #222; }
  .resume-grid { display: block; border-top: 1px solid #000; }
  .resume-section { padding-block: 10pt 0; margin-top: 0 !important; }
  .resume-section > h2 { font-size: 13pt; margin-bottom: 6pt; }
  .resume-summary, .role-summary { font-size: 10pt; }
  .ledger-row { padding-block: 5pt; }
  .ledger-figure { font-size: 14pt; }
  .org { padding-block: 8pt 0; }
  .role { margin: 6pt 0 0; padding: 0; background: none !important; }
  .role, .ledger-row, .award, .skill-group, .education li { break-inside: avoid; }
  .achievement { font-size: 9.5pt; opacity: 1 !important; }
  .resume-section, .resume-section + .resume-section, .org, .ledger-row, .award { border-color: #bbb; }
  a { color: #000 !important; background: none !important; text-decoration: none; }
  .icon { display: none; }
}

/* ------------------------------------------------------------ responsive */

@media (max-width: 1080px) {
  .article { grid-template-columns: minmax(0, var(--measure)); justify-content: center; }
  .article > *, .lead-figure { grid-column: 1; }
  .rail { grid-row: auto; padding-top: 0; margin-bottom: 2.25rem; order: 0; }
  .rail dl { position: static; display: flex; flex-wrap: wrap; gap: 0.75rem 2rem; padding-top: 1rem; border-top: 1px solid var(--line); }
  .rail div:first-child { padding-top: 0; border-top: 0; }
  .more { padding-left: 0; max-width: var(--measure); margin-inline: auto; }
}

@media (max-width: 1080px) {
  .intro { grid-template-columns: 14rem minmax(0, 1fr); gap: 3.5rem; }
  .latest { grid-column: 1 / -1; padding-left: 0; border-left: 0; margin-top: 1rem; }
}

@media (max-width: 900px) {
  .home { padding-block: 4rem 5rem; }
  .about-section { grid-template-columns: minmax(0, 1fr); }
  .about-section > *, .about-section h2 { grid-column: 1; grid-row: auto; }
  .about-section h2 + * { margin-top: 1rem; }
  .foot-inner { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
  .foot-id { grid-column: 1 / -1; }
}

@media (max-width: 720px) {
  :root { --shell: calc(100% - 2rem); --step-0: 1.125rem; }
  .band-inner { padding-block: 0.9rem 0.3rem; gap: 0; }
  .nameplate-name { font-size: 1rem; letter-spacing: 0.2em; }
  .primary ul { gap: 0 1.5rem; }
  .topic-row { grid-template-columns: 0.6rem minmax(0, 1fr); }
  .topic-row p { grid-column: 2; margin-top: 0.35rem; }
  .intro { grid-template-columns: 7.5rem minmax(0, 1fr); gap: 1.5rem; align-items: start; padding-block: 2rem 3rem; }
  .intro-figure { margin: 0.4rem; }
  .intro-portrait { outline-offset: 0.4rem; }
  .intro-figure figcaption { display: none; }
  .intro-text { display: contents; }
  .intro h1 { grid-column: 2; align-self: end; font-size: clamp(1.8rem, 1rem + 4vw, 2.4rem); }
  .intro-text > p:not(.intro-links), .intro-links, .credentials { grid-column: 1 / -1; }
  .credentials { margin-top: 0; }
  .intro-text > p:not(.intro-links) { margin-top: 0.25rem; font-size: 1.125rem; }
  .intro-links { margin-top: 0; }
  .about-head { grid-template-columns: 8rem minmax(0, 1fr); gap: 1.5rem; align-items: start; padding-block: 1.5rem 3rem; }
  .about-portrait { width: calc(100% - 0.8rem); margin: 0.4rem; outline-offset: 0.4rem; }
  .about-head > div { display: contents; }
  .about-head h1 { grid-column: 2; align-self: end; font-size: clamp(2rem, 1.2rem + 4vw, 2.6rem); }
  .about-head .dek, .focus, .about-head .intro-links { grid-column: 1 / -1; }
  .about-head .dek { margin-top: 0.25rem; }
  .year { grid-template-columns: minmax(0, 1fr); }
  .year-h { padding-top: 1.25rem; }
  .entry-title { font-size: 1.5rem; }
  .prose blockquote { font-size: 1.3rem; }
  .author-card { grid-template-columns: minmax(0, 1fr); }
}

@media (prefers-reduced-motion: reduce) {
  * { transition: none !important; }
  .page-article .rule span { animation: none; transform: none; }
}
