/* Generated by tools/design-export/convert.php. Base rules first, then one class per
   distinct style in the design export. Colours are brand tokens from tokens.css. */

/* ---------- Tints ----------
   Pale versions of brand colours used by some figures, mixed from the tokens
   so they follow the light and dark themes. */

:root,
[data-theme="dark"] {
  --tangent-tint: color-mix(in srgb, var(--tangent) 22%, var(--frame));
  --curve-alt-tint: color-mix(in srgb, var(--curve-alt) 25%, var(--frame));
  /* Major lines on graph paper, a step darker than the grid. */
  --grid-strong: color-mix(in srgb, var(--muted) 30%, var(--grid));
  /* A deeper orange: the hover state of orange-text buttons. */
  --tangent-deep: color-mix(in srgb, var(--tangent-text) 78%, var(--ink));
  /* Halfway between the background and a panel: faint bands in figures. */
  --surface-half: color-mix(in srgb, var(--surface) 50%, var(--frame));
}

/* Black and white as the export's logic uses them: ink on paper on the page,
   swapped inside dark (animation) panels. */
:root {
  --tt-black: var(--ink);
  --tt-white: var(--frame);
}

[data-theme="dark"] {
  --tt-black: var(--frame);
  --tt-white: var(--ink);
}

/* Name used by exports built with the design system's components. */
:root {
  --font-body: var(--font-sans);
}

/* ---------- Base ---------- */

*,
*::before,
*::after {
  box-sizing: border-box;
}

html,
body {
  margin: 0;
  padding: 0;
  background: var(--frame);
}

body {
  font-family: var(--font-sans);
  color: var(--ink);
  font-size: var(--text-body-size);
  line-height: var(--text-body-line);
  -webkit-font-smoothing: antialiased;
}

/* Links are ink, and turn orange only on hover (one orange thing per section). */
a {
  color: var(--ink);
  text-decoration: underline;
  text-underline-offset: 2px;
}

a:hover {
  color: var(--tangent-text);
}

:focus-visible {
  outline: 3px solid var(--ink);
  outline-offset: 2px;
}

img,
svg {
  max-width: 100%;
}

.katex {
  font-size: 1.1em;
}

.katex-display {
  text-align: left !important;
  margin: 0 !important;
  overflow-x: auto;
  overflow-y: hidden;
  padding: 4px 0;
}

.katex-display > .katex {
  text-align: left !important;
}

.tti-scroll {
  max-width: 100%;
  overflow-x: auto;
}

/* A formula wider than a phone screen scrolls inside its box instead of
   pushing the whole page sideways. */
[data-tti-root] :is(div, span):has(> .katex, > span > .katex) {
  max-width: 100%;
  overflow-x: auto;
  overflow-y: hidden;
  padding-block: 4px;
}

@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    transition-duration: 0s !important;
    animation-duration: 0s !important;
  }
}

.visually-hidden {
  position: absolute !important;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  white-space: nowrap;
  border: 0;
}

/* ---------- Game plan animations ----------
   convert.php (gp_inline) puts each animated picture in the page with its still
   frame beside it. The still shows instead with reduced motion and in print. */

.tti-gp__anim svg,
.tti-gp__still svg {
  display: block;
  width: 100%;
  height: auto;
}

.tti-gp__still {
  display: none;
}

@media (prefers-reduced-motion: reduce) {
  .tti-gp__anim {
    display: none;
  }

  .tti-gp__still {
    display: block;
  }
}

@media print {
  .tti-gp__anim {
    display: none;
  }

  .tti-gp__still {
    display: block;
  }
}

/* ---------- Runtime (tti.js) ---------- */

.tti-if {
  display: contents;
}

/* With JavaScript on, conditional parts wait for the runtime to show them.
   Without JavaScript, everything is visible. */
.tti-js [data-if]:not(.tti-on) {
  display: none !important;
}

.tti-anim {
  display: block;
  margin: 16px 0 0 auto;
  min-height: 44px;
  padding: 0 16px;
  border: 1px solid var(--muted);
  border-radius: var(--radius-sm);
  background: transparent;
  color: var(--ink);
  font: 600 15px/22px var(--font-sans);
  cursor: pointer;
}

.tti-anim:hover {
  border-color: var(--ink);
}

/* ---------- Design-system components ----------
   Exports that use the design system's components (Button, Switch, TeX,
   AnswerBox, SubjectTag) are converted to these classes by convert.php. Each
   matches the component in the export's ds/_ds_bundle.js. */

/* The logo link (lib/logo.php, styled by css/logo.css), 40px tall here. */
.tti-logo,
.ix-top .tt-logo {
  --logo-h: 40px;
}

.tti-tex {
  font-family: var(--font-math);
}

.tti-tex--block {
  display: block;
  text-align: left;
}

/* The LaTeX source is the fallback without JavaScript. With it, hide the
   source until KaTeX has drawn the formula. */
.tti-js .tti-tex:not(.tti-tex-done) {
  visibility: hidden;
}

.tti-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  min-height: 48px;
  padding: 0 16px;
  border: 1px solid transparent;
  border-radius: var(--radius-sm);
  font: 600 18px/24px var(--font-sans);
  white-space: nowrap;
  cursor: pointer;
  transition: background-color 120ms cubic-bezier(.2, 0, 0, 1);
}

