@font-face { font-family: "Friz Quad"; src: url("fonts/friz-quad.woff2") format("woff2"); font-weight: 400; font-style: normal; font-display: swap; }
/* Layout: a printer's job docket. A narrow left margin carries the slug (labels, job facts);
   the work and the writing run in the main column. The registration mark is the one device:
   finding the centre, borrowed from the press. */
:root {
  --paper: #f2f3f1;
  --ink: #161817;
  --muted: #5a605c;
  --rule: #c9cdc9;
  --plate: #e4e6e3;
  --accent: #00708f;
  --cyan: #00aeef; /* process cyan, 100% C */
  --black: #000000; /* 100% K */
  --display: "Friz Quad", "Albertus", "Optima", Georgia, serif;
  --body: "Golos Text", "Helvetica Neue", Arial, sans-serif;
  --measure: 36rem;
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --paper: #121413; --ink: #e8ebe8; --muted: #9aa19c; --rule: #343a37; --plate: #1d201e; --accent: #5cc3df; --black: #e8ebe8;
    color-scheme: dark;
  }
}
:root[data-theme="dark"] {
  --paper: #121413; --ink: #e8ebe8; --muted: #9aa19c; --rule: #343a37; --plate: #1d201e; --accent: #5cc3df; --black: #e8ebe8;
  color-scheme: dark;
}

* { box-sizing: border-box; }
body {
  background: var(--paper); color: var(--ink);
  font: 400 1.0625rem/1.6 var(--body);
  -webkit-font-smoothing: antialiased;
}
a { color: inherit; text-decoration-color: var(--rule); text-underline-offset: 0.2em; }
a:hover { color: var(--accent); text-decoration-color: currentColor; }
a:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }

.wrap {
  max-width: 76rem; margin: 0 auto;
  padding-left: max(16px, env(safe-area-inset-left, 0px));
  padding-right: max(16px, env(safe-area-inset-right, 0px));
}
@media (min-width: 720px) {
  .wrap { padding-left: max(40px, env(safe-area-inset-left, 0px)); padding-right: max(40px, env(safe-area-inset-right, 0px)); }
}

/* Labels: small caps from the body face, tracked like a slug line */
.label {
  font: 500 0.72rem/1.4 var(--body); letter-spacing: 0.12em; text-transform: uppercase; color: var(--muted);
}

/* Header */
.site-head { border-bottom: 1px solid var(--rule); }
.site-head .wrap { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 12px 32px; padding-block: 18px; }
.name { display: flex; align-items: center; gap: 12px; text-decoration: none; font: 600 0.95rem/1 var(--body); letter-spacing: 0.01em; }
.reg { width: 22px; height: 22px; flex: none; color: var(--ink); }
.nav { display: flex; gap: 24px; flex-wrap: wrap; }
.nav a { text-decoration: none; font-size: 0.92rem; color: var(--muted); }
.nav a[aria-current] { color: var(--ink); }
.draft { font: 500 0.72rem/1 var(--body); letter-spacing: 0.12em; text-transform: uppercase; color: var(--accent); }

/* Docket grid: margin column + main column */
.docket { display: grid; gap: 12px 48px; }
@media (min-width: 900px) {
  .docket { grid-template-columns: 11rem minmax(0, 1fr); }
}
.docket > * { min-width: 0; }

/* Opening */
.opening { padding-block: 56px 32px; }
.opening .label { padding-top: 0.6rem; }
h1 {
  font: 400 clamp(2.2rem, 5.4vw, 4.3rem)/1.08 var(--display);
  letter-spacing: -0.005em; margin: 0; text-wrap: balance; max-width: 15ch;
}
h1 em, .thesis em { font-style: normal; color: var(--muted); }

/* Fact strip as a docket table */
.facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(10.5rem, 1fr)); gap: 0; border-top: 1px solid var(--ink); margin: 36px 0 0; }
.facts div { padding: 12px 16px 14px 0; border-bottom: 1px solid var(--rule); }
.facts dt { margin-bottom: 4px; }
.facts dd { margin: 0; font-size: 0.95rem; line-height: 1.45; }

