/* Aligned insight-slide layouts for Stoa — screenshot-first compositions.
   Palette literals match _extensions/stoa/stoa-dark.scss. */

/* ── Deck frame ────────────────────────────────────────────── */

.reveal .stoa-topbar { margin-bottom: 40px; }

.reveal .slide.level2:not(.plain):not(.perspective-slide) > h2 {
  max-width: 30ch;
  margin: 0 0 10px;
  padding: 0;
  border: 0;
  line-height: normal;
}

.reveal .slide.level2:not(.plain):not(.perspective-slide) > h2 + p {
  max-width: 56ch;
  margin: 0 0 30px;
  color: #A8A49C;
  font-size: 36px;
  line-height: 1.3;
}

/* The first comparison uses a slightly deeper intro gap in the source deck. */
.reveal .slide.level2.comparison-slide:not(.plain):not(.perspective-slide) > h2 + p {
  margin-bottom: 34px;
}

/* This heading is the one source slide that explicitly uses the theme's
   tighter heading line height. */
.reveal .slide.matthew-slide > h2 { line-height: 1.06; }

/* ── Chain rows ─────────────────────────────────────────────── */

.reveal .chain {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0 0.6em;
  font-family: var(--r-mono-font, "IBM Plex Mono", monospace);
  font-size: 0.74em;
  font-weight: 500;
  letter-spacing: 0.05em;
  line-height: 1.6;
  border-top: 1px solid rgba(237, 233, 225, 0.30);
  padding-top: 0.6em;
  margin: 1em 0 0;
}