.tti-btn--sm {
  min-height: 44px;
  font-size: 15px;
  line-height: 22px;
}

/* Text on orange is always black: ink on light, frame in a dark panel. */
.tti-btn--primary {
  background: var(--tangent);
  border-color: var(--tangent);
  color: var(--ink);
}

[data-theme="dark"] .tti-btn--primary {
  color: var(--frame);
}

.tti-btn--primary:hover:not(:disabled) {
  background: var(--tangent-hover);
  border-color: var(--tangent-hover);
}

.tti-btn--ink {
  background: var(--ink);
  color: var(--frame);
}

.tti-btn--ink:hover:not(:disabled) {
  background: color-mix(in srgb, var(--ink) 80%, var(--frame));
}

.tti-btn--secondary {
  background: transparent;
  border-color: var(--ink);
  color: var(--ink);
}

.tti-btn--ghost {
  background: transparent;
  color: var(--ink);
}

.tti-btn--secondary:hover:not(:disabled),
.tti-btn--ghost:hover:not(:disabled) {
  background: var(--surface);
}

.tti-btn:disabled {
  border-color: var(--muted);
  color: var(--muted);
  cursor: not-allowed;
}

.tti-btn--primary:disabled,
.tti-btn--ink:disabled {
  background: var(--surface);
}

.tti-btn--ghost:disabled {
  border-color: transparent;
}

/* The whole label is the touch target. */
.tti-switch {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  min-height: 44px;
  font: 400 18px/28px var(--font-sans);
  color: var(--ink);
  cursor: pointer;
}

.tti-switch__btn {
  position: relative;
  flex: none;
  width: 40px;
  height: 24px;
  padding: 0;
  border: 1.5px solid var(--muted);
  border-radius: var(--radius-sm);
  background: var(--frame);
  cursor: inherit;
}

.tti-switch__btn[aria-checked="true"] {
  border-color: var(--ink);
  background: var(--ink);
}

.tti-switch__knob {
  position: absolute;
  top: 2.5px;
  left: 2.5px;
  width: 16px;
  height: 16px;
  border-radius: 2px;
  background: var(--muted);
  transition: left 120ms cubic-bezier(.2, 0, 0, 1);
}

.tti-switch__btn[aria-checked="true"] .tti-switch__knob {
  left: 18.5px;
  background: var(--frame);
}

/* The answer: the one orange thing in its step. Square corners, like all answer boxes. */
.tti-answer {
  display: inline-flex;
  flex-direction: column;
  gap: 4px;
  padding: 12px 16px;
  border: 2px solid var(--tangent);
  border-radius: 0;
  font: 400 18px/28px var(--font-sans);
  color: var(--ink);
}

.tti-answer__label {
  font-size: 13px;
  line-height: 18px;
  font-weight: 600;
  color: var(--muted);
}

.tti-tag {
  display: inline-flex;
  align-items: center;
  padding: 2px 10px;
  border: 1px solid var(--muted);
  border-radius: var(--radius-pill);
  font: 500 13px/18px var(--font-sans);
  color: var(--ink);
  white-space: nowrap;
}

/* The design export lays out at desktop widths; give small screens room. */
@media (max-width: 639px) {
  [data-tti-root] main,
  [data-tti-root] > header > div {
    padding-left: 16px !important;
    padding-right: 16px !important;
  }

  [data-tti-root] section {
    padding-left: 16px !important;
    padding-right: 16px !important;
  }

  [data-tti-root] section[class] h1 {
    word-break: break-word;
  }
}

/* ---------- Index page ---------- */

.ix-wrap {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 32px;
}

.ix-top {
  border-bottom: 1px solid var(--grid);
}

.ix-top__inner {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding-top: 16px;
  padding-bottom: 16px;
}

.ix-small,
.ix-top__meta {
  font-size: var(--text-small-size);
  line-height: var(--text-small-line);
  color: var(--muted);
}

.ix-top__meta a {
  color: var(--ink);
}

.ix-main {
  padding-top: 64px;
  padding-bottom: 64px;
}

.ix-intro {
  max-width: 75ch;
}

.ix-eyebrow {
  margin: 0;
  font-size: var(--text-small-size);
  line-height: var(--text-small-line);
  font-weight: 500;
  color: var(--muted);
}

.ix-h1 {
  margin: 16px 0 0;
  font-family: var(--font-display);
  font-size: clamp(44px, 7vw, 72px);
  line-height: 1;
  font-weight: 700;
  letter-spacing: -0.01em;
  text-wrap: balance;
}

.ix-lede {
  margin: 32px 0 0;
  text-wrap: pretty;
}

.ix-progress {
  margin-top: 64px;
  padding: 32px;
  border-radius: var(--radius-sm);
  background: var(--surface);
  display: flex;
  flex-wrap: wrap;
  gap: 32px;
  align-items: flex-end;
  justify-content: space-between;
}

.ix-progress__main {
  flex: 1 1 420px;
  min-width: 0;
}

.ix-progress__head {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: space-between;
  gap: 8px 16px;
}

.ix-h2 {
  margin: 0;
  font-size: var(--text-h3-size);
  line-height: var(--text-h3-line);
  font-weight: 600;
}