/* Figures */
figure { margin: 0; }
figure img { display: block; width: 100%; height: auto; max-width: 100%; background: var(--plate); }
figcaption { margin-top: 10px; font-size: 0.82rem; line-height: 1.45; color: var(--muted); max-width: 40rem; }
.hero { padding-block: 8px 72px; }
.pair { display: grid; gap: 16px; grid-template-columns: 1fr; }
@media (min-width: 700px) { .pair { grid-template-columns: 1fr 1fr; } .pair.wide-left { grid-template-columns: 3fr 2fr; } .pair.wide-right { grid-template-columns: 2fr 3fr; } }
.pair > figure { min-width: 0; }

/* Running text */
.section { padding-block: 0 56px; }
.section .label { padding-top: 0.45rem; }
.prose { max-width: var(--measure); }
.prose p { margin: 0 0 1em; }
.prose p:last-child { margin-bottom: 0; }
.lede { font: 400 clamp(1.35rem, 2.4vw, 1.7rem)/1.35 var(--display); letter-spacing: -0.005em; text-wrap: pretty; }
.quote-line { font-family: var(--display); letter-spacing: 0.005em; }

.figs { padding-block: 0 72px; display: grid; gap: 16px; }

/* Decisions */
.decisions { border-top: 1px solid var(--ink); padding-top: 28px; margin-bottom: 72px; }
.decision { display: grid; gap: 20px 48px; padding-block: 28px 44px; border-bottom: 1px solid var(--rule); }
.decision:last-child { border-bottom: 0; }
@media (min-width: 900px) { .decision { grid-template-columns: 11rem minmax(0, 1fr); } }
.decision > * { min-width: 0; }
.decision h3 { font: 400 clamp(1.5rem, 2.8vw, 2.1rem)/1.15 var(--display); margin: 0 0 12px; letter-spacing: 0; text-wrap: balance; }
.decision .num { font: 400 2.6rem/1 var(--display); color: var(--muted); font-variant-numeric: lining-nums; }
.decision .body { display: grid; gap: 24px; }

/* Close */
.after { border-top: 1px solid var(--ink); padding-block: 28px 64px; }
.next { border-top: 1px solid var(--rule); }
.next a { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; gap: 8px 24px; padding-block: 32px 40px; text-decoration: none; }
.next .t { font: 400 clamp(1.6rem, 3.6vw, 2.6rem)/1.1 var(--display); letter-spacing: 0; }
.next a:hover .t { color: var(--accent); }
.site-foot { border-top: 1px solid var(--rule); }
.site-foot .wrap { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 8px 24px; padding-block: 24px 40px; font-size: 0.85rem; color: var(--muted); }

@media (prefers-reduced-motion: no-preference) {
  .reg line { transition: transform 0.4s ease; }
  .name:hover .reg line:first-child { transform: translateX(-2px); }
  .name:hover .reg line:last-child { transform: translateY(-2px); }
}

/* ---- Homepage ---- */
.intro { padding-block: 64px 56px; }
.intro .label { padding-top: 0.7rem; }
.thesis {
  font: 400 clamp(1.95rem, 4.6vw, 3.7rem)/1.1 var(--display);
  letter-spacing: -0.005em; margin: 0; text-wrap: balance; max-width: 18ch;
}
.intro .prose { margin-top: 28px; color: var(--muted); }
.intro .prose p { font-size: 1.12rem; }

.band { border-top: 1px solid var(--ink); padding-block: 22px 72px; }
.band-head { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; gap: 8px 24px; margin-bottom: 24px; }

.tiles { list-style: none; margin: 0; padding: 0; display: grid; gap: 40px 24px; grid-template-columns: 1fr; }
@media (min-width: 640px) { .tiles { grid-template-columns: 1fr 1fr; } }
@media (min-width: 1040px) { .tiles.three { grid-template-columns: repeat(3, 1fr); } }
.tile { min-width: 0; }
.tile a, .tile .tile-inner { display: grid; gap: 14px; text-decoration: none; color: inherit; }
.tile .frame { aspect-ratio: 4 / 3; max-width: 100%; overflow: hidden; background: var(--plate); }
.tile img { width: 100%; height: 100%; object-fit: cover; display: block; }
@media (prefers-reduced-motion: no-preference) {
  .tile img { transition: transform 0.7s cubic-bezier(.2,.7,.2,1); }
  .tile a:hover img { transform: scale(1.025); }
}
.tile .meta { display: flex; justify-content: space-between; gap: 12px; align-items: baseline; border-top: 1px solid var(--rule); padding-top: 10px; }
.tile .n { font-variant-numeric: tabular-nums; }
.tile h3 { font: 400 1.55rem/1.15 var(--display); letter-spacing: 0; margin: 0; }
.tile p { margin: 0; color: var(--muted); font-size: 0.98rem; line-height: 1.5; max-width: 34rem; }
.tile a:hover h3 { color: var(--accent); }
.status { color: var(--muted); }
.tile a .status { color: var(--accent); }

