/* 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));
  /* Lighter and darker steps, for neighbouring faces shaded in turn (General topic guide 11). */
  --tangent-wash: color-mix(in srgb, var(--tangent) 14%, var(--frame));
  --tangent-line: color-mix(in srgb, var(--tangent) 30%, var(--frame));
  --tangent-shade: color-mix(in srgb, var(--tangent) 38%, var(--frame));
  --curve-alt-tint: color-mix(in srgb, var(--curve-alt) 25%, var(--frame));
  --curve-alt-wash: color-mix(in srgb, var(--curve-alt) 12%, var(--frame)); /* a plane's fill in 3D figures */
  --curve-alt-line: color-mix(in srgb, var(--curve-alt) 32%, var(--frame)); /* grid lines on that plane */
  --curve-alt-deep: color-mix(in srgb, var(--curve-alt) 43%, var(--frame)); /* the darkest of three shaded regions */
  /* Major lines on graph paper, a step darker than the grid. */
  --grid-strong: color-mix(in srgb, var(--muted) 30%, var(--grid));
  --grid-soft: color-mix(in srgb, var(--muted) 14%, var(--grid));
  --grid-wash: color-mix(in srgb, var(--grid) 50%, var(--frame));
  --muted-soft: color-mix(in srgb, var(--muted) 70%, var(--frame)); /* the exam booklet's mid grey */
  /* 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;
}

/* "white-space: nowrap" keeps a formula and its full stop together. On a
   phone a long one ({z : |z+2-i| <= 5} ∩ …) is wider than the screen, so there
   it may wrap: KaTeX breaks inline maths after relations and operators. */
@media (max-width: 480px) {
  [data-tti-root] span:has(> .katex, > span > .katex) {
    white-space: normal;
  }
}

/* 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);
}

/* Lines through table cells, such as the Hungarian algorithm's covering lines,
   drawn behind the cell's number (convert.php's flat_decls() sets the colour
   and width from the export's striped background). */
.tti-hline,
.tti-vline {
  position: relative;
  z-index: 0;
}

.tti-hline::before,
.tti-vline::after {
  content: "";
  position: absolute;
  z-index: -1;
  background: var(--tti-line);
}

.tti-hline::before {
  left: 0;
  right: 0;
  top: 50%;
  height: var(--tti-line-w, 2px);
  transform: translateY(-50%);
}

.tti-vline::after {
  top: 0;
  bottom: 0;
  left: 50%;
  width: var(--tti-line-w, 2px);
  transform: translateX(-50%);
}

/* ---------- 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);
}

/* "Choose your questions" on past-paper indexes (cu-index.js). */
.ix-choose {
  margin-top: 64px;
}

.ix-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  margin-top: 16px;
}

.ix-chip {
  cursor: pointer;
  min-height: 44px;
  padding: 4px 14px;
  border-radius: var(--radius-sm);
  border: 1px solid var(--muted);
  background: var(--frame);
  color: var(--ink);
  font: 600 var(--text-small-size) / var(--text-small-line) var(--font-sans);
  text-align: left;
}

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

.ix-chip__main {
  display: block;
}

.ix-chip__sub {
  display: block;
  font-weight: 400;
  color: var(--muted);
}

.ix-chip[aria-pressed="true"] .ix-chip__sub,
.ix-chip[aria-selected="true"] .ix-chip__sub {
  color: var(--grid);
}

.ix-chip__num {
  display: inline-block;
  min-width: 40px;
}

.ix-choose__note {
  margin: 16px 0 0;
  max-width: 75ch;
}

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

.ix-chosen {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 16px;
  margin-top: 16px;
  padding: 8px 8px 8px 16px;
  border-radius: var(--radius-sm);
  background: var(--surface);
}

.ix-filters {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  gap: 16px 32px;
  margin-top: 32px;
}

.ix-filter__name {
  display: block;
}

.ix-filters .ix-chips {
  margin-top: 8px;
}

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

.ix-res__guide {
  margin: 16px 0 0;
  font-weight: 500;
}

.ix-res__guide a,
.ix-row__guides a {
  color: var(--ink);
}

.ix-res__paper {
  margin-top: 48px;
}

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

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

.ix-empty {
  margin-top: 32px;
  padding: 32px;
  border-radius: var(--radius-sm);
  background: var(--surface);
}