.ix-bar {
  margin-top: 16px;
  height: 8px;
  background: var(--grid);
}

.ix-bar__fill {
  height: 100%;
  width: 0;
  background: var(--ink);
  transition: width 120ms cubic-bezier(0.2, 0, 0, 1);
}

.ix-note {
  margin: 16px 0 0;
}

.ix-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.ix-btn {
  cursor: pointer;
  font: 600 var(--text-body-size) / 24px var(--font-sans);
  min-height: 48px;
  padding: 0 16px;
  border-radius: var(--radius-sm);
  border: 1px solid transparent;
  background: transparent;
  color: var(--ink);
  white-space: nowrap;
}

.ix-btn--primary {
  border-color: var(--tangent);
  background: var(--tangent);
}

.ix-btn--primary:hover {
  border-color: var(--tangent-hover);
  background: var(--tangent-hover);
}

.ix-btn--quiet:hover {
  background: var(--frame);
}

/* JavaScript-only controls are hidden when JavaScript is off. */
html:not(.tti-js) [data-ix-js] {
  display: none !important;
}

.ix-engines {
  margin-top: 64px;
}

.ix-engines__grid {
  margin-top: 32px;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 32px;
}

.ix-engine {
  border-top: 1px solid var(--grid);
  padding-top: 16px;
}

.ix-engine__name {
  font-weight: 600;
}

.ix-engine p,
.ix-engines > p {
  margin: 8px 0 0;
}

.ix-engines > p {
  max-width: 75ch;
}

.ix-year {
  margin-top: 64px;
}

.ix-year__head {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  justify-content: space-between;
  gap: 8px 32px;
}

.ix-year__head h2 {
  margin: 0;
  font-family: var(--font-display);
  font-size: var(--text-h2-size);
  line-height: var(--text-h2-line);
  font-weight: 600;
}

/* Topic sets: each unit lists its topics, two questions each. */
.ix-topic {
  margin-top: 32px;
}

.ix-topic h3 {
  margin: 0;
  font-family: var(--font-display);
  font-size: var(--text-h3-size);
  line-height: var(--text-h3-line);
  font-weight: 600;
}

.ix-rows {
  margin: 16px 0 0;
  padding: 0;
  list-style: none;
  border-top: 1px solid var(--ink);
}

.ix-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 32px;
  padding: 16px 0;
  border-bottom: 1px solid var(--grid);
}

.ix-row__link {
  flex: 1 1 360px;
  min-width: 0;
  display: block;
  text-decoration: none;
}

.ix-row__link:hover .ix-row__title {
  text-decoration: underline;
}

.ix-row__ref {
  display: block;
  font-size: var(--text-small-size);
  line-height: var(--text-small-line);
  font-weight: 600;
}

.ix-row__title {
  display: block;
}

.ix-row__unit {
  display: block;
  margin-top: 4px;
  color: var(--muted);
  font-size: var(--text-small-size);
  line-height: var(--text-small-line);
}

.ix-row__meta {
  display: flex;
  align-items: center;
  gap: 16px 32px;
}

.ix-row__engine {
  min-width: 112px;
  white-space: nowrap;
}

.ix-row__marks {
  width: 88px;
  text-align: right;
}

.ix-done {
  cursor: pointer;
  font: 600 var(--text-small-size) / var(--text-small-line) var(--font-sans);
  min-height: 44px;
  width: 128px;
  padding: 0 16px;
  border-radius: var(--radius-sm);
  border: 1px solid var(--ink);
  background: transparent;
  color: var(--ink);
}

.ix-done[aria-pressed="true"] {
  background: var(--ink);
  color: var(--frame);
}

.ix-foot {
  margin-top: 64px;
  border-top: 1px solid var(--grid);
  padding-top: 32px;
  display: grid;
  gap: 8px;
  max-width: 75ch;
}

.ix-foot p {
  margin: 0;
}

/* Copyright and licence line on premium resources (convert.php premium_notice). */
.tti-legal {
  margin: 8px 0 0;
  max-width: 75ch;
  font-size: 13px;
  line-height: 18px;
  color: var(--muted);
}

.tti-legal--alone {
  margin-top: 64px;
}

.ix-foot .tti-legal {
  margin: 0;
}

@media (max-width: 639px) {
  .ix-wrap {
    padding: 0 16px;
  }

  .ix-progress {
    padding: 16px;
  }

  .ix-row__meta {
    flex-wrap: wrap;
    gap: 8px 16px;
  }

  .ix-row__engine,
  .ix-row__marks {
    width: auto;
  }
}

/* ---------- Game plan animations, from the export's gp-anim.js ---------- */

/* sm-gp-anim 0 */
.smgp0-b{animation:smgp0-bob 1.5s ease-in-out infinite}@keyframes smgp0-bob{0%,100%{transform:translate(240px,240px)}50%{transform:translate(240px,233px)}}.smgp0-bar{transform-box:fill-box;transform-origin:center;animation:smgp0-rock 3s ease-in-out infinite}@keyframes smgp0-rock{0%,100%{transform:rotate(-7deg)}50%{transform:rotate(7deg)}}.smgp0-p{offset-path:path("M24,200 C60,40 120,40 140,110 S190,150 200,72");offset-rotate:auto;animation:smgp0-mv 4s ease-in-out infinite alternate}@keyframes smgp0-mv{from{offset-distance:0%}to{offset-distance:100%}}@media (prefers-reduced-motion:reduce){.smgp0-b,.smgp0-bar,.smgp0-p{animation:none}.smgp0-p{offset-distance:55%}}

