deck-stage:not(:defined) { visibility: hidden; }
.deck-load-fallback {
  position: fixed;
  inset: 0;
  z-index: 2147483647;
  display: none;
  place-items: center;
  padding: 32px;
  box-sizing: border-box;
  background: var(--bg-2);
  color: var(--ink);
  font-family: var(--font-sans);
  text-align: center;
}
.deck-boot-failed .deck-load-fallback { display: grid; }
.deck-load-fallback > div { max-width: 760px; }
.deck-load-fallback strong,
.deck-load-fallback span { display: block; }
.deck-load-fallback strong { font-size: clamp(var(--type-body), 5vw, var(--type-title)); line-height: 1.05; }
.deck-load-fallback span { margin-top: 18px; font-size: clamp(var(--ui-type-heading), 2.5vw, var(--type-body)); line-height: 1.4; }

/* Libertinus Sans supplies main text and Serif supplies accents.
   Sans requests from 400–650 select Regular; 700+ selects the real Bold face. */
/* Report URL face, bundled locally under the SIL Open Font License. */
@font-face {
  font-family: "Inconsolata";
  src: url("../fonts/inconsolata/Inconsolatazi4-Regular.otf") format("opentype");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Libertinus Sans";
  src: url("../fonts/libertinus-7.051/LibertinusSans-Regular.otf") format("opentype");
  font-weight: 400 650;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Libertinus Sans";
  src: url("../fonts/libertinus-7.051/LibertinusSans-Italic.otf") format("opentype");
  font-weight: 400 650;
  font-style: italic;
  font-display: swap;
}
@font-face {
  font-family: "Libertinus Sans";
  src: url("../fonts/libertinus-7.051/LibertinusSans-Bold.otf") format("opentype");
  font-weight: 700 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Libertinus Serif";
  src: url("../fonts/libertinus-7.051/LibertinusSerif-Regular.otf") format("opentype");
  font-weight: 400 500;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Libertinus Serif";
  src: url("../fonts/libertinus-7.051/LibertinusSerif-Italic.otf") format("opentype");
  font-weight: 400 500;
  font-style: italic;
  font-display: swap;
}
@font-face {
  font-family: "Libertinus Serif";
  src: url("../fonts/libertinus-7.051/LibertinusSerif-Semibold.otf") format("opentype");
  font-weight: 600 650;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Libertinus Serif";
  src: url("../fonts/libertinus-7.051/LibertinusSerif-SemiboldItalic.otf") format("opentype");
  font-weight: 600 650;
  font-style: italic;
  font-display: swap;
}
@font-face {
  font-family: "Libertinus Serif";
  src: url("../fonts/libertinus-7.051/LibertinusSerif-Bold.otf") format("opentype");
  font-weight: 700 900;
  font-style: normal;
  font-display: swap;
}
@font-face {
  font-family: "Libertinus Serif";
  src: url("../fonts/libertinus-7.051/LibertinusSerif-BoldItalic.otf") format("opentype");
  font-weight: 700 900;
  font-style: italic;
  font-display: swap;
}
:root {
  /* Main palette plus the four tertiary colors from brand-guidelines-2023.pdf,
     p. 51. Tertiary colors are reserved for future use; keep ochre primary.
     Navy and jacaranda stay stored here as tertiary colors, but nothing draws
     them: the Stuttgart blues below (and ink for the face ripples, and from
     Methods I onward for the slashes and knot labels) take their roles. Opacity variants retain the base RGB channels and adjust
     alpha only. */
  --color-white: #FFFFFF;
  --color-sandstone: #FCEDE2;
  --color-grey-light: #F1F1F1;
  --color-charcoal: #424242;
  --color-grey: #6A6A6A;
  --color-ochre: #E64626;
  --color-ochre-accessible: #CE3D20;
  --color-heritage-rose: #DAA8A2;
  --color-jacaranda: #8F9EC9;
  --color-navy: #1A355E;
  --color-eucalypt: #71A499;

  /* ── Special section: University of Stuttgart blues ──────────────────────
     Mittelblau and Hellblau from the University of Stuttgart's corporate
     design join the Sydney palette and replace its blues across the deck:
       - Mittelblau takes every role navy had: edges, faces, text, and every
         sphere shell at twenty percent.
       - Translucent Mittelblau takes the roles jacaranda had: the pairing
         slashes and knot labels up to Aims (ink from Methods I onward; see
         the rule after this block). Face ripples are ink on every slide. It is
         Mittelblau at --mittelblau-soft-opacity times the element's own
         opacity, which on white matches jacaranda's lightness. CSS writes it
         as rgb(from var(--color-stuttgart-mittelblau) r g b / .45); the 3D
         scenes multiply their material opacity by this token.
       - Hellblau colours Method II's normal triangles.
     The IMPS27 landing confetti keeps its own copies beside the Monash blues. */
  --color-stuttgart-mittelblau: #004191;
  --color-stuttgart-hellblau: #00BEFF;
  --mittelblau-soft-opacity: .45;

  /* Shared roles. Ochre is the brand color; accessible ochre supports text and
     surfaces carrying small inverse text, including the hero-slide bridges. */
  --bg: var(--color-white);
  --bg-2: var(--color-sandstone);
  --bg-3: var(--color-grey-light);
  --ink: var(--color-charcoal);
  --ink-2: var(--color-grey);
  --figure-caption-color: var(--ink);
  --context-opacity: .32;
  --accent: var(--color-ochre);
  --accent-2: var(--color-ochre-accessible);
  --hero-bg: var(--accent-2);
  --line: rgb(from var(--ink) r g b / 0.1);
  --line-2: rgb(from var(--ink) r g b / 0.18);
  --accent-soft: rgb(from var(--accent) r g b / 0.1);

  /* UI and illustrations select the same bases; they have no extra palette. */
  --ui-bg: var(--color-charcoal);
  --ui-bg-raised: var(--color-grey);
  --ui-ink: var(--color-white);
  --ui-ink-secondary: rgb(from var(--color-white) r g b / 0.72);
  --ui-line: rgb(from var(--color-white) r g b / 0.18);
  --ui-accent: var(--color-sandstone);
  --ui-error: var(--color-sandstone);
  --figure-skin-opacity: .20;
  --sphere-opacity: .20;
  /* The one sphere. Every sphere shell (Background I and II, the Aims II
     necklace, Methods I and the favicon) reads these two tokens: simply
     Mittelblau at twenty percent. The shared sphere renderer gives every
     shell the same glossy highlight (background-knot-envelope.js and
     the native shell shader in tools/source/background-knot-tubes.mjs). */
  --three-sphere-colour: var(--color-stuttgart-mittelblau);
  --three-sphere-opacity: var(--sphere-opacity);

  /* Readable Libertinus scale — design pixels on the scaled 1920×1080 slide canvas.
     Choose by role; components must use these tokens instead of adding sizes.
     Sans text and Serif accents share a size. Relative math/superscript sizes and
     zero-size transition states are intentional, not extra scale levels. */
  --type-detail: 24px;         /* Diagram detail and compact table text */
  --type-caption: 28px;        /* Captions, labels, credits, supporting text */
  --type-body: 36px;           /* Main explanatory copy */
  --type-heading: 44px;        /* Subheadings and prominent card headings */
  --type-lead: 56px;           /* Lead text and opening descriptor */
  --type-title: 72px;          /* Main and appendix slide titles */
  --type-cover: 96px;          /* Opening title and large figures */
  --type-display: 144px;       /* Oversized hero figures and closing title */
  --knot-sum-sign-space: 48px; /* Math sum sign plus breathing room on both sides */
  --knot-stroke-width: 7px;
  --triangulation-edge-ratio: 0.3333333333;
  --triangulation-edge-width: calc(var(--knot-stroke-width) * var(--triangulation-edge-ratio));
  --triangulation-marked-edge-ratio: 0.5; /* the marked edge, once it is the knot: half the knot's weight */
  --triangulation-edge-opacity: .95;
  --triangulation-guide-opacity: .10;
  --triangulation-face-colour: var(--color-stuttgart-mittelblau);
  --triangulation-face-opacity: .10;
  --triangulation-ripple-colour: var(--ink); /* the ripples on faces 1 and 2, and their still slashes, on every slide;
     translucent: the scenes multiply their opacity by --mittelblau-soft-opacity */
  --triangulation-knot-label-colour: var(--color-stuttgart-mittelblau);
  --triangulation-knot-label-opacity: .43; /* translucent Mittelblau: .95 × --mittelblau-soft-opacity */

  /* Reference lists follow the standard 10pt LaTeX scriptsize proportion:
     7pt / 10pt = 70% of body text (25.2 design pixels at the current scale).
     Leading is tuned for the deck's fonts; entry spacing is a separate gap. */
  --type-reference: calc(var(--type-body) * 0.7);
  --leading-reference: 1.3;
  --gap-reference: 0.35lh;

  /* Shared motion scale. JavaScript reads these exact values through DeckMotion;
     phase starts and reveal staggers are derived from durations + this one gap. */
  --motion-quick: 200ms;       /* Controls, brief fades and visibility handoffs */
  --motion-reveal: 500ms;      /* Text/content entrances and local layout changes */
  --motion-travel: 800ms;      /* Shared-element flights and larger morphs */
  --motion-gap: 120ms;         /* Successive reveals; use multiples for staggers */

  /* Viewport UI has its own scale: controls do not grow with the slide canvas. */
  --ui-type-tiny: 10px;
  --ui-type-micro: 11px;
  --ui-type-small: 12px;
  --ui-type-body: 14px;
  --ui-type-label: 16px;
  --ui-type-heading: 18px;
  --ui-type-title: 20px;

  --pad-x: 110px;
  --pad-top: 96px;
  --pad-bottom: var(--pad-x);
  --workflow-progress-bottom-design: 62px;
  --gap-title: 40px;
  --gap-item: 24px;

  /* Raised knot scenes, from Background I onward: gap above the fixed slope. */
  --knot-ground-clearance: 104px;
  --knot-ground-slope: .5;
  --knot-ground-space: 64px;

  /* Sans main text, Serif accents. NewTX math is built as SVG;
     --font-math controls accessible/source text rather than its glyph outlines. */
  --font-sans: "Libertinus Sans", sans-serif;
  --font-serif: "Libertinus Serif", serif;
  --font-mono: var(--font-sans);
  --font-math: var(--font-serif);
  --math-weight: 400;
  --math-size: 1em;
}

/* From Methods I onward the pairing slashes and knot labels that the
   background slides draw in translucent Mittelblau take ink at the same
   alpha, like the face ripples everywhere: ink and Mittelblau have almost the
   same luminance, so the shade is unchanged. The sphere shells keep the one
   sphere above. The roles are redefined on the slides themselves, so Methods
   I, every later slide and every scene inside them inherit ink; each scene
   reads these tokens from its own element. Only the colour changes, never
   the alpha. */
section[data-label="07 Methods I"],
section[data-label="07 Methods I"] ~ section {
  --triangulation-knot-label-colour: var(--ink);
}

/* ── Local exceptions: partner-institution colours ───────────────────────
   Not deck palette. Each is declared once, here, on the elements that draw
   it, and test/palette.test.mjs keeps it there.
     - Monash blue (#006DAE), the primary colour of Monash University's
       brand book, colours the 2024 paper's row and its upper bound on
       Background III and the recalled bounds chart on Results.
     - UQ purple (#51247A), The University of Queensland's primary purple,
       colours Method II's normal quadrilaterals, as the report's figures
       use it in acknowledgment of the project's supervisor, and the 2025
       paper's row and its lower bound on Background III and Results, and
       the words “primary colour” in the acknowledgments and UQ's citation
       landing highlight in the bibliography. */
