/**
 * STANZA — front-end token bridge + component classes.
 *
 * The block editor reads design tokens from theme.json (--wp--preset--*).
 * The block render.php templates, ported verbatim from the Broadsheet hi-fi
 * mockups, use Broadsheet's short token names (--color-*, --font-*, --space-*)
 * and a few Broadsheet component classes. This file defines those on :root so
 * the mockup markup renders identically on the WordPress front-end, and
 * reproduces the component classes the templates use.
 *
 * Values mirror the Broadsheet design system exactly.
 */

:root {
  --color-bg: #f3f2f2;
  --color-surface: #eae9e9;
  --color-text: #201e1d;
  --color-accent: #0088b0;
  --color-accent-2: #d6006c;
  --color-accent-600: #1186ac;
  --color-accent-700: #006786;
  --color-neutral-300: #d7d3d3;

  --font-heading: "Source Serif 4", Georgia, serif;
  --font-heading-weight: 600;
  --font-body: "Source Serif 4", Georgia, serif;

  --space-1: 5px;  --space-2: 10px; --space-3: 15px; --space-4: 20px;
  --space-6: 30px; --space-8: 40px;

  --radius-md: 2px;
  --radius-full: 999px;
}

/* — motion — */
@keyframes stanzaPulse { 0%,100% { transform: translateY(0); opacity: .4 } 50% { transform: translateY(9px); opacity: 1 } }

/* — links — */
body a { color: var(--color-accent-700); text-decoration: none; }
body a:hover { color: var(--color-accent); }

/* — custom cursor: hide the OS cursor only once JS activates it — */
body.stanza-cursor { cursor: none; }

/* — buttons (Broadsheet) — */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 6px;
  cursor: pointer; text-decoration: none;
  font-family: var(--font-heading); font-weight: var(--font-heading-weight);
  font-size: 14px; line-height: 1.2; color: var(--color-text);
  background: transparent; border: 1px solid transparent;
  padding: var(--space-2) calc(var(--space-3) * 1.2);
  border-radius: var(--radius-md);
}
.btn-primary { background: var(--color-accent); color: var(--color-bg); }
.btn-primary:hover { background: var(--color-accent-600); }
.btn-primary:active { background: var(--color-accent-700); }

/* — halftone screen (Broadsheet, pure CSS) — */
.halftone { position: relative; filter: grayscale(.35) contrast(1.15); overflow: hidden; }
.halftone::after {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background-image: radial-gradient(circle, rgba(0,0,0,.22) 30%, transparent 32%);
  background-size: 3px 3px; mix-blend-mode: multiply;
}
.halftone img { width: 100%; height: 100%; object-fit: cover; display: block; }

/* — cmyk plate (self-contained fallback) —
   Broadsheet's true four-plate separation needs its SVG filter defs +
   print-plates.js; the theme stays dependency-free, so this degrades to an
   editorial ink-screen duotone rather than an (undefined-filter) blank box. */
.cmyk { position: relative; overflow: hidden; background: var(--color-bg); }
.cmyk .print { position: relative; width: 100%; filter: grayscale(.35) contrast(1.12); }
.cmyk .print img { width: 100%; height: 100%; object-fit: cover; display: block; }
.cmyk::after {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background-image: radial-gradient(circle, rgba(0,0,0,.2) 30%, transparent 32%);
  background-size: 3px 3px; mix-blend-mode: multiply;
}

/* — work index rows — */
.index-row .row-title { will-change: transform; }

/* — scroll reveals (stanza.js toggles .in via IntersectionObserver; CSS transitions
   are compositor-driven, so they never depend on the gsap ticker) — */
.reveal-lines .line { transition: transform 1.05s cubic-bezier(.19,1,.22,1); }
.reveal-ready .reveal-lines:not(.in) .line { transform: translateY(118%); }
.reveal-lines > span:nth-child(2) .line { transition-delay: .08s; }
.reveal-lines > span:nth-child(3) .line { transition-delay: .16s; }
.reveal-lines > span:nth-child(4) .line { transition-delay: .24s; }
:is([data-reveal], .proc-step, .team-card, .svc-row, .index-row, .st-reveal) { transition: opacity .9s ease, transform .9s cubic-bezier(.19,1,.22,1); }
.reveal-ready :is([data-reveal], .proc-step, .team-card, .svc-row, .index-row, .st-reveal):not(.in) { opacity: 0; transform: translateY(32px); }
[data-img-reveal] { transition: clip-path 1.2s cubic-bezier(.19,1,.22,1); }
.reveal-ready [data-img-reveal]:not(.in) { clip-path: inset(100% 0% 0% 0%); }