/* sm-gp-anim 1 */
.smgp1-b{animation:smgp1-bob 1.5s ease-in-out infinite}@keyframes smgp1-bob{0%,100%{transform:translate(240px,240px)}50%{transform:translate(240px,233px)}}.smgp1-bar{transform-box:fill-box;transform-origin:center;animation:smgp1-rock 3s ease-in-out infinite}@keyframes smgp1-rock{0%,100%{transform:rotate(-7deg)}50%{transform:rotate(7deg)}}@media (prefers-reduced-motion:reduce){.smgp1-b,.smgp1-bar,.smgp1-p{animation:none}.smgp1-p{offset-distance:55%}}.smgp1-rt{transform-origin:110px 120px;animation:smgp1-spin 8s linear infinite}@keyframes smgp1-spin{to{transform:rotate(-360deg)}}@media (prefers-reduced-motion:reduce){.smgp1-rt{animation:none;transform:rotate(-40deg)}}

/* sm-gp-anim 2 */
.smgp2-b{animation:smgp2-bob 1.5s ease-in-out infinite}@keyframes smgp2-bob{0%,100%{transform:translate(240px,240px)}50%{transform:translate(240px,233px)}}.smgp2-bar{transform-box:fill-box;transform-origin:center;animation:smgp2-rock 3s ease-in-out infinite}@keyframes smgp2-rock{0%,100%{transform:rotate(-7deg)}50%{transform:rotate(7deg)}}.smgp2-d0{transform-box:fill-box;transform-origin:100% 100%;animation:smgp2-f0 5s ease-in infinite}@keyframes smgp2-f0{0%,8%{transform:rotate(0)}16%,85%{transform:rotate(60deg)}95%,100%{transform:rotate(0)}}.smgp2-d1{transform-box:fill-box;transform-origin:100% 100%;animation:smgp2-f1 5s ease-in infinite}@keyframes smgp2-f1{0%,20%{transform:rotate(0)}28%,85%{transform:rotate(60deg)}95%,100%{transform:rotate(0)}}.smgp2-d2{transform-box:fill-box;transform-origin:100% 100%;animation:smgp2-f2 5s ease-in infinite}@keyframes smgp2-f2{0%,32%{transform:rotate(0)}40%,85%{transform:rotate(60deg)}95%,100%{transform:rotate(0)}}.smgp2-d3{transform-box:fill-box;transform-origin:100% 100%;animation:smgp2-f3 5s ease-in infinite}@keyframes smgp2-f3{0%,44%{transform:rotate(0)}52%,85%{transform:rotate(60deg)}95%,100%{transform:rotate(0)}}.smgp2-d4{transform-box:fill-box;transform-origin:100% 100%;animation:smgp2-f4 5s ease-in infinite}@keyframes smgp2-f4{0%,56%{transform:rotate(0)}64%,85%{transform:rotate(82deg)}95%,100%{transform:rotate(0)}}@media (prefers-reduced-motion:reduce){[class^="d"]{animation:none}}

/* sm-gp-anim 3 */
.smgp3-b{animation:smgp3-bob 1.5s ease-in-out infinite}@keyframes smgp3-bob{0%,100%{transform:translate(240px,240px)}50%{transform:translate(240px,233px)}}.smgp3-bar{transform-box:fill-box;transform-origin:center;animation:smgp3-rock 3s ease-in-out infinite}@keyframes smgp3-rock{0%,100%{transform:rotate(-7deg)}50%{transform:rotate(7deg)}}.smgp3-v{stroke-dasharray:110;animation:smgp3-dr 4s ease-in-out infinite}@keyframes smgp3-dr{0%{stroke-dashoffset:110}40%,80%{stroke-dashoffset:0}100%{stroke-dashoffset:110}}.smgp3-ah{animation:smgp3-ah 4s ease-in-out infinite}@keyframes smgp3-ah{0%{transform:translate(-66px,88px);opacity:0}2%,98%{opacity:1}40%,80%{transform:translate(0,0)}100%{transform:translate(-66px,88px);opacity:0}}@media (prefers-reduced-motion:reduce){.smgp3-v,.smgp3-ah{animation:none}}

/* sm-gp-anim 4 */
.smgp4-b{animation:smgp4-bob 1.5s ease-in-out infinite}@keyframes smgp4-bob{0%,100%{transform:translate(240px,240px)}50%{transform:translate(240px,233px)}}.smgp4-bar{transform-box:fill-box;transform-origin:center;animation:smgp4-rock 3s ease-in-out infinite}@keyframes smgp4-rock{0%,100%{transform:rotate(-7deg)}50%{transform:rotate(7deg)}}.smgp4-q{offset-path:path('M28,206 Q112,20 196,206');offset-rotate:0deg;animation:smgp4-q 2.6s cubic-bezier(.45,.05,.55,.95) infinite}@keyframes smgp4-q{0%{offset-distance:0%}100%{offset-distance:100%}}@media (prefers-reduced-motion:reduce){.smgp4-q{animation:none;offset-distance:50%}}