:is(.s-triangulations, .results-bounds) { --monash-blue: #006DAE; }
:is(.s-triangulations, .method-normal-uq, .results-bounds, .s-acks, section[data-ref-section]:has(li[data-ref-key="UQdesign2026"])) { --uq-purple: #51247A; }
html {
  width: 100%;
  min-height: 100%;
  background: var(--deck-page-bg, var(--bg));
}

body {
  margin: 0; padding: 0;
  width: 100%;
  min-height: 100vh;
  min-height: 100dvh;
  background: var(--deck-page-bg, var(--bg));
  color: var(--ink);
  font-family: var(--font-sans);
  font-synthesis: none;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

deck-stage {
  --deck-rail-w: 188px;
  min-height: 100vh;
  min-height: 100dvh;
  background: var(--deck-page-bg, var(--bg));
}

@media screen {
  deck-stage[data-browser-fullscreen] {
    /* Count the space below the fitted canvas as part of the bottom inset. */
    --deck-fullscreen-bottom-letterbox: var(--deck-bottom-letterbox, 0px);
    --pad-bottom: max(0px, calc(var(--pad-x) - var(--deck-fullscreen-bottom-letterbox)));
  }
}

section[data-label] {
  background: var(--bg);
  color: var(--ink);
  padding: var(--pad-top) var(--pad-x) var(--pad-bottom);
  box-sizing: border-box;
  position: relative;
  overflow: hidden;
  font-size: var(--type-body);
  line-height: 1.35;
}

/* Current sandstone content slides and ochre hero slides. */
section[data-label="04 Background II"],
section:has(> .s-method-flow),
section[data-label="09 Results"],
section[data-label="11 Development"]          { background: var(--bg-2); }   /* Sandstone */
section[data-label="01 Title"],
section[data-label="06 Aims"],
section[data-label="10 Thank You"]              { background: var(--hero-bg); color: var(--bg-2); }  /* Ochre hero */

/* From page 13 onward, regular page numbers determine the appendix surface.
   The explicit value travels with detached overview/thumbnail copies. */
deck-stage > section:not([data-deck-slide]):nth-of-type(n + 13):nth-of-type(odd),
section[data-slide-surface="white"] { background: var(--bg); }
deck-stage > section:not([data-deck-slide]):nth-of-type(n + 13):nth-of-type(even),
section[data-slide-surface="sandstone"] { background: var(--bg-2); }

section[data-label="06 Aims"] .title {
  color: var(--bg-2);
}

/* Opening title row. */
.product-name-row { display: flex; align-items: center; gap: 40px; }

/* University of Sydney logo at the right of the hero footers (slides 1 & 10). */
.foot-right { display: flex; align-items: center; gap: 26px; }
.usyd-foot {
  /* credit-footer.js measures the adjacent credit block, including its gap.
     The two-line fallback matches the initial layout before the observer runs. */
  height: var(--credit-block-height, calc(var(--type-body) * 2 * 1.28 + 4px));
  width: auto;
  display: block;
  flex: none;
}

/* Cover and closing ink is a local exception to the shared palette. */
section[data-label="01 Title"],
section[data-label="10 Thank You"] {
  --hero-ink: #221714;
}
section[data-label="01 Title"] .s-title .foot .team-block,
section[data-label="01 Title"] .s-title .foot .team-block *,
section[data-label="10 Thank You"] .s-thanks .foot .team-block,
section[data-label="10 Thank You"] .s-thanks .foot .team-block * {
  color: var(--hero-ink) !important;
}

/* Slide enter transition — .anim visible by default; .slide-out hides for entrance replay */
section[data-label] .anim {
  opacity: 1;
  transform: translateY(0);
  transition: opacity var(--motion-reveal) cubic-bezier(.2,.7,.2,1), transform var(--motion-reveal) cubic-bezier(.2,.7,.2,1);
}
section[data-label].slide-out .anim {
  opacity: 0;
  transform: translateY(28px);
  transition: none;
}
section[data-label].slide-in .anim.a1 { transition-delay: 0ms; }
section[data-label].slide-in .anim.a2 { transition-delay: var(--motion-gap); }
section[data-label].slide-in .anim.a3 { transition-delay: calc(var(--motion-gap) * 2); }
section[data-label].slide-in .anim.a4 { transition-delay: calc(var(--motion-gap) * 3); }
section[data-label].slide-in .anim.a5 { transition-delay: calc(var(--motion-gap) * 4); }
section[data-label].slide-in .anim.a6 { transition-delay: calc(var(--motion-gap) * 5); }
section[data-label].slide-in .anim.a7 { transition-delay: calc(var(--motion-gap) * 6); }
section[data-label].slide-in .anim.a8 { transition-delay: calc(var(--motion-gap) * 7); }
/* Shared text roles — Libertinus Sans and Serif accents. */
.eyebrow {
  font-family: var(--font-sans);
  font-weight: 600;
  font-size: var(--type-caption);
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--accent-2);
  margin: 0;
}
.eyebrow.muted { color: var(--ink-2); }
.title {
  font-family: var(--font-sans);
  font-weight: 400;
  font-size: var(--type-title);
  line-height: 1.04;
  letter-spacing: -0.018em;
  margin: 0;
  text-wrap: balance;
  color: var(--ink);
}
/* Italic serif accent words inherit the parent's point size. Legacy .lyon
   hooks are kept so existing slide markup and transitions remain compatible. */
.serif {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 400;
  letter-spacing: 0;
}
.sans-upright {
  font-family: var(--font-sans);
  font-style: normal;
  font-weight: 400;
  letter-spacing: 0;
}
.title .lyon, h1 .lyon, h2 .lyon, h3 .lyon {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 400;
  letter-spacing: 0.01em;
}
.subtitle {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 400;
  font-size: var(--type-lead);
  line-height: 1.18;
  color: var(--ink-2);
  margin: 0;
  text-wrap: balance;
}
/* Headings use Regular, while explicit bold text retains its weight. */
section[data-label] h1,
section[data-label] h2,
section[data-label] h3,
section[data-label] h4,
.title,
.title-descriptor {
  font-weight: 400 !important;
}
.body {
  font-size: var(--type-body);
  color: var(--ink);
  line-height: 1.4;
  max-width: 24ch;
}
.body.wide { max-width: 32ch; }
.small {
  font-size: var(--type-caption);
  color: var(--ink-2);
}
.mono {
  font-family: var(--font-sans);
  font-weight: 600;
  font-size: var(--type-caption);
  letter-spacing: 0.06em;
  text-transform: uppercase;
}

section[data-label] kbd {
  display: inline-block;
  padding: 0 0.42em;
  border: 1px solid var(--line-2);
  border-bottom-width: 2px;
  border-radius: 0.3em;
  background: rgb(from var(--ink) r g b / 0.04);
  font-family: var(--font-sans);
  font-size: 0.86em;
  font-style: normal;
  font-weight: 400;
  line-height: 1.5;
  color: var(--ink);
  white-space: nowrap;
}

.accent { color: var(--accent-2); }
.ink { color: var(--ink); }
figcaption, .figure-caption { color: var(--figure-caption-color); }
.rule {
  height: 1px;
  background: var(--line);
  width: 100%;
}

/* Temml 0.13.5 layout rules, adapted from dist/Temml-NotoSans.css.
   MIT (c) 2021-2025 Ron Kok; see vendor/temml-0.13.5/LICENSE.
   Font declarations and alphabet features moved to foundations/math.css.
   Alpha-mask paint uses white (same opaque mask). */

math {
  font-style: normal;
  font-weight: normal;
  line-height: normal;
  font-size-adjust: none;
  text-indent: 0;
  text-transform: none;
  letter-spacing: normal;
  word-wrap: normal;
  direction: ltr;
  /* Prevent Firefox from omitting the dot on i or j. */
  font-feature-settings: "dtls" off;
}

math * {
  border-color: currentColor;
}


/* display: block is necessary in Firefox and Safari.
 * Not in Chromium, which recognizes display: "block math" written inline. */
 math.tml-display {
  display: block;
  width: 100%;
}



/* Chromium prime glyph */
mo.tml-prime {
  font-feature-settings: 'ssty';
}

/* Cramped superscripts in WebKit */
mfrac > :nth-child(2),
msqrt,
mover > :first-child {
  math-shift: compact
}

.menclose {
  display: inline-block;
  position: relative;
  padding: 0.5ex 0ex;
}
.tml-cancelto {
  display: inline-block;
  position: absolute;
  top: 0;
  left: 0;
  padding: 0.5ex 0ex;
  background-color: currentColor;
  /* Use the SVG as an alpha mask (painted by background-color) */
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3Cdefs%3E%3Cmarker%20id%3D%27a%27%20markerHeight%3D%275%27%20markerUnits%3D%27strokeWidth%27%20markerWidth%3D%277%27%20orient%3D%27auto%27%20refX%3D%277%27%20refY%3D%272.5%27%3E%3Cpath%20fill%3D%27white%27%20d%3D%27m0%200%207%202.5L0%205z%27%2F%3E%3C%2Fmarker%3E%3C%2Fdefs%3E%3Cline%20x2%3D%27100%25%27%20y1%3D%27100%25%27%20stroke%3D%27white%27%20stroke-width%3D%27.06em%27%20marker-end%3D%27url%28%23a%29%27%20vector-effect%3D%27non-scaling-stroke%27%2F%3E%3C%2Fsvg%3E");
          mask-image: url("data:image/svg+xml,%3Csvg%20xmlns%3D%27http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%27%3E%3Cdefs%3E%3Cmarker%20id%3D%27a%27%20markerHeight%3D%275%27%20markerUnits%3D%27strokeWidth%27%20markerWidth%3D%277%27%20orient%3D%27auto%27%20refX%3D%277%27%20refY%3D%272.5%27%3E%3Cpath%20fill%3D%27white%27%20d%3D%27m0%200%207%202.5L0%205z%27%2F%3E%3C%2Fmarker%3E%3C%2Fdefs%3E%3Cline%20x2%3D%27100%25%27%20y1%3D%27100%25%27%20stroke%3D%27white%27%20stroke-width%3D%27.06em%27%20marker-end%3D%27url%28%23a%29%27%20vector-effect%3D%27non-scaling-stroke%27%2F%3E%3C%2Fsvg%3E");
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
  -webkit-mask-size: 100% 100%;
          mask-size: 100% 100%;
  -webkit-mask-position: 0 0;
          mask-position: 0 0;
}

@supports (-moz-appearance: none) {
  /* \vec w/o italic correction for Firefox */
  .tml-vec {
    transform: scale(0.75)
  }
  /* Fix \cancelto in Firefox */
  .ff-narrow {
    width: 0em;
  }
  .ff-nudge-left {
    margin-left: -0.2em;
  }
  /* Squash hidden mrows in \bordermatrix. Messes with centering, but necessary to squash. */
  .ff-squash mtd {
    display: block;
    height: 0;
  }
}

@supports (not (-moz-appearance: none)) {
  /* Chromium and WebKit */
  /* prime vertical alignment */
  mo.tml-prime {
    font-feature-settings: 'ssty';
  }
  /* Italic correction on superscripts */
  .tml-sml-pad {
    padding-left: 0.05em;
  }
  .tml-med-pad {
    padding-left: 0.10em;
  }
  .tml-lrg-pad {
    padding-left: 0.15em;
  }
}

@supports (-webkit-backdrop-filter: blur(1px)) {
  /* WebKit vertical & italic correction on accents */
  .wbk-acc {
    /* lower by x-height distance */
    transform: translate(0em, 0.431em);
  }
  .wbk-sml {
    transform: translate(0.07em, 0);
  }
  .wbk-sml-acc {
    transform: translate(0.07em, 0.431em);
  }
  .wbk-sml-vec {
    transform: scale(0.75) translate(0.07em, 0);
  }
  .wbk-med {
    transform: translate(0.14em, 0);
  }
  .wbk-med-acc {
    transform: translate(0.14em, 0.431em);
  }
  .wbk-med-vec {
    transform: scale(0.75) translate(0.14em, 0);
  }
  .wbk-lrg {
    transform: translate(0.21em, 0);
  }
  .wbk-lrg-acc {
    transform: translate(0.21em, 0.431em);
  }
  .wbk-lrg-vec {
    transform: scale(0.75) translate(0.21em, 0);
  }
}

/* \cancel & \phase use background images. Get them to print. */
menclose {
  -webkit-print-color-adjust: exact;  /* Chrome & Edge */
          print-color-adjust: exact;
}

/* Array cell justification in Firefox & WebKit */
.tml-right {
  text-align: right;
}
.tml-left {
  text-align: left;
}

/* For CD labels that grow to the left in Firefox and WebKit */
.tml-shift-left { margin-left:-200% }

/* Styles for Chromium only */
@supports (not (-webkit-backdrop-filter: blur(1px))) and (not (-moz-appearance: none)) {
  /* Italic correction on accents */
  .chr-sml {
    transform: translate(0.07em, 0)
  }
  .chr-sml-vec {
    transform: scale(0.75) translate(0.07em, 0)
  }
  .chr-med {
    transform: translate(0.14em, 0)
  }
  .chr-med-vec {
    transform: scale(0.75) translate(0.14em, 0)
  }
  .chr-lrg {
    transform: translate(0.21em, 0)
  }
  .chr-lrg-vec {
    transform: scale(0.75) translate(0.21em, 0)
  }
  
  /* For CD labels that grow to the left */
  .tml-shift-left { margin-left:-100% }

  /* MathML Core & Chromium do not support the MathML 3.0 element <menclose> attributes. */
  /* So use styles. */
  menclose {
    position: relative;
    padding: 0.5ex 0ex;
  }
  
    .tml-overline {
    padding: 0.1em 0 0 0;
    border-top: 0.065em solid;
  }

  .tml-underline {
    padding: 0 0 0.1em 0;
    border-bottom: 0.065em solid;
  }

  .tml-cancel {
    display: inline-block;
    position: absolute;
    left: 0.5px;
    bottom: 0;
    width: 100%;
    height: 100%;
    background-color: currentColor;
  }
  .upstrike {
    clip-path: polygon(0.05em 100%, 0em calc(100% - 0.05em), calc(100% - 0.05em) 0em, 100% 0.05em);
  }
  .downstrike {
    clip-path: polygon(0em 0.05em, 0.05em 0em, 100% calc(100% - 0.05em), calc(100% - 0.05em) 100%);
  }
  .sout {
    clip-path: polygon(0em calc(55% + 0.0333em), 0em calc(55% - 0.0333em), 100% calc(55% - 0.0333em), 100% calc(55% + 0.0333em));
  }
  .tml-xcancel {
    clip-path: polygon(0.05em 0em, 0em 0.05em, calc(50% - 0.05em) 50%, 0em calc(100% - 0.05em), 0.05em 100%, 50% calc(50% + 0.05em), calc(100% - 0.05em) 100%, 100% calc(100% - 0.05em), calc(50% + 0.05em) 50%, 100% 0.05em, calc(100% - 0.05em) 0%, 50% calc(50% - 0.05em));
  }

  .longdiv-top {
    border-top: 0.067em solid;
    padding: 0.1em 0.2em 0.2em 0.433em;
  }
  .longdiv-arc {
    position: absolute;
    top: 0;
    bottom: 0.1em;
    left: -0.4em;
    width: 0.7em;
    border: 0.067em solid;
    transform: translateY(-0.067em);
    border-radius: 70%;
    clip-path: inset(0 0 0 0.4em);
    box-sizing: border-box;}
    .menclose {display: inline-block;
    text-align: left;
    position: relative;
  }
  
  .phasor-bottom {
    border-bottom: 0.067em solid;
    padding: 0.2em 0.2em 0.1em 0.6em;
  }
  .phasor-angle {
    display: inline-block;
    position: absolute;
    left: 0.5px;
    bottom: -0.04em;
    height: 100%;
    aspect-ratio: 0.5;
    background-color: currentColor;
    clip-path: polygon(0.05em 100%, 0em calc(100% - 0.05em), calc(100% - 0.05em) 0em, 100% 0.05em);
  }

  .tml-fbox {
    padding: 3pt;
    border: 1px solid;
  }

  .circle-pad {
    padding: 0.267em;
  }
  .textcircle {
    position: absolute;
    top: 0;
    bottom: 0;
    right: 0;
    left: 0;
    border: 0.067em solid;
    border-radius: 50%;
   }

   .actuarial {
    padding: 0.03889em 0.03889em 0 0.03889em;
    border-width: 0.08em 0.08em 0em 0em;
    border-style: solid;
    margin-right: 0.03889em;
   }

   /* Stretch \widetilde */
  .tml-tilde-2 {
    transform: scale(2.0, 1.1)
  }
  .tml-tilde-3 {
    transform: scale(3.0, 1.1)
  }
  .tml-tilde-4 {
    transform: scale(4.0, 1.1)
  }
  /* Stretch \widehat */
  .tml-hat-1 {
    transform: scale(1.8, 1.0)
  }
  .tml-hat-2 {
    transform: scale(3.5, 1.0)
  }
  .tml-hat-3 {
    transform: scale(5.4, 1.0)
  }
  .tml-hat-4 {
    transform: scale(7.2, 1.0)
  }
  
  /* set array cell justification */
  .tml-right {
    text-align: -webkit-right;
  }
  .tml-left {
    text-align: -webkit-left;
  }
}

/* Adjust WebKit accents */
@supports (-webkit-backdrop-filter: blur(1px)) {
  .tml-xshift { transform: translate(0px, 0.45em) }
  .tml-capshift { transform: translate(0px, 0.35em) }
}

/* flex-wrap for line-breaking in Chromium */
math {
  display: inline-flex;
  flex-wrap: wrap;
  align-items: baseline;
}
math > mrow {
  padding: 0.5ex 0ex;
}

/* Default mtd top padding is 0.5ex per MathML-Core and user-agent CSS */
/* We adjust for jot and small */
mtable.tml-jot > mtr > mtd {
  padding-top: 0.7ex;
  padding-bottom: 0.7ex;
}
mtable.tml-small mtd {
  padding-top: 0.35ex;
  padding-bottom: 0.35ex;
}

/* Firefox */
@-moz-document url-prefix() {
  /* Avoid flex-wrap */
  math { display: inline; }
  math > mrow { padding: 0 }
  /* Adjust Firefox spacing between array rows */
  mtd, mtable.tml-small mtd { padding-top: 0; padding-bottom: 0; }
  mtable.tml-jot > mtr > mtd { padding-top: 0.2ex; padding-bottom: 0.2ex; }
}

/* AMS environment auto-numbering via CSS counter. */
.tml-eqn::before {
  counter-increment: tmlEqnNo;
  content: "(" counter(tmlEqnNo) ")";
}

body {
  counter-reset: tmlEqnNo;
}
.deck-math {
  font-family: var(--font-math);
  font-size: var(--math-size);
  font-weight: var(--math-weight);
  font-style: normal;
  letter-spacing: normal;
  text-transform: none;
  white-space: nowrap;
  color: inherit;
}
.deck-math > svg {
  fill: currentColor;
  overflow: visible;
}
.deck-math-display {
  display: block;
  text-align: center;
  margin-block: 0.6em;
}
/* Semantic MathML stays available to assistive technology. The visible SVG
   uses the actual NewTX outlines and TeX baseline/box measurements. */
.deck-math-semantic {
  position: absolute !important;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}
.deck-math-unbuilt {
  color: var(--accent-2);
}
/* layout primitives */
.col { display: flex; flex-direction: column; }
.row { display: flex; flex-direction: row; }
.u-mt-0 { margin-top: 0; }
.u-mt-20 { margin-top: 20px; }
.u-mt-24 { margin-top: 24px; }
.u-max-26 { max-width: 26ch; }
.u-max-38 { max-width: 38ch; }
.u-max-full { max-width: 100%; }
.title-tight { line-height: 1.05; }
.title-tighter { line-height: 1.04; }
section:has(> .s-method-flow) .head > .title,
section:is([data-label="09 Results"], [data-label="10 Discussions"], [data-label="11 Development"]) .head > .title {
  color: var(--ink);
  font-size: var(--type-title);
  letter-spacing: -0.018em;
  line-height: 1.05;
  margin: 0;
  max-width: none;
  text-wrap: nowrap;
  white-space: nowrap;
}
section:has(> .s-method-flow) .head > .title .lyon,
section:is([data-label="09 Results"], [data-label="10 Discussions"], [data-label="11 Development"]) .head > .title .lyon {
  color: var(--accent-2);
  display: inline-block;
  height: auto;
  line-height: inherit;
  position: static;
  top: auto;
  vertical-align: baseline;
}

/* One authored marker for a definition, theorem, conjecture or statement.
   The owning block keeps its existing type, reveal and emphasis states. */
[data-statement] {
  --statement-type-size: var(--type-heading);
  position: relative;
  padding-inline-start: calc(var(--statement-type-size) * .75);
}
/* Environment names remain bold within otherwise regular statement text. */
section[data-label] [data-environment-label] { font-weight: 700 !important; }
[data-environment-label] :is(button, a) { font-weight: inherit; }
[data-statement] > .statement-marker {
  position: absolute;
  inset-inline-start: 0;
  font: 400 var(--statement-type-size)/1.4 var(--font-sans);
  top: calc((1lh - 1ex) / 2);
  width: .866ex;
  height: 1ex;
  background: currentColor;
  clip-path: polygon(0 0, 100% 50%, 0 100%);
  pointer-events: none;
}
/* Slide 1 — Title (ochre hero, matches Thank You closer) */
.s-title {
  display: grid;
  grid-template-columns: 1fr;
  grid-template-rows: auto 1fr auto;
  height: 100%;
  position: relative;
}
.s-title .top { display: flex; justify-content: space-between; align-items: flex-start; gap: 60px; }
.s-title .mid {
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 26px;
}
.s-title h1 {
  font-family: var(--font-sans);
  font-weight: 400;
  font-size: var(--type-cover);
  line-height: 1;
  letter-spacing: -0.025em;
  margin: 0;
  max-width: 18.5ch;
  color: var(--bg);
}
.s-title h1.product-name {
  /* Opening title and descriptor use the shared cover/lead hierarchy. */
  font-size: var(--type-cover);
  line-height: 0.98;
  letter-spacing: -0.025em;
  max-width: none;
  /* Optical left alignment of the opening title with its descriptor. */
  margin-left: 4px;
}
.s-title h1 .title-line {
  display: block;
  white-space: nowrap;
}
.s-title .title-descriptor {
  font-family: var(--font-sans);
  font-weight: 500;
  font-size: var(--type-lead);
  line-height: 1.12;
  letter-spacing: -0.012em;
  color: var(--bg-2);
  margin: 0;
  text-wrap: balance;
}
.s-title .title-descriptor .title-line {
  display: block;
  white-space: nowrap;
}
.s-title .title-descriptor .serif {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 400;
  letter-spacing: 0;
}
.s-title .title-knot-source {
  display: inline-block;
  line-height: inherit;
}
/* Brand mix: italic accent at SAME point size, different family + color */
.s-title h1 .serif {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 400;
  color: var(--bg-2);
  letter-spacing: 0;
}
.s-title .foot {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 60px;
  border-top: 1px solid rgb(from var(--bg-2) r g b / 0.32);
  padding-top: 28px;
  font-family: var(--font-sans);
  transform: translateY(40px);
}
.s-title .foot .team-block {
  display: grid;
  /* label column hugs the widest label ("Supervisors:" ~152px, which overflowed
     the old fixed 136px track); labels sit flush right against it, names share
     one left edge in column 2 */
  grid-template-columns: max-content minmax(0, auto);
  column-gap: 20px;
  row-gap: 4px;
  align-items: baseline;
  max-width: none;
  flex: 1 1 auto;
  min-width: 0;
}
.s-title .foot .credit-line {
  display: contents;
  margin: 0;
  color: var(--bg-2);
  line-height: 1.28;
  white-space: nowrap;
}
.s-title .foot .credit-label {
  display: block;
  font-family: var(--font-sans);
  font-size: var(--type-body);
  font-weight: 600;
  /* stretch so the block fills the max-content track and text-align:right
     actually bites — with justify-self:start it would shrink-to-fit */
  justify-self: stretch;
  letter-spacing: 0;
  line-height: 1.28;
  min-width: 0;
  text-align: right;
  text-transform: none;
  color: var(--bg);
  align-self: baseline;
}
.s-title .foot .credit-text {
  font-family: var(--font-sans);
  font-style: normal;
  font-weight: 400;
  font-size: var(--type-body);
  letter-spacing: 0;
  line-height: 1.28;
  text-align: left;
  white-space: nowrap;
  color: var(--bg);
  align-self: baseline;
}
/* Instant arrivals and overview/print snapshots bypass entrance motion. */
section.is-entrance-instant,
section.is-entrance-instant * {
  transition: none !important;
  animation: none !important;
}
/* The Methods heading keeps its shared phrase on one line. */
.s-method-flow {
  display: flex;
  flex-direction: column;
  height: 100%;
  gap: 0;
}
section:has(> .s-method-flow) .workflow-bridge-target {
  display: inline-block;
  text-wrap: nowrap;
  white-space: nowrap;
}

.s-pipe.s-method-flow > .head,
section[data-label="08 Methods II"] .s-background-topic > .head {
  display: flex;
  flex-direction: column;
  gap: var(--gap-title);
}
.method-aim-quote {
  display: grid;
  grid-template-columns: 4px minmax(0, 1fr);
  gap: var(--gap-item);
  margin: 0;
  color: var(--ink);
  font: 400 var(--type-heading)/1.35 var(--font-serif);
  font-style: normal;
  letter-spacing: 0;
}
.method-aim-rule { position: relative; grid-column: 1; grid-row: 1; color: var(--accent); background: currentColor; }
.method-aim-copy {
  grid-column: 2;
  grid-row: 1;
  display: grid;
  grid-template-columns: max-content minmax(0, 1fr);
  gap: 0 .25em;
  align-items: start;
}
.method-aim-viewport {
  overflow: hidden;
}
.method-aim-history {
  grid-column: 2;
  grid-row: 1;
  height: 1.35em;
  overflow-y: auto;
  overflow-x: hidden;
  overscroll-behavior: contain;
  touch-action: pan-y;
  scrollbar-width: thin;
  scrollbar-color: transparent transparent;
  outline: none;
}
.method-aim-history.is-user-scrolling {
  scrollbar-color: var(--color-sandstone) transparent;
}
[data-method-aim-history-row] { margin: 0; min-height: 1.35em; }
[data-method-aim-history-row="1"] { opacity: var(--context-opacity); white-space: nowrap; }
[data-aim-quote-body] { margin: 0; box-sizing: border-box; }
.method-aim-sentence {
  display: flex;
  white-space: nowrap;
}
.method-aim-prefix { flex: 0 0 auto; }
.method-aim-tail {
  flex: 1 1 auto;
  min-width: 0;
  overflow: hidden;
  white-space: nowrap;
  opacity: var(--context-opacity);
  -webkit-mask-image: linear-gradient(to right, var(--ink) 92%, transparent);
  mask-image: linear-gradient(to right, var(--ink) 92%, transparent);
}
[data-method-proof-aim-prove],
[data-method-proof-aim-completed],
[data-method-proof-aim-connector] { display: inline-block; white-space: pre; }
[data-method-proof-aim-completed] { position: relative; }
[data-method-proof-aim-completed]::after {
  content: "";
  position: absolute;
  left: 0;
  right: 0;
  top: 52%;
  height: 2px;
  background: currentColor;
  transform: scaleX(var(--method-proof-aim-strike, 0));
  transform-origin: left center;
  pointer-events: none;
}
.is-method-crushing .method-aim-tail {
  flex: 0 0 auto;
  overflow: visible;
  -webkit-mask-image: none;
  mask-image: none;
}
.is-method-crushing [data-aim-quote-scroll] {
  -webkit-mask-image: linear-gradient(to right, var(--ink) calc(100% - 40px), transparent);
  mask-image: linear-gradient(to right, var(--ink) calc(100% - 40px), transparent);
}
[data-aim-quote-label],
[data-method-aim-history-label] { display: inline-block; color: var(--accent); white-space: nowrap; }
[data-aim-label-word],
[data-aim-label-stroke],
[data-aim-label-stop],
[data-method-aim-history-word],
[data-method-aim-history-stroke],
[data-method-aim-history-stop] { display: inline-block; white-space: pre; }
[data-aim-word],
[data-aim-bridge-source] .deck-math,
[data-aim-quote-body] .deck-math { display: inline-block; }

/* Construction uses the Aims disclosure and scrolling contracts. */
.method-steps {
  display: flex;
  flex: 1 1 auto;
  min-height: 0;
  margin-top: var(--gap-title);
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}
.method-steps.is-method-seed-visible {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
}
.method-steps .aims-scroll { position: relative; width: 100%; }
.method-steps .aims-list { max-width: none; padding-right: 0; }
.s-method-flow .method-steps .aims-list { gap: 12px; }
.method-steps .aims-panel-content { padding-left: 0; }
.method-steps .aims-list strong { color: inherit; font-family: var(--font-serif); }
/* Reuse Slide 4's native canvas and visible fold window without resizing it. */
.method-seed {
  position: relative;
  width: var(--method-demo-width, 100%);
  margin: 0;
}
.method-seed-viewport {
  position: relative;
  width: 100%;
  height: var(--method-demo-height, 400px);
  overflow: hidden;
}
.method-seed-window,
.method-seed-view {
  position: relative;
  min-width: 0;
  min-height: 0;
  width: 100%;
  height: 100%;
}
.method-seed-panel { position: absolute; overflow: hidden; cursor: grab; touch-action: pan-y; outline: none; }
.method-seed-panel[hidden], .method-seed-lego[hidden], .method-seed-example[hidden], .method-seed-relation[hidden] { display: none; }
.method-seed-panel:active { cursor: grabbing; }
.method-seed-window { position: absolute; overflow: hidden; }
.method-seed-lego { position: absolute; top: 0; height: 100%; outline: none; cursor: grab; touch-action: pan-y; }
.method-seed-lego:active { cursor: grabbing; }
.method-seed-example, .method-seed-relation { position: absolute; top: 0; overflow: hidden; outline: none; cursor: grab; touch-action: pan-y; }
.method-seed-example:active, .method-seed-relation:active { cursor: grabbing; }
.method-seed-view { z-index: 1; }
.method-seed-view canvas,
.method-seed-poster { display: block; width: 100%; height: 100%; }
.method-seed-caption {
  margin-top: var(--method-caption-margin, calc(1.5 * var(--gap-item, 24px)));
  color: var(--ink);
  font: 400 var(--type-body)/1.2 var(--font-sans);
  text-align: center;
  white-space: nowrap;
}
[data-method-seed-caption-base],
.method-seed-caption-tail { display: inline-block; }
.method-seed-caption-tail[hidden] { display: none; }
.method-gluing-appendix-link {
  display: inline;
  margin: 0;
  padding: 0;
  border: 0;
  background: none;
  color: var(--ink-2);
  font: inherit;
  cursor: pointer;
  pointer-events: auto;
  text-decoration: none;
  background-image: linear-gradient(currentColor, currentColor);
  background-repeat: no-repeat;
  background-position: center calc(100% - .12em);
  background-size: 0% .075em;
  -webkit-box-decoration-break: clone;
  box-decoration-break: clone;
  transition: color var(--motion-quick), background-size var(--motion-quick) ease;
}
.method-gluing-appendix-link:is(:hover, :focus-visible) {
  color: var(--ink);
  background-size: 100% .075em;
}
.method-gluing-appendix-link:focus-visible { outline: none; }
[data-method-seed-caption-base][hidden],
[data-method-seed-caption-problem][hidden],
[data-method-seed-caption-comparison][hidden] { display: none; }
.method-seed-caption-tail { white-space: pre; }
.method-seed-caption-tail .ochre { color: var(--color-ochre); }
.method-seed-caption-comparison {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  white-space: normal;
}
[data-method-seed-caption-left] { grid-column: 2; }
[data-method-seed-caption-right] { grid-column: 3; }
[data-method-seed-caption-string] { grid-column: 1; }
[data-method-seed-caption-trefoil] { grid-column: 4; }
.method-seed-caption-comparison > span { grid-row: 1; padding: 0 12px; text-wrap: balance; }
.method-seed-caption-comparison > span, [data-method-assemble-caption], .method-close-captions > span {
  translate: var(--method-caption-offset, 0px) 0;
}
.method-seed-caption-comparison > span[hidden] { display: none; }

/* Completed string diagrams travel into the text line; the bead owns its
   independent dropdown and keeps the live native models between builds. */
.method-string-icons { display: inline-flex; align-items: baseline; gap: .3em; margin-left: .5em; vertical-align: baseline; }
[data-method-string-icon] { display: inline-block; width: 1.35cap; height: 1cap; }
.method-beads { position: relative; width: var(--method-demo-width, 100%); margin: 0; }
.method-assemble, .method-close { position: relative; width: var(--method-demo-width, 100%); margin: 0; }
.method-assemble-window, .method-close-window { width: 100%; height: calc(var(--method-demo-height, 400px) * .64); }
.method-close-window {
  height: var(--method-close-window-height, calc(var(--method-demo-height, 400px) * .66));
  transform: translateY(calc(-1 * var(--method-close-window-headroom, 0px)));
  margin-bottom: calc(-1 * var(--method-close-window-headroom, 0px));
}
.method-assemble > .method-seed-caption, .method-close > .method-seed-caption { margin-top: var(--gap-item); }
.method-close-captions { display: grid; grid-template-columns: 36% 64%; opacity: 0; white-space: normal; }
.method-close-captions > span { padding: 0 12px; text-wrap: balance; }
.method-close-captions [data-method-close-caption="left"] { grid-area: 1 / 1; }
.method-close-captions [data-method-close-caption="right"] { grid-area: 1 / 2; }
.method-close-captions [data-method-close-caption="pairing"],
.method-close-captions [data-method-close-caption="final"],
.method-close-captions [data-method-close-caption="question"] { grid-area: 1 / 1 / 2 / 3; opacity: 0; }
[data-method-string-assembling] > .method-bead-assembly,
[data-method-string-assembling] > .method-bead-carrier:not([data-method-bead-carrier="not-equal"]) { visibility: hidden; }
.method-bead-window { position: relative; width: 100%; height: var(--method-demo-height, 400px); overflow: hidden; }
.method-bead-slot { position: absolute; overflow: hidden; height: 100%; width: 17.5%; }
.method-bead-slot[hidden] { display: none; }
.method-bead-trefoil-slot { left: 75%; top: 0; width: 25%; }
.method-bead-a-slot { left: 50%; top: 0; width: 25%; }
.method-bead-c-slot { left: 1.25%; top: 0; }
.method-bead-d-slot { left: 18.75%; top: 0; }
.method-bead-e-slot { left: 36.25%; top: 0; }
.method-bead-sign-slot { position: absolute; left: 75%; top: 0; width: min(100px, 8.333333%); height: 100%; transform: translateX(-50%); }
.method-bead-caption-target { height: 1.2em; }
[data-method-bead-tet] { cursor: grab; outline: none; touch-action: pan-y; }
[data-method-bead-tet]:active { cursor: grabbing; }
[data-method-bead-paint], [data-method-bead-view] { position: absolute; width: 100%; height: 100%; }
.method-bead-layer { position: absolute; left: 0; top: 0; width: 100%; height: 0; z-index: 2; pointer-events: none; }
/* A handoff's paper card (this slide is sandstone, see foundations/base.css):
   the step headings travel beneath the flying window and caption and emerge
   at their destination, instead of crossing the live artwork. */
.method-bead-layer > .method-bead-backdrop.demo-window-fade { position: absolute; --demo-window-fade-x: 0px; background: var(--bg-2); pointer-events: none; }
.method-bead-layer > .method-bead-backdrop[hidden] { display: none; }
.method-bead-assembly { position: absolute; inset: 0; pointer-events: none; }
.method-bead-assembly[hidden] { display: none; }
.method-bead-assembly-paint { position: absolute; transform-origin: 0 0; pointer-events: none; }
.method-bead-assembly-controls { position: absolute; left: 0; top: 0; width: 71%; height: 100%; pointer-events: auto; cursor: grab; touch-action: pan-y; outline: none; }
.method-bead-assembly-controls:active { cursor: grabbing; }
.method-bead-carrier { position: absolute; left: 0; top: 0; transform-origin: 0 0; pointer-events: auto; }
.method-bead-carrier[hidden] { display: none; }
.method-bead-carrier[data-method-bead-carrier="string"],
.method-bead-carrier[data-method-bead-carrier="edge"] { pointer-events: none; }

/* Method II opens automatically below its settled head. The four triangles
   share the left tetrahedron; three quadrilaterals form the right column. */
section[data-label="08 Methods II"] {
  --method-normal-radius: 105px;
  --method-normal-height: 420px;
  --method-normal-face-opacity: .10;
  --method-normal-triangle-opacity: .25;
  --method-normal-quad-opacity: .5;
  --method-normal-outline-opacity: .95;
  --method-normal-ground-clearance: 14px;
  --method-normal-yaw: -2.14;
  --method-normal-pitch: 0;
  --method-proof-octahedron-radius: 125px;
}
/* The normal discs share UQ purple; triangle fills use half the quad alpha. */
.method-normal-uq {
  --method-normal-triangle-colour: var(--uq-purple);
  --method-normal-quad-colour: var(--uq-purple);
}
.method-proof {
  display: flex;
  flex-direction: column;
  flex: 1 1 auto;
  min-height: 0;
  gap: var(--gap-item);
}
.method-proof-statements {
  position: relative;
  flex: 0 0 auto;
  height: var(--method-proof-statement-height);
  margin-top: calc(-1 * var(--gap-title));
  padding-top: var(--gap-title);
  overflow: hidden;
  overscroll-behavior: contain;
  touch-action: pan-y;
  scrollbar-width: thin;
  scrollbar-color: transparent transparent;
  scrollbar-gutter: stable;
  -webkit-mask-image: linear-gradient(to bottom, transparent, var(--ink) var(--gap-title));
  mask-image: linear-gradient(to bottom, transparent, var(--ink) var(--gap-title));
  outline: none;
}
.is-method-crushing .method-proof-statements { overflow-y: auto; }
.method-proof-statements:focus-visible { scrollbar-color: var(--color-sandstone) transparent; }
[data-method-proof-layer] {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}
[data-method-proof-layer].is-method-proof-visible {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
}
.method-proof-definition {
  min-width: 0;
  margin: 0;
  color: var(--ink);
  font: 400 var(--type-heading)/1.4 var(--font-sans);
}
.method-proof-definition h3,
.method-proof-definition p,
.method-proof-crushing h3,
.method-proof-crushing p {
  display: inline;
  font: inherit;
  margin: 0;
}
.method-proof-definition h3,
.method-proof-crushing h3 { margin-right: 24px; }
.method-proof-definition .background-definition-cite.accent { color: inherit; }
.method-normal { position: relative; width: var(--method-demo-width, 100%); margin: 0; }
.method-normal-window {
  position: relative;
  width: 100%;
  height: var(--method-normal-height, 420px);
  overflow: hidden;
  cursor: grab;
  touch-action: pan-y;
  outline: none;
  --demo-window-fade-x: 40px;
}
.method-normal-window:active { cursor: grabbing; }
.method-normal-window canvas,
.method-normal-window img { display: block; width: 100%; height: 100%; }
.method-normal-captions {
  display: grid;
  grid-template-columns: 1fr 1fr;
  margin: 0;
  white-space: normal;
}
.method-normal-captions > span { padding: 0 12px; text-wrap: balance; }
[data-method-proof-step]:not([data-method-proof-step="0"]) [data-method-normal-captions] {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}
.method-proof-caption-stack { position: relative; margin-top: calc(var(--gap-item) / 2); }
.method-proof-caption,
.method-proof-recognition-caption,
.method-proof-crushing-caption,
.method-proof-necklace-caption,
.method-proof-separated-caption {
  position: absolute;
  inset: 0;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}
[data-method-proof-step]:not([data-method-proof-step="0"]) [data-method-proof-caption] {
  opacity: 1;
  visibility: visible;
}
[data-method-proof-step="4"] [data-method-proof-caption],
[data-method-proof-step="4"] [data-method-normal-window],
[data-method-proof-step="5"] [data-method-proof-caption],
[data-method-proof-step="5"] [data-method-normal-window],
[data-method-proof-step="6"] [data-method-proof-caption],
[data-method-proof-step="6"] [data-method-normal-window] {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}
.method-proof-recognition {
  position: absolute;
  top: 0;
  left: 55%;
  width: 45%;
  height: var(--method-normal-height, 420px);
  z-index: 2;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}
.method-proof-crushing {
  position: relative;
  min-height: var(--method-proof-statement-height);
  box-sizing: border-box;
  margin: var(--gap-title) 0 0;
  color: var(--ink);
  font: 400 var(--type-heading)/1.4 var(--font-sans);
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}
.method-proof-crushing [data-cite-key] { pointer-events: auto; font: inherit; }
.method-proof-recognition .background-sphere-conditions li::before { background: var(--uq-purple); opacity: .5; }
.method-proof-euler-formula { white-space: nowrap; }
.method-proof-recognition [data-cite-key],
.method-proof-recognition-caption [data-cite-key] { pointer-events: auto; }
section[data-label="08 Methods II"] .method-proof-recognition-caption button.method-proof-math-cite[data-cite-key].serif { font: inherit; }
[data-method-proof-step="4"] [data-method-proof-recognition],
[data-method-proof-step="4"] [data-method-proof-recognition-caption] {
  opacity: 1;
  visibility: visible;
}
/* Crushing: the picture shrinks each disc to its own point, but in the
   quotient each copy of the sphere is one point; the caption says so. */
[data-method-proof-step="5"] [data-method-proof-crushing-caption] {
  opacity: 1;
  visibility: visible;
}
.method-proof-octahedron {
  position: absolute;
  top: 0;
  left: 50%;
  width: 100%;
  height: var(--method-normal-height, 420px);
  transform: translateX(-50%);
  z-index: 1;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  cursor: grab;
  touch-action: none;
  outline: none;
  --demo-window-fade-x: 40px;
}
.method-proof-octahedron:active { cursor: grabbing; }
.method-proof-octahedron-controls {
  position: absolute;
  inset: 0 auto 0 50%;
  width: 600px;
  transform: translateX(-50%);
  z-index: 1;
  pointer-events: none;
}
.method-proof-surface-hit-map {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  z-index: 2;
  pointer-events: none;
}
.method-proof-surface-hit-map polygon { fill: transparent; pointer-events: all; cursor: move; }
/* The blade (B on the crushing layer): over the bead the pointer is a glowing
   round UQ purple point drawn on the blade canvas at the pointer
   (a cursor image could not read the colour token), so the system cursor hides. */
.method-proof-octahedron.is-method-proof-blade,
.method-proof-octahedron.is-method-proof-blade:active,
.method-proof-octahedron.is-method-proof-blade .method-proof-surface-hit-map polygon { cursor: none; }
.method-proof-octahedron.is-method-proof-blade { pointer-events: auto; }
/* A landed piece under the pointer can be picked up, blade or not. */
.method-proof-octahedron.is-method-proof-piece-hover,
.method-proof-octahedron.is-method-proof-piece-hover .method-proof-surface-hit-map polygon { cursor: grab; }
.method-proof-octahedron.is-method-proof-piece-drag,
.method-proof-octahedron.is-method-proof-piece-drag:active,
.method-proof-octahedron.is-method-proof-piece-drag .method-proof-surface-hit-map polygon { cursor: grabbing; }
/* The blade itself, after Fruit Ninja: a glowing UQ purple swoosh with a white
   core, drawn with its cut glints and sparks on this canvas (js/method-proof-blade.js). */
.method-proof-octahedron { --method-proof-blade-colour: var(--uq-purple); }
.method-proof-blade-trail {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  z-index: 3;
  pointer-events: none;
}
.method-proof-necklace {
  position: absolute;
  top: 0;
  left: 50%;
  width: 50%;
  height: var(--method-normal-height, 420px);
  opacity: 0;
  visibility: hidden;
  overflow: hidden;
  touch-action: none;
  cursor: grab;
  outline: none;
  pointer-events: auto;
  z-index: 2;
  --demo-window-fade-x: 32px;
}
.method-proof-necklace:active { cursor: grabbing; }
.method-proof-necklace canvas { display: block; width: 100%; height: 100%; }
[data-method-proof-step]:not([data-method-proof-step="0"]) .method-proof-octahedron {
  opacity: 1;
  visibility: visible;
}
[data-method-proof-step]:not([data-method-proof-step="0"]) .method-proof-octahedron-controls { pointer-events: auto; }
[data-method-normal-term="triangles"] { color: var(--method-normal-triangle-colour); }
[data-method-normal-term="quads"] { color: var(--method-normal-quad-colour); }
.title-bg-bridge-overlay {
  inset: 0;
  pointer-events: none;
  position: fixed;
  z-index: 2147482550;
}
.title-bg-bridge-overlay::before {
  background: var(--bg-2);
  content: '';
  inset: 0;
  opacity: 1;
  position: fixed;
  transition: opacity var(--motion-reveal) cubic-bezier(.2,.7,.2,1);
  z-index: 0;
}
.title-bg-bridge-overlay::after {
  background: var(--hero-bg);
  content: '';
  inset: 0;
  opacity: 1;
  position: fixed;
  transition: opacity var(--motion-travel) cubic-bezier(.18,.78,.22,1);
  z-index: 1;
}
.title-bg-bridge-stage {
  overflow: hidden;
  position: fixed;
  z-index: 2;
}
.title-bg-bridge-ghost {
  background: transparent !important;
  height: 1080px !important;
  left: 0 !important;
  opacity: 1;
  position: absolute !important;
  top: 0 !important;
  transform-origin: left top;
  transition: opacity var(--motion-quick) cubic-bezier(.18,.78,.22,1);
  visibility: visible !important;
  width: 1920px !important;
  z-index: 1;
}
/* Cover links are controls, so they disappear before the shared-word flight. */
.title-bg-bridge-ghost .s-title .standalone-live-link-row,
.title-bg-bridge-ghost .s-title a {
  visibility: hidden;
}
.title-bg-bridge-ghost .s-title .product-name,
.title-bg-bridge-ghost .s-title .title-descriptor .title-line:first-child,
.title-bg-bridge-ghost .s-title .title-knot-prefix,
.title-bg-bridge-ghost .s-title .title-knot-period,
.title-bg-bridge-ghost .s-title .foot,
.title-bg-bridge-ghost .s-title .top {
  opacity: 1;
  transition: opacity var(--motion-quick) ease;
}
.title-bg-bridge-ghost .title-knot-source {
  color: var(--bg-2);
  opacity: 0;
}
.title-bg-bridge-ghost.is-dimming .s-title .product-name,
.title-bg-bridge-ghost.is-dimming .s-title .title-descriptor .title-line:first-child,
.title-bg-bridge-ghost.is-dimming .s-title .title-knot-prefix,
.title-bg-bridge-ghost.is-dimming .s-title .title-knot-period,
.title-bg-bridge-ghost.is-dimming .s-title .foot,
.title-bg-bridge-ghost.is-dimming .s-title .top {
  opacity: 0;
}
.title-bg-bridge-overlay.is-moving::after {
  opacity: 0;
}
.title-bg-bridge-overlay.is-stage-revealing::before {
  opacity: 0;
}
.title-bg-bridge-ghost.is-fading {
  opacity: 0;
}
.title-bg-bridge-flyer-frame {
  height: 1080px;
  left: 0;
  pointer-events: none;
  position: fixed;
  top: 0;
  transform-origin: left top;
  width: 1920px;
  z-index: 3;
}
.title-bg-bridge-flyer {
  background: transparent;
  border: 0;
  box-sizing: border-box;
  color: var(--bg-2);
  display: block;
  font-family: var(--font-sans);
  font-weight: 500;
  letter-spacing: -0.012em;
  line-height: 1.12;
  margin: 0;
  overflow: visible;
  padding: 0;
  position: absolute;
  transition:
    color var(--motion-travel) cubic-bezier(.18,.78,.22,1),
    left var(--motion-travel) cubic-bezier(.18,.78,.22,1),
    top var(--motion-travel) cubic-bezier(.18,.78,.22,1),
    width var(--motion-travel) cubic-bezier(.18,.78,.22,1),
    height var(--motion-travel) cubic-bezier(.18,.78,.22,1),
    font-size var(--motion-travel) cubic-bezier(.18,.78,.22,1),
    letter-spacing var(--motion-travel) cubic-bezier(.18,.78,.22,1),
    line-height var(--motion-travel) cubic-bezier(.18,.78,.22,1),
    opacity var(--motion-quick) ease;
  white-space: nowrap;
  z-index: 1;
}
.title-bg-bridge-overlay.is-moving .title-bg-bridge-flyer {
  color: var(--accent-2);
}
section.title-bg-transition-enter .title-knot-target {
  opacity: 0;
  transition: none;
}
section.slide-bg-motivation.title-bg-transition-enter:not(.title-bg-transition-reveal) .symptom-title-main {
  opacity: 0 !important;
  transition: none;
}
section.slide-bg-motivation.title-bg-transition-enter:not(.title-bg-transition-reveal) .symptom-title-main {
  transform: translateY(0);
}
section.slide-bg-motivation.title-bg-transition-enter.title-bg-transition-reveal .symptom-title-main {
  opacity: 1 !important;
  transform: translateY(0);
  transition: opacity var(--motion-reveal) cubic-bezier(.2,.7,.2,1);
}
.complexity-title-prefix,
.triangulation-title-prefix {
  display: inline-block;
}
/* The real title stays at its final geometry beneath the two moving copies. */
section.is-sphere-title-transition .head {
  visibility: hidden;
}
.sphere-title-bridge {
  position: fixed;
  inset: 0;
  overflow: hidden;
  pointer-events: none;
  z-index: 2147482550;
}
.sphere-title-surface { position: absolute; inset: 0; }
.sphere-title-ghost-frame { position: absolute; overflow: hidden; }
.sphere-title-ghost {
  position: absolute !important;
  inset: 0 auto auto 0 !important;
  width: 1920px !important;
  height: 1080px !important;
  background: transparent !important;
  opacity: 1 !important;
  visibility: visible !important;
  transform-origin: top left;
}
.sphere-title-ghost .complexity-title-sphere { visibility: hidden; }
.sphere-title-flight,
.sphere-title-prefix-flight {
  position: fixed;
  margin: 0;
  padding: 0;
  border: 0;
  transform-origin: top left;
  white-space: nowrap;
}
.sphere-title-flight > svg { display: block; width: 100%; height: 100%; overflow: visible; }
.sphere-timeline-clip { position: fixed; inset: 0; pointer-events: none; }
.sphere-timeline-node-clip { position: fixed; inset: 0; pointer-events: none; }
.sphere-timeline-node-clip.is-clipped-at-both-ends { clip-path: inset(0 100% 100% 0); }
.sphere-timeline-node-flight {
  position: fixed;
  display: block;
  margin: 0;
  padding: 0;
  border: 0;
  transform-origin: top left;
}
/* The marker copies own these pixels until the incoming body is ready. */
.is-timeline-content-morph [data-timeline-key="matveev"]::before,
.is-timeline-content-morph [data-timeline-key="ak"]::before,
.is-timeline-content-morph [data-timeline-key="hss"]::before { visibility: hidden; }
@media print {
  .sphere-title-bridge { display: none; }
  section.is-sphere-title-transition .head { visibility: visible; }
}
[data-method-title-word],
[data-method-title-stroke],
[data-method-title-rest] {
  display: inline-block;
  white-space: pre;
}
/* The heading owns its final layout beneath the retained word and split I. */
section.is-method-title-transition .head {
  visibility: hidden;
}
.method-title-bridge {
  position: fixed;
  inset: 0;
  overflow: hidden;
  pointer-events: none;
  z-index: 2147482550;
}
.method-title-surface { position: absolute; inset: 0; }
.method-title-word-flight,
.method-title-stroke-flight,
.method-title-rest-flight,
.method-title-outgoing-rest {
  position: fixed;
  display: block;
  margin: 0;
  padding: 0;
  border: 0;
  white-space: pre;
  transform-origin: top left;
}
.method-aim-word-flight,
.method-aim-stroke-flight,
.method-aim-stop-flight,
.method-aim-rule-flight,
.method-aim-scroll-flight {
  position: fixed;
  display: block;
  margin: 0;
  border: 0;
  transform-origin: top left;
}
.method-aim-word-flight,
.method-aim-stroke-flight,
.method-aim-stop-flight { white-space: pre; }
.method-aim-scroll-flight { overflow: hidden; }
.method-aim-body-outgoing,
.method-aim-body-incoming,
.method-aim-body-content {
  position: absolute;
  margin: 0;
  white-space: normal;
  transform-origin: top left;
}
@media print {
  .method-title-bridge { display: none; }
  section.is-method-title-transition .head { visibility: visible; }
}
.s-results > .head {
  display: flex;
  flex-direction: column;
  gap: var(--gap-title);
}
.results-content {
  display: grid;
  grid-template-columns: 60% minmax(0, 1fr);
  gap: var(--gap-title);
  flex: 1 1 auto;
  min-height: 0;
  align-items: start;
}
.results-triangulation { margin: 0; min-width: 0; }
.results-complexity { display: flex; flex-direction: column; gap: var(--gap-title); min-width: 0; padding-top: var(--gap-title); }
.results-bound { font: 400 var(--type-heading)/1.4 var(--font-sans); }
.results-bound h3 { margin: 0; font: inherit; }
.results-bound-formula { margin-top: var(--gap-item); }
.results-bound-formula .deck-math-display { text-align: left; }
[data-results-aim-row] { min-height: 1.35em; white-space: nowrap; }
[data-results-aim-row]:not([data-results-aim-current]) { opacity: var(--context-opacity); }
.results-scene {
  position: relative;
  width: 100%;
  height: 520px;
  cursor: grab;
  touch-action: none;
  outline: none;
}
.results-scene:active { cursor: grabbing; }
.results-scene canvas { display: block; }
.results-caption { display: grid; margin-top: calc(var(--gap-item) / 2); white-space: normal; text-wrap: balance; }
.results-caption > span { grid-area: 1 / 1; }
.results-caption > span[hidden], [data-results-lower-bound][hidden] { display: none; }
/* Ordinary opening/replay follows the same caption-before-bound order as
   the shared bridge. The figure's existing a3 slot begins at two gaps. */
section[data-label="09 Results"][data-results-step="0"].slide-out [data-results-caption] {
  opacity: 0;
  transition: none;
}
section[data-label="09 Results"][data-results-step="0"].slide-in:not(.is-results-transition) [data-results-caption] {
  opacity: 1;
  transition: opacity var(--motion-reveal) cubic-bezier(.2,.7,.2,1);
  transition-delay: calc(var(--motion-gap) * 2);
}
section[data-label="09 Results"][data-results-step="0"].slide-in:not(.is-results-transition) [data-results-complexity].anim {
  transition-delay: calc(var(--motion-reveal) + var(--motion-gap) * 3);
}
.results-blade { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; z-index: 2; }
.s-results [data-results-aim-rule] { background: transparent; }
.results-aim-tick { position: absolute; inset: 0; display: block; width: 4px; height: 100%; overflow: visible; }
.results-aim-tick path { fill: none; stroke: currentColor; stroke-width: 4; stroke-linecap: round; stroke-linejoin: round; }
section.is-results-transition > .s-results > .head,
section.is-results-transition .results-triangulation,
section.is-results-transition [data-results-complexity] { visibility: hidden; }
section[data-label="09 Results"].is-results-transition [data-results-complexity] {
  transition: none !important;
}
.results-bridge {
  position: fixed;
  inset: 0;
  overflow: hidden;
  pointer-events: none;
  z-index: 2147482550;
}
.results-outgoing { position: fixed; transform-origin: top left; }
.results-outgoing *, .results-outgoing { transition: none !important; animation: none !important; }
.results-aim-window, .results-octahedron-flight, .results-title-flight, .results-rule-flight {
  position: fixed;
  margin: 0;
  transform-origin: top left;
}
.results-aim-window { overflow: hidden; }
.results-aim-row { position: absolute; inset: 0 auto auto 0; transform-origin: top left; }
.results-aim-row > .method-aim-copy { grid-column: auto; grid-row: auto; }
.results-aim-body-flight { opacity: 1; }
.results-rule-flight { overflow: visible; }
.results-rule-flight path { fill: none; stroke: currentColor; stroke-linejoin: round; }
.results-octahedron-flight { object-fit: fill; }
@media print {
  .results-bridge { display: none; }
  section.is-results-transition > .s-results > .head,
  section.is-results-transition .results-triangulation,
  section.is-results-transition [data-results-complexity] { visibility: visible; }
}
/* Aim II wraps naturally inside its body column, preserving the hanging indent. */
[data-results-aim-quote] { position: relative; }
[data-results-aim-history] { position: relative; }
[data-results-aim-row="2"] .method-aim-viewport { white-space: normal; }
.results-aim-summary-ticks {
  position: absolute;
  inset: 0 0 0 -1.35em;
  overflow: hidden;
  pointer-events: none;
  color: var(--accent);
  visibility: hidden;
}
.results-aim-summary-ticks svg {
  position: absolute;
  left: 1.35em;
  width: 4px;
  height: 1.35em;
  overflow: visible;
  opacity: 0;
}
.results-aim-summary-ticks path {
  fill: none;
  stroke: currentColor;
  stroke-width: 4;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.is-results-aim-summary [data-results-aim-history] {
  display: flex;
  flex-direction: column;
  gap: var(--results-aim-summary-gap, 0px);
  overflow: hidden;
}
.is-results-aim-summary [data-results-aim-row] { flex: 0 0 auto; opacity: var(--context-opacity) !important; }
.is-results-aim-summary .results-aim-summary-ticks { visibility: visible; }
.s-results { position: relative; }
.results-bounds {
  position: absolute;
  inset: auto 0 0;
  display: grid;
  place-items: center;
  margin: 0;
  pointer-events: none;
}
.results-bounds[hidden] { display: none; }
.results-bounds-chart { position: absolute; width: 900px; aspect-ratio: 940 / 312; color: var(--ink); }
.results-bounds-interaction { position: absolute; inset: 0 0 auto; overflow: hidden; pointer-events: auto; touch-action: none; cursor: zoom-in; outline: none; }
.results-bounds-interaction:focus-visible { outline: none; }
.results-bounds-diagram { display: block; width: 100%; height: 100%; overflow: visible; }
.results-bounds .tb-grid line { stroke: var(--line-2); stroke-width: 1; }
.results-bounds .tb-axis { font: 400 calc(var(--type-caption) * 800 / 900) var(--font-sans); fill: var(--ink-2); }
.results-bounds .tb-ylab text { text-anchor: end; }
.results-bounds .tb-xlab text { text-anchor: middle; }
.results-bounds .tb-var { font-family: var(--font-serif); font-style: italic; }
.results-bounds :is(.tb-upper, .tb-lower) { fill: none; stroke-width: 2.4; stroke-linecap: round; stroke-linejoin: round; }
.results-bounds .tb-original-bounds .tb-upper { stroke: var(--monash-blue); }
.results-bounds .tb-original-bounds .tb-lower { stroke: rgb(from var(--uq-purple) r g b / .8); }
.results-bounds .tb-original-bounds .tb-nodes-upper circle { fill: var(--monash-blue); }
.results-bounds .tb-original-bounds .tb-nodes-lower circle { fill: rgb(from var(--uq-purple) r g b / .8); }
.results-bounds :is(.tb-nodes-upper, .tb-nodes-lower) circle { r: var(--results-bounds-node-radius, 5px); }
.results-bounds .tb-moving-bounds .tb-upper { stroke: var(--color-ochre); }
.results-bounds .tb-moving-bounds .tb-lower { stroke: var(--ink); }
.results-bounds .tb-moving-bounds .tb-nodes-upper circle { fill: var(--color-ochre); }
.results-bounds .tb-moving-bounds .tb-nodes-lower circle { fill: var(--ink); }
.results-bounds [data-results-verified-area] { display: none; fill: var(--color-ochre); opacity: 0; pointer-events: none; }
.results-bounds [data-results-verified-label] { display: none; fill: var(--color-ochre); opacity: 0; font-family: var(--font-sans); font-weight: 400; pointer-events: none; }
[data-discussions-bounds] [data-results-verified-area] { display: block; opacity: var(--discussion-verified-opacity, 0); }
[data-discussions-bounds] [data-results-verified-label] { display: block; opacity: var(--discussion-verified-label-opacity, 0); }
.results-bounds .tb-gap { fill: var(--ink); opacity: .2; }
.tb-label .tb-bound-math { display: block; font-size: calc(var(--type-caption) * 800 / 900); line-height: 1; }
.triangulation-figure-body .tb-label-upper .tb-bound-math { color: var(--monash-blue); }
.triangulation-figure-body .tb-label-lower .tb-bound-math { color: var(--triangulation-2025-colour); }
.results-bounds .tb-label-upper .tb-bound-math { color: var(--monash-blue); }
.results-bounds .tb-label-lower .tb-bound-math { color: rgb(from var(--uq-purple) r g b / .8); }
.results-bounds-label { position: absolute; font-size: var(--type-heading); line-height: 1; visibility: hidden; transform: translateY(-50%); }
[data-results-bounds-upper] { left: 80.212766%; top: 52.911325%; }
[data-results-bounds-lower] { left: 80.212766%; top: 60.950855%; }
[data-results-bounds-upper] { color: var(--color-ochre); }
[data-results-bounds-lower] { color: var(--ink); }
[data-results-bounds-tau] { left: 6.382978%; top: 7.692308%; transform: none; color: var(--ink-2); }
.results-bounds-caption { position: absolute; margin: 0; text-wrap: balance; }
.results-necklace { position: absolute; left: 50%; right: 0; bottom: 32px; width: 50%; height: calc(100% - 32px); max-height: 420px; display: grid; grid-template-rows: minmax(0, 1fr) auto; gap: var(--gap-item); margin: 0; pointer-events: none; }
.results-necklace[hidden] { display: none; }
.results-necklace-window { position: relative; min-height: 0; overflow: hidden; touch-action: none; pointer-events: auto; cursor: grab; outline: none; }
.results-necklace-window:active { cursor: grabbing; }
.results-necklace-caption { margin: 0; text-align: center; }
.results-caption-baseline { display: inline-block; width: 0; height: 0; pointer-events: none; }
section.is-results-bounds > .s-results > .head .anim { opacity: 1 !important; transform: none !important; transition: none !important; }
.results-bounds-overlay { position: fixed; inset: 0; pointer-events: none; z-index: 2147482545; }
.results-bounds-flight { position: fixed; margin: 0; pointer-events: none; }
.results-bounds-flight > svg { display: block; width: 100%; height: 100%; fill: currentColor; overflow: visible; }
.discussions-bridge { pointer-events: none; z-index: 2147482545; }
.discussions-bridge .anim { transition: none !important; }
[data-discussions-bounds] { position: absolute; inset: 0; }
section.is-discussions-startup [data-discussions-bounds],
section.is-discussions-startup [data-discussions-bounds] * { visibility: hidden !important; }
[data-discussions-bounds] :is(.tb-original-bounds, .tb-label) { opacity: 0 !important; }
[data-discussions-bounds] [data-results-necklace] { display: none; }
@media print { .results-bounds-overlay { display: none; } }
/* Fade in the discussion together, with the conjecture in focus first. */
.s-discussions .discussions-items {
  position: absolute;
  inset: 180px 0 150px 56%;
  display: grid;
  align-content: start;
  gap: var(--gap-title);
  margin: 0;
  padding: 0;
  list-style: none;
}
.discussions-item {
  color: var(--ink);
  font: 400 var(--type-heading)/1.4 var(--font-sans);
  opacity: .28;
  transition: opacity var(--motion-reveal) cubic-bezier(.2,.7,.2,1);
}
section[data-discussion-focus="1"] [data-discussion-item="1"],
section[data-discussion-focus="2"] :is([data-discussion-item="2"], [data-discussion-item="3"], [data-discussion-item="4"]) { opacity: 1; }
section.is-discussion-focus-instant .discussions-item { transition: none; }
section[data-label] .s-discussions .discussions-items { transform: none; }
.discussions-item-marker {
  overflow: visible;
  color: inherit;
}
.discussions-item-marker path {
  fill: currentColor;
  stroke: none;
}
.discussions-item-title {
  margin: 0;
  color: var(--ink);
  font: inherit;
  text-wrap: balance;
}
/* The diagram owner carries these values through reparenting and landing. */
[data-discussions-bounds] :is(.tb-moving-bounds .tb-lower, .tb-moving-bounds .tb-nodes-lower, [data-results-bounds-lower]) { opacity: var(--discussion-lower-opacity, .18); }
[data-discussions-bounds] [data-results-bounds-gap] { opacity: var(--discussion-area-opacity, .036); }
/* Source composition, with the reused demo bytes marked inside the whole.
   Chart and sidebar split the width 40/60. */
.s-development { min-height: 0; }
.development-content { position: relative; flex: 1 1 auto; min-height: 0; display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 3fr); column-gap: 100px; align-items: stretch; }
.development-chart { margin: 0; min-width: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; }
.development-ring { position: relative; width: min(100%, 550px); aspect-ratio: 1; flex: 0 0 auto; }
.development-ring > svg { width: 100%; height: 100%; overflow: visible; }
.development-ring circle { fill: none; }
.development-ring .ring-track { stroke: rgb(from var(--ink) r g b / .055); stroke-width: 42; }
.development-ring .ring-segment { stroke-width: 42; stroke-dasharray: var(--segment-length) 100; transform: rotate(-90deg); transform-origin: 205px 205px; transition: stroke-opacity var(--motion-quick), filter var(--motion-quick); cursor: pointer; outline: none; }
.development-ring .ring-segments { filter: drop-shadow(0 5px 5px rgb(from var(--ink) r g b / .12)); }
.development-ring .ring-segment.is-active { filter: brightness(1.08); }
.development-ring .ring-segment:focus-visible { stroke-width: 46; }
.development-content.is-inspecting .ring-segment:not(.is-active) { stroke-opacity: .26; }
.development-ring-center { position: absolute; inset: 0; pointer-events: none; }
.development-ring-hover { position: absolute; top: 50%; left: 0; right: 0; display: flex; flex-direction: column; align-items: center; gap: 8px; opacity: 0; transform: translateY(calc(-50% + 14px)); transition: opacity var(--motion-quick), transform var(--motion-quick); }
.development-ring-hover .hover-language { font: 400 var(--type-caption)/1.2 var(--font-sans); }
.development-ring-hover .hover-percent { font: 400 var(--type-heading)/1.05 var(--font-sans); font-variant-numeric: tabular-nums; }
.development-content.is-inspecting-section .development-ring-hover { opacity: 1; transform: translateY(-50%); }
.development-ring .demo-section-arc { stroke: var(--ink); stroke-width: 1.5; stroke-linecap: round; opacity: .7; }
.development-ring .demo-section-tick { stroke: var(--ink); stroke-width: 1.5; opacity: .7; }
.development-ring .demo-section-hit { stroke: transparent; stroke-width: 18; cursor: pointer; outline: none; }
.development-ring .demo-section-hit:focus-visible { stroke: rgb(from var(--ink) r g b / .16); }
.development-demo-section { fill: var(--ink); font-family: var(--font-sans); font-size: calc(var(--type-caption) * 410 / 550); cursor: pointer; outline: none; }
.development-demo-section:focus-visible { fill: var(--accent-2); }
.development-frame-caption { margin-top: var(--gap-item); white-space: normal; }
.development-sidebar { min-height: 0; margin-bottom: calc(var(--gap-item) * 2); display: flex; flex-direction: column; justify-content: flex-start; overflow-y: auto; overscroll-behavior: contain; scrollbar-width: thin; scrollbar-color: transparent transparent; padding-right: 16px; outline: none; }
.development-sidebar:hover, .development-sidebar:focus-within { scrollbar-color: rgb(from var(--ink) r g b / .3) transparent; }
.development-legend { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: max-content; list-style: none; display: flex; flex-direction: column; gap: 18px; margin: 0; padding: 0; pointer-events: auto; transition: opacity var(--motion-quick); }
.development-content.is-inspecting-section .development-legend { opacity: 0; pointer-events: none; }
.development-legend .language-entry { position: relative; width: max-content; display: flex; align-items: center; gap: 12px; padding: 0; border: 0; background: none; color: var(--ink); font: 400 var(--type-body)/1.2 var(--font-sans); text-align: left; cursor: pointer; transition: opacity var(--motion-quick); }
.development-legend .language-entry:focus-visible { outline: 2px solid var(--language-color); outline-offset: 6px; }
.development-content.is-inspecting .language-entry:not(.is-active) { opacity: .4; }
.development-legend .language-swatch { width: 13px; height: 13px; flex: none; border-radius: 50%; background: var(--language-color); }
.development-legend .language-percent { position: absolute; left: calc(100% + 16px); font: 400 var(--type-caption)/1.2 var(--font-sans); white-space: nowrap; font-variant-numeric: tabular-nums; }
.development-tools { flex: 0 0 auto; display: flex; flex-direction: column; gap: 20px; }
.development-tools > h3 { margin: 0; font: 400 var(--type-heading)/1.1 var(--font-serif); font-style: normal; }
.development-tool-scroll { overflow: visible; }
.development-tools ul { list-style: none; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); grid-template-rows: repeat(var(--tool-rows, 10), auto); grid-auto-flow: column; gap: 10px 24px; margin: 0; padding: 0; }
.development-tools li { min-width: 0; font: 400 var(--type-caption)/1.2 var(--font-serif); font-style: normal; transition: opacity var(--motion-quick); }
.development-content.is-inspecting-language .development-tools li:not(.is-related) { opacity: .22; }
/* Keep each dot centred on the lowercase x-height as the global font changes. */
.development-tools li::before { display: inline-block; vertical-align: .275ex; width: .45ex; height: .45ex; margin-inline-end: .55em; border-radius: 50%; background: var(--ink); content: ''; }
.development-tools [data-cite-key] { display: inline; padding: 0; border: 0; background: none; color: var(--ink); font: 400 var(--type-caption)/1.2 var(--font-serif); font-style: normal; text-align: left; cursor: pointer; }
.development-words { flex: 0 0 auto; margin-top: var(--gap-item); padding-top: var(--gap-item); border-top: 1px solid var(--line-2); font: 400 var(--type-body)/1.2 var(--font-serif); font-style: normal; }
.development-words > summary { display: grid; grid-template-columns: .866ex minmax(0, 1fr); align-items: start; gap: .75em; list-style: none; font: inherit; border: 0; background: none; box-shadow: none; outline: none; user-select: none; cursor: pointer; }
.development-words > summary::-webkit-details-marker { display: none; }
.development-words > summary::marker { content: ''; }
.development-words > summary::before { content: ''; width: .866ex; height: 1ex; margin-top: calc((1lh - 1ex) / 2); background: currentColor; clip-path: polygon(0 0, 100% 50%, 0 100%); transition: transform var(--motion-quick); }
.development-words[open] > summary::before { transform: rotate(90deg); }
.development-words-content { margin-top: calc(var(--gap-item) / 2); font: 400 var(--type-caption)/1.45 var(--font-serif); font-style: normal; }
.development-words-content > p { margin: 0; }
.development-words-content > p + p { margin-top: calc(var(--gap-item) / 2); }
.development-words-content > .development-words-title { font: italic 400 var(--type-body)/1.2 var(--font-serif); }
.development-words-content > .development-words-copyright { font: 400 var(--type-caption)/1.2 var(--font-sans); }
/* The developer's link: the bibliography's URL face in ink, with no underline.
   Hover or focus sweeps in the citation-landing highlighter (accent, pooled at
   both ends, baseline -.7em to +.25em) instead. */
section[data-label] .development-words-copyright a[href] {
  --link-mark: rgb(from var(--accent) r g b / .2);
  color: var(--ink);
  font-family: "Inconsolata", monospace;
  font-feature-settings: "ss01" 1, "ss03" 1;
  text-decoration-line: none;
  background-image: linear-gradient(90deg, rgb(from var(--accent) r g b / .3), var(--link-mark) 12%, var(--link-mark) 88%, rgb(from var(--accent) r g b / .27));
  background-repeat: no-repeat;
  /* Inline padding paints without moving lines: the band reaches .25em below
     the baseline, past the face's own descent. */
  padding-bottom: .07em;
  background-position: left bottom;
  background-size: 0% .95em;
  -webkit-box-decoration-break: clone;
  box-decoration-break: clone;
  transition: background-size var(--motion-quick) ease;
}
section[data-label] .development-words-copyright a[href]:is(:hover, :focus-visible) { background-size: 100% .95em; }
@media (prefers-reduced-motion: reduce) {
  section[data-label] .development-words-copyright a[href] { transition: none; }
}
/* Sign-off: motto, then name, set flush right. */
.development-words-content > .development-words-motto { margin-top: calc(var(--gap-item) / 2); text-align: right; }
.development-words-content > .development-words-signature { text-align: right; }
/* Project timeline: slide 5's strand (ochre nodes and edges, sans years) at
   caption size, with titles, notes and skills in ink. Each node draws its segment down to the next node from its own
   row, so the strand needs no script and lengthens when a note unfolds. Nodes
   and segments are real elements so the hidden blade can shatter them. */
.development-timeline {
  --timeline-dot: 1ex;
  --timeline-gutter: 24px;
  --timeline-leading: 1.35;
  --timeline-spacing: calc(var(--gap-item) * .75);
  --timeline-centre: calc(1em * var(--timeline-leading) / 2);
  --timeline-line-width: max(1.5px, calc(1em * .045));
  --timeline-paint: rgb(from var(--color-ochre) r g b / .85);
  display: grid;
  grid-template-columns: var(--timeline-gutter) max-content minmax(0, 1fr);
  column-gap: .5em;
  list-style: none;
  margin: 0;
  padding: 0;
  font: 400 var(--type-caption)/var(--timeline-leading) var(--font-sans);
}
/* Rows share the list's columns, so every title starts at the widest year. */
.development-timeline > li { position: relative; grid-column: 1 / -1; display: grid; grid-template-columns: subgrid; align-items: start; }
.development-timeline > li + li { margin-top: var(--timeline-spacing); }
.development-timeline-dot { grid-column: 1; grid-row: 1; justify-self: center; width: var(--timeline-dot); height: var(--timeline-dot); margin-top: calc(var(--timeline-centre) - var(--timeline-dot) / 2); border-radius: 50%; background: var(--timeline-paint); }
.development-timeline-line { position: absolute; left: calc((var(--timeline-gutter) - var(--timeline-line-width)) / 2); top: calc(var(--timeline-centre) + var(--timeline-dot) / 2); bottom: calc(var(--timeline-dot) / 2 - var(--timeline-spacing) - var(--timeline-centre)); width: var(--timeline-line-width); background: var(--timeline-paint); }
.development-timeline-year { grid-column: 2; grid-row: 1; color: var(--ink); white-space: nowrap; font-variant-numeric: tabular-nums; }
.development-timeline-entry { grid-column: 3; grid-row: 1; min-width: 0; }
.development-timeline-heading { margin: 0; color: var(--ink); font-family: var(--font-serif); font-style: normal; }
.development-timeline-items { list-style: none; margin: 0; padding: 0; color: var(--ink); font-family: var(--font-serif); font-style: normal; }
/* Item points copy the resource points, centred on the x-height. */
.development-timeline-items > li::before { display: inline-block; vertical-align: .275ex; width: .45ex; height: .45ex; margin-inline-end: .55em; border-radius: 50%; background: var(--ink); content: ''; }
/* Gallery (a subsubsection of the developer's words) and the folded notes reuse
   the developer's-words disclosure arrow. */
.development-gallery { margin-top: calc(var(--gap-item) / 2); color: var(--ink); font: 400 var(--type-caption)/1.45 var(--font-serif); font-style: normal; }
.development-gallery > .development-timeline { margin-top: calc(var(--gap-item) / 2); }
.development-timeline-note { color: var(--ink); font: 400 var(--type-detail)/1.35 var(--font-sans); }
:is(.development-gallery, .development-timeline-note) > summary { display: grid; grid-template-columns: .866ex minmax(0, 1fr); align-items: start; gap: .6em; width: max-content; list-style: none; font: inherit; user-select: none; cursor: pointer; outline: none; }
:is(.development-gallery, .development-timeline-note) > summary::-webkit-details-marker { display: none; }
:is(.development-gallery, .development-timeline-note) > summary::marker { content: ''; }
:is(.development-gallery, .development-timeline-note) > summary::before { content: ''; width: .866ex; height: 1ex; margin-top: calc((1lh - 1ex) / 2); background: currentColor; clip-path: polygon(0 0, 100% 50%, 0 100%); transition: transform var(--motion-quick); }
:is(.development-gallery, .development-timeline-note)[open] > summary::before { transform: rotate(90deg); }
/* Like the developer's-words title, the Gallery title shows no focus outline. */
.development-timeline-note > summary:focus-visible { outline: 2px solid var(--accent-2); outline-offset: 4px; }
.development-timeline-note > p { margin: calc(var(--gap-item) / 4) 0 0; color: var(--ink); font: 400 var(--type-detail)/1.45 var(--font-serif); }
.development-content.is-development-opening .ring-segment { animation: development-ring-draw var(--motion-travel) cubic-bezier(.2,.7,.2,1) both; }
@keyframes development-ring-draw { from { stroke-dasharray: 0 100; opacity: .15; } to { stroke-dasharray: var(--segment-length) 100; opacity: 1; } }
@media (prefers-reduced-motion: reduce) {
  .development-content.is-development-opening .ring-segment { animation: none; }
  .development-ring-hover, .development-ring .ring-segment, .development-legend, .development-legend .language-entry, .development-tools li { transition: none; }
}
/* The retained first aim stays outside the travelling stack snapshot. */
section.is-aim-method-transition .head { visibility: hidden; }
/* Releasing the copies must not restart Methods' ordinary fade-up keyframes. */
section.is-aim-method-composed .head .anim {
  animation: none !important;
  transition: none !important;
  opacity: 1;
  transform: none;
}
.aim-method-bridge {
  position: fixed;
  inset: 0;
  overflow: hidden;
  pointer-events: none;
  z-index: 2147482550;
}
.aim-method-text-flight,
.aim-method-rule-flight,
.aim-method-title-flight,
.aim-method-label-flight {
  position: fixed;
  display: block;
  margin: 0;
  padding: 0;
  border: 0;
  transform-origin: top left;
}
.aim-method-text-flight,
.aim-method-title-flight,
.aim-method-label-flight { white-space: pre; }
.aim-method-rule-flight { transform-origin: center; }
@media print {
  .aim-method-bridge { display: none; }
  section.is-aim-method-transition .head { visibility: visible; }
}
/* An unlisted page blade on Development. Two clipped page snapshots part
   along the drawn stroke; the actual appendix waits underneath. Word shards
   fall independently onto a snapshot of the live navigation rail. */
[data-hidden-branch-blade],
[data-hidden-branch-blade] * {
  cursor: none !important;
  touch-action: none;
  user-select: none;
  -webkit-user-select: none;
}
.hidden-branch-cut,
.hidden-branch-blade-canvas {
  position: fixed;
  inset: 0;
  width: 100vw;
  height: 100vh;
  pointer-events: none;
}
.hidden-branch-cut {
  overflow: hidden;
  z-index: 2147482550;
}
.hidden-branch-blade-canvas {
  z-index: 2147482560;
}
.hidden-branch-under,
.hidden-branch-piece,
.hidden-branch-seams,
.hidden-branch-floor {
  position: absolute;
  inset: 0;
}
.hidden-branch-under { z-index: 0; }
.hidden-branch-piece {
  z-index: 1;
  overflow: hidden;
  will-change: transform;
}
.hidden-branch-ghost {
  position: absolute !important;
  margin: 0 !important;
  background: transparent !important;
  opacity: 1 !important;
  visibility: visible !important;
  transform-origin: top left;
  pointer-events: none !important;
}
.hidden-branch-source-copy,
.hidden-branch-source-copy * {
  color: transparent !important;
  -webkit-text-fill-color: transparent !important;
  text-shadow: none !important;
  caret-color: transparent !important;
}
.hidden-branch-source-copy text { fill: transparent !important; stroke: transparent !important; }
.hidden-branch-source-copy .deck-math { visibility: hidden !important; }
.hidden-branch-source-copy svg,
.hidden-branch-source-copy canvas,
.hidden-branch-source-copy img,
.hidden-branch-source-copy .language-swatch,
.hidden-branch-source-copy .development-tools li::before,
.hidden-branch-source-copy .development-timeline-items > li::before,
.hidden-branch-source-copy .development-timeline-dot,
.hidden-branch-source-copy .development-timeline-line,
.hidden-branch-source-copy .development-words summary::before { visibility: hidden !important; }
.hidden-branch-source-copy .development-words { border-top-color: transparent !important; }
.hidden-branch-seams {
  z-index: 2;
  overflow: visible;
}
.hidden-branch-seam {
  fill: none;
  stroke: var(--hidden-branch-blade-colour);
  stroke-width: 2;
  stroke-linejoin: round;
  stroke-linecap: round;
  filter: drop-shadow(0 0 4px var(--hidden-branch-blade-colour));
  will-change: transform;
}
.hidden-branch-floor { z-index: 3; }
.hidden-branch-words { z-index: 4; }
.hidden-branch-word,
.hidden-branch-word-fragment { pointer-events: none; user-select: none; }
@media print {
  .hidden-branch-cut,
  .hidden-branch-blade-canvas { display: none !important; }
}
.workflow-progress {
  --workflow-ink: var(--ink);
  --workflow-stroke: var(--line-2);
  --workflow-hover-stroke: var(--accent-2);
  --workflow-current-stroke: var(--accent-2);
  --workflow-current-fill: rgb(from var(--accent-2) r g b / 0.1);
  --workflow-shadow: 0 10px 24px rgb(from var(--ink) r g b / 0.12);
  --workflow-surface: var(--deck-page-bg, var(--bg));
  border-top: 1px solid var(--line-2);
  padding-top: 16px;
  display: grid;
  grid-template-rows: auto 1fr;
  gap: 10px;
  color: var(--ink);
}
.workflow-progress-label {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 24px;
  font-family: var(--font-sans);
  font-weight: 600;
  font-size: var(--type-detail);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--ink);
}
.workflow-progress-label .status {
  color: var(--accent-2);
}
.workflow-rail {
  display: grid;
  grid-template-columns: repeat(var(--workflow-step-count, 7), minmax(0, 1fr));
  gap: 10px;
  align-items: stretch;
  min-height: 52px;
  transform-origin: center bottom;
}
.flow-node {
  --node-fill: transparent;
  --node-stroke: var(--line-2);
  --step-color: var(--accent-2);
  --step-soft: rgb(from var(--accent-2) r g b / 0.1);
  appearance: none;
  box-sizing: content-box;
  border: 1.5px solid var(--node-stroke);
  background: var(--node-fill);
  color: var(--ink);
  min-width: 0;
  height: 100%;
  padding: 0 20px;
  text-align: center;
  display: flex;
  align-items: center;
  flex-direction: row;
  justify-content: center;
  gap: 0;
  cursor: pointer;
  font: inherit;
  border-radius: 999px;
  text-decoration: none;
  transition: transform var(--motion-quick) ease, background var(--motion-quick) ease, border-color var(--motion-quick) ease, box-shadow var(--motion-quick) ease, color var(--motion-quick) ease;
}
.flow-node:hover,
.flow-node:focus-visible {
  transform: translateY(-3px);
  border-color: var(--step-color);
  box-shadow: 0 10px 24px rgb(from var(--ink) r g b / 0.12);
  outline: none;
}
.flow-node.is-current {
  border-color: var(--step-color);
  background: var(--step-soft);
  color: var(--ink);
  box-shadow: 0 10px 24px rgb(from var(--ink) r g b / 0.12);
}
.node-kicker {
  font-family: var(--font-sans);
  font-weight: 700;
  font-size: var(--type-detail);
  letter-spacing: 0.12em;
  color: var(--accent-2);
  flex: 0 0 auto;
}
.workflow-progress .node-kicker {
  display: none;
}
.node-title {
  font-family: var(--font-sans);
  font-weight: 600;
  font-size: var(--type-caption);
  line-height: 1.05;
  color: var(--ink);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.node-detail {
  display: none;
}
.flow-node.is-current .node-kicker,
.flow-node.is-current .node-title {
  color: var(--ink);
}
.workflow-progress .flow-node:not(.is-current) {
  background: transparent;
}
.workflow-progress .flow-node.is-current {
  background: var(--step-soft);
  border-color: var(--step-color);
  color: var(--ink);
}
.flow-link {
  display: none;
}
.flow-link::after {
  content: none;
}
.workflow-progress--persistent {
  --workflow-divider-inset: 5px;
  --workflow-frame-gap: 8px;
  position: absolute;
  left: var(--pad-x);
  right: var(--pad-x);
  bottom: 62px;
  z-index: 8;
  padding-top: var(--workflow-divider-inset);
}
.workflow-progress--global {
  bottom: var(--workflow-progress-bottom, 62px);
  box-sizing: border-box;
  height: auto;
  left: var(--workflow-progress-left, 5.7vw);
  opacity: 1;
  position: fixed;
  right: auto;
  top: auto;
  transform: scale(var(--workflow-progress-scale, 1));
  transform-origin: left bottom;
  transition: opacity var(--motion-reveal) cubic-bezier(.2,.7,.2,1);
  width: var(--workflow-progress-width, calc(100vw - 11.4vw));
  z-index: 80;
  isolation: isolate;
}
.workflow-progress--global.is-hidden {
  opacity: 0;
  pointer-events: none;
  visibility: hidden;
}
.workflow-progress--persistent .workflow-progress-label {
  display: none;
}
.workflow-progress--persistent .workflow-rail {
  min-height: 44px;
  grid-template-columns: repeat(var(--workflow-step-count, 7), minmax(0, 1fr));
  gap: 10px;
}
.workflow-progress--persistent .flow-node {
  min-height: 42px;
  padding: 0 11px;
  gap: 8px;
  border-radius: 999px;
}
.workflow-progress--persistent .flow-node.is-current {
  background: var(--step-soft);
  border-color: var(--step-color);
  color: var(--ink);
}
.workflow-step {
  position: relative;
  min-width: 0;
  display: flex;
  align-items: stretch;
}
.workflow-step > .flow-node { flex: 1; }
.workflow-progress .workflow-step {
  --workflow-pill-fill: transparent;
  --workflow-pill-stroke: var(--workflow-stroke);
  --workflow-pill-shadow: none;
}
.workflow-progress .workflow-step:has(> .flow-node.is-current) {
  --workflow-pill-fill: var(--workflow-current-fill);
  --workflow-pill-stroke: var(--workflow-current-stroke);
  --workflow-pill-shadow: var(--workflow-shadow);
}
.workflow-progress .workflow-step:is(:hover, :focus-within) {
  --workflow-pill-stroke: var(--workflow-hover-stroke);
  --workflow-pill-shadow: var(--workflow-shadow);
}
.workflow-progress .workflow-step > .flow-node {
  background: var(--workflow-pill-fill);
  border-color: var(--workflow-pill-stroke);
  color: var(--workflow-ink);
  box-shadow: var(--workflow-pill-shadow);
}
.workflow-progress .workflow-step > .flow-node .node-title { color: inherit; }
/* The transparent bridge keeps the hover disclosure open while the pointer
   crosses the divider between the parent and its capsule. */
.workflow-step:has(> .workflow-frame-selector)::after {
  content: '';
  position: absolute;
  bottom: 100%;
  left: 0;
  width: 100%;
  height: calc(var(--workflow-divider-inset) + 1px + var(--workflow-frame-gap));
  pointer-events: none;
}
.workflow-step:has(> .workflow-frame-selector):is(:hover, :focus-within)::after {
  pointer-events: auto;
}
.workflow-frame-selector {
  --workflow-frame-index: 0;
  --workflow-frame-count: 3;
  position: absolute;
  bottom: calc(100% + var(--workflow-divider-inset) + 1px + var(--workflow-frame-gap));
  left: 0;
  width: 100%;
  /* Match the original pill's content height plus its two 1.5px borders. */
  height: calc(100% + 3px);
  box-sizing: border-box;
  transform: translateY(4px);
  display: grid;
  grid-template-columns: repeat(var(--workflow-frame-count), minmax(0, 1fr));
  padding: 2px;
  border: 1.5px solid var(--workflow-stroke);
  border-radius: 999px;
  background: transparent;
  color: var(--workflow-ink);
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity var(--motion-quick) ease, transform var(--motion-quick) ease,
    background var(--motion-quick) ease, border-color var(--motion-quick) ease,
    box-shadow var(--motion-quick) ease, color var(--motion-quick) ease,
    visibility 0ms linear var(--motion-quick);
  isolation: isolate;
  z-index: 2;
}
/* Keep inactive frames neutral while masking the slide text underneath. */
.workflow-frame-selector::before {
  content: '';
  position: absolute;
  inset: 0;
  border-radius: inherit;
  background: var(--workflow-surface);
  z-index: -2;
}
.workflow-step:is(:hover, :focus-within) > .workflow-frame-selector {
  transform: translateY(0);
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transition-delay: 0ms;
}
.workflow-frame-selection {
  position: absolute;
  top: 2px;
  bottom: 2px;
  left: 2px;
  width: calc((100% - 4px) / var(--workflow-frame-count));
  box-sizing: border-box;
  border: 1.5px solid var(--workflow-current-stroke);
  border-radius: 999px;
  background: var(--workflow-current-fill);
  box-shadow: var(--workflow-shadow);
  opacity: 0;
  transform: translateX(calc(var(--workflow-frame-index) * 100%));
  transition: transform var(--motion-quick) cubic-bezier(.2,.7,.2,1), opacity var(--motion-quick) ease;
  pointer-events: none;
  z-index: -1;
}
.workflow-frame-selector.is-active .workflow-frame-selection { opacity: 1; }
.workflow-frame-link {
  appearance: none;
  background: transparent;
  border: 0;
  display: grid;
  place-items: center;
  min-height: 0;
  padding: 0 2px;
  border-radius: 999px;
  color: inherit;
  font: 600 var(--type-detail) / 1.05 var(--font-sans);
  font-variant-numeric: lining-nums;
  text-decoration: none;
  cursor: pointer;
}
.workflow-frame-link[aria-current="page"] { font-weight: 600; }
.workflow-frame-link:is(:hover, :focus-visible),
.workflow-step:has(> .flow-node:is(:hover, :focus-visible))
  > .workflow-frame-selector > .workflow-frame-link[data-workflow-frame="1"] {
  box-shadow: inset 0 0 0 1.5px var(--workflow-hover-stroke);
}
.workflow-frame-link:focus-visible {
  outline: none;
}
@media (prefers-reduced-motion: reduce) {
  .workflow-frame-selector,
  .workflow-frame-selection { transition: none; }
}
.workflow-progress--persistent .node-kicker {
  font-size: var(--type-detail);
  letter-spacing: 0.10em;
}
.workflow-progress--persistent .node-title {
  font-size: var(--type-detail);
}
.workflow-progress--global.is-on-accent {
  border-top-color: rgb(from var(--bg) r g b / 0.32);
}
.workflow-progress--global.is-on-accent {
  --workflow-ink: var(--bg);
  --workflow-stroke: rgb(from var(--bg) r g b / 0.34);
  --workflow-hover-stroke: var(--bg);
  --workflow-current-stroke: var(--bg);
  --workflow-current-fill: rgb(from var(--bg) r g b / 0.14);
  --workflow-shadow: 0 10px 24px rgb(from var(--ink) r g b / 0.16);
  --workflow-surface: var(--hero-bg);
}

.deck-fullscreen-button {
  position: fixed;
  top: 18px;
  right: 18px;
  z-index: 1200;
  display: grid;
  place-items: center;
  width: 46px;
  height: 46px;
  border: 1px solid rgb(from var(--ink) r g b / 0.18);
  border-radius: 8px;
  background: rgb(from var(--bg) r g b / 0.92);
  color: var(--ink);
  box-shadow: 0 10px 30px rgb(from var(--ink) r g b / 0.16);
  cursor: pointer;
  opacity: 0;
  transform: translateY(-6px);
  transition: opacity var(--motion-quick) ease, transform var(--motion-quick) ease, background var(--motion-quick) ease;
}
.deck-fullscreen-button[hidden] {
  display: none;
}
.deck-fullscreen-button svg {
  width: 22px;
  height: 22px;
  fill: none;
  stroke: currentColor;
  stroke-width: 2;
  stroke-linecap: round;
  stroke-linejoin: round;
}
.deck-fullscreen-button:hover,
.deck-fullscreen-button:focus-visible,
body.needs-deck-fullscreen-gesture .deck-fullscreen-button {
  opacity: 1;
  transform: translateY(0);
}
.deck-fullscreen-button:hover {
  background: var(--bg);
}
html[data-deck-cursor-idle],
html[data-deck-cursor-idle] body {
  cursor: none !important;
}
html[data-deck-cursor-idle] .deck-fullscreen-button {
  pointer-events: none !important;
}
/* Fade artwork at its window, independently of camera zoom or model motion.
   Captions and window controls live outside these paint containers. Extended
   shared canvases supply their authored viewport in local design pixels. */
:is(.demo-window-fade,
    .motivation-yarn-frame, .motivation-yarn-poster,
    [data-background-knot] > .background-knot-view, .background-knot-sum-canvas,
    .complexity-demo-window, .complexity-sum-view) {
  --demo-window-fade-x: 8%;
  --demo-window-fade-y: 24px;
  -webkit-mask-image:
    linear-gradient(to right,
      transparent var(--demo-window-left, 0px),
      var(--ink) calc(var(--demo-window-left, 0px) + var(--demo-window-fade-x)),
      var(--ink) calc(var(--demo-window-right, 100%) - var(--demo-window-fade-x)),
      transparent var(--demo-window-right, 100%)),
    linear-gradient(to bottom,
      transparent var(--demo-window-top, 0px),
      var(--ink) calc(var(--demo-window-top, 0px) + var(--demo-window-fade-y)),
      var(--ink) calc(var(--demo-window-bottom, 100%) - var(--demo-window-fade-y)),
      transparent var(--demo-window-bottom, 100%));
  mask-image:
    linear-gradient(to right,
      transparent var(--demo-window-left, 0px),
      var(--ink) calc(var(--demo-window-left, 0px) + var(--demo-window-fade-x)),
      var(--ink) calc(var(--demo-window-right, 100%) - var(--demo-window-fade-x)),
      transparent var(--demo-window-right, 100%)),
    linear-gradient(to bottom,
      transparent var(--demo-window-top, 0px),
      var(--ink) calc(var(--demo-window-top, 0px) + var(--demo-window-fade-y)),
      var(--ink) calc(var(--demo-window-bottom, 100%) - var(--demo-window-fade-y)),
      transparent var(--demo-window-bottom, 100%));
  -webkit-mask-composite: source-in;
  mask-composite: intersect;
}
/* Thank you slide — final on-screen, ochre hero, names + invite to Q&A */
.s-thanks {
  display: grid;
  grid-template-rows: auto 1fr auto;
  height: 100%;
  gap: 56px;
}
.s-thanks .top { display: flex; justify-content: space-between; align-items: flex-start; gap: 60px; }
.s-thanks .mid { display: flex; flex-direction: column; justify-content: center; gap: 36px; }
.thanks-title-row {
  align-items: center;
  display: grid;
  gap: 0;
  grid-template-columns: max-content minmax(0, 1fr);
  min-width: 0;
  width: 100%;
}
.s-thanks h1 {
  font-family: var(--font-sans);
  font-weight: 500;
  font-size: var(--type-display);
  line-height: 0.98;
  letter-spacing: -0.028em;
  margin: 0;
  color: var(--bg);
  max-width: 18ch;
}
.s-thanks h1 .lyon {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 400;
  color: var(--bg-2);
  letter-spacing: 0;
}
.s-thanks .foot {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 60px;
  border-top: 1px solid rgb(from var(--bg-2) r g b / 0.32);
  padding-top: 28px;
  transform: translateY(40px);
}
.s-thanks .foot .team-block {
  display: grid;
  grid-template-columns: max-content minmax(0, auto);
  column-gap: 20px;
  row-gap: 4px;
  align-items: baseline;
  max-width: none;
  flex: 1 1 auto;
  min-width: 0;
}
.s-thanks .foot .credit-line {
  display: contents;
  margin: 0;
  color: var(--bg-2);
  line-height: 1.28;
  white-space: nowrap;
}
.s-thanks .foot .credit-label {
  display: block;
  font-family: var(--font-sans);
  font-size: var(--type-body);
  font-weight: 600;
  justify-self: stretch;
  letter-spacing: 0;
  line-height: 1.28;
  min-width: 0;
  text-align: right;
  text-transform: none;
  color: var(--bg);
  align-self: baseline;
}
.s-thanks .foot .credit-text {
  font-family: var(--font-sans);
  font-style: normal;
  font-weight: 400;
  font-size: var(--type-body);
  letter-spacing: 0;
  line-height: 1.28;
  text-align: left;
  white-space: nowrap;
  color: var(--bg);
  align-self: baseline;
}

/* The stamped necklace (js/thanks-necklace.js) to the right of the title. Its
   drawing units are design pixels: the ring is centred at (1470, 495) on the
   slide, level with the title, and keeps its radius while the strand thins. */
.s-thanks { position: relative; }
.s-thanks .thanks-necklace {
  position: absolute;
  left: 1070px;
  top: 109px;
  width: 580px;
  height: 580px;
  overflow: visible;
  pointer-events: none;
}
.thanks-necklace-strand {
  fill: none;
  stroke: var(--bg);
  stroke-linecap: round;
  stroke-linejoin: round;
}
.thanks-necklace-points circle { fill: var(--bg); }
/* References — shared appendix layout */
section[data-ref-section] {
  /* References have no navigation rail: fill down to its usual bottom edge. */
  padding-bottom: max(0px, calc(var(--workflow-progress-bottom-design) - var(--deck-fullscreen-bottom-letterbox, 0px)));
}
/* Credits keep one slide and one native scroll surface. Literature retains
   measured whole-entry pagination and the same outer slide margins. */
section[data-ref-scroll] .s-refs { min-height: 0; }
.s-refs .ref-scroll {
  flex: 1 1 auto;
  min-height: 0;
  box-sizing: border-box;
  border: 0;
  background: none;
  box-shadow: none;
  outline: none;
  overflow-y: auto;
  overflow-x: hidden;
  overscroll-behavior: contain;
  touch-action: pan-y;
  scrollbar-gutter: stable;
  scrollbar-width: thin;
  scrollbar-color: var(--ink-2) var(--line-2);
  padding-inline-end: 12px;
  --ref-scroll-fade-depth: 24px;
  --ref-scroll-fade-top: 0px;
  --ref-scroll-fade-bottom: 0px;
  -webkit-mask-image: linear-gradient(to bottom, transparent, var(--ink) var(--ref-scroll-fade-top), var(--ink) calc(100% - var(--ref-scroll-fade-bottom)), transparent);
  mask-image: linear-gradient(to bottom, transparent, var(--ink) var(--ref-scroll-fade-top), var(--ink) calc(100% - var(--ref-scroll-fade-bottom)), transparent);
}
.s-refs .ref-scroll.can-scroll-up { --ref-scroll-fade-top: var(--ref-scroll-fade-depth); }
.s-refs .ref-scroll.can-scroll-down { --ref-scroll-fade-bottom: var(--ref-scroll-fade-depth); }
.s-refs .ref-scroll::-webkit-scrollbar { width: 8px; }
.s-refs .ref-scroll::-webkit-scrollbar-track { background: var(--line-2); }
.s-refs .ref-scroll::-webkit-scrollbar-thumb { background: var(--ink-2); border-radius: 4px; }
.s-refs .ref-subsection {
  margin: 0;
  padding-block: var(--gap-reference);
  border: 0;
  background: none;
  box-shadow: none;
  outline: none;
}
.s-refs .ref-subsection:first-child { padding-top: 0; }
.s-refs .ref-subsection-title {
  display: grid;
  grid-template-columns: .866ex minmax(0, 1fr);
  align-items: start;
  gap: .75em;
  color: var(--ink);
  cursor: pointer;
  border: 0;
  background: none;
  box-shadow: none;
  outline: none;
  font: 400 var(--type-heading)/1.35 var(--font-sans);
  list-style: none;
  text-decoration: none;
}
.s-refs .ref-subsection-title::marker { content: ''; }
.s-refs .ref-subsection-title::-webkit-details-marker { display: none; }
.s-refs .ref-subsection-title::before {
  content: '';
  display: block;
  width: .866ex;
  height: 1ex;
  margin-top: calc((1.35em - 1ex) / 2);
  background: var(--color-ochre);
  clip-path: polygon(0 0, 100% 50%, 0 100%);
  transform-origin: center;
  transition: transform var(--motion-quick) cubic-bezier(.2,.7,.2,1);
}
.s-refs .ref-subsection[open] > .ref-subsection-title::before { transform: rotate(90deg); }
.s-refs .ref-subsection > .ref-list { margin-top: var(--gap-reference); }
@media (prefers-reduced-motion: reduce) {
  .s-refs .ref-subsection-title::before { transition: none; }
}
.s-refs .head h2 .lyon {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 400;
  color: var(--accent-2);
}
.s-refs .ref-note {
  font-family: var(--font-serif);
  font-style: italic;
  font-size: var(--type-caption);
  color: var(--ink-2);
  text-align: right;
  line-height: 1.4;
  margin: 0;
}
.s-refs .ref-list {
  list-style: none;
  padding: 0;
  margin: 0;
  font-family: var(--font-serif);
  font-size: var(--type-reference);
  line-height: var(--leading-reference);
  color: var(--ink);
  display: flex;
  flex-direction: column;
  /* Report/rainstorm.sty: itemsep = 0.35 baselineskip. */
  gap: var(--gap-reference);
}
.s-refs .ref-list li {
  display: grid;
  grid-template-columns: var(--ref-label-width, 8ch) minmax(0, 1fr);
  column-gap: 0.65em;
  align-items: baseline;
  border-top: 0;
  padding-top: 0;
}
.s-refs .ref-label {
  text-align: right;
  white-space: nowrap;
}
.s-refs .ref-same-author {
  display: inline-block;
  width: 3em;
  border-bottom: 1px solid currentColor;
  margin-right: 0.16em;
}
.s-refs .ref-list li .ref-body {
  /* A block line box inherits the reference size, never the larger slide body. */
  display: block;
  min-width: 0;
  text-indent: 0;
  padding-left: 0;
}
.s-refs .ref-list li .ref-body strong { font-weight: 700; color: var(--ink); }
.s-refs .ref-list li .ref-body em {
  font-family: var(--font-serif);
  font-style: italic;
  color: var(--ink);
}
.s-refs .ref-list li .ref-body a {
  color: var(--accent-2);
  overflow-wrap: anywhere;
  word-break: normal;
}
.s-refs .ref-body :is(a, code, .uri) {
  font-size: inherit;
  line-height: inherit;
  letter-spacing: inherit;
  word-spacing: inherit;
  white-space: normal;
  overflow-wrap: anywhere;
  hyphens: manual;
}
.s-refs .ref-body :is(code, .uri) {
  /* Keep the report's URL face and its varl/varqu variants. Plain \href
     labels retain their surrounding authored family. */
  font-family: "Inconsolata", monospace;
  font-feature-settings: "ss01" 1, "ss03" 1;
}
/* The layout probe uses the same authored canvas and typography as live slides. */
[data-reference-measure] {
  position: fixed !important;
  left: -100000px !important;
  top: 0 !important;
  visibility: hidden !important;
  pointer-events: none !important;
  contain: layout style;
}
[data-reference-measure] *,
[data-reference-measure] *::before,
[data-reference-measure] *::after {
  animation: none !important;
  transition: none !important;
  transform: none !important;
  opacity: 1 !important;
}
/* Acknowledgements appendix. */
.s-acks .head h2 .lyon {
  font-family: var(--font-serif);
  font-style: italic;
  font-weight: 400;
  color: var(--accent-2);
}
.s-acks .head .meta {
  font-family: var(--font-serif);
  font-style: italic;
  font-size: var(--type-caption);
  color: var(--ink-2);
  text-align: right;
  line-height: 1.4;
  max-width: 28ch;
  margin: 0;
}
/* Single-column acknowledgments: paragraphs remain in their authored order.
   Supporting prose uses the shared caption role, with space between entries
   and clear slide margins instead of crowding the last line at the bottom. */
.s-acks > .acknowledgment-list {
  display: flex;
  flex-direction: column;
  gap: var(--gap-item);
  list-style: none;
  margin: 0;
  padding: 0;
  min-height: 0;
  font-family: var(--font-sans);
  font-size: var(--type-caption);
  line-height: 1.45;
}
.s-acks > .acknowledgment-list > li {
  margin: 0;
  padding: 0;
}
.s-acks .acknowledgment-list code {
  font-family: var(--font-mono);
  font-size: inherit;
}
.s-acks .acknowledgment-primary-colour {
  color: var(--uq-purple);
}
/* Background slides retain the main content title anchor and shared type scale. */
.s-background-topic {
  display: flex;
  flex-direction: column;
  height: 100%;
  gap: var(--gap-title);
}
.s-background-topic > .head {
  flex: 0 0 auto;
}

/* A compact recall of the opening title sits above the three project aims. */
.s-aims {
  color: var(--color-white);
  min-height: 0;
}
.s-aims > .head {
  display: grid;
  gap: var(--gap-title);
}
.s-aims > .head .title {
  color: inherit;
}
.s-aims .aims-title-project {
  font-family: var(--font-serif);
  font-style: normal;
  letter-spacing: normal;
}
.s-aims .aims-project-subtitle {
  margin: 0;
  font: 400 var(--type-heading)/1.35 var(--font-sans);
}
:is(.s-aims, .method-steps) .aims-scroll {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  overflow-x: hidden;
  overscroll-behavior: contain;
  touch-action: pan-y;
  scrollbar-width: thin;
  scrollbar-color: transparent transparent;
  transition: scrollbar-color var(--motion-quick) ease;
  scroll-padding-block: var(--gap-item) 140px;
  --aims-fade-depth: 100px;
  outline: none;
  border: 0;
  box-shadow: none;
}
:is(.s-aims, .method-steps) .aims-scroll.is-user-scrolling {
  scrollbar-color: var(--color-sandstone) transparent;
}
:is(.s-aims, .method-steps) .aims-scroll.has-overflow {
  -webkit-mask-image: linear-gradient(to bottom, var(--ink) calc(100% - var(--aims-fade-depth)), transparent calc(100% - var(--gap-item)), transparent 100%);
  mask-image: linear-gradient(to bottom, var(--ink) calc(100% - var(--aims-fade-depth)), transparent calc(100% - var(--gap-item)), transparent 100%);
}
:is(.s-aims, .method-steps) .aims-list {
  display: grid;
  gap: var(--gap-title);
  max-width: 1600px;
  margin: 0;
  padding: 0 12px 0 0;
  list-style: none;
  font: 400 var(--type-heading)/1.35 var(--font-sans);
}
:is(.s-aims, .method-steps) .aims-scroll.has-overflow .aims-list {
  padding-bottom: 140px;
}
:is(.s-aims, .method-steps) .aims-toggle {
  display: grid;
  grid-template-columns: .866ex minmax(0, 1fr);
  align-items: start;
  gap: .75em;
  width: 100%;
  margin: 0;
  padding: 0;
  border: 0;
  background: none;
  color: inherit;
  font: inherit;
  text-align: left;
  cursor: pointer;
  outline: none;
  box-shadow: none;
  opacity: var(--context-opacity);
  transition: opacity var(--motion-reveal) cubic-bezier(.2,.7,.2,1);
}
:is(.s-aims, .method-steps) .is-open > .aims-toggle {
  opacity: 1;
}
/* A destination layout laid out only to be measured starts no transitions. */
:is(.s-aims, .method-steps).is-aims-measuring :is(.aims-toggle, .aims-triangle) {
  transition: none;
}
:is(.s-aims, .method-steps) .aims-triangle {
  display: block;
  width: .866ex;
  height: 1ex;
  margin-top: calc((1.35em - 1ex) / 2);
  background: currentColor;
  clip-path: polygon(0 0, 100% 50%, 0 100%);
  transform-origin: center;
  transition: transform var(--motion-quick) cubic-bezier(.2,.7,.2,1);
}
:is(.s-aims, .method-steps) .is-open .aims-triangle {
  transform: rotate(90deg);
}
:is(.s-aims, .method-steps) .aims-panel {
  overflow: hidden;
}
:is(.s-aims, .method-steps) .aims-panel[hidden] {
  display: none;
}
:is(.s-aims, .method-steps) .aims-panel-content {
  padding: var(--gap-item) 0 0 calc(.866ex + .75em);
}
:is(.s-aims, .method-steps) .aims-panel-content[data-aims-placeholder] {
  min-height: 260px;
}
.s-aims .aims-construct-figure {
  position: relative;
  height: 240px;
  margin: 0;
  overflow: hidden;
  background: transparent;
  border: 0;
  box-shadow: none;
  -webkit-mask-image: linear-gradient(to right, transparent, var(--ink) 6%, var(--ink) 94%, transparent);
  mask-image: linear-gradient(to right, transparent, var(--ink) 6%, var(--ink) 94%, transparent);
}
.s-aims .aims-construct-tree {
  position: absolute;
  inset: 0;
  background: transparent;
  outline: none;
  cursor: grab;
  touch-action: pan-y;
}
.s-aims .aims-construct-tree.is-dragging { cursor: grabbing; }
.s-aims .aims-construct-figure .complexity-tetrahedron-shadow-canvas { display: none !important; }
.s-aims .aims-prove-figure {
  height: 240px;
  margin: 0;
  background: transparent;
  border: 0;
  box-shadow: none;
  -webkit-mask-image: linear-gradient(to right, transparent, var(--ink) 6%, var(--ink) 94%, transparent);
  mask-image: linear-gradient(to right, transparent, var(--ink) 6%, var(--ink) 94%, transparent);
}
.s-aims .aims-prove-necklace {
  display: block;
  width: 100%;
  height: 100%;
  background: transparent;
  outline: none;
  cursor: grab;
  touch-action: pan-y;
}
.s-aims .aims-prove-necklace.is-dragging { cursor: grabbing; }
.s-aims .aims-tighten-figure {
  --tighten-context-opacity: .18;
  display: grid;
  grid-template-rows: minmax(0, 1fr);
  place-items: center;
  height: 240px;
  margin: 0;
  overflow: hidden;
  background: transparent;
  border: 0;
  outline: none;
  box-shadow: none;
  touch-action: pan-y;
  -webkit-mask-image: linear-gradient(to right, transparent, var(--ink) 6%, var(--ink) 94%, transparent);
  mask-image: linear-gradient(to right, transparent, var(--ink) 6%, var(--ink) 94%, transparent);
}
.s-aims .aims-tighten-diagram {
  display: block;
  min-height: 0;
  width: min(100%, 800px);
  height: 100%;
  max-height: 100%;
  overflow: visible;
  transform-origin: center;
}
.s-aims .aims-tighten-figure .tb-grid line {
  stroke: rgb(from var(--color-sandstone) r g b / var(--tighten-context-opacity));
}
.s-aims .aims-tighten-figure :is(.tb-upper, .tb-lower) { stroke: var(--color-sandstone); }
.s-aims .aims-tighten-figure :is(.tb-gap, .tb-nodes-upper circle, .tb-nodes-lower circle) { fill: var(--color-sandstone); }
.s-aims .aims-tighten-figure .tb-original-bounds { opacity: .95; }
.s-aims .aims-tighten-figure .tb-original-bounds :is(.tb-upper, .tb-lower, circle) { opacity: 1; }
.s-aims .aims-tighten-figure .tb-moving-bounds { opacity: 0; }
.s-aims .aims-tighten-figure.is-tightened .tb-moving-bounds :is(.tb-upper, .tb-lower) {
  stroke-dasharray: 8 7;
}
.s-aims .is-open .aims-tighten-diagram .tb-plot {
  animation: tb-sweep var(--motion-reveal) cubic-bezier(.2,.7,.2,1) var(--motion-quick) both;
}
.s-aims .aims-list strong {
  color: var(--color-sandstone);
  font-family: var(--font-serif);
  font-style: normal;
  font-weight: 700;
}
@media (prefers-reduced-motion: reduce) {
  :is(.s-aims, .method-steps) :is(.aims-toggle, .aims-triangle) { transition: none; }
  .s-aims .is-open .aims-tighten-diagram .tb-plot { animation: none; clip-path: none; }
}

/* Keep the two retained knots at the original Background I anchors. */
.slide-complexity { --complexity-tree-fit: 1; --complexity-demo-scale: 1.4; }
.slide-complexity .s-background-topic { position: relative; gap: 0; }
.slide-complexity .head { position: relative; z-index: 1; }
.complexity-layout {
  display: flex;
  flex-direction: column;
  gap: var(--gap-title);
  margin-top: 20px;
  flex: 1 1 auto;
  min-height: 0;
}
.complexity-models {
  position: relative;
  flex: 1 1 auto;
  min-width: 0;
  min-height: 0;
  user-select: none;
  -webkit-user-select: none;
}
.complexity-models canvas:focus,
.complexity-models canvas:focus-visible { outline: none; }
.complexity-knot-view,
.complexity-yarn-view,
.complexity-trefoil-copy-view,
.complexity-sphere-copy-view {
  position: absolute;
  width: 524px;
  aspect-ratio: 9 / 7;
  justify-self: center;
  min-width: 0;
  margin: 0;
}
.complexity-knot-view { left: 588px; }
.complexity-yarn-view { left: 0; }
.complexity-trefoil-copy-view { left: 1176px; }
.complexity-sphere-copy-view {
  left: 588px;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}
.complexity-sphere-copy-layer {
  position: absolute;
  inset: 0;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}
.complexity-sphere-copy-layer.is-complexity-sphere-copy-visible { visibility: visible; }
.complexity-sphere-copy-layer canvas { position: absolute; inset: 0; pointer-events: none; }
.complexity-sphere-copy-view.is-complexity-sphere-copy-visible {
  opacity: 1;
  visibility: visible;
}
.complexity-tetrahedron-view {
  position: absolute;
  inset: 0;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}
.complexity-tetrahedron-view.is-complexity-tetrahedron-visible {
  visibility: visible;
  pointer-events: none;
}
.complexity-tetrahedron-view canvas {
  width: 100%;
  height: 100%;
  touch-action: none;
}
/* The closing book beside the fold shares the tetrahedron's window frame. Its
 * reveal has its own layer before the fold (js/complexity-knot.js drawBook). */
.complexity-book-view {
  position: absolute;
  inset: 0;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}
.complexity-book-view.is-complexity-book-visible { visibility: visible; }
.complexity-book-view canvas {
  width: 100%;
  height: 100%;
}
/* Its page images are only texture sources. */
.complexity-book-view img { display: none; }
.complexity-book-caption { opacity: 0; visibility: hidden; pointer-events: none; }
.complexity-book-caption .background-definition-cite { color: var(--color-ochre); pointer-events: auto; }
[data-complexity-sum].is-over-book { cursor: pointer; }
.complexity-bottom {
  position: relative;
  flex: 0 0 248px;
  min-width: 0;
  border-top: 1px solid var(--line-2);
  padding-top: 28px;
  margin-bottom: 26px;
}
.complexity-copy { min-width: 0; }
.complexity-definition {
  min-width: 0;
  margin: 0;
  color: var(--ink);
  font: 400 var(--type-heading)/1.4 var(--font-sans);
}
.complexity-definition h3,
.complexity-definition p {
  display: inline;
  font: inherit;
  margin: 0;
}
.complexity-definition h3 { margin-right: 24px; }
.complexity-knot-caption,
.complexity-yarn-caption,
.complexity-trefoil-copy-caption,
.complexity-sphere-copy-caption,
.complexity-book-caption {
  position: absolute;
  left: var(--caption-x, 50%);
  top: calc(var(--caption-y, 100%) + 16px);
  transform: translateX(-50%);
  color: var(--ink);
  font: 400 var(--type-body)/1.2 var(--font-sans);
  white-space: nowrap;
  text-align: center;
}
.complexity-caption-identity {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
}
.complexity-sphere-copy-caption { width: max-content; }
.complexity-sphere-copy-caption > .complexity-caption-state { display: inline-block; }
.complexity-sphere-copy-caption > .complexity-caption-state[hidden] { display: none; }
.complexity-caption-state.is-caption-outgoing {
  position: absolute;
  top: 0;
  pointer-events: none;
}
.complexity-caption-state.is-caption-entering .complexity-caption-sphere { visibility: hidden; }
.complexity-caption-state.is-caption-core-entering .complexity-caption-core { visibility: hidden; }
.complexity-caption-core,
.complexity-caption-sphere,
.complexity-caption-wing,
.complexity-caption-wing > span { display: inline-block; }
.complexity-caption-wing {
  clip-path: inset(0);
  white-space: pre;
}
[data-complexity-invariant] { font-family: var(--font-serif); }
[data-complexity-ugly] { display: inline-block; }
[data-complexity-ugly][hidden] { display: none; }
[data-complexity-crossing-detail]:not([hidden]) { display: block; margin-top: 8px; }
[data-complexity-crossing-detail] { color: var(--color-ochre); }
[data-complexity-crossing-detail][hidden] { display: none; }
.complexity-demo-window {
  position: absolute;
  inset: 0;
  overflow: hidden;
  user-select: none;
  -webkit-user-select: none;
}
.complexity-demo-window canvas {
  position: absolute;
  top: 0;
  height: 100%;
  user-select: none;
  -webkit-user-select: none;
  -webkit-user-drag: none;
}
[data-complexity-sphere-copy] {
  display: block;
  width: 100%;
  height: 100%;
}
[data-complexity-knot],
[data-complexity-yarn],
[data-complexity-trefoil-copy] {
  display: block;
  width: 100%;
  height: 100%;
  cursor: grab;
  touch-action: none;
  outline: none !important;
}
[data-complexity-knot].is-dragging,
[data-complexity-yarn].is-dragging,
[data-complexity-trefoil-copy].is-dragging { cursor: grabbing; }
.slide-complexity.is-complexity-transition [data-complexity-knot],
.slide-complexity.is-complexity-transition [data-complexity-yarn],
.slide-complexity.is-complexity-transition [data-complexity-trefoil-copy] { visibility: hidden; }
.slide-complexity :is([data-complexity-knot], [data-complexity-yarn], [data-complexity-trefoil-copy]) { visibility: hidden; }
.slide-complexity.is-complexity-transition .complexity-sum-view { visibility: hidden; }
.slide-complexity.is-complexity-transition .complexity-knot-caption,
.slide-complexity.is-complexity-transition .complexity-yarn-caption,
.slide-complexity.is-complexity-transition .complexity-trefoil-copy-caption {
  visibility: hidden;
  transition: none;
}
.slide-complexity.is-complexity-transition .complexity-arrival-item {
  opacity: 0;
  transform: none;
  transition: none;
}
.slide-complexity.is-complexity-transition .head .anim {
  opacity: 1;
  transform: translateY(0);
  transition: none;
}
.complexity-knot-bridge {
  position: fixed;
  inset: 0;
  pointer-events: none;
  z-index: 2147482550;
  overflow: hidden;
}
.complexity-knot-background { position: absolute; inset: 0; }
.complexity-knot-ghost-frame { position: absolute; overflow: hidden; }
.complexity-knot-ghost {
  display: block !important;
  position: absolute !important;
  inset: 0 auto auto 0 !important;
  width: 1920px !important;
  height: 1080px !important;
  visibility: visible !important;
  background: transparent !important;
  transform-origin: 0 0;
}
.complexity-knot-ghost .anim { opacity: 1; transform: none; transition: none; }
.complexity-knot-flight { position: absolute; transform-origin: 0 0; }
.complexity-knot-flight canvas { display: block; width: 100%; height: 100%; }
.complexity-knot-flight canvas.is-complexity-interactive { pointer-events: auto; cursor: grab; touch-action: none; }
.complexity-knot-caption-flight {
  position: absolute;
  width: 0;
  height: 0;
  white-space: nowrap;
  transform-origin: 0 0;
}
.complexity-knot-caption-copy {
  display: block;
  width: max-content;
  transform: translateX(-50%);
}
.slide-background-knots.is-complexity-return > * { visibility: hidden; }
.slide-background-knots.is-complexity-return .anim { opacity: 1; transform: none; transition: none; }
.complexity-return-ghost .background-knot-statement { transition: none; }
.complexity-return-caption { position: absolute; }
.complexity-diagram-note {
  position: absolute;
  left: 0;
  right: 0;
  margin: 0;
  color: var(--color-ochre);
  text-align: center;
  white-space: nowrap;
  pointer-events: none;
  font: 400 var(--type-body)/1.2 var(--font-sans);
}
.complexity-diagram-note[hidden],
.complexity-conjecture[hidden],
.complexity-sum-captions[hidden],
.complexity-sum-invariants[hidden],
.complexity-sum-view[hidden] { display: none; }
.complexity-conjecture {
  margin-top: 24px;
  font: 400 var(--type-heading)/1.4 var(--font-sans);
}
.complexity-conjecture h3,
.complexity-conjecture p { display: inline; margin: 0; font: inherit; }
.complexity-conjecture h3 { margin-right: 24px; }
.slide-complexity .complexity-conjecture,
.slide-complexity[data-complexity-step="2"] .complexity-definition {
  opacity: var(--context-opacity);
}
.slide-complexity[data-complexity-step="2"] .complexity-conjecture { opacity: 1; }
.complexity-sum-view { position: absolute; overflow: hidden; pointer-events: auto; }
.complexity-sum-view canvas { display: block; width: 100%; height: 100%; }
.slide-complexity :is([data-complexity-sum], .complexity-knot-caption, .complexity-sum-captions) {
  filter: grayscale(var(--complexity-demo-focus, 0));
  opacity: calc(1 - (1 - var(--context-opacity)) * var(--complexity-demo-focus, 0));
}
/* From layer 4, once the trefoil has risen it is removed (opacity
 * --complexity-knot-ghost) while the tetrahedron is built in its sphere. From
 * layer 6 a small trefoil in the tetrahedron's own scene labels the band. */
.slide-complexity { --complexity-knot-ghost: 0; }
.slide-complexity.is-complexity-solo [data-complexity-sum] {
  filter: none;
  opacity: calc(1 - (1 - var(--complexity-knot-ghost)) * var(--complexity-demo-focus, 0));
}
.slide-complexity.is-complexity-solo :is(.complexity-knot-caption, .complexity-yarn-caption, .complexity-trefoil-copy-caption, .complexity-sum-captions) {
  filter: none;
  /* Clear the old names immediately, retaining their measured landing boxes. */
  opacity: 0;
  visibility: hidden;
  transition: none;
}
[data-complexity-sum] { cursor: grab; touch-action: none; outline: none; }
[data-complexity-sum].is-dragging { cursor: grabbing; }
.slide-complexity[data-complexity-step="2"]:not(.is-complexity-sum-fallback) :is([data-complexity-knot], [data-complexity-yarn], [data-complexity-trefoil-copy]) { visibility: hidden; }
.slide-complexity[data-complexity-step="2"]:not(.is-complexity-sum-fallback):not(.is-complexity-solo) :is(.complexity-knot-caption, .complexity-yarn-caption, .complexity-trefoil-copy-caption) { visibility: hidden; }
.slide-complexity.is-complexity-sum-return :is([data-complexity-knot], [data-complexity-yarn], [data-complexity-trefoil-copy], .complexity-knot-caption, .complexity-yarn-caption, .complexity-trefoil-copy-caption) { visibility: hidden; }
.complexity-sum-captions { position: absolute; font: 400 var(--type-body)/1.2 var(--font-sans); color: var(--ink); }
.complexity-sum-caption-component { position: absolute; inset: 0; white-space: nowrap; }
.complexity-sum-caption-factor { position: absolute; width: max-content; text-align: center; transform: translateX(-50%); }
.complexity-sum-sign {
  position: absolute;
  box-sizing: border-box;
  width: var(--knot-sum-sign-space);
  padding-inline: 8px;
  text-align: center;
  transform: translateX(-50%);
}
.complexity-sum-invariants { position: absolute; font: 400 var(--type-body)/1.2 var(--font-serif); color: var(--ink); }
.complexity-sum-invariant-result {
  position: absolute;
  left: 50%;
  display: flex;
  align-items: baseline;
  gap: 12px;
  width: max-content;
  white-space: nowrap;
  transform: translateX(-50%);
}
.complexity-sum-formula { color: var(--ink); }
.complexity-sum-question { color: var(--color-ochre); }

/* The final build leaves the trefoil at the original right sphere anchor.
 * Retain layout boxes so the saved diagram and reverse motion keep their anchors. */
.slide-complexity .complexity-copy {
  transition: opacity var(--motion-quick) ease, visibility 0s;
}
.slide-complexity.is-complexity-solo .complexity-copy {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: none;
}
.complexity-sum-invariants { transition: opacity var(--motion-quick) ease; }
.slide-complexity.is-complexity-solo .complexity-sum-invariants { opacity: 0; visibility: hidden; transition: none; }
.slide-complexity.is-complexity-solo :is([data-complexity-invariant], [data-complexity-crossing-detail]) { visibility: hidden; }
.slide-complexity.is-complexity-solo :is(.complexity-yarn-view, .complexity-trefoil-copy-view) {
  opacity: 0;
  visibility: hidden;
}
.slide-complexity.is-complexity-solo.is-complexity-solo-retiring :is(.complexity-yarn-view, .complexity-trefoil-copy-view) {
  opacity: var(--complexity-retiring, 0);
  visibility: visible;
}
.slide-complexity.is-complexity-solo .complexity-knot-caption {
  transform: translateX(calc(-50% + var(--complexity-solo-x, 0px)));
}
/* Linked papers lead to the trefoil used throughout the talk. */
.triangulation-content {
  display: flex;
  flex-direction: column;
  flex: 1 1 auto;
  min-height: 0;
}
.triangulation-scroll {
  --timeline-scroll-slot: 32px;
  flex: 1 1 auto;
  min-height: 0;
  position: relative;
  overflow-x: hidden;
  overflow-y: auto;
  overflow-anchor: none;
  overscroll-behavior: contain;
  scroll-behavior: auto;
  scroll-padding-top: var(--timeline-scroll-slot);
  scrollbar-width: thin;
  scrollbar-color: transparent transparent;
  border: 0;
  outline: none;
  box-shadow: none;
}
.triangulation-scroll:is(:focus, :focus-visible) {
  outline: none;
  box-shadow: none;
}
/* The thin gutter stays reserved, so showing the thumb never reflows the text. */
.triangulation-scroll.is-user-scrolling { scrollbar-color: var(--ink-2) transparent; }
.triangulation-scroll[data-timeline-preview] { overflow: hidden; }
.triangulation-scroll[data-timeline-preview] .triangulation-timeline {
  transform: translateY(calc(-1 * var(--timeline-preview-offset, 0px)));
}
.triangulation-timeline {
  --timeline-dot: 1ex;
  --timeline-gutter: 32px;
  --timeline-axis: calc(var(--timeline-gutter) / 2);
  --timeline-count: 4;
  --timeline-spacing: var(--gap-title);
  --timeline-leading: 1.35;
  --timeline-text-centre: calc(var(--type-heading) * var(--timeline-leading) / 2);
  --timeline-line-width: calc(var(--type-heading) * .045);
  display: grid;
  grid-template-rows: repeat(var(--timeline-count), auto);
  gap: 0;
  position: relative;
  list-style: none;
  margin: 0;
  padding: 0 0 var(--timeline-tail-space, 0px);
}
/* Row spacing lives on the rows, so a folded figure can take no room at all. */
.triangulation-timeline > li + li { margin-top: var(--timeline-spacing); }
.triangulation-timeline > li {
  display: grid;
  grid-template-columns: var(--timeline-gutter) max-content minmax(0, 1fr);
  column-gap: .25em;
  align-items: start;
  position: relative;
  min-height: var(--timeline-dot);
  font-size: var(--type-heading);
  opacity: 1;
  visibility: visible;
}
.triangulation-timeline > li.is-timeline-visible {
  opacity: 1;
  visibility: visible;
}
.triangulation-timeline > li::before {
  content: '';
  grid-column: 1;
  grid-row: 1;
  margin-top: calc(var(--timeline-text-centre) - var(--timeline-dot) / 2);
  width: var(--timeline-dot);
  height: var(--timeline-dot);
  justify-self: center;
  border-radius: 50%;
  background: var(--color-ochre);
  opacity: .85;
}
.triangulation-connector {
  position: absolute;
  left: var(--timeline-axis);
  bottom: calc(100% - var(--timeline-text-centre) + var(--timeline-dot) / 2);
  width: var(--timeline-line-width);
  height: var(--timeline-connector-length, 0px);
  transform: translateX(-50%);
  background: var(--color-ochre);
  opacity: .85;
}
.triangulation-year {
  grid-column: 2;
  grid-row: 1;
  font: 400 var(--type-heading)/var(--timeline-leading) var(--font-sans);
  padding: 0;
  color: var(--ink);
  white-space: nowrap;
  opacity: var(--context-opacity);
}
.triangulation-entry {
  grid-column: 3;
  grid-row: 1;
  display: grid;
  gap: 0;
  padding-top: 0;
  min-width: 0;
}
.triangulation-heading {
  margin: 0;
  color: var(--ink);
  font: 400 var(--type-heading)/var(--timeline-leading) var(--font-sans);
  opacity: var(--context-opacity);
}
.is-timeline-visible > .triangulation-year,
.is-timeline-visible .triangulation-heading,
.is-timeline-kept > .triangulation-year,
.is-timeline-kept .triangulation-heading { opacity: 1; }
.s-triangulations .triangulation-timeline .triangulation-heading .triangulation-authors {
  color: var(--ink);
  font-family: var(--font-serif);
  font-style: normal;
}
.triangulation-timeline .triangulation-heading .triangulation-keyword {
  color: var(--color-ochre);
  white-space: normal;
}
.s-triangulations .triangulation-timeline [data-timeline-key="moise"] .triangulation-keyword {
  font-style: normal;
}
.triangulation-summary {
  margin: 0;
  color: var(--ink);
  font: 400 var(--type-body)/1.35 var(--font-sans);
  overflow: hidden;
  height: 0;
  opacity: 0;
  visibility: hidden;
}
.triangulation-summary[hidden] { display: none; }
.is-timeline-visible .triangulation-summary {
  height: auto;
  margin-top: var(--gap-item);
  opacity: 1;
  visibility: visible;
}
/* Bounds figure: a row with no node of its own; the strand runs past it from the
   previous paper. Folded, it has no height and no spacing, so the papers sit
   exactly as they would without it. */
.triangulation-timeline > li.triangulation-figure {
  align-self: start;
  min-height: 0;
  transition: margin-top var(--motion-reveal) cubic-bezier(.2,.7,.2,1);
}
.triangulation-timeline > li.triangulation-figure::before { display: none; }
.triangulation-timeline > li.triangulation-figure:not(.is-timeline-visible) { margin-top: 0; }
.triangulation-figure-body {
  margin: 0;
  overflow: hidden;
  height: 0;
  opacity: 0;
  visibility: hidden;
}
.triangulation-figure-body[hidden] { display: none; }
.is-timeline-visible .triangulation-figure-body {
  height: auto;
  opacity: 1;
  visibility: visible;
}
/* The chart only: the caption's built equations keep their own inline size. */
.triangulation-figure-body > svg {
  display: block;
  width: 900px;
  max-width: 100%;
  height: auto;
  margin: 0 auto;
  overflow: visible;
}
.triangulation-figure-body figcaption {
  margin: var(--gap-item) 0 0;
  color: var(--ink);
  font: 400 var(--type-body)/1.35 var(--font-sans);
  text-align: center;
}
/* The 800-unit drawing is shown at 900 design pixels: caption-sized axis and
   line labels, matching the publication line on this slide. */
.triangulation-figure-body .tb-axis text,
.triangulation-figure-body .tb-label text {
  fill: var(--ink-2);
  font: 400 calc(var(--type-caption) * 800 / 900) var(--font-sans);
}
/* The 2025 paper's colour, shared by its row, line, nodes and label: UQ
   purple, translucent but darker than the background roles. */
.s-triangulations { --triangulation-2025-colour: rgb(from var(--uq-purple) r g b / .8); }
.triangulation-figure-body .tb-label .tb-label-upper { fill: var(--monash-blue); }
.triangulation-figure-body .tb-label .tb-label-lower { fill: var(--triangulation-2025-colour); }
.triangulation-figure-body .tb-ylab text { text-anchor: end; }
.triangulation-figure-body .tb-xlab text { text-anchor: middle; }
.triangulation-figure-body .tb-var { font-family: var(--font-math); font-style: italic; }
:is(.triangulation-figure-body, .aims-tighten-figure) .tb-grid line { stroke: var(--line-2); stroke-width: 1; }
:is(.triangulation-figure-body, .aims-tighten-figure) .tb-gap { fill: var(--ink); opacity: .1; }
/* Background III shades the gap between the two bounds more firmly. */
.triangulation-figure-body .tb-gap { opacity: .2; }
:is(.triangulation-figure-body, .aims-tighten-figure) .tb-upper,
:is(.triangulation-figure-body, .aims-tighten-figure) .tb-lower {
  fill: none;
  stroke-width: 2.4;
  stroke-linecap: round;
  stroke-linejoin: round;
}
/* The two bounds carry the colours of the rows they come from: Monash blue
   for the 2024 upper bound, darkened translucent UQ purple for the 2025 one.
   The Aims figure draws both in sandstone (slides/background/topics.css). */
.triangulation-figure-body .tb-upper { stroke: var(--monash-blue); }
.triangulation-figure-body .tb-lower { stroke: var(--triangulation-2025-colour); }
.triangulation-figure-body .tb-nodes-upper circle { fill: var(--monash-blue); }
.triangulation-figure-body .tb-nodes-lower circle { fill: var(--triangulation-2025-colour); }
:is(.triangulation-figure-body, .aims-tighten-figure) :is(.tb-nodes-upper, .tb-nodes-lower) circle { r: 5px; }
:is(.triangulation-figure-body, .aims-tighten-figure) :is(.tb-upper, .tb-lower, .tb-nodes-upper circle, .tb-nodes-lower circle) { opacity: .95; }
/* Entrance: as the figure unfolds, the plot (both lines, their nodes and the
   shaded gap together) sweeps in from the left; the line labels settle as the
   sweep arrives. */
.triangulation-figure-body .tb-plot { clip-path: inset(0 100% 0 0); }
.triangulation-figure-body .tb-label { opacity: 0; }
.is-timeline-visible .triangulation-figure-body .tb-plot {
  animation: tb-sweep var(--motion-reveal) cubic-bezier(.2,.7,.2,1) var(--motion-quick) both;
}
.is-timeline-visible .triangulation-figure-body .tb-label {
  animation: tb-settle var(--motion-quick) ease calc(var(--motion-quick) + var(--motion-reveal) - var(--motion-gap)) both;
}
@keyframes tb-sweep { from { clip-path: inset(0 100% 0 0); } to { clip-path: inset(0 -2% 0 0); } }
@keyframes tb-settle { from { opacity: 0; } to { opacity: 1; } }
.triangulation-publication {
  margin: 0;
  color: var(--ink-2);
  font: 400 var(--type-caption)/1.35 var(--font-sans);
  overflow: hidden;
  height: 0;
  opacity: 0;
  visibility: hidden;
}
.triangulation-publication[hidden] { display: none; }
.is-timeline-visible .triangulation-publication {
  height: auto;
  margin-top: var(--gap-item);
  opacity: 1;
  visibility: visible;
}
@media screen {
  .triangulation-timeline > li:not(.is-timeline-visible) .triangulation-keyword { color: var(--ink); }
  /* While the bounds figure is open, each quoted row uses its family colour
     across its year, authors and keyword. */
  .triangulation-timeline.is-figure-open > li[data-timeline-key="imps"].is-timeline-kept > .triangulation-year,
  .triangulation-timeline.is-figure-open > li[data-timeline-key="imps"].is-timeline-kept .triangulation-authors,
  .triangulation-timeline.is-figure-open > li[data-timeline-key="imps"].is-timeline-kept .triangulation-keyword { color: var(--monash-blue); }
  .triangulation-timeline.is-figure-open > li[data-timeline-key="hss"].is-timeline-kept > .triangulation-year,
  .triangulation-timeline.is-figure-open > li[data-timeline-key="hss"].is-timeline-kept .triangulation-authors,
  .triangulation-timeline.is-figure-open > li[data-timeline-key="hss"].is-timeline-kept .triangulation-keyword { color: var(--triangulation-2025-colour); }
}
.triangulation-trefoil {
  margin: 0;
  max-width: 1600px;
  font: 400 var(--type-heading)/1.35 var(--font-sans);
  color: var(--ink);
  opacity: 0;
  visibility: hidden;
}
.triangulation-trefoil.is-timeline-visible { opacity: 1; visibility: visible; }
.triangulation-trefoil strong { font-weight: 700; }
@media print {
  .triangulation-content { display: block; }
  .triangulation-scroll { overflow: visible; }
  .triangulation-timeline {
    grid-template-rows: repeat(var(--timeline-count), auto);
    padding-bottom: 0;
    transform: none !important;
  }
  .triangulation-year,
  .triangulation-heading { opacity: 1; }
  .triangulation-summary,
  .triangulation-summary[hidden],
  .triangulation-figure-body,
  .triangulation-figure-body[hidden],
  .triangulation-publication,
  .triangulation-publication[hidden] {
    display: block;
    height: auto;
    margin-top: var(--gap-item);
    opacity: 1;
    visibility: visible;
  }
  .triangulation-figure-body .tb-plot { clip-path: none; animation: none; }
  .triangulation-figure-body .tb-label { opacity: 1; animation: none; }
}

/* Definitions share the stable bottom divider with the crossing-number builds. */
.complexity-triangulation-intro {
  --complexity-paragraph-gap: 12px;
  position: absolute;
  left: 0;
  right: 0;
  top: 28px;
  bottom: 0;
  overflow-x: hidden;
  overflow-y: auto;
  overflow-anchor: none;
  overscroll-behavior: contain;
  touch-action: pan-y;
  scroll-behavior: auto;
  scrollbar-width: thin;
  scrollbar-gutter: stable;
  scrollbar-color: transparent transparent;
  outline: none;
  -webkit-mask-image: linear-gradient(to bottom, var(--ink) calc(100% - 48px), transparent 100%);
  mask-image: linear-gradient(to bottom, var(--ink) calc(100% - 48px), transparent 100%);
  z-index: 2;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}
.complexity-triangulation-track {
  position: relative;
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  grid-template-rows: auto auto;
  row-gap: var(--complexity-paragraph-gap);
}
.complexity-triangulation-intro.is-user-scrolling {
  scrollbar-color: var(--ink-2) transparent;
}
.complexity-triangulation-intro.is-complexity-intro-visible {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
}
.complexity-triangulation-part {
  min-width: 0;
  margin: 0;
  color: var(--ink);
  font: 400 var(--type-heading)/1.4 var(--font-sans);
  opacity: var(--context-opacity);
  visibility: visible;
}
.complexity-triangulation-definition {
  grid-area: 1 / 1;
}
.complexity-triangulation-track > .complexity-triangulation-part {
  grid-area: 2 / 1;
}
.complexity-triangulation-definition .complexity-triangulation-part {
  display: block;
}
.complexity-triangulation-definition .complexity-triangulation-part + .complexity-triangulation-part {
  display: block;
  margin-top: var(--complexity-paragraph-gap);
}
.complexity-triangulation-definition .complexity-triangulation-part + .complexity-triangulation-part p {
  display: block;
}
.complexity-triangulation-part.is-timeline-visible { opacity: 1; }
.complexity-triangulation-part.is-complexity-intro-hidden {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}
.complexity-triangulation-part h3,
.complexity-triangulation-part p {
  display: inline;
  font: inherit;
  margin: 0;
}
.complexity-triangulation-part h3 { margin-right: 24px; }
.complexity-triangulation-example {
  margin-top: var(--complexity-paragraph-gap);
  margin-inline-start: calc(var(--statement-type-size) * -.75);
}
.complexity-triangulation-intro .complexity-triangulation-part .triangulation-keyword {
  color: var(--color-ochre);
  white-space: normal;
}
[data-complexity-ambient][hidden] { display: none; }
@media print {
  .triangulation-timeline > li { opacity: 1; visibility: visible; }
  .triangulation-trefoil { opacity: 1; visibility: visible; }
  .complexity-triangulation-intro { overflow: visible; mask-image: none; -webkit-mask-image: none; }
  .complexity-triangulation-track {
    height: auto;
    grid-template-rows: auto auto;
    gap: var(--complexity-paragraph-gap);
    transform: none !important;
  }
  .complexity-triangulation-track > * {
    grid-row: auto;
  }
  .complexity-triangulation-intro .complexity-triangulation-part {
    opacity: 1;
    visibility: visible;
  }
}
/* The final paper carries its own folded, interactive material diagram. */
.triangulation-seed-demo {
  margin: 0;
  overflow: hidden;
  height: 0;
  opacity: 0;
  visibility: hidden;
}
.triangulation-seed-demo[hidden] { display: none; }
.is-timeline-visible .triangulation-seed-demo {
  height: auto;
  margin-top: var(--gap-item);
  opacity: 1;
  visibility: visible;
}
.torus-seed-window {
  position: relative;
  width: min(100%, 1200px);
  height: 420px;
  margin: 0 auto;
  overflow-x: hidden;
  overflow-y: auto;
  overscroll-behavior: contain;
  scrollbar-width: none;
  background: transparent;
  border: 0;
  outline: none;
  box-shadow: none;
  touch-action: pan-y;
}
.torus-seed-window canvas {
  display: block;
  width: 100%;
  height: 420px;
  min-height: 420px;
  background: transparent;
  border: 0;
  outline: none;
  box-shadow: none;
  cursor: grab;
}
.torus-seed-window::-webkit-scrollbar { display: none; }
.torus-seed-window:is(:focus, :focus-visible) { outline: none; }
.torus-seed-window canvas:is(:focus, :focus-visible) { outline: none; }
.torus-seed-window canvas.is-dragging { cursor: grabbing; }
.torus-seed-controls {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: calc(var(--gap-item) / 2);
  margin-top: var(--gap-item);
  padding-bottom: var(--gap-item);
  font: 400 var(--type-caption)/1.35 var(--font-sans);
  color: var(--ink);
}
.torus-seed-controls button {
  appearance: none;
  padding: .2em .4em;
  border: 0;
  background: transparent;
  color: inherit;
  font: inherit;
  cursor: pointer;
}
.torus-seed-controls button:is(:hover, :focus-visible),
.torus-seed-controls button[aria-pressed="true"] {
  color: var(--color-ochre);
  text-decoration: underline;
  text-underline-offset: .14em;
  outline: none;
}
.torus-seed-controls input[type="range"] {
  flex: 1 1 240px;
  min-width: 180px;
  max-width: 360px;
  accent-color: var(--color-ochre);
}
.triangulation-seed-demo figcaption {
  margin: var(--gap-item) 0 0;
  text-align: center;
}
.triangulation-seed-demo [data-torus-seed-caption] {
  margin: 0;
  color: var(--figure-caption-color);
  font: 400 var(--type-body)/1.2 var(--font-sans);
}
@media print {
  .triangulation-seed-demo { height: auto; opacity: 1; visibility: visible; }
  .torus-seed-controls { display: none; }
}
.slide-background-knots {
  --background-knot-shadow-strength: var(--context-opacity);
  --background-knot-padding: 30.8px;
  --background-knot-overflow: 0px;
  --background-knot-row-drop: 20px;
}
.slide-background-knots .head,
.slide-background-knots .background-knot-definition,
.background-knot-sum-window figcaption {
  position: relative;
  z-index: 1;
}
.s-background-knots {
  gap: 0;
}
.background-knots-title {
  line-height: 1.05;
  white-space: nowrap;
  display: inline-block;
  pointer-events: auto;
}
.slide-background-knots .head {
  pointer-events: none;
}
.background-title-prefix,
.background-title-knots {
  display: inline-block;
}
.background-title-knots {
  letter-spacing: 0;
}
.background-knot-row {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 64px;
  margin-top: 20px;
  flex: 1 1 auto;
  min-height: 0;
  position: relative;
}
[data-background-knot] {
  grid-row: 1;
}
[data-background-knot="unknot"] { grid-column: 1; }
[data-background-knot="trefoil"] { grid-column: 2; }
[data-background-knot="fig8"] { grid-column: 3; }
.background-knot-figure {
  margin: 0;
  min-width: 0;
  text-align: center;
}
.background-knot-figure[data-background-knot] {
  display: flex;
  flex-direction: column;
  height: 100%;
}
.background-knot-figure[data-background-knot] > .background-knot-view {
  flex: 0 0 calc(220px + var(--knot-ground-space));
  margin-block: auto;
  transform: translateY(var(--background-knot-row-drop));
}
.background-knot-view {
  height: calc(220px + var(--knot-ground-space));
  position: relative;
}
.background-knot-canvas,
.background-knot-poster {
  display: block;
  height: 100%;
  inset: 0;
  position: absolute;
  width: 100%;
}
.background-knot-poster {
  object-fit: contain;
}
.background-knot-canvas {
  cursor: grab;
  opacity: 0;
  touch-action: none;
}
.background-knot-canvas:active {
  cursor: grabbing;
}
.background-knot-canvas,
.background-knot-sum-canvas,
.background-knot-view {
  outline: none !important;
}
.background-knot-figure.is-knot-ready .background-knot-poster {
  visibility: hidden;
}
.background-knot-figure.is-knot-ready .background-knot-canvas {
  opacity: 1;
}
.background-knot-figure figcaption {
  align-items: baseline;
  color: var(--ink);
  display: flex;
  font: 400 var(--type-body)/1.2 var(--font-sans);
  justify-content: center;
  margin-top: 8px;
  flex: 0 0 auto;
}
.background-knot-sum-window {
  display: none;
  grid-column: 1 / 4;
  grid-row: 1;
  height: 100%;
  display: none;
  flex-direction: column;
  min-height: 0;
}
.is-connected-sum-layer [data-background-knot] {
  pointer-events: none;
  visibility: hidden;
}
.is-connected-sum-layer .background-knot-sum-window {
  display: flex;
}
.background-knot-sum-window > .background-knot-view {
  flex: 1 1 auto;
  min-height: 0;
  height: auto;
  overflow: visible;
}
.background-knot-sum-window:not(.is-sum-ready) {
  visibility: hidden;
}
.background-knot-sum-canvas {
  cursor: grab;
  display: block;
  height: calc(100% + var(--background-knot-top-space, 0px) + var(--background-knot-bottom-space, 0px));
  left: 0;
  position: absolute;
  top: calc(-1 * var(--background-knot-top-space, 0px));
  touch-action: none;
  width: 100%;
}
.background-knot-sum-canvas.is-dragging {
  cursor: grabbing;
}
.background-knot-sum-window figcaption {
  display: block;
  height: calc(var(--type-body) * 1.2);
  position: relative;
  white-space: nowrap;
  flex: 0 0 auto;
  pointer-events: none;
}
.background-knot-sum-window [data-sum-component] {
  align-items: baseline;
  display: inline-flex;
  gap: 18px;
  position: absolute;
  top: 0;
  transform: translateX(-50%);
}
.background-knot-sum-window [data-sum-caption],
.background-knot-sum-sign {
  display: inline-block;
}
.background-knot-sum-sign {
  box-sizing: border-box;
  flex: 0 0 var(--knot-sum-sign-space);
  width: var(--knot-sum-sign-space);
  padding-inline: 8px;
  text-align: center;
}
.background-knot-definition {
  display: block;
  /* Pin the inline line box and intervening whitespace to the slide's text
     context when this block is retained outside section[data-label]. */
  font: 400 var(--type-body)/1.35 var(--font-sans);
  border-top: 1px solid var(--line-2);
  margin-top: 22px;
  padding-top: 28px;
  flex: 0 0 auto;
  margin-bottom: 26px;
}
.background-knot-definition h3 {
  color: var(--ink);
  display: inline;
  font: 400 var(--type-heading)/1.4 var(--font-sans);
  margin: 0 24px 0 0;
}
.background-knot-definition p {
  color: var(--ink);
  display: inline;
  font: 400 var(--type-heading)/1.4 var(--font-sans);
  margin: 0;
  max-width: none;
}
.background-knot-statement + .background-knot-statement {
  margin-top: 24px;
}
.background-knot-statement--preview {
  /* Match the shadow's charcoal-on-white strength, including math and links. */
  opacity: var(--background-knot-shadow-strength);
}
.slide-background-knots:is(.is-connected-sum-focus, .is-schubert-focus) .background-knot-statement--knot {
  opacity: var(--background-knot-shadow-strength);
}
.slide-background-knots.is-connected-sum-focus .background-knot-statement--sum {
  opacity: 1;
}
.slide-background-knots.is-schubert-focus .background-knot-statement--schubert {
  opacity: 1;
}
.background-definition-cite {
  color: var(--ink);
  font-family: var(--font-serif);
  font-size: inherit;
  white-space: nowrap;
}
.slide-background-knots .background-definition-cite.accent {
  color: var(--color-ochre);
}
.background-knot-embedding {
  white-space: nowrap;
  transition: color var(--motion-reveal) ease;
}
.background-ambient-s3 {
  color: var(--ink);
  transition: color var(--motion-reveal) ease;
}
.background-domain-s1 {
  color: var(--ink);
  transition: color var(--motion-reveal) ease;
}
.slide-background-knots:is(.is-connected-sum-focus, .is-schubert-focus) :is(.background-domain-s1, .background-ambient-s3) {
  color: inherit;
}
.slide-background-knots:is(.is-s1-focus, .is-s2-focus) .background-domain-s1 {
  color: var(--color-ochre);
}
.slide-background-knots.is-sphere-focus .background-ambient-s3 {
  color: var(--color-stuttgart-mittelblau);
}
.background-knot-details {
  display: grid;
  margin-top: 24px;
}
.background-knot-followups,
.background-sphere-primer {
  grid-area: 1 / 1;
  min-width: 0;
  transition: opacity var(--motion-reveal) ease,
    visibility 0s linear;
}
.background-sphere-primer {
  display: grid;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 32px;
  opacity: 0;
  visibility: hidden;
  transition-delay: 0s, var(--motion-reveal);
}
.slide-background-knots:not(.is-connected-sum-focus):not(.is-schubert-focus) .background-sphere-primer {
  opacity: 1;
  visibility: visible;
  transition-delay: 0s;
}
.background-sphere-primer > .background-sphere-cell {
  opacity: var(--background-knot-shadow-strength);
  filter: grayscale(1);
  transition: opacity var(--motion-reveal) ease, filter var(--motion-reveal) ease;
}
.slide-background-knots.is-s1-focus .background-sphere-cell:nth-child(1),
.slide-background-knots.is-s2-focus .background-sphere-cell:nth-child(-n+3),
.slide-background-knots.is-sphere-focus .background-sphere-cell:nth-child(4) {
  opacity: 1;
  filter: grayscale(0);
}
.slide-background-knots:not(.is-connected-sum-focus):not(.is-schubert-focus) .background-knot-followups {
  opacity: 0;
  visibility: hidden;
  transition-delay: 0s, var(--motion-reveal);
}
.background-sphere-cell {
  margin: 0;
  text-align: center;
}
.background-sphere-cell figcaption,
.background-sphere-boundary .background-sphere-boundary-formula {
  color: var(--color-ochre);
  font: 400 40px/1.2 var(--font-sans);
}
.background-sphere-boundary .background-sphere-boundary-formula {
  color: var(--color-stuttgart-mittelblau);
}
.background-sphere-cell figcaption {
  margin: 12px 0 0;
}
.background-sphere-boundary {
  display: flex;
  align-items: center;
  justify-content: center;
}
.background-sphere-boundary-formula {
  margin: 0;
  white-space: nowrap;
}
.background-cell-diagram {
  display: block;
  margin: 0 auto 6px;
  max-width: 100%;
}
.background-cell-diagram {
  height: 180px;
  width: 260px;
  overflow: visible;
}
.slide-background-knots.is-primer-morphing .background-sphere-cell:nth-child(2) {
  opacity: 1;
  filter: grayscale(0);
  transition: none;
}
.slide-background-knots.is-primer-morphing .background-sphere-cell:nth-child(2) .background-cell-diagram {
  opacity: var(--background-knot-shadow-strength);
  filter: grayscale(1);
}
.slide-background-knots.is-primer-morphing .background-sphere-cell:nth-child(2) figcaption {
  animation: background-primer-caption-reveal var(--motion-reveal) ease both;
}
@keyframes background-primer-caption-reveal {
  from { opacity: var(--background-knot-shadow-strength); filter: grayscale(1); }
  to { opacity: 1; filter: grayscale(0); }
}
.background-sphere-morph {
  position: fixed;
  pointer-events: none;
  user-select: none;
  z-index: 2147482600;
  overflow: visible;
}
.cell-disk {
  fill: rgb(from var(--color-heritage-rose) r g b / var(--figure-skin-opacity));
  stroke: var(--color-ochre);
  stroke-width: 3;
}
/* One softly highlighted fill at the shared twenty-percent sphere opacity. */
.cell-sphere { opacity: var(--sphere-opacity); }
.cell-sphere-base-fill { fill: var(--color-heritage-rose); }
.cell-sphere-highlight-peak { stop-color: var(--color-white); stop-opacity: .92; }
.cell-sphere-highlight-soft { stop-color: var(--color-white); stop-opacity: .40; }
.cell-sphere-highlight-edge { stop-color: var(--color-white); stop-opacity: 0; }
.cell-sphere-rim,
.cell-equator {
  fill: none;
  stroke: var(--color-ochre);
  stroke-width: 2;
}
.cell-sphere-rim { opacity: .55; }
.cell-equator { opacity: .8; }
.cell-equator--back {
  opacity: .4;
  stroke-dasharray: 5 5;
}
.background-sphere-recognition {
  display: flex;
  align-items: center;
}
.background-sphere-conditions {
  display: grid;
  gap: 20px;
  list-style: none;
  margin: 0;
  padding: 0;
  font: 400 38px/1.4 var(--font-sans);
  text-align: left;
}
.background-sphere-conditions li {
  display: grid;
  grid-template-columns: 1ex auto;
  align-items: center;
  gap: 18px;
  white-space: nowrap;
}
.background-sphere-conditions li::before {
  content: '';
  background: var(--color-ochre);
  width: 1ex;
  height: 1ex;
  border-radius: 50%;
  justify-self: center;
}
/* Only this optional bridge owns these holds. Direct arrivals are complete. */
section.background-knots-pending-source {
  opacity: 1 !important;
  pointer-events: none !important;
  visibility: visible !important;
  z-index: 2;
}
section.background-knots-pending-target {
  opacity: 0 !important;
  pointer-events: none !important;
  visibility: hidden !important;
}
section.background-knots-transition .background-knots-title,
section.background-knots-transition .background-knot-figure {
  opacity: 0 !important;
  transition: none !important;
}
section.background-knots-transition .background-knot-definition {
  transform: none !important;
  transition: none !important;
}
.background-knots-bridge {
  inset: 0;
  pointer-events: none;
  position: fixed;
  z-index: 2147482550;
}
.background-knots-bridge-surface {
  background: var(--bg-2);
  inset: 0;
  position: absolute;
}
.background-knots-bridge-stage {
  overflow: hidden;
  position: absolute;
}
.background-knots-bridge-ghost {
  background: transparent !important;
  height: 1080px !important;
  left: 0 !important;
  opacity: 1 !important;
  position: absolute !important;
  top: 0 !important;
  transform-origin: left top;
  visibility: visible !important;
  width: 1920px !important;
}
section.background-knots-pending-source .motivation-yarn,
.background-knots-bridge-ghost .title-knot-target,
.background-knots-bridge-ghost .motivation-yarn,
.background-knots-bridge-ghost .motivation-yarn-caption {
  visibility: hidden !important;
}
section.background-knots-pending-source .motivation-table-window,
.background-knots-bridge-ghost .motivation-table-window {
  border-color: transparent !important;
  box-shadow: none !important;
  outline: none !important;
}
.background-knots-flyer {
  margin: 0;
  position: fixed;
  transform-origin: top left;
}
.background-knots-word {
  white-space: nowrap;
}
.background-knots-flight {
  overflow: visible;
}
.background-knots-flight canvas {
  height: 100%;
  inset: 0;
  position: absolute;
  width: 100%;
}
.background-knots-prefix,
.background-knots-label {
  position: fixed;
}
.background-knots-ground {
  position: fixed;
}
.background-knots-label {
  font: 400 var(--type-body)/1.2 var(--font-sans);
  text-align: center;
}
[data-background-knots-preview] .background-knot-canvas {
  display: none !important;
}
[data-background-knots-preview] .background-knot-poster {
  visibility: visible !important;
}
@media print {
  .background-knot-sum-window {
    display: none !important;
  }
  .is-connected-sum-layer [data-background-knot] {
    visibility: visible !important;
  }
  .background-knots-bridge,
  .background-sphere-morph,
  .background-knot-canvas {
    display: none !important;
  }
  .background-knot-poster {
    visibility: visible !important;
  }
  .slide-background-knots.is-primer-morphing .background-sphere-cell:nth-child(2) .background-cell-diagram {
    visibility: visible !important;
    opacity: 1 !important;
    filter: none !important;
  }
  .slide-background-knots .background-knots-title,
  .slide-background-knots .background-knot-figure,
  .slide-background-knots .background-knot-definition {
    opacity: 1 !important;
  }
}
/* Motivation owns its sandstone surface. */
section.slide-bg-motivation {
  background: var(--bg-2);
  padding: var(--pad-top) var(--pad-x) var(--pad-bottom);
}
/* Hidden Features, the Tour Guide and appendices share the main title anchor:
   the section's shared --pad-x / --pad-top. Put the appendix tag beside the
   title so it does not add an extra line above it. */
.s-refs,
.s-acks,
.s-guide,
.s-features {
  display: flex;
  flex-direction: column;
  height: 100%;
  gap: var(--gap-item);
  justify-content: flex-start;
}
:is(.s-refs, .s-acks, .s-guide, .s-features) > .head {
  display: grid;
  grid-template-columns: minmax(0, 1fr) max-content;
  column-gap: var(--gap-title);
  align-items: baseline;
  flex: 0 0 auto;
  border-bottom: 1px solid var(--line-2);
  padding-bottom: calc(var(--gap-title) / 2);
}
:is(.s-refs, .s-acks, .s-guide, .s-features) > .head > .col {
  display: contents;
}
:is(.s-refs, .s-acks, .s-guide, .s-features) > .head h2 {
  grid-column: 1;
  grid-row: 1;
  align-self: start;
  font-family: var(--font-sans);
  font-size: var(--type-title);
  font-weight: 400;
  letter-spacing: -0.018em;
  line-height: 1.04;
  color: var(--ink);
  margin: 0;
}
:is(.s-refs, .s-acks, .s-guide, .s-features) > .head .slide-tag {
  grid-column: 2;
  grid-row: 1;
  align-self: baseline;
  font-family: var(--font-sans);
  font-size: var(--type-caption);
  font-weight: 400;
  letter-spacing: 0.18em;
  line-height: 1;
  text-transform: uppercase;
  color: var(--ink-2);
  margin: 0;
}
:is(.s-refs, .s-acks, .s-guide, .s-features) > .head > :is(.ref-note, .meta):empty {
  display: none;
}
/* Hidden Features (11¾): a two-column recall of the deck's keys and the
   gestures its demonstrations answer to. Rows are compact table text in the
   detail role; key caps and gesture names sit in a fixed first column. */
.features-lede {
  flex: 0 0 auto;
  margin: 0;
  font-family: var(--font-serif);
  font-style: italic;
  font-size: var(--type-caption);
  line-height: 1.35;
  color: var(--ink-2);
}
.features-columns {
  flex: 1 1 auto;
  min-height: 0;
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 1.08fr);
  column-gap: var(--pad-x);
  align-items: start;
}
.features-group {
  min-width: 0;
}
.features-group > h3 {
  margin: 0 0 calc(var(--gap-item) / 2);
  font-family: var(--font-sans);
  font-size: var(--type-heading);
  font-weight: 400;
  letter-spacing: normal;
  line-height: 1.1;
  text-transform: none;
  color: var(--ink);
}
.features-list {
  margin: 0;
  display: grid;
  grid-template-columns: max-content minmax(0, 1fr);
  column-gap: var(--gap-item);
  row-gap: 0;
}
.features-row {
  display: contents;
}
.features-row > dt,
.features-row > dd {
  margin: 0;
  padding-block: calc(var(--gap-item) / 6);
  border-top: 1px solid var(--line);
  font-family: var(--font-sans);
  font-size: var(--type-detail);
  line-height: 1.25;
  color: var(--ink);
}
.features-row:first-child > dt,
.features-row:first-child > dd {
  border-top: 0;
}
.features-row > dt {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.25em;
  max-width: 11em;
  color: var(--ink-2);
}
.features-group:last-child .features-row > dt {
  max-width: 9em;
}
.features-gesture {
  font-family: var(--font-serif);
  font-style: italic;
  color: var(--ink);
}
/* Bead appendix. The old Appendix 01 performance panels supplied the restrained
   ink rules, ochre section numbers and upright table values. Sectioned row
   cards retain that hierarchy in the requested Swift-style table treatment. */