.approach-teaser .prose p { font: 400 clamp(1.3rem, 2.3vw, 1.65rem)/1.38 var(--display); }
.more { display: inline-block; margin-top: 18px; font-weight: 500; }
.about-short .prose p + p { margin-top: 1em; }
.contact-line { font: 400 clamp(1.6rem, 3.4vw, 2.4rem)/1.2 var(--display); letter-spacing: 0; margin: 0; user-select: all; overflow-wrap: anywhere; }

/* Main titles set in capitals, as on carved lettering */
h1, .thesis { text-transform: uppercase; letter-spacing: 0.02em; line-height: 1.1; }
h1 { font-size: clamp(2rem, 4.8vw, 3.8rem); max-width: 16ch; }
.thesis { font-size: clamp(1.75rem, 4vw, 3.2rem); max-width: 22ch; }

/* Header name in the display face, capitals */
.name { font: 400 1rem/1 var(--display); text-transform: uppercase; letter-spacing: 0.06em; }
/* "I find it" in process cyan */
.thesis em { color: var(--cyan); }

/* Main titles: tighter tracking and leading, larger */
h1, .thesis { letter-spacing: -0.005em; line-height: 0.98; }
h1 { font-size: clamp(2.3rem, 5.8vw, 4.6rem); max-width: 15ch; }
.thesis { font-size: clamp(2.1rem, 5.2vw, 4.2rem); max-width: 20ch; }
/* "I find it": ink type with a process-cyan underline stroke */
.thesis em {
  color: var(--ink);
  text-decoration: underline; text-decoration-color: var(--cyan);
  text-decoration-thickness: 0.14em; text-underline-offset: 0.06em; text-decoration-skip-ink: none;
}

/* Larger still; thinner cyan stroke */
h1 { font-size: clamp(2.5rem, 6.6vw, 5.4rem); }
.thesis { font-size: clamp(2.3rem, 6vw, 5rem); }
.thesis em { text-decoration-thickness: 0.09em; }

/* Intro paragraph: 100% black, balanced rag */
.intro .prose { color: var(--black); }
.intro .prose p { text-wrap: pretty; }

/* Right-hand crop mark closes the header, mirroring the left */
.nav { align-items: center; }
.reg-r { margin-left: 8px; }
@media (prefers-reduced-motion: no-preference) {
  .nav:hover .reg-r line:first-child { transform: translateX(2px); }
  .nav:hover .reg-r line:last-child { transform: translateY(-2px); }
}

/* Crop marks are hidden on phones */
@media (max-width: 640px) { .reg { display: none; } }

/* Tighter tracking across everything set in Friz */
h1, .thesis, .tile h3, .decision h3, .decision .num, .next .t, .contact-line { letter-spacing: -0.02em; }
.lede, .quote-line, .approach-teaser .prose p { letter-spacing: -0.01em; }
.name { letter-spacing: 0.03em; }

/* Crop marks sit outside the trim: their trim lines align with the content edges,
   so headlines and copy never start outside the left mark */
.reg { width: 22px; height: 22px; }
.name .reg { margin-left: calc(-22px * 17 / 24); }
.reg-r { margin-left: 8px; margin-right: calc(-22px * 17 / 24); }

/* Everything sits inside the crop marks with a clear margin.
   The header's crop marks mark the trim; all content is inset from it. */