/* sm-gp-anim 5 */
.smgp5-b{animation:smgp5-bob 1.5s ease-in-out infinite}@keyframes smgp5-bob{0%,100%{transform:translate(240px,240px)}50%{transform:translate(240px,233px)}}.smgp5-bar{transform-box:fill-box;transform-origin:center;animation:smgp5-rock 3s ease-in-out infinite}@keyframes smgp5-rock{0%,100%{transform:rotate(-7deg)}50%{transform:rotate(7deg)}}.smgp5-h{opacity:0;animation:smgp5-hr 3.6s ease-in-out infinite}.smgp5-h1{animation-delay:1.2s}.smgp5-h2{animation-delay:2.4s}@keyframes smgp5-hr{0%,100%{opacity:0}10%,30%{opacity:1}40%{opacity:0}}@media (prefers-reduced-motion:reduce){.smgp5-h{animation:none}.smgp5-h0{opacity:1}}

/* sm-gp-anim 6 */
.smgp6-b{animation:smgp6-bob 1.5s ease-in-out infinite}@keyframes smgp6-bob{0%,100%{transform:translate(240px,240px)}50%{transform:translate(240px,233px)}}.smgp6-bar{transform-box:fill-box;transform-origin:center;animation:smgp6-rock 3s ease-in-out infinite}@keyframes smgp6-rock{0%,100%{transform:rotate(-7deg)}50%{transform:rotate(7deg)}}.smgp6-s{opacity:0;animation:smgp6-sf 4.2s ease-in-out infinite}.smgp6-s0{animation-delay:0.0s}.smgp6-s1{animation-delay:0.3s}.smgp6-s2{animation-delay:0.6s}.smgp6-s3{animation-delay:0.9s}.smgp6-s4{animation-delay:1.2s}.smgp6-s5{animation-delay:1.5s}@keyframes smgp6-sf{0%{opacity:0}12%,70%{opacity:1}85%,100%{opacity:0}}@media (prefers-reduced-motion:reduce){.smgp6-s{animation:none;opacity:1}}

/* sm-gp-anim 7 */
.smgp7-b{animation:smgp7-bob 1.5s ease-in-out infinite}@keyframes smgp7-bob{0%,100%{transform:translate(240px,240px)}50%{transform:translate(240px,233px)}}.smgp7-bar{transform-box:fill-box;transform-origin:center;animation:smgp7-rock 3s ease-in-out infinite}@keyframes smgp7-rock{0%,100%{transform:rotate(-7deg)}50%{transform:rotate(7deg)}}.smgp7-g{transform-box:fill-box;transform-origin:center;animation:smgp7-gr 4s ease-in-out infinite}@keyframes smgp7-gr{0%{transform:rotate(0deg)}25%,75%{transform:rotate(var(--a))}100%{transform:rotate(0deg)}}@media (prefers-reduced-motion:reduce){.smgp7-g{animation:none;transform:rotate(var(--a))}}

/* sm-gp-anim 8 */
.smgp8-b{animation:smgp8-bob 1.5s ease-in-out infinite}@keyframes smgp8-bob{0%,100%{transform:translate(240px,240px)}50%{transform:translate(240px,233px)}}.smgp8-bar{transform-box:fill-box;transform-origin:center;animation:smgp8-rock 3s ease-in-out infinite}@keyframes smgp8-rock{0%,100%{transform:rotate(-7deg)}50%{transform:rotate(7deg)}}.smgp8-k{animation:smgp8-kk 3s cubic-bezier(.5,0,.9,.6) infinite}@keyframes smgp8-kk{0%{transform:translate(0,0);opacity:0}8%{opacity:1}80%{transform:translate(118px,107px);opacity:1}92%,100%{transform:translate(118px,107px);opacity:0}}@media (prefers-reduced-motion:reduce){.smgp8-k{animation:none}}

/* sm-gp-anim 9 */
.smgp9-b{animation:smgp9-bob 1.5s ease-in-out infinite}@keyframes smgp9-bob{0%,100%{transform:translate(240px,240px)}50%{transform:translate(240px,233px)}}.smgp9-bar{transform-box:fill-box;transform-origin:center;animation:smgp9-rock 3s ease-in-out infinite}@keyframes smgp9-rock{0%,100%{transform:rotate(-7deg)}50%{transform:rotate(7deg)}}.smgp9-xb{animation:smgp9-xb 3.2s ease-in-out infinite}@keyframes smgp9-xb{0%,100%{transform:translateX(-14px)}50%{transform:translateX(14px)}}@media (prefers-reduced-motion:reduce){.smgp9-xb{animation:none}}