.s-bead-gluing {
  --bead-record-type: var(--type-caption);
  --bead-card-fill: rgb(from var(--ink) r g b / .045);
  gap: var(--gap-item);
}
.s-bead-gluing .bead-gluing-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  flex: 1 1 auto;
  min-height: 0;
  align-items: start;
}
.s-bead-gluing .bead-gluing-record {
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.s-bead-gluing h3 {
  margin: 0;
  font: 400 var(--type-body)/1.15 var(--font-sans);
  color: var(--ink);
}
.s-bead-gluing .bead-gluing-models {
  margin: 0;
  flex: 0 0 auto;
  padding-bottom: calc(var(--gap-item) / 2);
  border-bottom: 1px solid var(--line-2);
}
.s-bead-gluing .bead-gluing-window {
  position: relative;
  height: 300px;
  overflow: hidden;
  border: 0;
  outline: none;
  box-shadow: none;
  --demo-window-fade-x: 32px;
  --demo-window-fade-y: 12px;
}
.s-bead-gluing .bead-gluing-native { position: absolute; inset: 0; }
.s-bead-gluing [data-bead-appendix-object] {
  position: absolute;
  top: 0;
  width: 20%;
  height: 100%;
  cursor: grab;
  touch-action: none;
  border: 0;
  outline: none;
  box-shadow: none;
}
.s-bead-gluing [data-bead-appendix-object]:active { cursor: grabbing; }
.s-bead-gluing [data-bead-appendix-object]:is(:focus, :focus-visible) { outline: none; box-shadow: none; }
.s-bead-gluing .bead-gluing-vertices,
.s-bead-gluing [data-bead-appendix-vertices-for],
.s-bead-gluing .bead-gluing-vertex-leaders {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
}
.s-bead-gluing .bead-gluing-vertices { color: var(--ink); }
.s-bead-gluing [data-bead-appendix-vertex] {
  position: absolute;
  transform: translate(-50%, -50%);
  font: 400 var(--type-detail)/1 var(--font-sans);
  white-space: nowrap;
}
.s-bead-gluing .bead-gluing-vertex-leaders line {
  stroke: var(--ink);
  stroke-opacity: .4;
  stroke-width: 1;
}
.s-bead-gluing .bead-gluing-labels {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  min-height: 34px;
  align-items: start;
  text-align: center;
  color: var(--ink);
  font: 400 var(--type-caption)/1.15 var(--font-sans);
}
.s-bead-gluing .bead-gluing-tables {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 20px;
}
.s-bead-gluing .bead-gluing-map-group { min-width: 0; }
.s-bead-gluing .bead-gluing-map-group h4 {
  margin: 0 0 8px;
  color: var(--ink);
  font: 400 var(--type-body)/1.2 var(--font-sans);
}
.s-bead-gluing .bead-gluing-table {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0 4px;
  table-layout: fixed;
  font: 400 var(--bead-record-type)/1.08 var(--font-sans);
}
.s-bead-gluing .bead-face-col { width: 36%; }
.s-bead-gluing .bead-map-col { width: 28%; }
.s-bead-gluing .bead-gluing-table :is(th, td) {
  text-align: left;
  vertical-align: middle;
  padding: 5px 6px;
  border: 0;
}
.s-bead-gluing .bead-gluing-table thead th {
  padding-top: 0;
  padding-bottom: 6px;
  color: var(--ink-2);
  font: 400 var(--type-body)/1.1 var(--font-sans);
  border-bottom: 1px solid var(--line-2);
}
.s-bead-gluing .bead-gluing-row td { background: var(--bead-card-fill); }
.s-bead-gluing .bead-gluing-row:is(:hover, :focus-visible, [data-bead-gluing-active]) td {
  background: rgb(from var(--ink) r g b / .09);
}
.s-bead-gluing .bead-gluing-row:focus { outline: none; }
.s-bead-gluing .bead-gluing-row td:first-child { border-radius: 9px 0 0 9px; }
.s-bead-gluing .bead-gluing-row td:last-child { border-radius: 0 9px 9px 0; }
.s-bead-gluing .bead-gluing-table code {
  font: 400 var(--bead-record-type)/1.08 var(--font-sans);
  font-variant-numeric: tabular-nums;
  letter-spacing: .055em;
  color: var(--ink);
}
.s-bead-gluing .bead-gluing-hover-hint {
  margin: calc(var(--gap-item) / 2) 0 0;
  color: var(--ink-2);
  font: 400 var(--bead-record-type)/1.2 var(--font-sans);
}
/* Citation landing — js/reference-landing.js sweeps a highlighter under the
   cited entry. Text paints above the decorative layer; the layer itself never
   takes part in layout or pagination. */
section[data-ref-section] > .s-refs {
  position: relative;
  z-index: 1;
}
.ref-landing {
  position: absolute;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  opacity: 1;
  transition: opacity var(--motion-quick) linear;
}
.ref-landing > svg {
  position: absolute;
  left: 0;
  top: 0;
  overflow: visible;
}
.ref-landing stop { stop-color: var(--accent); }
/* UQ keeps the shared ink opacity, stroke and timing; only its colour changes. */
section[data-ref-section]:has(li[data-ref-key="UQdesign2026"].is-ref-landing-target) .ref-landing stop {
  stop-color: var(--uq-purple);
}
/* Reduced motion: the finished mark fades in instead of being drawn. */
.ref-landing.is-entering {
  opacity: 0;
  transition: none;
}
.ref-landing.is-leaving {
  opacity: 0;
  transition: opacity var(--motion-travel) ease-in-out;
}
/* Same font box as the entries, so the layer can read the baseline offset. */
.ref-landing-probe {
  position: absolute;
  left: 0;
  top: 0;
  visibility: hidden;
  font-family: var(--font-serif);
  font-size: var(--type-reference);
  line-height: var(--leading-reference);
  white-space: nowrap;
}
.ref-landing-probe > i {
  display: inline-block;
  width: 0;
  height: 0;
}

/* The other entries step back to context opacity while the mark dwells, and
   return with the mark's fade. The landed label takes the accessible accent. */
section[data-ref-section].is-ref-landing .ref-list > li > :is(.ref-label, .ref-body) {
  transition: opacity var(--motion-travel) ease-in-out, color var(--motion-travel) ease-in-out;
}
section[data-ref-section].is-ref-landing-marked .ref-list > li:not(.is-ref-landing-target) > :is(.ref-label, .ref-body) {
  opacity: var(--context-opacity);
  transition: opacity var(--motion-reveal) cubic-bezier(.2,.7,.2,1), color var(--motion-reveal) cubic-bezier(.2,.7,.2,1);
}
section[data-ref-section].is-ref-landing-marked .ref-list > li.is-ref-landing-target > .ref-label {
  color: var(--accent-2);
  transition: color var(--motion-quick) linear;
}
section[data-ref-section].is-ref-landing-marked .ref-list > li[data-ref-key="UQdesign2026"].is-ref-landing-target > .ref-label {
  color: var(--uq-purple);
}

/* ── Celebration landing ─────────────────────────────────────────────────
   An entry opts into confetti instead of the highlighter here, by citekey, so
   the generated bibliography stays untouched. Reduced motion keeps the static
   highlighter. The dimming and accent label are shared by both marks. */
section[data-ref-section] .ref-list > li[data-ref-key="IbarraMathewsPurcellSpreer2027"] {
  --ref-landing-mark: confetti;
}

/* LOCAL EXCEPTION. NOT PART OF THE DECK PALETTE. DO NOT USE ELSEWHERE.
   These six blues are the institutional colours of the IMPS27 authors'
   universities: four from Monash (Monash blue, Heritage blue, Electric blue,
   Blueberry) and two from the University of Stuttgart (Mittelblau, Hellblau).
   They exist only for this confetti and are not a global design choice: the
   eleven bases in foundations/tokens.css remain the deck's only colours, and
   no other rule, slide or component may reference these properties. They are
   declared on the confetti canvas itself, not on :root, so nothing else can
   inherit them; test/palette.test.mjs enforces that scope.
   js/reference-landing.js launches them at exactly 3 Monash : 1 Stuttgart,
   with the shade picked at random within each group. */
.ref-landing-confetti {
  --confetti-monash-blue: #006DAE;
  --confetti-monash-heritage-blue: #ABF5F9;
  --confetti-monash-electric-blue: #285AFF;
  --confetti-monash-blueberry: #121256;
  --confetti-stuttgart-mittelblau: #004191;
  --confetti-stuttgart-hellblau: #00BEFF;
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  z-index: 2;
  pointer-events: none;
}
/* Slide 02: one yarn loop, then the historical plate, then its detail. */
.slide-bg-motivation .s-motivation {
  --motivation-content-top: 104px;
  --motivation-window-height: 560px;
  --motivation-caption-gap: 16px;
  height: 100%;
  position: relative;
  overflow: hidden;
}
.s-motivation .symptom-title {
  align-items: baseline;
  color: var(--ink);
  display: flex;
  font: 500 var(--type-title)/1.05 var(--font-sans);
  gap: 24px;
  letter-spacing: -.018em;
  margin: 0;
  position: relative;
  white-space: nowrap;
  z-index: 3;
}
.s-motivation .title-knot-target {
  display: inline-block;
  font-weight: 400;
  letter-spacing: 0;
  line-height: inherit;
  transition: none;
}
.motivation-content {
  position: absolute;
  inset: var(--motivation-content-top) 0 82px;
  opacity: 1;
  transition: opacity var(--motion-reveal) ease;
}
.motivation-yarn {
  height: var(--motivation-window-height);
  left: 460px;
  margin: 0;
  position: absolute;
  top: 16px;
  transform-origin: center;
  transition: transform var(--motion-travel) cubic-bezier(.19,1,.22,1),
    height var(--motion-travel) cubic-bezier(.19,1,.22,1),
    top var(--motion-travel) cubic-bezier(.19,1,.22,1);
  width: 780px;
}
.motivation-yarn-frame, .motivation-yarn-poster {
  height: 100%;
  inset: 0;
  /* The moving viewport can change shape before its next render. Preserve
     the current bitmap's proportions throughout that layout flight. */
  object-fit: contain;
  object-position: center;
  position: absolute;
  width: 100%;
}
.motivation-yarn-frame { border: 0; outline: none !important; opacity: 0; pointer-events: none; cursor: grab; touch-action: none; }
.motivation-yarn-frame.dragging { cursor: grabbing; }
.motivation-yarn.is-ready .motivation-yarn-frame { opacity: 1; pointer-events: auto; }
.motivation-yarn.is-ready .motivation-yarn-poster { visibility: hidden; }
.s-motivation.is-table-visible .motivation-yarn {
  height: calc(var(--motivation-window-height) / .6);
  top: calc(8px - var(--motivation-window-height) / 3);
  transform: translateX(-430px) scale(.60);
}
.motivation-yarn-caption {
  color: var(--ink);
  font: 400 var(--type-caption)/1.2 var(--font-sans);
  left: 50%;
  margin: 0;
  position: absolute;
  text-align: center;
  top: calc(100% + var(--motivation-caption-gap) / .6);
  transform: translateX(-50%) scale(1.6666666667);
  transform-origin: center top;
  white-space: nowrap;
}
.s-motivation[data-step="3"] [data-motivation-knot-caption="question"] {
  color: var(--ink);
  opacity: var(--context-opacity);
  text-decoration: line-through;
}
.motivation-table {
  height: 700px;
  left: 800px;
  margin: 0;
  opacity: 0;
  pointer-events: none;
  position: absolute;
  top: 8px;
  transform: translateX(990px);
  transition: opacity var(--motion-reveal) ease,
    transform var(--motion-travel) cubic-bezier(.19,1,.22,1);
  width: 880px;
}
.s-motivation.is-table-visible .motivation-table {
  opacity: 1;
  pointer-events: auto;
  transform: translateX(0);
}
.motivation-table-window {
  cursor: grab;
  height: var(--motivation-window-height);
  left: calc((880px - var(--motivation-window-height) * 1796 / 2368) / 2);
  outline: none !important;
  overflow: hidden;
  position: relative;
  touch-action: none;
  transition: width var(--motion-travel) cubic-bezier(.19,1,.22,1),
    left var(--motion-travel) cubic-bezier(.19,1,.22,1);
  width: calc(var(--motivation-window-height) * 1796 / 2368);
}
.motivation-table-window:focus,
.motivation-table-window:focus-visible { outline: none !important; }
.s-motivation.is-table-zoomed .motivation-table-window { left: 0; width: 880px; }
.motivation-table-window.is-dragging { cursor: grabbing; }
.motivation-table-image, .motivation-table-focus {
  display: block;
  height: var(--motivation-window-height);
  left: 0;
  max-width: none;
  pointer-events: none;
  position: absolute;
  top: 0;
  transform: translate(var(--table-x, 0px), var(--table-y, 0px)) scale(var(--table-scale, 1));
  transform-origin: 0 0;
  transition: transform var(--motion-travel) cubic-bezier(.19,1,.22,1),
    opacity var(--motion-quick) ease;
  width: auto;
}
.motivation-table-focus { opacity: 0; }
.s-motivation.is-table-zoomed .motivation-table-image { opacity: 0; }
.s-motivation.is-table-zoomed .motivation-table-focus { opacity: 1; }
.motivation-table-window.is-table-interacting > img { transition: none; }
.motivation-table-window.is-table-interacting { transition: none; }
.motivation-table-credit {
  color: var(--figure-caption-color);
  font: 400 var(--type-detail)/1.2 var(--font-sans);
  margin-top: 16px;
  text-align: center;
}
.motivation-table-credit [data-cite-key] {
  background: none;
  border: 0;
  color: inherit;
  cursor: pointer;
  font: inherit;
  padding: 0;
}
.motivation-caption {
  bottom: 60px;
  color: var(--ink);
  font: 400 var(--type-body)/1.2 var(--font-sans);
  left: 40px;
  margin: 0;
  position: absolute;
  text-align: center;
  width: calc(100% - 80px);
}
.s-motivation:not(.is-table-visible) .motivation-caption {
  bottom: auto;
  top: calc(var(--motivation-content-top) + 16px + var(--motivation-window-height) + var(--motivation-caption-gap));
}
section.slide-bg-motivation.slide-out .motivation-content,
section.slide-bg-motivation.slide-out .motivation-caption,
section.slide-bg-motivation.title-bg-transition-enter:not(.title-bg-transition-reveal) .motivation-content,
section.slide-bg-motivation.title-bg-transition-enter:not(.title-bg-transition-reveal) .motivation-caption {
  opacity: 0;
  transition: none;
}
.s-motivation.is-motivation-instant *,
.s-motivation[data-motivation-preview] * { transition: none !important; }
@media print {
  .s-motivation .motivation-yarn-poster { visibility: visible !important; }
  .s-motivation .motivation-yarn-frame { display: none; }
}
/* Shared link treatment on the slide canvas, including wrapped reference URLs.
   Decoration stays in the line box, so hover/focus never shifts the text. */
/* Citation jumps are buttons so they do not expose a browser status URL. */
:where(button[data-cite-key]) {
  appearance: none;
  background: transparent;
  border: 0;
  display: inline;
  font: inherit;
  letter-spacing: inherit;
  padding: 0;
  text-align: inherit;
  vertical-align: baseline;
}
section[data-label] :is(a[href], button[data-cite-key]) {
  text-decoration-line: underline;
  text-decoration-color: currentColor;
  text-decoration-thickness: 0.045em;
  text-underline-offset: 0.14em;
  text-decoration-skip-ink: auto;
}
section[data-label] :is(a[href], button[data-cite-key]) {
  color: inherit;
  cursor: pointer;
  background-image: none;
  text-shadow: none;
  box-shadow: none;
  transition: text-decoration-thickness var(--motion-quick) ease;
}
section[data-label] :is(a[href], button[data-cite-key]):is(:hover, :focus-visible) {
  text-decoration-thickness: 0.075em;
}
section[data-label] :is(a[href], button[data-cite-key]):focus-visible {
  /* The stronger underline provides the focus cue without a surrounding halo. */
  outline: none;
}

/* Main-text references have two forms: upright sans with a permanent
   underline, or italic serif with an underline revealed by hover/focus. */
section[data-label]:not([data-ref-section]) [data-cite-key] {
  font-family: var(--font-sans);
  font-style: normal;
}
section[data-label]:not([data-ref-section]) :is(a[href], button[data-cite-key]).serif {
  font-family: var(--font-serif);
  font-style: italic;
  text-decoration-line: none;
  /* A centred line grows without changing the text or its line boxes. */
  background-image: linear-gradient(currentColor, currentColor);
  background-repeat: no-repeat;
  background-position: center calc(100% - .12em);
  background-size: 0% .075em;
  -webkit-box-decoration-break: clone;
  box-decoration-break: clone;
  transition: background-size var(--motion-quick) ease;
}
section[data-label]:not([data-ref-section]) :is(a[href], button[data-cite-key]).serif:is(:hover, :focus-visible) {
  background-size: 100% .075em;
}
/* Resource names keep the same citation underline with upright serif text. */
section[data-label]:not([data-ref-section]) :is(a[href], button[data-cite-key]).serif.citation-upright {
  font-style: normal;
}
@media (prefers-reduced-motion: reduce) {
  section[data-label]:not([data-ref-section]) :is(a[href], button[data-cite-key]).serif {
    transition: none;
  }
}
/* Content that remains available to assistive technology without affecting layout. */
.sr-only {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  padding: 0 !important;
  margin: -1px !important;
  overflow: hidden !important;
  clip: rect(0, 0, 0, 0) !important;
  white-space: nowrap !important;
  border: 0 !important;
}

@media print {
  .deck-fullscreen-button,
  .workflow-progress--global,
  .title-bg-bridge-overlay,
  .background-knots-bridge,
  .complexity-knot-bridge,
  .sphere-title-bridge,
  .method-title-bridge,
  .aim-method-bridge {
    display: none !important;
  }
  section[data-label] *,
  section[data-label] *::before,
  section[data-label] *::after {
    animation-delay: 0s !important;
    animation-duration: 0s !important;
    transition-delay: 0s !important;
    transition-duration: 0s !important;
  }
  section[data-label] .anim {
    opacity: 1 !important;
    transform: none !important;
  }
}

@media (prefers-reduced-motion: reduce) {
  :root {
    --motion-quick: 1ms;
    --motion-reveal: 1ms;
    --motion-travel: 1ms;
    --motion-gap: 0ms;
  }

  *,
  *::before,
  *::after {
    animation-delay: 0s !important;
    animation-duration: 1ms !important;
    animation-iteration-count: 1 !important;
    scroll-behavior: auto !important;
    transition-delay: 0s !important;
    transition-duration: 1ms !important;
  }
}