.ix-empty p {
  margin: 0 0 16px;
}

.ix-row__main {
  flex: 1 1 360px;
  min-width: 0;
}

.ix-row__guides {
  display: flex;
  flex-wrap: wrap;
  gap: 4px 24px;
  margin-top: 8px;
}

.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;
  }
}

/* ---------- Buddy game plan scenes (tools/design-export/gp-buddy.php) ---------- */

.tti-gpb{width:320px;max-width:100%}
.tti-gpb--card{width:100%}
a.gpb-card{grid-template-columns:200px minmax(0,1fr)}
@media (max-width:600px){a.gpb-card{grid-template-columns:132px minmax(0,1fr);gap:16px}}
.tti-gpb .buddy__bar{fill:var(--tangent)}
.tti-gpb .buddy__dot{fill:var(--ink)}
.tti-gpb .buddy__face{fill:var(--frame)}
.gpb-ink{fill:none;stroke:var(--ink)}
.gpb-mut{fill:none;stroke:var(--muted)}
.gpb-grid{fill:none;stroke:var(--grid-strong)}
.gpb-fill{fill:var(--ink)}
.gpb-fill-mut{fill:var(--muted)}
.gpb-paper{fill:var(--frame);stroke:var(--ink)}
.gpb-draw{stroke-dasharray:1 1}
/* g0 */
.gpb-g0-b{animation:gpb-g0-bk 7s infinite}
@keyframes gpb-g0-bk{0%{transform:translate(60px,40.25px)}15%{transform:translate(60px,40.25px);animation-timing-function:ease-out}22%{transform:translate(105px,12.25px);animation-timing-function:ease-in}29%{transform:translate(150px,85.25px)}45%{transform:translate(150px,85.25px);animation-timing-function:ease-out}52%{transform:translate(195px,57.25px);animation-timing-function:ease-in}59%{transform:translate(240px,130.25px)}100%{transform:translate(240px,130.25px)}}
/* g1 */
.gpb-g1-b{animation:gpb-g1-bk 7s infinite}
@keyframes gpb-g1-bk{0%{transform:translate(160px,140px) rotate(15deg)}8%{transform:translate(160px,140px) rotate(15deg);animation-timing-function:ease-in-out}22%{transform:translate(160px,140px) rotate(-48deg);animation-timing-function:ease-in-out}34%{transform:translate(160px,140px) rotate(-12deg);animation-timing-function:ease-in-out}44%{transform:translate(160px,140px) rotate(-32deg);animation-timing-function:ease-in-out}52%{transform:translate(160px,140px) rotate(-26.57deg)}100%{transform:translate(160px,140px) rotate(-26.57deg)}}
.gpb-g1-l{animation:gpb-g1-lk 7s linear infinite}
@keyframes gpb-g1-lk{0%{stroke-dashoffset:1}55%{stroke-dashoffset:1}68%{stroke-dashoffset:0}100%{stroke-dashoffset:0}}
.gpb-g1-r{animation:gpb-g1-rk 7s infinite}
@keyframes gpb-g1-rk{0%{opacity:0}70%{opacity:0}78%{opacity:1}100%{opacity:1}}
/* g2 */
.gpb-g2-s{animation:gpb-g2-sk 7s linear infinite}
@keyframes gpb-g2-sk{0%{stroke-dashoffset:1}4%{stroke-dashoffset:1}36%{stroke-dashoffset:0}100%{stroke-dashoffset:0}}
.gpb-g2-b{animation:gpb-g2-bk 7s infinite}
@keyframes gpb-g2-bk{0%{transform:translate(72px,154.05px) rotate(-19.29deg)}40%{transform:translate(72px,154.05px) rotate(-19.29deg);animation-timing-function:ease-in-out}80%{transform:translate(240px,95.25px) rotate(-19.29deg)}100%{transform:translate(240px,95.25px) rotate(-19.29deg)}}
/* g3 */
.gpb-g3-bar{transform-box:fill-box;transform-origin:50% 100%}
.gpb-g3-r1{animation:gpb-g3-r1k 7s infinite}
@keyframes gpb-g3-r1k{0%{transform:scaleY(0)}10%{transform:scaleY(0);animation-timing-function:ease-in-out}16%{transform:scaleY(1)}100%{transform:scaleY(1)}}
.gpb-g3-r2{animation:gpb-g3-r2k 7s infinite}
@keyframes gpb-g3-r2k{0%{transform:scaleY(0)}26%{transform:scaleY(0);animation-timing-function:ease-in-out}32%{transform:scaleY(1)}100%{transform:scaleY(1)}}
.gpb-g3-r3{animation:gpb-g3-r3k 7s infinite}
@keyframes gpb-g3-r3k{0%{transform:scaleY(0)}42%{transform:scaleY(0);animation-timing-function:ease-in-out}48%{transform:scaleY(1)}100%{transform:scaleY(1)}}
.gpb-g3-r4{animation:gpb-g3-r4k 7s infinite}
@keyframes gpb-g3-r4k{0%{transform:scaleY(0)}58%{transform:scaleY(0);animation-timing-function:ease-in-out}64%{transform:scaleY(1)}100%{transform:scaleY(1)}}
.gpb-g3-b{animation:gpb-g3-bk 7s infinite}
@keyframes gpb-g3-bk{0%{transform:translate(52px,140.25px)}17%{transform:translate(52px,140.25px);animation-timing-function:ease-out}20.5%{transform:translate(77px,104.25px);animation-timing-function:ease-in}24%{transform:translate(102px,130.25px)}33%{transform:translate(102px,130.25px);animation-timing-function:ease-out}36.5%{transform:translate(127px,89.25px);animation-timing-function:ease-in}40%{transform:translate(152px,115.25px)}49%{transform:translate(152px,115.25px);animation-timing-function:ease-out}52.5%{transform:translate(177px,66.75px);animation-timing-function:ease-in}56%{transform:translate(202px,92.75px)}65%{transform:translate(202px,92.75px);animation-timing-function:ease-out}68.5%{transform:translate(227px,33px);animation-timing-function:ease-in}72%{transform:translate(252px,59px)}100%{transform:translate(252px,59px)}}
/* g4 */
.gpb-g4-m{animation:gpb-g4-mk 3s linear infinite}
@keyframes gpb-g4-mk{0%{transform:translate(0,0)}100%{transform:translate(-34px,0)}}
.gpb-g4-b{animation:gpb-g4-bk 1.6s ease-in-out infinite alternate}
@keyframes gpb-g4-bk{0%{transform:translate(150px,92px) rotate(-5deg) translate(0,-54.75px)}100%{transform:translate(150px,92px) rotate(5deg) translate(0,-54.75px)}}
/* g5 */
.gpb-g5-c1{animation:gpb-g5-c1k 7s infinite}
@keyframes gpb-g5-c1k{0%{transform:translate(0,-60px);opacity:0}10%{transform:translate(0,-60px);opacity:0;animation-timing-function:ease-in}10.5%{opacity:1}13%{transform:translate(0,0);opacity:1}100%{transform:translate(0,0);opacity:1}}
.gpb-g5-c2{animation:gpb-g5-c2k 7s infinite}
@keyframes gpb-g5-c2k{0%{transform:translate(0,-60px);opacity:0}24%{transform:translate(0,-60px);opacity:0;animation-timing-function:ease-in}24.5%{opacity:1}27%{transform:translate(0,0);opacity:1}100%{transform:translate(0,0);opacity:1}}
.gpb-g5-c3{animation:gpb-g5-c3k 7s infinite}
@keyframes gpb-g5-c3k{0%{transform:translate(0,-60px);opacity:0}36%{transform:translate(0,-60px);opacity:0;animation-timing-function:ease-in}36.5%{opacity:1}39%{transform:translate(0,0);opacity:1}100%{transform:translate(0,0);opacity:1}}
.gpb-g5-c4{animation:gpb-g5-c4k 7s infinite}
@keyframes gpb-g5-c4k{0%{transform:translate(0,-60px);opacity:0}46%{transform:translate(0,-60px);opacity:0;animation-timing-function:ease-in}46.5%{opacity:1}49%{transform:translate(0,0);opacity:1}100%{transform:translate(0,0);opacity:1}}
.gpb-g5-c5{animation:gpb-g5-c5k 7s infinite}
@keyframes gpb-g5-c5k{0%{transform:translate(0,-60px);opacity:0}54%{transform:translate(0,-60px);opacity:0;animation-timing-function:ease-in}54.5%{opacity:1}57%{transform:translate(0,0);opacity:1}100%{transform:translate(0,0);opacity:1}}
.gpb-g5-c6{animation:gpb-g5-c6k 7s infinite}
@keyframes gpb-g5-c6k{0%{transform:translate(0,-60px);opacity:0}61%{transform:translate(0,-60px);opacity:0;animation-timing-function:ease-in}61.5%{opacity:1}64%{transform:translate(0,0);opacity:1}100%{transform:translate(0,0);opacity:1}}
.gpb-g5-c7{animation:gpb-g5-c7k 7s infinite}
@keyframes gpb-g5-c7k{0%{transform:translate(0,-60px);opacity:0}67%{transform:translate(0,-60px);opacity:0;animation-timing-function:ease-in}67.5%{opacity:1}70%{transform:translate(0,0);opacity:1}100%{transform:translate(0,0);opacity:1}}
.gpb-g5-c8{animation:gpb-g5-c8k 7s infinite}
@keyframes gpb-g5-c8k{0%{transform:translate(0,-60px);opacity:0}72%{transform:translate(0,-60px);opacity:0;animation-timing-function:ease-in}72.5%{opacity:1}75%{transform:translate(0,0);opacity:1}100%{transform:translate(0,0);opacity:1}}
.gpb-g5-b{animation:gpb-g5-bk 7s infinite}
@keyframes gpb-g5-bk{0%{transform:translate(150px,150.25px)}13%{transform:translate(150px,150.25px);animation-timing-function:ease-out}14.5%{transform:translate(150px,139.25px)}27%{transform:translate(150px,139.25px);animation-timing-function:ease-out}28.5%{transform:translate(150px,128.25px)}39%{transform:translate(150px,128.25px);animation-timing-function:ease-out}40.5%{transform:translate(150px,117.25px)}49%{transform:translate(150px,117.25px);animation-timing-function:ease-out}50.5%{transform:translate(150px,106.25px)}57%{transform:translate(150px,106.25px);animation-timing-function:ease-out}58.5%{transform:translate(150px,95.25px)}64%{transform:translate(150px,95.25px);animation-timing-function:ease-out}65.5%{transform:translate(150px,84.25px)}70%{transform:translate(150px,84.25px);animation-timing-function:ease-out}71.5%{transform:translate(150px,73.25px)}75%{transform:translate(150px,73.25px);animation-timing-function:ease-out}76.5%{transform:translate(150px,62.25px)}100%{transform:translate(150px,62.25px)}}
/* g6 */
.gpb-g6-e0{animation:gpb-g6-e0k 7s linear infinite}
@keyframes gpb-g6-e0k{0%{stroke-dashoffset:1}8%{stroke-dashoffset:1}22%{stroke-dashoffset:0}100%{stroke-dashoffset:0}}
.gpb-g6-e1{animation:gpb-g6-e1k 7s linear infinite}
@keyframes gpb-g6-e1k{0%{stroke-dashoffset:1}26%{stroke-dashoffset:1}40%{stroke-dashoffset:0}100%{stroke-dashoffset:0}}
.gpb-g6-e2{animation:gpb-g6-e2k 7s linear infinite}
@keyframes gpb-g6-e2k{0%{stroke-dashoffset:1}44%{stroke-dashoffset:1}58%{stroke-dashoffset:0}100%{stroke-dashoffset:0}}
.gpb-g6-e3{animation:gpb-g6-e3k 7s linear infinite}
@keyframes gpb-g6-e3k{0%{stroke-dashoffset:1}62%{stroke-dashoffset:1}76%{stroke-dashoffset:0}100%{stroke-dashoffset:0}}
.gpb-g6-b{animation:gpb-g6-bk 7s linear infinite}
@keyframes gpb-g6-bk{0%{transform:translate(55px,114.25px)}8%{transform:translate(55px,114.25px)}22%{transform:translate(110px,24.25px)}26%{transform:translate(110px,24.25px)}40%{transform:translate(200px,14.25px)}44%{transform:translate(200px,14.25px)}58%{transform:translate(255px,104.25px)}62%{transform:translate(255px,104.25px)}76%{transform:translate(155px,139.25px)}100%{transform:translate(155px,139.25px)}}
/* g7 */
.gpb-g7-e0{animation:gpb-g7-e0k 7s linear infinite}
@keyframes gpb-g7-e0k{0%{stroke-dashoffset:1}8%{stroke-dashoffset:1}24%{stroke-dashoffset:0}100%{stroke-dashoffset:0}}
.gpb-g7-e1{animation:gpb-g7-e1k 7s linear infinite}
@keyframes gpb-g7-e1k{0%{stroke-dashoffset:1}30%{stroke-dashoffset:1}46%{stroke-dashoffset:0}100%{stroke-dashoffset:0}}
.gpb-g7-e2{animation:gpb-g7-e2k 7s linear infinite}
@keyframes gpb-g7-e2k{0%{stroke-dashoffset:1}52%{stroke-dashoffset:1}68%{stroke-dashoffset:0}100%{stroke-dashoffset:0}}
.gpb-g7-b{animation:gpb-g7-bk 7s linear infinite}
@keyframes gpb-g7-bk{0%{transform:translate(40px,83.25px)}8%{transform:translate(40px,83.25px)}24%{transform:translate(105px,28.25px)}30%{transform:translate(105px,28.25px)}46%{transform:translate(180px,28.25px)}52%{transform:translate(180px,28.25px)}68%{transform:translate(258px,83.25px)}100%{transform:translate(258px,83.25px)}}
/* g8 */
.gpb-g8-b{animation:gpb-g8-bk 7s infinite}
@keyframes gpb-g8-bk{0%{transform:translate(150px,105px) rotate(-10deg);animation-timing-function:ease-in-out}15%{transform:translate(150px,105px) rotate(12deg);animation-timing-function:ease-in-out}28%{transform:translate(150px,105px) rotate(-4deg);animation-timing-function:ease-in-out}40%{transform:translate(150px,105px) rotate(10deg);animation-timing-function:ease-in-out}50%{transform:translate(150px,105px) rotate(6deg);animation-timing-function:ease-in-out}58%{transform:translate(150px,105px) rotate(8deg)}100%{transform:translate(150px,105px) rotate(8deg)}}