:root { --inset: clamp(20px, 3.4vw, 48px); }
main .wrap, .site-foot .wrap {
  padding-left: calc(max(16px, env(safe-area-inset-left, 0px)) + var(--inset));
  padding-right: calc(max(16px, env(safe-area-inset-right, 0px)) + var(--inset));
}
@media (min-width: 720px) {
  main .wrap, .site-foot .wrap {
    padding-left: calc(max(40px, env(safe-area-inset-left, 0px)) + var(--inset));
    padding-right: calc(max(40px, env(safe-area-inset-right, 0px)) + var(--inset));
  }
}
/* Header text inset by the same margin from each mark's trim line */
.name { gap: calc(var(--inset) - 22px * 7 / 24); }
.reg-r { margin-left: calc(var(--inset) - 22px * 7 / 24); }
/* On phones the marks are hidden, so the header takes the inset directly */
@media (max-width: 640px) {
  .site-head .wrap {
    padding-left: calc(max(16px, env(safe-area-inset-left, 0px)) + var(--inset));
    padding-right: calc(max(16px, env(safe-area-inset-right, 0px)) + var(--inset));
  }
}

/* T2: Friz in sentence case, tighter leading */
.lede, .approach-teaser .prose p { line-height: 1.2; }
.decision h3, .tile h3 { line-height: 1.05; }
.next .t { line-height: 1.02; }
.contact-line { line-height: 1.1; }

/* T2 sizes up, to bridge the step between the titles and body copy */
.lede, .approach-teaser .prose p { font-size: clamp(1.6rem, 3vw, 2.3rem); }
.decision h3 { font-size: clamp(1.8rem, 3.4vw, 2.6rem); }
.tile h3 { font-size: clamp(1.6rem, 2.4vw, 1.9rem); }
.next .t { font-size: clamp(1.9rem, 4vw, 3rem); }
.contact-line { font-size: clamp(1.9rem, 3.8vw, 2.8rem); }

/* T2 leading closed up further */
.lede, .approach-teaser .prose p { line-height: 1.1; }
.decision h3, .tile h3 { line-height: 0.98; }
.next .t { line-height: 0.96; }
.contact-line { line-height: 1.02; }

/* T2 tracking tightened (T1 titles unchanged) */
.lede, .approach-teaser .prose p { letter-spacing: -0.025em; }
.decision h3, .tile h3, .next .t, .contact-line { letter-spacing: -0.03em; }

/* Full-bleed hero: the one element allowed past the crop marks */
.bleed { margin: 8px 0 72px; }
.bleed img { display: block; width: 100%; height: auto; max-height: 88vh; object-fit: cover; background: var(--plate); }
.bleed figcaption { margin-top: 10px; }
main .bleed figcaption.wrap { max-width: 76rem; margin-inline: auto; }

/* Three-up image row */
@media (min-width: 700px) { .pair.three-up { grid-template-columns: repeat(3, 1fr); } }

/* Client quote */
.pull { margin: 0; max-width: 44rem; }
.pull p { font: 400 clamp(1.4rem, 2.6vw, 1.95rem)/1.18 var(--display); letter-spacing: -0.02em; margin: 0 0 16px; text-wrap: pretty; }
.pull p::before { content: "“"; } .pull p::after { content: "”"; }

/* Rows of images share one height: each figure grows in proportion to its image's
   aspect ratio, so captions line up whatever the shapes. Stacks on phones. */
.pair { display: flex; gap: 16px; align-items: flex-start; }
.pair > figure { flex: var(--r, 1) 1 0; min-width: 0; }
@media (max-width: 699px) {
  .pair { flex-direction: column; }
  .pair > figure { flex: none; width: 100%; }
}

/* Independent work: one featured tile across both columns, two below */
.tiles.feature-first { grid-template-columns: 1fr; }
@media (min-width: 640px) { .tiles.feature-first { grid-template-columns: 1fr 1fr; } }
.tile.feature { grid-column: 1 / -1; }
.tile.feature .frame { aspect-ratio: 16 / 9; }
.tile.feature h3 { font-size: clamp(1.9rem, 3.2vw, 2.6rem); }

/* Registration target at the centre of the header: the page's true centre.
   K plate in ink; on load, C, M and Y start slightly out of register and pull into line. */