/* — custom cursor / floating preview (hidden on touch + reduced motion) — */
#stanza-ring, #stanza-dot, #stanza-preview { pointer-events: none; }
@media (hover: none), (pointer: coarse) {
  #stanza-ring, #stanza-dot, #stanza-preview { display: none !important; }
  body.stanza-cursor { cursor: auto !important; }
}
@media (prefers-reduced-motion: reduce) {
  #stanza-ring, #stanza-dot, #stanza-preview { display: none !important; }
  body.stanza-cursor { cursor: auto !important; }
}
body ::selection { background: color-mix(in srgb, var(--color-accent) 30%, transparent); }
body a:focus-visible, body button:focus-visible { outline: 2px solid var(--color-accent); outline-offset: 3px; }

/* — site header —
   Inner pages: a solid sticky header. Front page (body.home): transparent
   over the hero, flips to .solid once the hero stage lifts (see stanza.js). */
.stanza-nav {
  position: sticky; top: 0; z-index: 50;
  display: flex; align-items: center; justify-content: space-between;
  gap: var(--space-4); padding: 22px clamp(20px,5vw,72px);
  background: color-mix(in srgb, var(--color-bg) 82%, transparent);
  backdrop-filter: blur(8px);
}
.stanza-nav .nav-links { display: flex; align-items: center; gap: clamp(18px,3vw,40px); }
.stanza-nav .nav-brand { font-family: var(--font-heading); font-weight: var(--font-heading-weight); font-size: 22px; letter-spacing: .14em; color: var(--color-text); }
.stanza-nav a[data-nav] { font-size: 14px; letter-spacing: .04em; color: var(--color-text); }
.stanza-nav .btn.btn-primary { background: var(--color-accent); border-color: transparent; color: var(--color-bg); }

.home .stanza-nav, .stanza-front .stanza-nav { position: fixed; left: 0; right: 0; background: transparent; backdrop-filter: none; transition: background .45s ease, backdrop-filter .45s ease; }
.home .stanza-nav .nav-brand, .home .stanza-nav a[data-nav], .stanza-front .stanza-nav .nav-brand, .stanza-front .stanza-nav a[data-nav] { color: var(--color-bg); transition: color .45s ease; }
.home .stanza-nav .btn.btn-primary, .stanza-front .stanza-nav .btn.btn-primary { background: transparent; border: 1px solid var(--color-bg); color: var(--color-bg); transition: background .45s ease, border-color .45s ease, color .45s ease; }
.home .stanza-nav.solid, .stanza-front .stanza-nav.solid { background: color-mix(in srgb, var(--color-bg) 82%, transparent); backdrop-filter: blur(8px); }
.home .stanza-nav.solid .nav-brand, .home .stanza-nav.solid a[data-nav], .stanza-front .stanza-nav.solid .nav-brand, .stanza-front .stanza-nav.solid a[data-nav] { color: var(--color-text); }
.home .stanza-nav.solid .btn.btn-primary, .stanza-front .stanza-nav.solid .btn.btn-primary { background: var(--color-accent); border-color: transparent; color: var(--color-bg); }