.c0a2b943{min-height:100vh;background:var(--frame)}
.c8ad7a07{border-bottom:1px solid var(--grid)}
.c4ff3fed{max-width:1200px;margin:0 auto;padding:16px 32px;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:16px}
.c5321962{display:flex;flex-wrap:wrap;gap:8px 24px;font-size:15px;line-height:22px}
.c3e71ce3{color:var(--ink);text-decoration:none}
.c3e71ce3:hover{text-decoration:underline}
.cb403397{color:var(--muted);text-decoration:none}
.cb403397:hover{text-decoration:underline}
.c91ecc34{max-width:1200px;margin:0 auto;padding:64px 32px}
.c05c78c5{max-width:75ch}
.c861da1b{margin:0;font-size:15px;line-height:22px;font-weight:500;color:var(--muted)}
.c832e954{margin:16px 0 0;font-family:'IBM Plex Sans Condensed','Arial Narrow',sans-serif;font-size:clamp(44px,7vw,72px);line-height:1;font-weight:700;letter-spacing:-0.01em;text-wrap:balance}
.c206fb99{margin-top:32px;background:var(--surface);border-radius:4px;display:flex;justify-content:center;padding:8px 16px}
.c9f01c7d{display:block;width:340px;max-width:100%}
.c966ce96{stroke:var(--ink)}
.c0621a2e{fill:var(--ink)}
.c04162b2{fill:var(--frame);stroke:var(--ink)}
.cb64d76e{fill:var(--tangent)}
.c5cfb369{fill:var(--surface)}
.caaa4fa9{margin:32px 0 0;text-wrap:pretty}
.cbd86478{white-space:nowrap}
.cc7070a9{margin:16px 0 0;text-wrap:pretty}
.ceebccd7{margin-top:32px;display:flex;flex-wrap:wrap;gap:12px}
.c19bd19f{padding:8px 16px;border:1px solid var(--ink);border-radius:4px;color:var(--ink);text-decoration:none;font-size:16px;line-height:24px}
.c19bd19f:hover{background:var(--ink);color:var(--frame)}
.cc8ed47b{margin-top:96px;scroll-margin-top:24px;max-width:900px}
.c40b045e{margin:0;font-size:15px;line-height:22px;font-weight:600;color:var(--muted)}
.cd7ceb4d{margin:4px 0 0;font-family:'IBM Plex Sans Condensed','Arial Narrow',sans-serif;font-size:44px;line-height:48px;font-weight:700}
.c2f1af3a{margin:16px 0 0;max-width:75ch;text-wrap:pretty}
.c3349a0b{margin-top:48px;background:var(--surface);border-radius:4px;padding:clamp(16px,5vw,32px)}
.c2a79277{display:grid;justify-items:start;gap:8px}
.cb28ad9f{padding:4px 10px;background:var(--tangent);color:var(--ink);border-radius:4px;font-size:13px;line-height:18px;font-weight:600;white-space:nowrap}
.c014a2e8{margin:0;font-family:'IBM Plex Sans Condensed','Arial Narrow',sans-serif;font-size:24px;line-height:30px;font-weight:600}
.cccd375f{margin:24px 0 0;padding:0;list-style:none;display:grid}
.c1e9242a{display:grid;grid-template-columns:36px minmax(0,1fr);gap:16px;align-items:start;padding:0 0 16px}
.c29c090f{width:36px;height:36px;border-radius:4px;background:var(--tangent-tint);color:var(--ink);display:flex;align-items:center;justify-content:center;font-family:'IBM Plex Sans Condensed','Arial Narrow',sans-serif;font-size:18px;line-height:1;font-weight:700}
.c2d31873{padding-top:4px;font-size:18px;line-height:28px;text-wrap:pretty}
.c8f08b9d{margin-top:24px;background:var(--frame);border-left:5px solid var(--tangent);padding:16px 24px}
.ccd94111{margin:0;font-weight:600}
.c0d66926{margin:4px 0 0;text-wrap:pretty}
.c847a2bf{margin-top:32px;border-top:1px solid var(--grid);padding-top:16px}
.cf49481d{margin:8px 0 0;padding:0;list-style:none;display:grid;gap:4px;font-size:16px;line-height:24px}
.cebcfb6c{margin-top:24px;overflow-x:auto}
.cece926d{width:100%;min-width:560px;border-collapse:collapse;font-size:18px;line-height:28px}
.c0a21760{text-align:left;font-weight:600;padding:6px 12px 6px 0;border-bottom:1px solid var(--ink);vertical-align:bottom}
.ca59d44f{padding:10px 12px 10px 0;border-bottom:1px solid var(--grid);vertical-align:top}
.c47f2cb2{margin-top:32px;border-top:1px solid var(--ink)}
.c3e6d200{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:8px 32px;padding:16px 0;border-bottom:1px solid var(--grid)}
.c4abadc9{margin:0;font-weight:600;text-wrap:pretty}
.cff3441d{margin:0;text-wrap:pretty}
.ca0a9054{margin-top:64px;border-top:1px solid var(--grid);padding-top:32px;display:grid;gap:8px;max-width:75ch}
.c05767bc{margin:0;font-size:15px;line-height:22px;color:var(--muted)}
.c7a3e833{margin:0;font-size:15px;line-height:22px;color:var(--muted);text-wrap:pretty}
.ce534a4d{margin-top:32px;border-top:1px solid var(--ink);border-bottom:1px solid var(--ink);padding:16px 0}
.c5b1642b{margin:32px 0 0;max-width:640px}
.c1e90b3d{background:var(--frame);border:1px solid var(--grid)}
.c20a3c42{display:block;width:100%;height:auto}
.c9ea6e95{stroke:var(--muted)}
.c09b3626{fill:var(--ink);stroke:var(--frame)}
.c05fbec6{margin-top:8px;font-size:15px;line-height:22px;color:var(--muted);text-wrap:pretty}
.c2d40216{width:100%;min-width:300px;border-collapse:collapse;font-size:18px;line-height:28px}
.c81e6e71{margin-top:32px;border:1px solid var(--ink);border-radius:4px;padding:clamp(16px,4vw,24px)}
.cf4c9507{margin:4px 0 0;font-family:'IBM Plex Sans Condensed','Arial Narrow',sans-serif;font-size:24px;line-height:30px;font-weight:600}
.c76b3844{margin-top:16px;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,300px),1fr));gap:24px;align-items:center}
.c05d992a{display:block;width:100%;max-width:420px;height:auto}
.c80f0cb0{display:grid;gap:12px;min-width:0}
.c6e2c271{display:grid;gap:4px;font-size:15px;line-height:22px;font-weight:600;color:var(--muted)}
.c3931561{width:100%;min-height:44px;accent-color:var(--ink)}
.c6b5e3c6{background:var(--surface);border-radius:4px;padding:16px 20px;display:grid;gap:8px;overflow-x:auto;overflow-y:hidden;font-size:18px;line-height:32px}
.cb0755fd{width:100%;min-width:640px;border-collapse:collapse;font-size:18px;line-height:28px}
.c4af44d8{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 24px;padding:12px 0;border-bottom:1px solid var(--grid)}
.cd61a92d{min-width:0;flex:1 1 320px;overflow-x:auto;overflow-y:hidden}
.c2f3f2b8{display:inline-block;padding:2px 8px;border:1px solid var(--ink);border-radius:4px;font-size:13px;line-height:18px;font-weight:600;white-space:nowrap}
.c66a29eb{fill:var(--surface);stroke:var(--ink)}
.cf561cde{margin:16px 0 0;font-size:20px;line-height:30px}
.c635b5b0{fill:var(--muted)}
.c01df316{width:100%;min-width:420px;border-collapse:collapse;font-size:18px;line-height:28px}
.cbc2f995{margin-top:32px;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));gap:16px}
.c7381784{background:var(--surface);border-radius:4px;padding:20px 24px}
.cf2d8bda{margin:4px 0 0}
.cd835bcf{margin:0}
.cfe00453{width:100%;min-width:520px;border-collapse:collapse;font-size:18px;line-height:28px}
.c4c9bac6{stroke:var(--tangent)}
.c42cdbd8{display:block;width:100%;max-width:480px;height:auto}
.c10eb58d{display:block;width:100%;max-width:440px;height:auto}
.cd2469d4{stroke:var(--grid)}
.ce6af8d0{fill:var(--muted);stroke:var(--frame)}
.ca16201c{display:flex;flex-wrap:wrap;gap:8px}
.cdae3711{cursor:pointer;font-family:inherit;min-height:44px;padding:4px 14px;border-radius:4px;font-size:15px;font-weight:600}
.cf2b650a{fill:var(--frame)}
.cf486f55{stroke:var(--curve-alt)}
.cdba24d0{fill:var(--curve-alt)}
.c487e013{fill:var(--tangent);stroke:var(--ink)}
.cefd598d{width:100%;min-width:760px;border-collapse:collapse;font-size:18px;line-height:28px}
.c62bf5b2{margin-top:32px;background:var(--surface);border-radius:4px;padding:clamp(16px,5vw,32px);display:grid;gap:12px}
.c387efa0{overflow-x:auto;overflow-y:hidden;padding:4px 0}
.c4b04137{margin-top:16px;display:grid;grid-template-columns:minmax(0,1fr);gap:24px;align-items:center}
.c2c27f7a{display:block;width:100%;max-width:760px;height:auto}
.c60e3cbb{margin-top:32px;max-width:75ch}
.c4ed040f{margin:0;font-size:24px;line-height:30px;font-weight:600}
.c88c93a8{margin:16px 0 0;padding:0 0 0 24px;display:grid;gap:8px}
.c5f1cdb2{margin-top:32px;background:var(--surface);border-radius:4px;padding:clamp(16px,5vw,32px);display:grid;gap:16px}
.c8bc654f{margin:0;padding:0 0 0 20px;display:grid;gap:8px}
.c348d451{margin-top:32px;display:grid;border-top:1px solid var(--ink)}
.c48e09e0{display:grid;grid-template-columns:40px minmax(0,1fr);gap:16px;padding:16px 0;border-bottom:1px solid var(--grid)}
.cd5a4db0{font-family:'IBM Plex Sans Condensed','Arial Narrow',sans-serif;font-size:36px;line-height:40px;font-weight:700}
.cffe2872{display:grid;gap:8px;justify-items:start}
.c1fe26b3{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:baseline}
.c72dd43a{font-size:24px;line-height:30px;font-weight:600}
.c43134ce{padding:4px 10px;background:var(--ink);color:var(--frame);border-radius:4px;font-size:13px;line-height:18px;font-weight:600;white-space:nowrap}
.c8ccb2d7{padding:4px 10px;border:1px solid var(--ink);border-radius:4px;font-size:13px;line-height:18px;font-weight:600;white-space:nowrap}
.c3259a9b{fill:var(--grid)}
.c2f5eb42{margin-top:32px;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr));gap:16px}
.c6dd244b{background:var(--surface);border-radius:4px;padding:20px 24px;display:grid;gap:8px;align-content:start}
.cd001d4a{--a:19.3deg;animation-delay:0.00s;stroke:var(--ink)}
.cf2690cf{--a:-19.3deg;animation-delay:0.12s;stroke:var(--ink)}
.c011d160{--a:-46.4deg;animation-delay:0.24s;stroke:var(--ink)}
.c9074409{--a:-60.3deg;animation-delay:0.36s;stroke:var(--ink)}
.c040961b{--a:19.3deg;animation-delay:0.12s;stroke:var(--ink)}
.c6f88bf4{--a:-19.3deg;animation-delay:0.24s;stroke:var(--ink)}
.c6929550{--a:-46.4deg;animation-delay:0.36s;stroke:var(--ink)}
.c0a5b3b6{--a:-60.3deg;animation-delay:0.48s;stroke:var(--ink)}
.c4e4073f{--a:19.3deg;animation-delay:0.24s;stroke:var(--ink)}
.ce2a394b{--a:-19.3deg;animation-delay:0.36s;stroke:var(--ink)}
.ca218d1a{--a:-46.4deg;animation-delay:0.48s;stroke:var(--ink)}
.c42fb36a{--a:-60.3deg;animation-delay:0.60s;stroke:var(--ink)}
.cb62654f{--a:19.3deg;animation-delay:0.36s;stroke:var(--ink)}
.c9e6486c{--a:-19.3deg;animation-delay:0.48s;stroke:var(--ink)}
.c15ed7a8{--a:-46.4deg;animation-delay:0.60s;stroke:var(--ink)}
.c7e833eb{--a:-60.3deg;animation-delay:0.72s;stroke:var(--ink)}
.cf14be0b{--a:19.3deg;animation-delay:0.48s;stroke:var(--ink)}
.cb357988{--a:-19.3deg;animation-delay:0.60s;stroke:var(--ink)}
.ccfa5df7{--a:-46.4deg;animation-delay:0.72s;stroke:var(--ink)}
.c33ac2e4{--a:-60.3deg;animation-delay:0.84s;stroke:var(--ink)}
.c2198384{margin-top:32px;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,280px),1fr));gap:24px 32px;max-width:860px}
.c69572a2{margin-top:16px;display:grid;grid-template-columns:minmax(0,1fr);gap:24px}
.c52586da{display:block;width:100%;max-width:640px;height:auto}
.c43aae67{fill:var(--curve-alt);stroke:var(--frame)}
.c8c3ba1a{display:grid;gap:12px;min-width:0;max-width:640px}
.c62edc38{margin:32px 0 0;font-size:18px;line-height:28px;text-wrap:pretty}
.c6370f13{margin:16px 0 0;font-size:18px;line-height:28px;text-wrap:pretty}
.c2e5e28a{margin-top:32px;display:flex;flex-wrap:wrap;align-items:center;gap:12px 24px}
.ccdfe6a9{display:inline-flex;align-items:center;gap:12px;padding:12px 24px;min-height:48px;font-size:16px;line-height:24px;font-weight:600;background:var(--tangent-text);color:var(--frame);border-radius:4px;text-decoration:none}
.ccdfe6a9:hover{background:var(--tangent-deep)}
.c0d697be{font-size:15px;line-height:22px;color:var(--muted)}
.cc0e67e5{margin:0;font-family:'IBM Plex Sans Condensed','Arial Narrow',sans-serif;font-size:44px;line-height:48px;font-weight:700}
.cbbf2055{margin-top:32px;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,240px),1fr));gap:16px}
.cb13afe1{background:var(--surface);border-radius:4px;padding:24px;display:grid;gap:8px;align-content:start}
.cf697742{justify-self:start;padding:4px 10px;background:var(--ink);color:var(--frame);border-radius:4px;font-size:13px;line-height:18px;font-weight:600}
.c35a5bf1{margin-top:96px;scroll-margin-top:24px}
.ce3c121a{display:flex;flex-wrap:wrap;gap:16px 24px;align-items:center;padding:20px 0;border-bottom:1px solid var(--grid)}
.c381ed55{width:200px;max-width:100%;flex:none;background:var(--surface);border-radius:4px;overflow:hidden}
.cacb13e1{display:block;width:100%}
.c70b14e3{min-width:0;flex:1 1 280px}
.c796840c{margin:0 0 4px;font-size:15px;line-height:22px;font-weight:600;color:var(--muted)}
.c3a1ebd2{font-size:24px;line-height:30px;font-weight:600;color:var(--ink);text-decoration:none}
.c3a1ebd2:hover{text-decoration:underline}
.cd8c533b{margin:8px 0 0;color:var(--ink);text-wrap:pretty}
.c3d69cc1{margin:8px 0 0;font-size:15px;line-height:22px;color:var(--muted);text-wrap:pretty}
.ccbbd44b{font-size:15px;line-height:22px;color:var(--muted);text-align:right}
/* Sliders two to a row under a tall figure, so the figure and every slider fit on a laptop screen together (slider sweep, 28 October 2026). */
.tt-sl-2{grid-template-columns:repeat(auto-fit,minmax(min(100%,220px),1fr));column-gap:24px;align-items:end}
.tt-sl-2>:not(label){grid-column:1/-1}