.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}
.cb12e31a{display:flex;flex-wrap:wrap;align-items:center;gap:8px 32px;font-size:15px;line-height:22px}
.c56551f1{color:var(--muted)}
.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}
.cb4f734b{margin-top:32px;background:var(--surface);border-radius:4px;display:flex;justify-content:center;padding:24px 16px}
.cd7b4b16{margin:24px 0 0;font-size:22px;line-height:32px;text-wrap:pretty}
.c672544a{margin-top:32px;border:2px solid var(--ink);border-radius:4px;padding:20px 24px;display:grid;gap:8px;grid-template-columns:minmax(0,1fr)}
.ccea57bd{font-size:15px;line-height:22px;font-weight:600}
.cff3441d{margin: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)}
.c168299f{margin-top:96px;max-width:900px}
.c40b045e{margin:0;font-size:15px;line-height:22px;font-weight:600;color:var(--muted)}
.c4aa5e1e{margin:4px 0 0;font-family:'IBM Plex Sans Condensed','Arial Narrow',sans-serif;font-size:44px;line-height:48px;font-weight:700;text-wrap:balance}
.c4b33861{margin:16px 0 0;max-width:75ch;font-size:18px;line-height:28px;text-wrap:pretty}
.cd50754b{margin-top:32px;max-width:900px;overflow-x:auto}
.c9e7adc2{width:100%;border-collapse:collapse;font-size:17px;line-height:26px}
.cb8d2176{border-bottom:1px solid var(--ink);text-align:left}
.c8439444{padding:8px 16px 8px 0px;font-weight:600;vertical-align:bottom;text-align:left}
.c8afeb2b{padding:8px 16px 8px 16px;font-weight:600;vertical-align:bottom;text-align:left}
.c91b4654{padding:12px 16px 12px 0px;vertical-align:top;text-align:left;font-weight:600}
.cc5fe5e3{padding:12px 16px 12px 16px;vertical-align:top;text-align:left}
.c3d69cc1{margin:8px 0 0;font-size:15px;line-height:22px;color:var(--muted);text-wrap:pretty}
.c73a3907{margin-top:32px;background:var(--surface);border-radius:4px;padding:24px 32px 32px;max-width:900px}
.caa12079{margin:0;font-size:18px;line-height:28px;font-weight:600}
.c4ffe2f2{margin-top:32px;border-top:1px solid var(--grid);padding-top:16px;max-width:900px}
.c6d7a4ac{margin:8px 0 0;padding:0;list-style:none;display:grid;gap:4px;font-size:16px;line-height:24px;grid-template-columns:minmax(0,1fr)}
.c583111a{margin:4px 0 0;font-size:24px;line-height:30px;font-weight:600}
.c7fee859{margin:20px 0 0;padding:0;list-style:none;display:grid;gap:12px;grid-template-columns:minmax(0,1fr)}
.c570c46f{display:grid;grid-template-columns:32px minmax(0,1fr);gap:12px;align-items:start;padding:12px 16px;background:var(--frame);border-radius:4px}
.ce8c1623{font-weight:600;color:var(--muted)}
.cbbb1725{text-wrap:pretty}
.ce61f33e{font-weight:600}
.cbd86478{white-space:nowrap}
.c148e0a6{margin-top:24px;max-width:900px;display:flex;gap:16px;align-items:baseline;border-top:1px solid var(--ink);padding-top:16px}
.c837d595{flex:none;font-size:15px;line-height:22px;font-weight:600}
.c14cd104{margin:40px 0 0;font-size:24px;line-height:30px;font-weight:600;max-width:75ch}
.c00d0716{margin:16px 0 0;padding:0;list-style:none;display:grid;gap:8px;max-width:75ch;font-size:18px;line-height:28px;grid-template-columns:minmax(0,1fr)}
.cfa13325{display:flex;gap:12px}
.c0ec2c72{flex:none;width:20px;font-weight:600}
.c70b2a0d{min-width:0;text-wrap:pretty}
.ce3330cd{margin-top:48px;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,400px),1fr));gap:24px;align-items:start}
.cf66d9ac{background:var(--surface);border-radius:4px;padding:clamp(16px,5vw,32px);min-width:0}
.c696bb22{display:grid;justify-items:start;gap:8px;grid-template-columns:minmax(0,1fr)}
.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}
.c69c3489{margin:8px 0 0;font-size:16px;line-height:24px;color:var(--muted);text-wrap:pretty}
.cf3529a0{margin:24px 0 0;padding:0;list-style:none;display:grid;grid-template-columns:minmax(0,1fr)}
.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}
.c069a069{padding-top:4px;font-size:18px;line-height:28px;text-wrap:pretty;min-width:0}
.ccb71f02{display:grid;grid-template-columns:36px minmax(0,1fr);gap:16px;align-items:start;padding:16px 0;border-top:1px solid var(--grid)}
.ccec0e13{margin-top:96px;border-top:1px solid var(--grid);padding-top:32px;display:flex;flex-wrap:wrap;gap:16px 32px;justify-content:space-between;align-items:center;font-size:15px;line-height:22px;color:var(--muted)}
.ce8c9c7e{margin:32px 0 0;max-width:75ch;font-size:13px;line-height:18px;color:var(--muted)}
.c918382d{margin:16px 0 0;max-width:75ch;font-size:13px;line-height:18px;color:var(--muted)}
.cf1fcdde{margin-top:32px;border:2px solid var(--ink);border-radius:4px;padding:24px 32px 32px;max-width:900px}
.cfe88d03{margin:8px 0 0;font-family:'IBM Plex Sans Condensed','Arial Narrow',sans-serif;font-size:clamp(26px,3.6vw,36px);line-height:1.15;font-weight:600;text-wrap:balance}
.c2b4ea74{margin-top:24px;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,260px),1fr));gap:24px}
.c19c25d6{min-width:0}
.ccd94111{margin:0;font-weight:600}
.c8b74bc9{margin:32px 0 0;max-width:420px}
.c20a3c42{display:block;width:100%;height:auto}
.cf2b650a{fill:var(--frame)}
.c5cfb369{fill:var(--surface)}
.c9ea6e95{stroke:var(--muted)}
.c0621a2e{fill:var(--ink)}
.c635b5b0{fill:var(--muted)}
.c4c9bac6{stroke:var(--tangent)}
.c05fbec6{margin-top:8px;font-size:15px;line-height:22px;color:var(--muted);text-wrap:pretty}
.c3b1e29d{margin:32px 0 0;max-width:560px}
.c966ce96{stroke:var(--ink)}
.cb64d76e{fill:var(--tangent)}
.c36ed990{margin:16px 0 0;max-width:min(100%,860px);min-width:0;overflow-x:auto;overflow-y:hidden;font-size:20px;line-height:30px}
.c57299ef{fill:var(--tangent-text)}
.c1f993c8{margin:32px 0 0;max-width:480px}
.c16d9d38{stroke:var(--muted-soft)}
.c3259a9b{fill:var(--grid)}
.c53ab169{margin-top:32px;max-width:1000px;overflow-x:auto}
.c7cb60f2{margin:16px 0 0;max-width:75ch;font-size:15px;line-height:22px;color:var(--muted);text-wrap:pretty}
.cac7dd5f{margin-top:32px;max-width:560px;overflow-x:auto}
.cff833e1{padding:12px 16px 12px 0px;vertical-align:top;text-align:left}
.cbc00138{margin:32px 0 0;max-width:520px}
.c04162b2{fill:var(--frame);stroke:var(--ink)}
.cbeb7b59{margin:32px 0 0;max-width:600px}
.c766f0b9{fill:var(--frame);stroke:var(--frame)}
.ca5a56fb{fill:var(--frame);stroke:var(--tangent)}
.cc313b73{fill:var(--tangent-tint)}
.c4ada51b{overflow-x:auto}
.cde38b29{min-width:420px}
.cd2469d4{stroke:var(--grid)}
.c09b3626{fill:var(--ink);stroke:var(--frame)}
.ce6af8d0{fill:var(--muted);stroke:var(--frame)}
.cf88ed21{fill:var(--tangent);stroke:var(--frame)}
.cd317a43{margin:32px 0 0;max-width:620px}
.cf486f55{stroke:var(--curve-alt)}
.cdba24d0{fill:var(--curve-alt)}
.c43aae67{fill:var(--curve-alt);stroke:var(--frame)}
.cebd1fff{padding:8px 16px 8px 16px;font-weight:600;vertical-align:bottom;text-align:right}
.c87f45eb{padding:12px 16px 12px 16px;vertical-align:top;text-align:right}
.c5379690{fill:var(--tangent-tint);stroke:var(--tangent)}
.c787b6a1{margin-top:16px;display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr));gap:16px;max-width:900px;align-items:start}
.ce097100{background:var(--surface);border-radius:4px;padding:24px;min-width:0}
.cde5102b{margin:12px 0 0;padding:0;list-style:none;display:grid;gap:8px;font-size:17px;line-height:26px;grid-template-columns:minmax(0,1fr)}
.cc7ba44e{display:flex;gap:10px}
.cfbdfa28{flex:none;font-weight:600}
.c7545ffa{border:2px solid var(--ink);border-radius:4px;padding:24px;min-width:0}
.c6370f13{margin:16px 0 0;font-size:18px;line-height:28px;text-wrap:pretty}
.c7f5f66e{margin-top:32px;display:grid;gap:48px;max-width:900px;grid-template-columns:minmax(0,1fr)}
.c82caaea{border-top:1px solid var(--ink);padding-top:16px}
.c05767bc{margin:0;font-size:15px;line-height:22px;color:var(--muted)}
.c0c7db9e{margin-top:8px;font-size:18px;line-height:28px}
.cc218e5d{margin-top:16px;display:flex;flex-wrap:wrap;gap:8px}
.cc64635d{cursor:pointer;font-family:inherit;min-height:44px;padding:8px 14px;border-radius:4px;color:var(--ink);font-size:15px;line-height:22px;text-align:left}
.c1f078dd{margin:16px 0 0;background:var(--surface);padding:16px;font-size:18px;line-height:28px}
.c6e06c38{margin:24px 0 0;font-size:15px;line-height:22px;font-weight:600;color:var(--muted)}
.cf6d939d{margin-top:32px;border-top:1px solid var(--ink);max-width:900px}
.cca28922{display:grid;grid-template-columns:96px minmax(0,1fr);gap:24px;align-items:center;padding:24px 0;border-bottom:1px solid var(--grid);color:var(--ink);text-decoration:none}
.cca28922:hover{background:var(--surface)}
.c0d81a5b{background:var(--surface);border-radius:4px;padding:12px;display:flex;justify-content:center}
.cf673b01{margin:8px 0 0;font-size:16px;line-height:24px;text-wrap:pretty}
.c878bb2f{margin:4px 0 0;font-size:15px;line-height:22px;color:var(--muted);text-wrap:pretty}