.reveal .chain .term { color: #EDE9E1; }
.reveal .chain .term.accent { color: #C68A43; }
.reveal .chain .op { color: #6E6B65; }
.reveal .chain-sequence { text-transform: uppercase; letter-spacing: 0.15em; }
.reveal .chain-sequence .op { color: #C68A43; }

.reveal .q-primary { color: #EDE9E1; }
.reveal .q-accent  { color: #C68A43; }

/* ── Versus: two sides split by a mark on a hairline ────────── */

.reveal .versus {
  display: grid;
  grid-template-columns: 1fr 96px 1fr;
  align-items: stretch;
  flex: 1;
  min-height: 0;
  margin: 0;
}

.reveal .versus-rule { grid-template-columns: 1fr 200px 1fr; }

.reveal .versus > .side {
  display: flex;
  flex-direction: column;
  min-height: 0;
  gap: 0;
  padding-top: 0;
  border-top: 0;
}

.reveal .versus .side-name {
  display: block;
  font-family: var(--r-mono-font, "IBM Plex Mono", monospace);
  font-size: 0.6em;
  font-weight: 500;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: #6E6B65;
  margin-bottom: 0.3em;
}

.reveal .versus .side-formula {
  display: block;
  font-size: 1.05em;
  font-weight: 600;
  letter-spacing: -0.016em;
  padding: 0;
  border: 0;
  margin: 0;
}

.reveal .versus .side:has(.side-formula) > p:first-child {
  margin: 0 0 20px;
  padding-bottom: 14px;
  border-bottom: 1px solid rgba(237, 233, 225, 0.30);
  line-height: normal;
}

.reveal .versus .side:has(.side-formula) .side-name {
  margin: 0 0 8px;
  font-size: 28px;
  line-height: normal;
}

.reveal .relationship-slide .side-formula {
  font-size: 52px;
  line-height: 60px;
}

/* The relationship slide uses two landscape illustrations. Pull their visual
   energy toward the central question while preserving equal figure height. */
.reveal .relationship-slide .versus {
  grid-template-columns: minmax(0, 1fr) 128px minmax(0, 1fr);
  column-gap: 24px;
}

.reveal .relationship-slide .side:has(.side-formula) > p:first-child {
  margin-bottom: 12px;
}

.reveal .relationship-slide .image-slot {
  flex: 0 0 360px;
  height: 360px;
  align-items: center;
  justify-content: center;
  background: #0C0C0D;
  isolation: isolate;
}

.reveal .relationship-slide .image-slot img {
  position: absolute;
  inset: 0;
  display: block;
  width: 100% !important;
  max-width: none;
  height: 100% !important;
  max-height: none;
  object-fit: contain;
  object-position: center center;
  mix-blend-mode: lighten;
}

.reveal .relationship-slide .versus-mark {
  font-size: 24px;
  line-height: 1.25;
  letter-spacing: 0.12em;
}

.reveal .spartan-slide .side-formula {
  font-size: 48px;
  line-height: normal;
}

/* The Spartan slide breaks the surrounding comparison rhythm with a large,
   matched diptych. The figures move inward and share one visual baseline. */
.reveal .spartan-diptych {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 132px minmax(0, 1fr);
  align-items: stretch;
  column-gap: 0;
  min-height: 0;
  margin: 0;
}

.reveal .spartan-panel {
  display: flex;
  flex-direction: column;
  min-width: 0;
  margin: 0;
}

.reveal .spartan-image {
  aspect-ratio: 3 / 2;
  position: relative;
  overflow: hidden;
  background: #0C0C0D;
  isolation: isolate;
}

.reveal .spartan-image img {
  position: absolute;
  inset: 0;
  display: block;
  width: 100% !important;
  max-width: none;
  height: 100% !important;
  max-height: none;
  object-fit: contain;
  object-position: center center;
  margin: 0;
  border: 0;
  box-shadow: none;
}

/* Match the two source canvases without relying on inline one-off transforms.
   Both panels use the same zoom; the small horizontal offsets compensate for
   baked-in black space so the illustrated subjects share an optical center. */
.reveal .spartan-image .spartan-art {
  transform-origin: center center;
}

.reveal .spartan-image .scarcity-art {
  transform: translateX(5.3%) scale(1.08);
}

.reveal .spartan-image .abundance-art {
  transform: translateX(2.7%) scaleX(-1) scale(1.08);
}

.reveal .spartan-panel > p {
  max-width: none;
  margin: 0;
}

.reveal .spartan-panel > p:has(> .spartan-kicker) {
  margin-top: 14px;
  line-height: normal;
}

.reveal .spartan-kicker {
  font-family: var(--r-mono-font, "IBM Plex Mono", monospace);
  font-size: 24px;
  font-weight: 500;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: #6E6B65;
}

.reveal .spartan-panel > p:has(> strong) {
  margin-top: 6px;
  font-size: 38px;
  line-height: 1.18;
}

.reveal .spartan-panel > p > strong {
  font-weight: 600;
}

.reveal .spartan-panel.accent > p > strong {
  color: #C68A43;
}

.reveal .spartan-axis {
  display: flex;
  align-items: stretch;
  justify-content: center;
  min-width: 0;
}

.reveal .spartan-axis > p {
  display: flex;
  align-items: stretch;
  width: 100%;
  max-width: none;
  margin: 0;
}

.reveal .spartan-axis-label {
  display: flex;
  flex: 1;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 14px;
  font-family: var(--r-mono-font, "IBM Plex Mono", monospace);
  font-size: 20px;
  font-weight: 500;
  line-height: 1.2;
  letter-spacing: 0.12em;
  text-align: center;
  text-transform: uppercase;
  color: #C68A43;
  white-space: nowrap;
}

.reveal .spartan-axis-label::before,
.reveal .spartan-axis-label::after {
  content: "";
  width: 1px;
  flex: 1;
  background: rgba(237, 233, 225, 0.13);
}

.reveal .spartan-slide > .closer {
  margin-top: 20px;
  padding-top: 18px;
}

.reveal .versus .side.accent:has(.side-formula) > p:first-child {
  border-bottom-color: #C68A43;
}

.reveal .versus .side-tag {
  float: right;
  font-family: var(--r-mono-font, "IBM Plex Mono", monospace);
  font-size: 0.6em;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: #6E6B65;
}

.reveal .versus .side:not(:has(.side-formula)) > p:first-child {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 24px;
  line-height: normal;
  max-width: none;
  margin: 0 0 22px;
  padding-bottom: 14px;
  border-bottom: 1px solid rgba(237, 233, 225, 0.30);
}

.reveal .versus .side.accent:not(:has(.side-formula)) > p:first-child {
  border-bottom-color: #C68A43;
}

.reveal .versus .side:not(:has(.side-formula)) .side-name {
  margin: 0;
  color: #EDE9E1;
  font-family: var(--r-main-font, "Archivo", sans-serif);
  font-size: 40px;
  font-weight: 600;
  letter-spacing: -0.012em;
  text-transform: none;
}

.reveal .versus .side.accent:not(:has(.side-formula)) .side-name {
  color: #C68A43;
}

.reveal .versus .side:not(:has(.side-formula)) .side-tag {
  float: none;
  margin: 0;
}

.reveal .versus .side.accent .side-formula { color: #C68A43; }
.reveal .versus .side.muted  .side-formula { color: #A8A49C; }

.reveal .versus .side img {
  min-height: 0;
  width: 100%;
  height: 100%;
  object-fit: contain;
  margin: 0;
  background: none;
  border: 0;
  box-shadow: none;
}

/* These are the six image slots from the supplied Stoa source. The assets are
   direct children of the slot so Quarto cannot add paragraph geometry. */
.reveal .versus .image-slot {
  display: flex;
  align-items: center;
  justify-content: center;
  flex: 1 1 0;
  min-height: 0;
  position: relative;
  margin: 0;
  overflow: hidden;
}

/* Give each portrait a fixed inset frame so object-fit centers the visible
   artwork at every Reveal.js scale and browser aspect ratio. */
.reveal .comparison-slide .image-slot img {
  position: absolute;
  inset: 0;
  display: block;
  width: 100% !important;
  max-width: none;
  height: 100% !important;
  max-height: none;
  object-fit: contain;
  object-position: center center;
  margin: 0;
}

/* RoboCop uses matched cinematic scenes rather than score-card artwork. The
   reception data remains live text below each illustration. */
.reveal .robocop-slide .image-slot {
  flex: 0 0 auto;
  aspect-ratio: 16 / 9;
  border: 1px solid rgba(237, 233, 225, 0.13);
  background: #0C0C0D;
}

.reveal .robocop-slide .image-slot img {
  object-fit: cover;
}

.reveal .robocop-slide .film-stats {
  min-height: 64px;
  margin-top: 14px;
  padding-top: 14px;
  border-top: 1px solid rgba(237, 233, 225, 0.13);
  font-family: var(--r-mono-font, "IBM Plex Mono", monospace);
  line-height: 1.1;
}

.reveal .robocop-slide .film-stats > p {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto auto auto;
  align-items: center;
  gap: 18px;
  max-width: none;
  margin: 0;
  font-size: inherit;
}

.reveal .robocop-slide .film-name {
  color: #A8A49C;
  font-size: 22px;
}

.reveal .robocop-slide .film-score {
  display: grid;
  justify-items: start;
  gap: 3px;
  color: #EDE9E1;
}

.reveal .robocop-slide .film-score strong {
  font-size: 28px;
  font-weight: 500;
}

.reveal .robocop-slide .film-score small {
  color: #6E6B65;
  font-size: 14px;
  font-weight: 500;
  letter-spacing: 0.12em;
  text-transform: uppercase;
}

.reveal .robocop-slide .film-status {
  justify-self: end;
  max-width: 12ch;
  font-size: 16px;
  font-weight: 500;
  letter-spacing: 0.1em;
  line-height: 1.2;
  text-align: right;
  text-transform: uppercase;
}

.reveal .robocop-slide .film-status.fresh { color: #C68A43; }
.reveal .robocop-slide .film-status.rotten { color: #6E6B65; }

.reveal .versus .caption {
  display: block;
  font-family: var(--r-mono-font, "IBM Plex Mono", monospace);
  font-size: 0.6em;
  line-height: 1.4;
  color: #6E6B65;
}

.reveal .comparison-slide .side > p:has(> .caption) {
  margin: 18px 0 0;
  max-width: none;
  text-align: center;
  font-size: 28px;
  line-height: 1.4;
}

.reveal .comparison-slide .caption { font-size: inherit; }

.reveal .relationship-slide .image-slot + p {
  margin: 14px 0 0;
  color: #A8A49C;
  font-size: 36px;
  line-height: 1.3;
}

.reveal .relationship-slide .side.accent .image-slot + p { color: #EDE9E1; }

.reveal .relationship-slide .side > p:has(> .caption) {
  margin: 8px 0 0;
  max-width: none;
  font-size: 28px;
  line-height: normal;
}

.reveal .relationship-slide > .closer {
  margin-top: 18px;
  padding-top: 18px;
}

.reveal .relationship-slide .caption { font-size: inherit; }

.reveal .spartan-slide .image-slot + p {
  margin: 20px 0 0;
  max-width: none;
  line-height: normal;
}

.reveal .spartan-slide .image-slot + p > strong {
  display: block;
  margin-bottom: 4px;
  font-size: 36px;
  font-weight: 500;
  line-height: normal;
}

.reveal .spartan-slide .image-slot + p > .caption {
  font-size: 32px;
  line-height: 1.3;
}

.reveal .versus .verdict {
  display: block;
  font-family: var(--r-mono-font, "IBM Plex Mono", monospace);
  font-size: 28px;
  font-weight: 500;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: #C68A43;
  border: 0;
  padding: 0;
  margin: 0;
}

.reveal .spartan-slide .side > p:has(> .verdict) {
  margin: 16px 0 0;
  padding-top: 14px;
  max-width: none;
  border-top: 1px solid rgba(237, 233, 225, 0.13);
  line-height: normal;
}

.reveal .versus .side.muted .verdict { color: #A8A49C; }

/* The mark sits centred on a vertical hairline that runs the full column. */
.reveal .versus > p:has(> .versus-mark) {
  display: flex;
  align-items: stretch;
  min-width: 0;
  max-width: none;
  margin: 0;
}

.reveal .versus-mark {
  align-self: stretch;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 0.4em;
  font-family: var(--r-mono-font, "IBM Plex Mono", monospace);
  font-size: 0.7em;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  text-align: center;
  color: #6E6B65;
  position: relative;
  width: 100%;
}

.reveal .versus-mark::before,
.reveal .versus-mark::after {
  content: "";
  width: 1px;
  flex: 1;
  background: rgba(237, 233, 225, 0.13);
}

.reveal .versus-rule .versus-mark {
  color: #C68A43;
  white-space: nowrap;
}

/* ── Ownership stacks (rented land) ─────────────────────────── */

.reveal .stack { display: flex; flex-direction: column; gap: 0.18em; margin: 0.5em 0; }

.reveal .stack p {
  margin: 0;
  padding: 0.3em 0.52em;
  font-size: 0.7em;
  border: 1px solid rgba(237, 233, 225, 0.30);
}

/* One provider owning every layer reads as a single sealed block. */
.reveal .stack-owned { gap: 0; background: #16161A; border: 1px solid rgba(237, 233, 225, 0.30); }
.reveal .stack-owned p { border: 0; border-bottom: 1px solid rgba(237, 233, 225, 0.13); color: #A8A49C; }
.reveal .stack-owned p:last-child { border-bottom: 0; }

.reveal .stack .swappable { border-style: dashed; border-color: #C68A43; color: #C68A43; }

/* ── Sea level ──────────────────────────────────────────────── */

.reveal .sealevel {
  display: grid;
  grid-template-rows: 1fr auto 1fr;
  flex: 1;
  min-height: 0;
  margin: 0.4em 0;
}

.reveal .sealevel .ceiling {
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  align-items: flex-end;
  text-align: right;
  padding-bottom: 0.55em;
}

.reveal .sealevel .floor { padding-top: 0.55em; }
.reveal .sealevel .arrow { color: #C68A43; }
.reveal .sealevel strong { font-size: 0.96em; font-weight: 600; letter-spacing: -0.014em; }
.reveal .sealevel p { margin: 0; }
.reveal .sealevel p + p { font-size: 0.78em; color: #A8A49C; }

.reveal .sealevel > p:has(> .waterline) {
  width: 100%;
  max-width: none;
}

.reveal .waterline {
  display: flex;
  align-items: center;
  gap: 0.55em;
  font-family: var(--r-mono-font, "IBM Plex Mono", monospace);
  font-size: 0.6em;
  font-weight: 500;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: #C68A43;
  white-space: nowrap;
}

.reveal .waterline::before,
.reveal .waterline::after { content: ""; flex: 1; height: 1px; background: #C68A43; }

/* ── Iron sharpens iron ─────────────────────────────────────── */

.reveal .sharpen {
  display: grid;
  grid-template-columns: 1fr 128px 1fr;
  align-items: center;
  margin: auto 0;
}

.reveal .sharpen > .side { padding-top: 0.48em; border-top: 1px solid rgba(237, 233, 225, 0.30); }
.reveal .sharpen > .side.accent { border-top-color: #C68A43; }
.reveal .sharpen .side-name { display: block; font-size: 1.13em; font-weight: 600; letter-spacing: -0.016em; margin-bottom: 0.4em; }
.reveal .sharpen > .side.accent .side-name { color: #C68A43; }
.reveal .sharpen > .side.muted { color: #A8A49C; }
.reveal .sharpen p { margin: 0 0 0.3em; font-size: 0.87em; line-height: 1.28; }
.reveal .spark { text-align: center; font-size: 1.4em; color: #C68A43; }

/* ── Closer: the line the slide ends on ─────────────────────── */

.reveal .closer {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 1.6em;
  font-size: 44px;
  font-weight: 600;
  line-height: normal;
  letter-spacing: -0.014em;
  border-top: 1px solid rgba(237, 233, 225, 0.30);
  padding-top: 22px;
  margin-top: 24px;
}

.reveal .closer .accent { color: #C68A43; }
.reveal .closer > p,
.reveal .closer-main p {
  margin: 0;
  max-width: none;
  font-size: inherit;
  line-height: normal;
}
.reveal .closer-note p { margin: 0; max-width: none; font-size: inherit; line-height: inherit; }

.reveal .closer-note {
  flex: none;
  max-width: 40ch;
  text-align: right;
  font-family: var(--r-mono-font, "IBM Plex Mono", monospace);
  font-size: 28px;
  font-weight: 400;
  line-height: 1.4;
  letter-spacing: 0;
  color: #6E6B65;
}

/* ── Expertise divergence ───────────────────────────────────── */

.reveal .divergence {
  display: grid;
  grid-template-columns: 300px 1fr;
  gap: 0 1.2em;
  align-items: center;
  margin: 1em 0;
}

.reveal .divergence .shared { padding-right: 1.2em; border-right: 1px solid #C68A43; }

.reveal .divergence .shared-mark {
  display: block;
  font-size: 2.3em;
  font-weight: 600;
  letter-spacing: -0.03em;
  line-height: 1;
  color: #C68A43;
}

.reveal .divergence .paths { display: flex; flex-direction: column; gap: 0.75em; }
.reveal .divergence .path { padding-top: 0.48em; font-size: 0.87em; line-height: 1.4; }
.reveal .divergence .path .op { padding: 0 0.2em; }
.reveal .divergence .expert { border-top: 1px solid #C68A43; }
.reveal .divergence .expert .op { color: #C68A43; }
.reveal .divergence .novice { border-top: 1px solid rgba(237, 233, 225, 0.30); color: #A8A49C; }
.reveal .divergence .novice .op { color: #6E6B65; }

.reveal .divergence .gap-label {
  display: block;
  font-family: var(--r-mono-font, "IBM Plex Mono", monospace);
  font-size: 0.6em;
  font-weight: 500;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: #C68A43;
  text-align: right;
  border-top: 1px solid #C68A43;
  border-image: linear-gradient(to right, rgba(198, 138, 67, 0), #C68A43) 1;
  padding-top: 0.5em;
}

/* The closing quotation is a compact source band, not a second statement. */
.reveal .matthew-slide > p:first-of-type { margin-bottom: auto; }
.reveal .matthew-slide .divergence { margin: auto 0; }
.reveal .matthew-slide blockquote {
  max-width: none;
  margin-top: auto;
  margin-bottom: 0;
  padding-top: 18px;
  border-top: 1px solid rgba(237, 233, 225, 0.13);
  color: #A8A49C;
  font-size: 40px;
  line-height: 1.3;
}
.reveal .matthew-slide blockquote p:first-child::before,
.reveal .matthew-slide blockquote p:last-child::after { content: none; }
.reveal .matthew-slide blockquote p {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 40px;
  max-width: none;
  margin: 0;
}
.reveal .matthew-slide .matthew-quote { max-width: 52ch; }
.reveal .matthew-slide .quote-source {
  flex: none;
  font-family: var(--r-mono-font, "IBM Plex Mono", monospace);
  font-size: 28px;
  font-style: normal;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: #6E6B65;
}

/* Statement slide: the hidden source heading is replaced by Stoa's top bar. */
.reveal .slide.plain:not(.perspective-slide) > h2 { display: none; }
.reveal .slide.plain:not(.perspective-slide) blockquote {
  max-width: 23ch;
  margin: auto 0 0;
  font-size: 96px;
  line-height: 1.1;
  letter-spacing: -0.02em;
}
.reveal .slide.plain:not(.perspective-slide) blockquote p:first-child::before,
.reveal .slide.plain:not(.perspective-slide) blockquote p:last-child::after {
  content: none;
}
.reveal .slide.plain:not(.perspective-slide) .attribution {
  max-width: 30ch;
  margin: 36px 0 auto;
}
.reveal .slide.plain:not(.perspective-slide) .chain {
  margin-top: 0;
  padding-top: 22px;
}

/* Long bibliography URLs must wrap inside the intentionally scrollable
   references slide; they should never create a horizontal page scrollbar. */
.reveal section.scrollable #refs,
.reveal section.scrollable #refs a {
  overflow-wrap: anywhere;
  word-break: break-word;
}

/* ── Perspective, image flush right ─────────────────────────── */

.reveal .slides > section.perspective-slide {
  display: grid !important;
  grid-template-columns: 1fr 936px;
  grid-template-rows: minmax(0, 1fr);
  gap: 0;
  padding: 0 !important;
  height: 100%;
  align-items: stretch;
}

.reveal .perspective-slide > h2 { display: none; }

.reveal .perspective-copy {
  display: flex;
  flex-direction: column;
  justify-content: center;
  box-sizing: border-box;
  min-height: 0;
  padding: 92px 84px 80px 104px;
}

.reveal .perspective-statement {
  font-size: 1.78em;
  font-weight: 600;
  line-height: 1.1;
  letter-spacing: -0.026em;
  text-wrap: balance;
  margin: 0.25em 0;
}

.reveal .perspective-statement .accent { color: #C68A43; }
.reveal .perspective-statement p { margin: 0 0 0.2em; }

.reveal .perspective-support {
  font-family: var(--r-serif-font, "Newsreader", Georgia, serif);
  font-style: italic;
  font-size: 0.96em;
  line-height: 1.3;
  color: #A8A49C;
  max-width: 30ch;
  margin-bottom: 26px;
}

.reveal .perspective-image {
  position: relative;
  min-height: 0;
  background: #16161A;
  overflow: hidden;
}
.reveal .perspective-image img,
.reveal .perspective-image p { width: 100%; height: 100%; margin: 0; }
.reveal .perspective-image img { object-fit: cover; display: block; }

/* Bleed the photograph into the copy column instead of butting against it. */
.reveal .perspective-image::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(to right,
    rgba(12, 12, 13, 0.92) 0%,
    rgba(12, 12, 13, 0.28) 22%,
    rgba(12, 12, 13, 0) 46%);
}

/* ── Panopticon: historical plan beside the contemporary argument ─────── */

.reveal .panopticon-slide .panopticon-grid {
  display: grid;
  grid-template-columns: minmax(0, 1.08fr) minmax(0, 0.92fr);
  gap: 72px;
  align-items: center;
  flex: 1;
  min-height: 0;
  margin: 0 0 26px;
}

.reveal .panopticon-figure {
  display: flex;
  flex-direction: column;
  min-height: 0;
  margin: 0;
}

.reveal .panopticon-figure > p { margin: 0; }

.reveal .panopticon-figure img {
  display: block;
  width: 100%;
  height: 500px;
  object-fit: cover;
  object-position: 44% 50%;
  border: 1px solid rgba(237, 233, 225, 0.20);
  filter: grayscale(1) sepia(0.18) contrast(1.04) brightness(0.86);
}

.reveal .panopticon-caption {
  display: block;
  margin-top: 14px;
  font-family: var(--r-mono-font, "IBM Plex Mono", monospace);
  font-size: 24px;
  font-weight: 500;
  line-height: 1.3;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: #6E6B65;
}

.reveal .panopticon-copy {
  display: flex;
  flex-direction: column;
  justify-content: center;
  min-height: 0;
}

.reveal .panopticon-statement {
  padding: 0 0 30px;
  margin: 0 0 34px;
  border-bottom: 1px solid rgba(237, 233, 225, 0.30);
  font-size: 50px;
  font-weight: 600;
  line-height: 1.16;
  letter-spacing: -0.018em;
  color: #EDE9E1;
  text-wrap: balance;
}

.reveal .panopticon-statement:last-child {
  margin-bottom: 0;
  border-bottom-color: #C68A43;
}

.reveal .panopticon-statement.accent { color: #C68A43; }
.reveal .panopticon-statement p { margin: 0; }

.reveal .panopticon-slide > .closer {
  margin-top: 0;
}

/* ── Jevons: two-phase contrast from concentrated to distributed use ─── */

.reveal .jevons-slide .jevons-stage {
  position: relative;
  height: 740px;
  margin-top: 16px;
  overflow: hidden;
  border-top: 1px solid rgba(237, 233, 225, 0.22);
}

.reveal .jevons-slide .jevons-art,
.reveal .jevons-slide .jevons-art p,
.reveal .jevons-slide .jevons-art figure {
  width: 100%;
  height: 100%;
  margin: 0;
}

.reveal .jevons-slide .jevons-art img {
  width: 100%;
  height: 100%;
  max-width: none;
  max-height: none;
  object-fit: cover;
  object-position: center 24%;
}

.reveal .jevons-slide .jevons-art figcaption {
  display: none;
}

.reveal .jevons-slide .jevons-phase {
  position: absolute;
  z-index: 2;
  top: 0;
  bottom: 0;
  box-sizing: border-box;
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: 70px;
  background: rgba(12, 12, 13, 0.97);
  transition: opacity 0.8s ease !important;
}

.reveal .jevons-slide .jevons-phase-one {
  right: 0;
  width: 54%;
  border-left: 1px solid rgba(198, 138, 67, 0.55);
  opacity: 1;
  visibility: visible;
}

.reveal .jevons-slide .jevons-phase-two {
  left: 0;
  width: 46%;
  border-right: 1px solid rgba(198, 138, 67, 0.55);
}

.reveal .jevons-slide .jevons-phase-two.visible + .jevons-phase-one {
  opacity: 0;
  visibility: hidden;
  transition:
    opacity 0.8s ease,
    visibility 0s linear 0.8s !important;
}

.reveal .jevons-slide .jevons-phase p { margin: 0; }

.reveal .jevons-slide .jevons-phase-kicker,
.reveal .jevons-slide .jevons-rule-kicker {
  display: block;
  font-family: var(--r-mono-font, "IBM Plex Mono", monospace);
  font-size: 24px;
  font-weight: 500;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: #C68A43;
}

.reveal .jevons-slide .jevons-phase-claim {
  display: block;
  max-width: 13ch;
  margin-top: 32px;
  font-size: 62px;
  font-weight: 600;
  line-height: 1.08;
  letter-spacing: -0.025em;
  color: #EDE9E1;
  text-wrap: balance;
}

.reveal .jevons-slide .jevons-phase-support {
  display: block;
  margin-top: 30px;
  font-size: 32px;
  line-height: 1.25;
  color: #A8A49C;
}

.reveal .jevons-slide .jevons-rule {
  margin-top: 50px;
  padding-top: 28px;
  border-top: 1px solid rgba(237, 233, 225, 0.28);
}

.reveal .jevons-slide .jevons-rule-kicker {
  font-size: 21px;
}

.reveal .jevons-slide .jevons-rule-text {
  display: block;
  max-width: 24ch;
  margin-top: 16px;
  font-size: 30px;
  line-height: 1.25;
  color: #A8A49C;
  text-wrap: balance;
}

/* ── DHH: one claim, one attribution, one interpretation ─────────────── */

.reveal .dhh-slide blockquote {
  max-width: 25ch;
  margin: auto 0 0;
  padding: 0;
  border: 0;
  font-size: 74px;
  font-weight: 600;
  line-height: 1.12;
  letter-spacing: -0.025em;
  color: #EDE9E1;
  text-wrap: balance;
}

.reveal .dhh-slide blockquote p { margin: 0; }

.reveal .dhh-slide blockquote::before,
.reveal .dhh-slide blockquote::after,
.reveal .dhh-slide blockquote p:first-child::before,
.reveal .dhh-slide blockquote p:last-child::after {
  content: none !important;
}

.reveal .dhh-slide .dhh-attribution {
  display: block;
  margin-top: 34px;
  font-family: var(--r-mono-font, "IBM Plex Mono", monospace);
  font-size: 25px;
  font-weight: 500;
  letter-spacing: 0.11em;
  text-transform: uppercase;
  color: #6E6B65;
}

.reveal .dhh-slide .dhh-interpretation {
  margin-top: auto;
  padding-top: 28px;
  border-top: 1px solid rgba(237, 233, 225, 0.30);
  font-size: 50px;
  font-weight: 600;
  line-height: 1.15;
  letter-spacing: -0.018em;
  color: #EDE9E1;
}

.reveal .dhh-slide .dhh-interpretation p { margin: 0; }
.reveal .dhh-slide .dhh-interpretation .accent { color: #C68A43; }

/* -- Writing: shared language, different contributions ----------------- */

.reveal .writing-remix-slide .writing-remix-stage {
  display: grid;
  grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr);
  gap: 1.2em;
  align-items: stretch;
  flex: 1;
  min-height: 0;
  margin-top: 0.72em;
  border-top: 1px solid rgba(237, 233, 225, 0.20);
  border-bottom: 1px solid rgba(237, 233, 225, 0.20);
}

.reveal .writing-remix-slide .writing-remix-copy {
  display: flex;
  flex-direction: column;
  justify-content: center;
  min-width: 0;
  padding: 0.55em 0;
}

.reveal .writing-remix-slide .open-language {
  display: flex;
  justify-content: flex-start;
  margin: 0;
  padding-bottom: 0.55em;
  border-bottom: 1px solid rgba(237, 233, 225, 0.30);
}

.reveal .writing-remix-slide .open-language p { margin: 0; }

.reveal .writing-remix-slide .open-language-label {
  font-family: var(--r-mono-font, "IBM Plex Mono", monospace);
  font-size: 0.64em;
  font-weight: 500;
  line-height: 1;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: #C68A43;
}

.reveal .writing-remix-slide .writing-remix-visual {
  min-height: 0;
  margin: 0;
  overflow: hidden;
}

.reveal .writing-remix-slide .writing-remix-visual p {
  width: 100%;
  height: 100%;
  max-width: none;
  margin: 0;
}

.reveal .writing-remix-slide .writing-remix-visual img {
  display: block;
  width: 100%;
  height: 100%;
  margin: 0;
  object-fit: contain;
  object-position: left center;
}

.reveal .writing-remix-slide .writing-branches {
  display: grid;
  grid-template-columns: 1fr;
  gap: 0;
  margin: 0.62em 0 0;
}

.reveal .writing-remix-slide .writing-branch {
  min-width: 0;
  padding: 0 0 0.58em;
}

.reveal .writing-remix-slide .writing-branch:first-child {
  margin-bottom: 0.58em;
  border-right: 0;
  border-bottom: 1px solid rgba(237, 233, 225, 0.30);
}

.reveal .writing-remix-slide .writing-branch p { margin: 0; }

.reveal .writing-remix-slide .writing-branch p:last-child {
  max-width: 24ch;
  margin-top: 0.18em;
  font-size: 0.92em;
  font-weight: 600;
  line-height: 1.08;
  letter-spacing: -0.018em;
  color: #EDE9E1;
  text-wrap: balance;
}

.reveal .writing-remix-slide .writing-branch-name {
  display: block;
  font-family: var(--r-mono-font, "IBM Plex Mono", monospace);
  font-size: 0.56em;
  font-weight: 500;
  line-height: 1;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: #6E6B65;
}

.reveal .writing-remix-slide .writing-branch.original p:last-child {
  color: #EDE9E1;
}

.reveal .writing-remix-slide .writing-remix-closer,
.reveal .student-proxy-slide .proxy-closer {
  margin-top: 0.62em;
  padding-top: 0.62em;
  border-top: 1px solid rgba(237, 233, 225, 0.30);
  font-size: 1.05em;
  font-weight: 500;
  line-height: 1.2;
  color: #A8A49C;
}

.reveal .writing-remix-slide .writing-remix-closer .accent {
  color: #C68A43;
}

.reveal .writing-remix-slide .writing-remix-closer p,
.reveal .student-proxy-slide .proxy-closer p {
  margin: 0;
}

/* -- Student proxy: feedback can improve the artifact, not the learner -- */

.reveal .student-proxy-slide .proxy-visual {
  display: grid;
  grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr);
  gap: 1.2em;
  align-items: stretch;
  flex: 1;
  min-height: 0;
  margin-top: 0.72em;
  border-top: 1px solid rgba(237, 233, 225, 0.20);
  border-bottom: 1px solid rgba(237, 233, 225, 0.20);
}

.reveal .student-proxy-slide .proxy-visual > p {
  width: 100%;
  height: 100%;
  max-width: none;
  margin: 0;
  overflow: hidden;
}

.reveal .student-proxy-slide .proxy-visual > p img {
  display: block;
  width: 100%;
  height: 100%;
  margin: 0;
  object-fit: contain;
  object-position: left center;
}

.reveal .student-proxy-slide .proxy-observation {
  align-self: center;
  max-width: none;
  padding: 0;
  font-size: 1.16em;
  font-weight: 600;
  line-height: 1.08;
  letter-spacing: -0.022em;
  color: #EDE9E1;
  text-wrap: balance;
}

.reveal .student-proxy-slide .proxy-observation p { margin: 0; }
.reveal .student-proxy-slide .proxy-observation .accent { color: #C68A43; }
