/* ══════════════════════════════════════════
   THE STANDARD ENDING on the pages not yet rebuilt (14 Nov 2026): the SEO service, funding-stage and city pages,
   jobs, programme, contact, privacy, thank-you, booked and the benchmarks report. The homepage's closing block and
   its dark wordmark layer, with the white page lifting off it on 24 / 16 px corners, exactly as on the homepage and
   the rebuilt pages. Everything between the site:ending markers is synced from the homepage by
   scripts/site/sync_ending.py and is never edited by hand. The ending's tokens are scoped to its own elements, so
   the old page's own tokens, and the quiet pass in system.css, are left as they are.
   A change here needs ?v= bumped on every page that loads it (the script's PAGES list).
══════════════════════════════════════════ */
/* site:ending:start (homepage a378f9c2; synced by scripts/site/sync_ending.py, do not edit by hand) */
:where(.closing, .closing-mark) { --black: #09090B; --font: 'Inter Tight', 'Geist', system-ui, sans-serif; --home-foot: 16px; --home-grid-max: 1824px; --home-gutter: var(--home-gutter-phone); --home-gutter-desktop: 48px; --home-gutter-phone: 16px; --home-gutter-tablet: 32px; --home-radius-control: 8px; --home-space: 48px; --text-muted: #09090B99; --text-primary: #09090B; --white: #FFFFFF; }
@media (min-width: 769px) { :where(.closing, .closing-mark) { --home-foot: 32px; --home-gutter: var(--home-gutter-tablet); --home-space: 64px; } }
@media (min-width: 1025px) { :where(.closing, .closing-mark) { --home-foot: 48px; --home-gutter: max(var(--home-gutter-desktop), calc((100% - var(--home-grid-max)) / 2)); --home-space: 80px; } }
footer.closing .btn-primary { display: flex; background: var(--white); border: none; cursor: pointer; transition: opacity 0.15s; }
footer.closing .btn-primary:hover { opacity: 0.85; }
footer.closing .btn-primary span { font-family: var(--font); font-size: 14px; font-weight: 500; line-height: 18px; color: var(--black); }
:root { --home-mark-top: #2E3036; --home-mark-base: #23252A; --home-mark-sheen: 0.04; --home-mark-bottom: 2px; }
.closing-mark { position: -webkit-sticky; position: sticky; bottom: 0; z-index: 1; background: var(--black); padding: var(--home-foot) var(--home-gutter) calc(var(--home-mark-bottom) + env(safe-area-inset-bottom, 0px)); }
.closing-mark .closing-mark-box { overflow: hidden; }
.closing-mark .closing-mark-svg { display: block; width: 100%; height: auto; }
.closing-mark .closing-mark-top { stop-color: var(--home-mark-top); }
.closing-mark .closing-mark-foot { stop-color: var(--home-mark-base); }
.closing-mark .closing-mark-sheen { opacity: var(--home-mark-sheen); transform-box: view-box; transform-origin: 0 0; animation: powMarkSheen 23s cubic-bezier(0.45, 0.05, 0.55, 0.95) infinite; animation-play-state: paused; }
.closing-mark .closing-mark-sheen-b { opacity: calc(var(--home-mark-sheen) * 0.7); animation-duration: 37s; animation-delay: -14s; animation-name: powMarkSheenB; }
.closing-mark .closing-mark-box.is-lit .closing-mark-sheen { animation-play-state: running; }
@keyframes powMarkSheen { 0% { transform: translateX(-40px) skewX(-28deg); } 45% { transform: translateX(210px) skewX(-28deg); } 100% { transform: translateX(560px) skewX(-28deg); } }
@keyframes powMarkSheenB { 0% { transform: translateX(-20px) skewX(-34deg); } 60% { transform: translateX(330px) skewX(-34deg); } 100% { transform: translateX(540px) skewX(-34deg); } }
@media (prefers-reduced-motion: reduce) {
  .closing-mark .closing-mark-sheen { display: none; }
}
.closing-mark .closing-mark-box.is-rising .closing-mark-svg { will-change: transform; }
html:has(.pow-consent.is-visible) .closing-mark { padding-bottom: max(calc(var(--home-mark-bottom) + env(safe-area-inset-bottom, 0px)), 160px); }
footer.closing .btn-primary { border-radius: var(--home-radius-control); }
.closing { display: grid; padding-top: var(--home-space); padding-bottom: var(--home-foot); padding-inline: var(--home-gutter); grid-template-columns: 1fr; row-gap: 48px; }
footer.closing .closing-ask { display: flex; flex-direction: column; align-items: flex-start; gap: 32px; }
footer.closing .closing-heading { font-size: clamp(40px, 12.3vw, 52px); font-weight: 400; line-height: 1.02; letter-spacing: -0.045em; color: var(--text-primary); }
footer.closing .closing-btn { background: var(--black); min-height: 44px; align-items: center; }
footer.closing .closing-btn span { color: var(--white); }
footer.closing .closing-cols-inner { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); column-gap: 20px; }
footer.closing .closing-col { display: flex; flex-direction: column; }
footer.closing .closing-col ul { list-style: none; }
footer.closing .closing-label { font-size: 12px; font-weight: 500; letter-spacing: 0.08em; line-height: 16px; text-transform: uppercase; color: var(--text-muted); margin-bottom: 6px; }
footer.closing .closing-col a { display: flex; align-items: center; min-height: 44px; font-size: 16px; line-height: 22px; color: var(--text-primary); }
footer.closing .closing-col a:hover, footer.closing .closing-link:hover { text-decoration: underline; text-underline-offset: 3px; }
footer.closing .closing-foot { display: flex; flex-direction: column; --sign: 28px; --sign-gap: 24px; --meta-gap: 16px; }
footer.closing .closing-foot-lead { display: flex; align-items: flex-start; column-gap: var(--sign-gap); }
footer.closing .closing-sign { flex: none; display: block; width: var(--sign); height: var(--sign); margin-top: calc((44px - var(--sign)) / 2); color: var(--text-primary); }
footer.closing .closing-meta { flex: 1 1 0%; min-width: 0; display: flex; flex-wrap: wrap; align-items: center; column-gap: var(--meta-gap); }
footer.closing .closing-legal { padding-left: calc(var(--sign) + var(--sign-gap)); }
footer.closing .closing-meta-line { display: inline-flex; align-items: center; min-height: 44px; font-size: 14px; line-height: 18px; color: var(--text-muted); }
@media (max-width: 359px) {
  footer.closing .closing-cols-inner { column-gap: 12px; }
}
@media (min-width: 769px) {
  .closing { grid-template-columns: 1fr auto; grid-template-rows: auto auto; column-gap: 64px; row-gap: 64px; }
  footer.closing .closing-ask { grid-area: 1 / 1; }
  footer.closing .closing-cols { grid-area: 1 / 2; margin-top: 2.5px; }
  footer.closing .closing-foot { display: contents; --sign-gap: 48px; --meta-gap: 40px; }
  footer.closing .closing-foot-lead { grid-area: 2 / 1; }
  footer.closing .closing-legal { grid-area: 2 / 2; justify-self: stretch; justify-content: space-between; align-self: start; padding-left: 0; flex-wrap: nowrap; white-space: nowrap; }
  footer.closing .closing-cols-inner { justify-content: end; }
  footer.closing .closing-heading { font-size: 56px; line-height: 0.98; letter-spacing: -0.05em; }
  footer.closing .closing-cols-inner { grid-template-columns: repeat(3, auto); column-gap: 48px; }
}
@media (min-width: 1025px) {
  footer.closing .closing-cols { margin-top: clamp(3px, 0.44vw, 7.5px); }
  footer.closing .closing-heading { font-size: clamp(40px, 5.56vw, 96px); }
  footer.closing .closing-cols-inner { column-gap: 80px; }
  footer.closing .closing-ask { gap: 40px; }
  footer.closing .closing-foot { --sign: 32px; }
}
@media (min-width: 1280px) {
  footer.closing .closing-col a { font-size: 17px; }
}
footer.closing .closing-subline { display: none; font-size: 17px; line-height: 1.5; color: var(--text-muted); }
.page-content { --home-radius-page: 16px; }
@media (min-width: 769px) { .page-content { --home-radius-page: 24px; } }
.page-content { position: relative; z-index: 2; background: #FFFFFF; overflow: hidden; overflow: clip; }
@media (max-width: 768px) {
  .page-content { overflow: visible; }
}
.page-content { border-radius: 0 0 var(--home-radius-page) var(--home-radius-page); }
.nav.nav-away { transform: translateY(-100%); }
/* site:ending:end */

/* ── Guards (by hand, outside the synced block): where an old page's own styles reach the synced ending. The
   closing block keeps the class footer-cta (the shared tracking's hook), which the old pages also style as their
   old dark CTA band; measured against the homepage at 390, 820, 1440 and 1920, the band's black ground is the only
   property that reaches it. ── */
.closing.footer-cta { background: none; }
/* The benchmarks report keeps a .closing-heading rule of its own (for a closing block it no longer has, in a style
   block after this file), which sets a margin and a measure the homepage's heading does not have. */
footer.closing .closing-heading { margin: 0; max-width: none; }
/* The header steps aside at the end of the page (the synced script and .nav-away above) on the homepage's slide,
   0.25 s on its own curve; the old header's own transitions stay as they were (padding, and on phones the bar's
   colour from the quiet pass in system.css, which this states again because its scope outranks a class). */
html body #nav.nav { transition: padding 0.3s, transform 0.25s cubic-bezier(0.4, 0, 0.2, 1); }
@media (max-width: 768px) {
  html body #nav.nav { transition: padding 0.3s, background-color 0.2s ease, transform 0.25s cubic-bezier(0.4, 0, 0.2, 1); }
}
/* The quiet ending (contact, thank-you, booked: pages where asking again makes no sense). sync_ending.py leaves the
   headline and its button out of the markup and marks the footer data-ending="quiet"; everything else is the
   standard ending: the link columns where they always are (ending under the header's "Talk to us"), the foot row,
   the page's corners and the wordmark layer. The white block keeps the full ending's top padding and closes up to
   the columns: from 769 px they hold the first row on their own, on phones they come first. If the headline were
   ever present, it stays out. */
footer.closing[data-ending="quiet"] .closing-ask { display: none; }
/* From 769 px the quiet ending's first column stood empty (about 910 x 440 px at 1440) and read as a missing
   headline (round 3 #9, 14 Nov). The foot row's left group (the mark, "Based in London, UK" and the email) moves up
   into that column, on the link columns' top line: its 44 px lines centred on the labels' 16 px line (Services,
   Company, Social), so the place and the email sit level with the labels and the mark is centred on them. The foot
   row keeps the copyright and Privacy Policy where they always are. Phones keep the standard order. The offsets
   follow .closing-cols' margin-top in the synced block above (2.5 px, then the clamp from 1025 px): if that
   changes, change these with it. */
@media (min-width: 769px) {
  footer.closing[data-ending="quiet"] .closing-foot-lead { grid-area: 1 / 1; align-self: start; margin-top: calc(2.5px + 8px - 22px); }
}
@media (min-width: 1025px) {
  footer.closing[data-ending="quiet"] .closing-foot-lead { margin-top: calc(clamp(3px, 0.44vw, 7.5px) + 8px - 22px); }
}