.site-head { position: relative; }
.site-head::before, .site-head::after {
  content: ""; position: absolute; left: 50%; top: 50%;
  width: 34px; height: 34px; margin: -17px 0 0 -17px;
  pointer-events: none; display: none;
}
.site-head::after {
  background: var(--ink);
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.15'%3E%3Ccircle cx='12' cy='12' r='7'/%3E%3Ccircle cx='12' cy='12' r='3.5'/%3E%3Cpath d='M12 0v24M0 12h24'/%3E%3C/svg%3E") center / 26px 26px no-repeat;
          mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.15'%3E%3Ccircle cx='12' cy='12' r='7'/%3E%3Ccircle cx='12' cy='12' r='3.5'/%3E%3Cpath d='M12 0v24M0 12h24'/%3E%3C/svg%3E") center / 26px 26px no-repeat;
}
.site-head::before {
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2300aeef' stroke-width='1.15'%3E%3Ccircle cx='12' cy='12' r='7'/%3E%3Ccircle cx='12' cy='12' r='3.5'/%3E%3Cpath d='M12 0v24M0 12h24'/%3E%3C/svg%3E"),
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ec008c' stroke-width='1.15'%3E%3Ccircle cx='12' cy='12' r='7'/%3E%3Ccircle cx='12' cy='12' r='3.5'/%3E%3Cpath d='M12 0v24M0 12h24'/%3E%3C/svg%3E"),
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffd400' stroke-width='1.15'%3E%3Ccircle cx='12' cy='12' r='7'/%3E%3Ccircle cx='12' cy='12' r='3.5'/%3E%3Cpath d='M12 0v24M0 12h24'/%3E%3C/svg%3E");
  background-size: 26px 26px; background-repeat: no-repeat; background-position: center;
  opacity: 0;
}
@media (min-width: 900px) {
  .site-head::before, .site-head::after { display: block; }
}
@media (min-width: 900px) and (prefers-reduced-motion: no-preference) {
  .site-head::before { animation: register 1.5s cubic-bezier(.2,.7,.2,1) 0.25s both; }
}
@keyframes register {
  0%   { opacity: 1; background-position: calc(50% - 3px) calc(50% + 1px), calc(50% + 2.5px) calc(50% - 2.5px), calc(50% + 1px) calc(50% + 3px); }
  65%  { opacity: 1; background-position: center, center, center; }
  100% { opacity: 0; background-position: center, center, center; }
}

/* Colour bar down the left of the opening, as on an uncut press sheet.
   It sits outside the trim, in the same column as the crop mark's horizontal arm. */