/* — editable core-block sections (patterns edited natively in Gutenberg) — */
.st-section { padding: clamp(50px,8vh,110px) clamp(20px,5vw,72px); }
.st-narrow { max-width: 1000px; }
.st-eyebrow { font-size: 13px; letter-spacing: .2em; text-transform: uppercase; color: color-mix(in srgb,var(--color-text) 60%,transparent); margin: 0 0 24px; }
.st-display { letter-spacing: -.025em; line-height: 1.06; margin: 0; }
.st-lede { font-size: clamp(16px,1.5vw,19px); line-height: 1.65; max-width: 56ch; color: color-mix(in srgb,var(--color-text) 82%,transparent); }
.st-italic { font-style: italic; font-weight: 400; }
.st-rule { border-top: 1px solid color-mix(in srgb,var(--color-text) 18%,transparent); padding-top: clamp(20px,3vh,34px); margin-top: 0; }
.st-num { font-family: var(--font-heading); color: color-mix(in srgb,var(--color-text) 50%,transparent); font-size: 15px; }
.st-accent { color: var(--color-accent-700); }
.st-tag { display: inline-block; font-size: 13px; letter-spacing: .04em; padding: 6px 14px; margin: 0 6px 6px 0; border: 1px solid color-mix(in srgb,var(--color-text) 24%,transparent); border-radius: var(--radius-full); }
.st-muted { color: color-mix(in srgb,var(--color-text) 55%,transparent); }
.st-wrap { grid-template-columns: minmax(0,1fr) minmax(280px,.72fr); gap: clamp(36px,7vw,110px); }

/* — page layout: no gap above the hero; ONE content column for every
   top-level section so gutters line up on any screen. Only the full-screen
   heroes break out. (Each section keeps its own clamp() side padding.) — */
.wp-site-blocks > main { margin-block-start: 0; }
.stanza-front main, .home main { margin-top: 0; }
main > *, .wp-block-post-content > * { max-width: 1400px; margin-inline: auto; }
main > [data-block="stanza/home-hero"],
main > [data-block="stanza/project-hero"] { max-width: none; margin-inline: 0; }
[data-block="stanza/site-footer"] { max-width: 1400px; margin-inline: auto; }

/* — production header block — */
#stanza-ring {
  position: fixed; top: 0; left: 0; width: 46px; height: 46px;
  border: 1px solid var(--color-accent); border-radius: 50%;
  pointer-events: none; z-index: 9999; mix-blend-mode: multiply;
  will-change: transform; transition: opacity .3s;
}
#stanza-dot {
  position: fixed; top: 0; left: 0; width: 6px; height: 6px;
  background: var(--color-text); border-radius: 50%;
  pointer-events: none; z-index: 10000; will-change: transform;
}
.stanza-nav .nav-panel { display: flex; align-items: center; }
.stanza-nav .nav-links {
  display: flex; align-items: center; gap: clamp(18px,3vw,40px);
  list-style: none; padding: 0; margin: 0;
}
.stanza-nav .nav-links li { margin: 0; }
.stanza-nav .nav-links a {
  display: inline-flex; align-items: center; min-height: 38px;
  color: var(--color-text); font-size: 14px; letter-spacing: .04em;
  text-decoration: none;
}
.stanza-nav .nav-links li:last-child a {
  justify-content: center; padding: 10px 18px;
  background: var(--color-accent); color: var(--color-bg);
  border: 1px solid transparent; border-radius: var(--radius-md);
  font-family: var(--font-heading); font-weight: var(--font-heading-weight);
}
.nav-toggle {
  display: none; border: 1px solid currentColor; background: transparent;
  color: inherit; font: inherit; padding: 8px 12px; border-radius: var(--radius-md);
}
.home .stanza-nav .nav-links a,
.stanza-front .stanza-nav .nav-links a { color: var(--color-bg); }
.home .stanza-nav .nav-toggle,
.stanza-front .stanza-nav .nav-toggle { color: var(--color-bg); }
.home .stanza-nav .nav-links li:last-child a,
.stanza-front .stanza-nav .nav-links li:last-child a {
  color: var(--color-bg); background: transparent; border-color: var(--color-bg);
}
.home .stanza-nav.solid .nav-links a,
.stanza-front .stanza-nav.solid .nav-links a { color: var(--color-text); }
.home .stanza-nav.solid .nav-links li:last-child a,
.stanza-front .stanza-nav.solid .nav-links li:last-child a {
  color: var(--color-bg); background: var(--color-accent); border-color: transparent;
}
.stanza-nav--project {
  position: sticky; mix-blend-mode: multiply;
  background: color-mix(in srgb,var(--color-bg) 82%,transparent);
}
.stanza-nav--project .project-all-work {
  display: inline-flex; align-items: center; gap: 10px;
  color: var(--color-text); font-size: 14px; letter-spacing: .04em;
  text-decoration: none; border-bottom: 1px solid currentColor; padding-bottom: 2px;
}
.stanza-nav--project .project-all-work span {
  display: inline-block; transition: transform .35s cubic-bezier(.22,1,.36,1);
}
.stanza-nav--project .project-all-work:hover span { transform: translateX(-6px); }