.intro, .opening { position: relative; --trim: max(16px, env(safe-area-inset-left, 0px)); }
@media (min-width: 720px) { .intro, .opening { --trim: max(40px, env(safe-area-inset-left, 0px)); } }
.intro::before, .opening::before {
  content: ""; position: absolute; top: 64px; height: 120px;
  left: calc(var(--trim) - 15px); width: 10px;
  background: linear-gradient(to bottom,
    #00aeef 0 10px, #ec008c 10px 20px, #fff200 20px 30px, #231f20 30px 40px,
    #2e3192 40px 50px, #00a651 50px 60px, #ed1c24 60px 70px,
    #80d6f7 70px 80px, #f59bc5 80px 90px, #fff799 90px 100px,
    #939598 100px 110px, #d1d3d4 110px 120px);
}
.opening::before { top: 56px; }
@media (max-width: 640px) { .intro::before, .opening::before { display: none; } }

/* Tiles: number and year sit above the image as an eyebrow */
.tile a { grid-template-rows: auto auto auto 1fr; }
.tile .meta { margin-bottom: -4px; }

/* Make-ready: the homepage headline is printed onto the sheet plate by plate.
   Each colour is laid down top to bottom, as the sheet passes the roller:
   cyan, magenta, yellow, then black. C, M and Y land slightly out of register;
   once all four are down, a short pause, then they ease into line together. The plates are then removed,
   leaving the real headline in the same place. Skipped for reduced motion. */
.thesis.press { position: relative; color: transparent; }
.thesis.press em { color: transparent; text-decoration-color: transparent; }
.thesis .plate {
  position: absolute; inset: 0; display: block; pointer-events: none;
  mix-blend-mode: multiply;
  -webkit-mask-image: linear-gradient(to bottom, #000 42%, transparent 58%);
          mask-image: linear-gradient(to bottom, #000 42%, transparent 58%);
  -webkit-mask-size: 100% 250%; mask-size: 100% 250%;
  -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat;
  transform: translate(var(--x, 0), var(--y, 0));
  animation: ink .75s cubic-bezier(.45,.05,.55,.95) var(--d) both,
             lockin .6s cubic-bezier(.3,.7,.3,1) 3.7s both;
}
.thesis .plate em { color: inherit; text-decoration-color: transparent; }
.thesis .plate-c { color: #00aeef; --d: .2s;  --x: -2px;   --y: 1px; }
.thesis .plate-c em { text-decoration-color: #00aeef; }
.thesis .plate-m { color: #ec008c; --d: 1s;   --x: 2px;    --y: -1.5px; }
.thesis .plate-y { color: #fff200; --d: 1.8s; --x: -1.5px; --y: -2px; }
.thesis .plate-k { color: var(--ink); --d: 2.6s; mix-blend-mode: normal; animation: ink .75s cubic-bezier(.45,.05,.55,.95) var(--d) both; }
@keyframes ink {
  from { -webkit-mask-position: 0 100%; mask-position: 0 100%; }
  to   { -webkit-mask-position: 0 0;    mask-position: 0 0; }
}
@keyframes lockin {
  from { transform: translate(var(--x, 0), var(--y, 0)); }
  to   { transform: none; }
}
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) .thesis .plate-c,
  :root:not([data-theme="light"]) .thesis .plate-m,
  :root:not([data-theme="light"]) .thesis .plate-y { mix-blend-mode: screen; }
}
:root[data-theme="dark"] .thesis .plate-c,
:root[data-theme="dark"] .thesis .plate-m,
:root[data-theme="dark"] .thesis .plate-y { mix-blend-mode: screen; }

/* Footer: the sheet's bottom edge. Crop marks mirror the header's (flipped
   vertically, same trim lines) and a registration target sits at the centre. */
.site-foot { position: relative; }
.site-foot .wrap { position: relative; --trimf: max(16px, env(safe-area-inset-left, 0px)); --trimfr: max(16px, env(safe-area-inset-right, 0px)); }
@media (min-width: 720px) {
  .site-foot .wrap { --trimf: max(40px, env(safe-area-inset-left, 0px)); --trimfr: max(40px, env(safe-area-inset-right, 0px)); }
}
.site-foot .wrap::before, .site-foot .wrap::after {
  content: ""; position: absolute; top: 24px; width: 22px; height: 22px;
  background: var(--ink); pointer-events: none;
  -webkit-mask: var(--mk) center / 22px 22px no-repeat; mask: var(--mk) center / 22px 22px no-repeat;
}
.site-foot .wrap::before {
  left: calc(var(--trimf) - 22px * 17 / 24);
  --mk: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.3' stroke-linecap='square'%3E%3Cline x1='1' y1='7' x2='12' y2='7'/%3E%3Cline x1='17' y1='12' x2='17' y2='23'/%3E%3C/svg%3E");
}
.site-foot .wrap::after {
  right: calc(var(--trimfr) - 22px * 17 / 24);
  --mk: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.3' stroke-linecap='square'%3E%3Cline x1='12' y1='7' x2='23' y2='7'/%3E%3Cline x1='7' y1='12' x2='7' y2='23'/%3E%3C/svg%3E");
}
.site-foot::before {
  content: ""; position: absolute; left: 50%; top: 24px; width: 26px; height: 26px; margin: -2px 0 0 -13px;
  background: var(--ink); pointer-events: none; display: none;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.15'%3E%3Ccircle cx='12' cy='12' r='7'/%3E%3Ccircle cx='12' cy='12' r='3.5'/%3E%3Cpath d='M12 0v24M0 12h24'/%3E%3C/svg%3E") center / 26px 26px no-repeat;
          mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.15'%3E%3Ccircle cx='12' cy='12' r='7'/%3E%3Ccircle cx='12' cy='12' r='3.5'/%3E%3Cpath d='M12 0v24M0 12h24'/%3E%3C/svg%3E") center / 26px 26px no-repeat;
}
/* Centre mark only where the footer text leaves room for it */
@media (min-width: 1100px) { .site-foot::before { display: block; } }
@media (max-width: 640px) { .site-foot .wrap::before, .site-foot .wrap::after { display: none; } }

/* Footer as slug: no rule above; the marks sit at the top edge and the copy
   runs below them in small tracked capitals, like job info outside the trim. */
.site-foot { border-top: 0; }
.site-foot .wrap {
  padding-top: 64px;
  font: 500 0.68rem/1.4 var(--body); letter-spacing: 0.12em; text-transform: uppercase; color: var(--muted);
}


/* Press run: on the homepage the whole page prints as separations, in step with
   the headline's plates. C only, then C+M, then C+M+Y with no black anywhere,
   then black arrives with the headline's K plate. The SVG filters in index.html
   remove the black (K) component and show only the plates printed so far.
   Light mode only; skipped for reduced motion. */
html.printing :is(.site-head, .site-foot, main > section:not(.intro), .intro .docket > .label, .intro .prose) { background: var(--paper); }
html.printing[data-stage="0"] :is(.site-head, .site-foot, main > section:not(.intro), .intro .docket > .label, .intro .prose) { opacity: 0; }
html.printing[data-stage="c"] :is(.site-head, .site-foot, main > section:not(.intro), .intro .docket > .label, .intro .prose) { filter: url(#sep-c); }
html.printing[data-stage="cm"] :is(.site-head, .site-foot, main > section:not(.intro), .intro .docket > .label, .intro .prose) { filter: url(#sep-cm); }
html.printing[data-stage="cmy"] :is(.site-head, .site-foot, main > section:not(.intro), .intro .docket > .label, .intro .prose) { filter: url(#sep-cmy); }
html.printing .thesis, html.printing .thesis > em { color: transparent; text-decoration-color: transparent; }
/* The colour bar builds plate by plate too */
html.printing[data-stage="0"] .intro::before { opacity: 0; }
html.printing[data-stage="c"] .intro::before { background: linear-gradient(to bottom, #00aeef 0px 10px, transparent 10px 20px, transparent 20px 30px, transparent 30px 40px, #00aeef 40px 50px, #00aeef 50px 60px, transparent 60px 70px, #80d6f7 70px 80px, transparent 80px 90px, transparent 90px 100px, transparent 100px 110px, transparent 110px 120px); }
html.printing[data-stage="cm"] .intro::before { background: linear-gradient(to bottom, #00aeef 0px 10px, #ec008c 10px 20px, transparent 20px 30px, transparent 30px 40px, #2e3192 40px 50px, #00aeef 50px 60px, #ec008c 60px 70px, #80d6f7 70px 80px, #f59bc5 80px 90px, transparent 90px 100px, transparent 100px 110px, transparent 110px 120px); }
html.printing[data-stage="cmy"] .intro::before { background: linear-gradient(to bottom, #00aeef 0px 10px, #ec008c 10px 20px, #fff200 20px 30px, transparent 30px 40px, #2e3192 40px 50px, #00a651 50px 60px, #ed1c24 60px 70px, #80d6f7 70px 80px, #f59bc5 80px 90px, #fff799 90px 100px, transparent 100px 110px, transparent 110px 120px); }
/* The header registration mark locks in as the press does */
html.made-ready .site-head::before { animation-delay: 3.7s; }

/* Process colours are the core palette. Magenta is the working accent:
   it holds 4.8:1 on the paper, so it's safe for text. Cyan and yellow are
   used for fringes and marks, never on their own for text. */
:root { --magenta: #ec008c; --yellow: #fff200; --accent: #ec008c; }
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) { --accent: #ff4fae; }
}
:root[data-theme="dark"] { --accent: #ff4fae; }

/* Rollovers: the plates slip. Text turns magenta and cyan and yellow
   fringes slide out of register; on tiles the image's edge shows the same slip. */
a { text-shadow: 0 0 transparent, 0 0 transparent; transition: color .2s, text-shadow .25s cubic-bezier(.3,.7,.3,1); }
a:hover { color: var(--accent); text-shadow: -1.5px 0.5px rgba(0,174,239,.75), 1.5px -0.5px rgba(255,242,0,.9); }
.tile a:hover, .next a:hover { color: inherit; text-shadow: none; }
.tile a:hover h3, .next a:hover .t { color: var(--accent); text-shadow: -2px 1px rgba(0,174,239,.75), 2px -1px rgba(255,242,0,.9); }
.tile h3, .next .t { transition: color .2s, text-shadow .25s cubic-bezier(.3,.7,.3,1); text-shadow: 0 0 transparent, 0 0 transparent; }
.tile .frame { transition: box-shadow .3s cubic-bezier(.3,.7,.3,1); box-shadow: 0 0 0 transparent, 0 0 0 transparent; }
.tile a:hover .frame { box-shadow: -4px 3px 0 rgba(0,174,239,.85), 4px -3px 0 rgba(236,0,140,.85); }
@media (prefers-reduced-motion: reduce) {
  a, .tile h3, .next .t, .tile .frame { transition: none; }
}