/* — work archive — */
.work-toolbar {
  position: sticky; top: 74px; z-index: 40;
  display: flex; align-items: center; justify-content: space-between; gap: 20px;
  padding: 16px clamp(20px,5vw,72px);
  background: color-mix(in srgb,var(--color-bg) 90%,transparent);
  backdrop-filter: blur(8px);
  border-block: 1px solid color-mix(in srgb,var(--color-text) 14%,transparent);
}
.work-filters { display: flex; align-items: center; gap: 6px 18px; flex-wrap: wrap; }
.work-filters a {
  font-size: 14px; color: var(--color-accent-700); text-decoration: none;
  padding-block: 6px; border-bottom: 1px solid transparent;
}
.work-filters a[aria-current="true"] { color: var(--color-text); border-color: currentColor; }
.work-view-controls { display: flex; align-items: center; gap: 8px; white-space: nowrap; }
.work-view-controls [data-count] {
  margin-right: 8px; font-size: 13px;
  color: color-mix(in srgb,var(--color-text) 55%,transparent);
}
.work-view-controls button {
  width: 36px; height: 36px; padding: 0; border: 1px solid var(--color-neutral-300);
  background: transparent; color: var(--color-text); cursor: pointer;
}
.work-view-controls button[aria-pressed="true"] { background: var(--color-text); color: var(--color-bg); }
.work-archive { padding: clamp(30px,5vh,60px) clamp(20px,5vw,72px) clamp(60px,9vh,120px); }
.project-grid {
  display: grid; grid-template-columns: repeat(3,minmax(0,1fr));
  gap: clamp(28px,3vw,44px); transition: opacity .3s;
}
.project-card { display: block; color: inherit; text-decoration: none; min-width: 0; }
.project-card__media { aspect-ratio: 4/5; overflow: hidden; margin-bottom: 16px; }
.project-card__media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.project-card h3 {
  font-family: var(--font-heading); font-weight: var(--font-heading-weight);
  font-size: clamp(20px,2vw,28px); letter-spacing: -.01em; margin: 0 0 6px;
}
.project-card span {
  font-size: 13px; letter-spacing: .08em; text-transform: uppercase;
  color: color-mix(in srgb,var(--color-text) 58%,transparent);
}
.project-grid.is-list { grid-template-columns: 1fr; gap: 0; }
.project-grid.is-list .project-card {
  display: grid; grid-template-columns: minmax(120px,260px) 1fr;
  align-items: center; gap: clamp(20px,4vw,64px);
  padding: 22px 0; border-top: 1px solid color-mix(in srgb,var(--color-text) 16%,transparent);
}
.project-grid.is-list .project-card:last-child { border-bottom: 1px solid color-mix(in srgb,var(--color-text) 16%,transparent); }
.project-grid.is-list .project-card__media { aspect-ratio: 16/9; margin: 0; }
.project-grid.is-list .project-card h3 { font-size: clamp(26px,4vw,52px); }
.stanza-empty { grid-column: 1 / -1; padding: 40px 0; }

/* — contact form — */
.stanza-form-slot { max-width: 720px; }
.stanza-form-slot__lead {
  max-width: 34ch; margin: 0 0 28px;
  font-family: var(--font-heading); font-size: clamp(24px,3vw,40px); line-height: 1.25;
}
.stanza-contact-form { position: relative; }
.stanza-contact-form__grid {
  display: grid; grid-template-columns: repeat(2,minmax(0,1fr));
  gap: 26px clamp(20px,3vw,38px);
}
.stanza-field { margin: 0; min-width: 0; }
.stanza-field--full { grid-column: 1 / -1; }
.stanza-field label {
  display: block; margin: 0 0 8px;
  font-size: 12px; letter-spacing: .13em; text-transform: uppercase;
  color: color-mix(in srgb,var(--color-text) 62%,transparent);
}
.stanza-field input,
.stanza-field select,
.stanza-field textarea {
  width: 100%; min-height: 48px; box-sizing: border-box;
  padding: 10px 0; border: 0;
  border-bottom: 1px solid color-mix(in srgb,var(--color-text) 30%,transparent);
  border-radius: 0; outline: 0;
  background: transparent; color: var(--color-text);
  font: inherit; font-size: 17px; line-height: 1.45;
  transition: border-color .25s ease, background-color .25s ease;
}
.stanza-field textarea { min-height: 150px; resize: vertical; }
.stanza-field select { cursor: pointer; }
.stanza-field input::placeholder,
.stanza-field textarea::placeholder {
  color: color-mix(in srgb,var(--color-text) 38%,transparent);
}
.stanza-field input:focus,
.stanza-field select:focus,
.stanza-field textarea:focus {
  border-color: var(--color-accent);
  background: color-mix(in srgb,var(--color-bg) 72%,white);
}
.stanza-consent {
  display: grid; grid-template-columns: 18px 1fr; align-items: start; gap: 10px;
  margin: 26px 0 0; cursor: pointer;
  font-size: 14px; line-height: 1.5;
  color: color-mix(in srgb,var(--color-text) 72%,transparent);
}
.stanza-consent input { width: 16px; height: 16px; margin: 3px 0 0; accent-color: var(--color-accent); }
.stanza-form-note {
  margin: 10px 0 24px; max-width: 58ch;
  font-size: 12px; line-height: 1.55;
  color: color-mix(in srgb,var(--color-text) 50%,transparent);
}
.stanza-form-submit { min-height: 48px; padding-inline: 24px; }
.stanza-form-status {
  margin: 0 0 28px; padding: 14px 16px;
  border: 1px solid currentColor;
  font-size: 14px; line-height: 1.5;
}
.stanza-form-status.is-success { color: var(--color-accent-700); }
.stanza-form-status.is-error { color: #9f2d2d; }
.stanza-honeypot {
  position: absolute !important; left: -10000px !important; top: auto !important;
  width: 1px !important; height: 1px !important; overflow: hidden !important;
}

/* — previous / next projects — */
.project-navigation {
  display: grid; grid-template-columns: repeat(2,minmax(0,1fr));
  border-top: 1px solid color-mix(in srgb,var(--color-text) 20%,transparent);
}
.project-nav__item {
  position: relative; isolation: isolate; overflow: hidden;
  display: grid; grid-template-columns: 1fr auto; align-items: center; gap: 24px;
  min-height: clamp(260px,36vw,480px);
  padding: clamp(42px,7vh,90px) clamp(20px,5vw,72px);
  color: inherit; text-decoration: none;
}
.project-nav__item--previous {
  grid-template-columns: auto 1fr;
  border-right: 1px solid color-mix(in srgb,var(--color-text) 20%,transparent);
}
.project-nav__item--previous .project-nav__content {
  grid-column: 2; grid-row: 1; justify-self: end; text-align: right;
}
.project-nav__item--previous .project-nav__arrow { grid-column: 1; grid-row: 1; }
.project-nav__content, .project-nav__arrow { position: relative; z-index: 2; }
.project-nav__item .st-eyebrow { display: block; margin-bottom: 16px; }
.project-nav__title {
  display: inline-block; max-width: 10ch; will-change: transform;
  font-family: var(--font-heading); font-weight: var(--font-heading-weight);
  font-size: clamp(30px,4.6vw,70px); line-height: 1.02; letter-spacing: -.025em;
}
.project-nav__arrow {
  display: inline-flex; align-items: center; justify-content: center;
  width: clamp(56px,7vw,86px); height: clamp(56px,7vw,86px);
  border: 1px solid currentColor; border-radius: 50%;
  font-family: var(--font-heading); font-size: clamp(20px,2vw,28px);
}
.project-nav__preview {
  position: absolute; z-index: 1; top: 50%;
  width: clamp(190px,20vw,300px); aspect-ratio: 4/5;
  opacity: 0; pointer-events: none; overflow: hidden;
  transform: translate3d(var(--preview-x,0px),calc(-48% + var(--preview-y,0px)),0) scale(.94);
  transition: opacity .45s cubic-bezier(.22,1,.36,1), transform .65s cubic-bezier(.22,1,.36,1);
  box-shadow: 0 20px 50px color-mix(in srgb,var(--color-text) 18%,transparent);
}
.project-nav__item--previous .project-nav__preview { left: 8%; }
.project-nav__item--next .project-nav__preview { right: 8%; }
.project-nav__preview img { width: 100%; height: 100%; object-fit: cover; display: block; }
.project-nav__item.is-previewing .project-nav__preview {
  opacity: .92;
  transform: translate3d(var(--preview-x,0px),calc(-50% + var(--preview-y,0px)),0) scale(1);
}

/* — responsive composition — */
@media (max-width: 1000px) {
  .project-grid { grid-template-columns: repeat(2,minmax(0,1fr)); }
  [data-block="stanza/studio-team"] > div {
    grid-template-columns: repeat(2,minmax(0,1fr)) !important;
  }
}

@media (max-width: 782px) {
  .stanza-nav { padding-block: 16px; }
  .nav-toggle { display: inline-flex; align-items: center; justify-content: center; }
  .stanza-nav .nav-panel {
    display: none; position: absolute; left: 0; right: 0; top: 100%;
    padding: 18px clamp(20px,5vw,72px) 26px;
    background: color-mix(in srgb,var(--color-bg) 96%,transparent);
    border-bottom: 1px solid color-mix(in srgb,var(--color-text) 16%,transparent);
  }
  .stanza-nav.menu-open { background: var(--color-bg) !important; }
  .stanza-nav.menu-open .nav-brand,
  .stanza-nav.menu-open .nav-toggle { color: var(--color-text) !important; }
  .stanza-nav.menu-open .nav-panel { display: block; }
  .stanza-nav .nav-links { flex-direction: column; align-items: stretch; gap: 4px; }
  .stanza-nav .nav-links a,
  .home .stanza-nav .nav-links a,
  .stanza-front .stanza-nav .nav-links a {
    width: 100%; color: var(--color-text); font-size: 18px; padding: 8px 0;
  }
  .home .stanza-nav .nav-links li:last-child a,
  .stanza-front .stanza-nav .nav-links li:last-child a {
    width: auto; margin-top: 10px; padding-inline: 18px;
    background: var(--color-accent); color: var(--color-bg); border-color: transparent;
  }
  .work-toolbar { position: relative; align-items: flex-start; flex-direction: column; }
  .work-view-controls { width: 100%; justify-content: flex-end; }
  [data-block="stanza/home-studio"] { grid-template-columns: 1fr !important; }
  .index-row { grid-template-columns: 42px minmax(0,1fr) !important; gap: 12px !important; }
  .index-row > span:last-child {
    grid-column: 2; text-align: left !important; white-space: normal !important;
  }
  [data-block="stanza/project-sequence"] { grid-template-columns: 1fr !important; }
  .st-wrap { grid-template-columns: 1fr !important; }
  [data-block="stanza/project-sequence"] > div:first-child {
    position: relative !important; height: 58vh !important; top: auto !important;
  }
  [data-block="stanza/project-sequence"] [data-step] { min-height: 72vh !important; }
  [data-block="stanza/project-gallery"] > div:nth-child(2) {
    grid-template-columns: 1fr !important;
  }
  .project-navigation { grid-template-columns: 1fr; }
  .project-nav__item { min-height: 230px; }
  .project-nav__item--previous {
    border-right: 0;
    border-bottom: 1px solid color-mix(in srgb,var(--color-text) 20%,transparent);
  }
  .project-nav__preview { display: none; }
}

@media (max-width: 600px) {
  .stanza-contact-form__grid { grid-template-columns: 1fr; gap: 22px; }
  .stanza-field--full { grid-column: auto; }
  .project-grid { grid-template-columns: 1fr; }
  .project-grid.is-list .project-card { grid-template-columns: 112px minmax(0,1fr); gap: 16px; }
  .project-grid.is-list .project-card h3 { font-size: 24px; }
  [data-block="stanza/studio-team"] > div { grid-template-columns: 1fr !important; }
  .project-nav__item { grid-template-columns: 1fr auto; }
}
