/* ============================================================================
   ZAD CREATIVE — single stylesheet. All colour, type, spacing and motion
   tokens live in :root below, so a restyle is one rewrite of this file.
   ========================================================================== */

@import url("../fonts/fonts.css");

:root {
  /* ---- colour roles ---------------------------------------------------- */
  --canvas:      #FBFAF8;   /* page ground */
  --paper:       #FFFFFF;   /* raised surfaces */
  --ink:         #101010;   /* primary text */
  --ink-2:       #45423E;   /* secondary text */
  --muted:       #837F79;   /* meta text */
  --line:        rgba(16, 16, 16, .10);
  --line-soft:   rgba(16, 16, 16, .06);
  --accent:      #F8A025;   /* ZAD orange, sampled from the logo */
  --accent-deep: #B96E00;
  --accent-wash: rgba(248, 160, 37, .12);
  --on-accent:   #1A1206;

  /* ---- type ------------------------------------------------------------ */
  --font-display: "Space Grotesk", "Helvetica Neue", Arial, sans-serif;
  --font-body:    "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
  --font-serif:   "Instrument Serif", Georgia, serif;

  --step--1: clamp(.80rem, .78rem + .10vw, .86rem);
  --step-0:  clamp(.95rem, .92rem + .16vw, 1.03rem);
  --step-1:  clamp(1.12rem, 1.03rem + .40vw, 1.35rem);
  --step-2:  clamp(1.40rem, 1.20rem + .90vw, 2.00rem);
  --step-3:  clamp(1.85rem, 1.40rem + 2.0vw, 3.10rem);
  --step-4:  clamp(2.40rem, 1.40rem + 4.4vw, 5.60rem);
  --step-5:  clamp(2.70rem, 1.30rem + 6.6vw, 7.20rem);

  /* ---- space & shape --------------------------------------------------- */
  --shell:  min(1240px, 92vw);
  --gutter: clamp(20px, 4vw, 40px);
  --band:   clamp(56px, 6vw, 96px);
  --r-sm:   10px;
  --r-md:   18px;
  --r-lg:   28px;
  --r-pill: 999px;

  /* ---- motion ---------------------------------------------------------- */
  --ease:   cubic-bezier(.16, 1, .30, 1);
  --ease-io: cubic-bezier(.65, .05, .36, 1);
  --t-fast: .22s;
  --t-mid:  .45s;
  --t-slow: .9s;

  --shadow-1: 0 1px 2px rgba(16,16,16,.04), 0 12px 32px -18px rgba(16,16,16,.20);
  --shadow-2: 0 2px 4px rgba(16,16,16,.05), 0 30px 60px -28px rgba(16,16,16,.28);
}

/* ---------------------------------------------------------------- reset -- */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }

body {
  margin: 0;
  background: var(--canvas);
  color: var(--ink);
  font-family: var(--font-body);
  font-size: var(--step-0);
  line-height: 1.65;
  font-weight: 400;
  letter-spacing: -.005em;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  overflow-x: clip;
}
img, video, svg { display: block; max-width: 100%; }
/* Browsers give <figure> a 1em/40px margin. Ours are layout blocks, not prose
   floats, so that default was quietly inset-ing the showreel, the testimonial
   and the team photos by 40px on each side. */
figure { margin: 0; }
img { height: auto; }
a { color: inherit; text-decoration: none; }
button, input, select, textarea { font: inherit; color: inherit; }
h1, h2, h3, h4 { margin: 0; font-family: var(--font-display); font-weight: 600; letter-spacing: -.03em; line-height: 1.06; }
p { margin: 0 0 1.1em; }
p:last-child { margin-bottom: 0; }
::selection { background: var(--accent); color: var(--on-accent); }
:focus-visible { outline: 2px solid var(--accent-deep); outline-offset: 3px; border-radius: 4px; }

.shell { width: var(--shell); margin-inline: auto; }
.skip { position: absolute; left: -9999px; top: 0; background: var(--ink); color: #fff;
        padding: 10px 16px; z-index: 999; border-radius: 0 0 var(--r-sm) 0; }
.skip:focus { left: 0; }
.vh { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
      overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }

/* --------------------------------------------------- scroll tone layer -- */
/* ONE fixed wash behind everything. Sections must NOT repaint --canvas or
   this disappears with no error. Drive with transform = composited.        */
.tone { position: fixed; inset: 0; z-index: -1; overflow: hidden; pointer-events: none; }
.tone__blob {
  position: absolute; border-radius: 50%; filter: blur(90px); opacity: .5;
  will-change: transform;
}
.tone__blob--a { width: 54vw; height: 54vw; left: -14vw; top: -12vh;
                 background: radial-gradient(circle at 40% 40%, rgba(248,160,37,.34), transparent 68%);
                 transform: translate3d(0, calc(var(--sy, 0) * -4vh), 0); }
.tone__blob--b { width: 46vw; height: 46vw; right: -12vw; top: 24vh;
                 background: radial-gradient(circle at 50% 50%, rgba(120,150,255,.20), transparent 68%);
                 transform: translate3d(0, calc(var(--sy, 0) * 7vh), 0); }
.tone__blob--c { width: 40vw; height: 40vw; left: 30vw; bottom: -18vh;
                 background: radial-gradient(circle at 50% 50%, rgba(248,160,37,.20), transparent 70%);
                 transform: translate3d(0, calc(var(--sy, 0) * -9vh), 0); }

/* ------------------------------------------------------- reading bar --- */
.readbar { position: fixed; top: 0; left: 0; height: 2px; width: var(--read, 0%);
           background: var(--accent); z-index: 120; transition: width .08s linear; }

/* ------------------------------------------------------------ topbar --- */
.topbar { position: fixed; top: 0; left: 0; right: 0; z-index: 100;
          transition: background var(--t-mid) var(--ease), box-shadow var(--t-mid) var(--ease),
                      backdrop-filter var(--t-mid) var(--ease); }
.topbar__in { display: flex; align-items: center; justify-content: space-between;
              gap: 24px; height: 78px; }
.topbar.is-solid { background: rgba(251,250,248,.78); backdrop-filter: blur(14px) saturate(1.4);
                   box-shadow: 0 1px 0 var(--line-soft); }
.wordmark { display: flex; flex-direction: column; line-height: 1.12; }
.wordmark__name { font-family: var(--font-display); font-weight: 700; font-size: 1.16rem;
                  letter-spacing: -.045em; }
.wordmark__role { font-size: .62rem; letter-spacing: .18em; text-transform: uppercase; white-space: nowrap;
                  color: var(--muted); }
.nav { display: flex; gap: 21px; }   /* tenth menu item: a little less air so the
                                       wordmark line and the nav both stay on one row */
.nav a { font-size: .82rem; letter-spacing: .06em; text-transform: uppercase; font-weight: 500;
         color: var(--ink-2); position: relative; padding: 6px 0; transition: color var(--t-fast); }
.nav a::after { content: ""; position: absolute; left: 0; right: 100%; bottom: 0; height: 1.5px;
                background: var(--accent); transition: right var(--t-mid) var(--ease); }
.nav a:hover, .nav a.is-active { color: var(--ink); }
.nav a:hover::after, .nav a.is-active::after { right: 0; }
.topbar__cta { display: flex; align-items: center; gap: 12px; }

.burger { display: none; width: 44px; height: 44px; border: 0; background: transparent;
          cursor: pointer; place-items: center; }
.burger i, .burger i::before, .burger i::after {
  display: block; width: 22px; height: 1.5px; background: var(--ink); content: "";
  transition: transform var(--t-mid) var(--ease), opacity var(--t-fast); }
.burger i { position: relative; }
.burger i::before { position: absolute; top: -7px; }
.burger i::after  { position: absolute; top: 7px; }
.burger[aria-expanded="true"] i { background: transparent; }
.burger[aria-expanded="true"] i::before { transform: translateY(7px) rotate(45deg); }
.burger[aria-expanded="true"] i::after  { transform: translateY(-7px) rotate(-45deg); }

.drawer { position: fixed; inset: 0; z-index: 99; background: var(--canvas);
          padding: calc(78px + 28px) var(--gutter) 32px; display: grid; align-content: start;
          gap: 4px; overflow-y: auto;
          transform: translateY(-100%); visibility: hidden;
          transition: transform var(--t-mid) var(--ease), visibility 0s linear var(--t-mid); }
.drawer[data-open="true"] { transform: translateY(0); visibility: visible;
                            transition: transform var(--t-mid) var(--ease), visibility 0s; }
.drawer a { display: flex; align-items: baseline; justify-content: space-between;
            padding: 18px 2px; border-bottom: 1px solid var(--line-soft);
            font-family: var(--font-display); font-size: var(--step-2); font-weight: 500;
            letter-spacing: -.03em; }
.drawer a small { font-family: var(--font-body); font-size: var(--step--1);
                  letter-spacing: .16em; text-transform: uppercase; color: var(--muted); }
.drawer__foot { margin-top: 26px; }
/* the footer button is an <a> inside the drawer, so the .drawer a rule above was
   styling it as a menu row: 2px of side padding, display type, label pushed to the
   edge. Give it back the button's own type and padding and centre the label. */
.drawer__foot a.btn { display: inline-flex; align-items: center; justify-content: center;
                      width: 100%; padding: 15px 22px; border-bottom: 0;
                      font-family: var(--font-body); font-size: .84rem; font-weight: 500;
                      letter-spacing: .03em; }

/* ------------------------------------------------------------- buttons -- */
.btn { display: inline-flex; align-items: center; gap: 10px; padding: 13px 22px;
       border-radius: var(--r-pill); border: 1px solid transparent; cursor: pointer;
       font-size: .84rem; font-weight: 500; letter-spacing: .03em; white-space: nowrap;
       transition: transform var(--t-fast) var(--ease), background var(--t-fast),
                   color var(--t-fast), border-color var(--t-fast), box-shadow var(--t-fast); }
.btn:hover { transform: translateY(-2px); }
.btn:active { transform: translateY(0); }
.btn--gold { background: var(--accent); color: var(--on-accent); box-shadow: var(--shadow-1); }
.btn--gold:hover { background: #FFAE38; box-shadow: var(--shadow-2); }
.btn--ink { background: var(--ink); color: #fff; }
.btn--ink:hover { background: #262626; }
.btn--ghost { border-color: var(--line); color: var(--ink); background: transparent; }
.btn--ghost:hover { border-color: var(--ink); }
.btn--sm { padding: 10px 17px; font-size: .78rem; }
.btn--wa::before { content: "✆"; font-size: .95em; }

/* ------------------------------------------------------------- eyebrow -- */
.eyebrow { display: inline-flex; align-items: center; gap: 10px; margin: 0 0 18px;
           font-size: .7rem; letter-spacing: .2em; text-transform: uppercase;
           font-weight: 500; color: var(--accent-deep); }
.eyebrow::before { content: ""; width: 26px; height: 1.5px; background: var(--accent); }

/* --------------------------------------------------------------- hero --- */
.hero { padding-top: calc(78px + clamp(44px, 7vw, 96px)); padding-bottom: clamp(36px, 5vw, 70px); }
.hero__grid { display: grid; grid-template-columns: 1.35fr .95fr; gap: clamp(24px, 5vw, 72px);
              align-items: end; }
.hero__title { font-size: var(--step-5); font-weight: 700; letter-spacing: -.045em;
               line-height: .94; text-transform: none; }
.hero__title em { font-family: var(--font-serif); font-style: italic; font-weight: 400;
                  letter-spacing: -.02em; color: var(--accent-deep); }
.hero__sub { font-size: var(--step-1); color: var(--ink-2); max-width: 46ch; margin: 26px 0 0; }
.hero__actions { display: flex; flex-wrap: wrap; gap: 12px; margin-top: 32px; }
.hero__meta { border-top: 1px solid var(--line); padding-top: 20px; display: grid; gap: 14px; }
.hero__meta div { display: flex; justify-content: space-between; gap: 16px; font-size: .82rem; }
.hero__meta dt { color: var(--muted); letter-spacing: .08em; text-transform: uppercase; font-size: .68rem; }
.hero__meta dd { margin: 0; font-weight: 500; text-align: right; }

/* word-split headline reveal */
.split-words .w { display: inline-block; overflow: hidden; vertical-align: bottom; }
.split-words .w > i { display: inline-block; font-style: inherit;
                      transform: translateY(108%);
                      transition: transform 1.05s var(--ease) var(--wd, 0ms); }
.split-words.is-in .w > i { transform: translateY(0); }

/* --------------------------------------------------------------- band --- */
.band { padding-block: var(--band); }
.band--tight { padding-block: clamp(40px, 4.5vw, 72px); }
.band--paper { background: var(--paper); border-block: 1px solid var(--line-soft); }
.band__head { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
              gap: clamp(20px, 4vw, 64px); align-items: end; margin-bottom: clamp(34px, 5vw, 64px); }
.band__title { font-size: var(--step-3); }
.band__lead { color: var(--ink-2); font-size: var(--step-1); max-width: 52ch; }
.section-title { font-size: var(--step-4); letter-spacing: -.05em; }

/* ------------------------------------------------------------- artwork -- */
.artband { position: relative; overflow: hidden; border-radius: var(--r-lg);
           background: var(--paper); box-shadow: var(--shadow-1); }
.artband img { width: 100%; aspect-ratio: 21 / 9; object-fit: cover;
               transform: scale(1.04); transition: transform 1.4s var(--ease); }
.artband.is-in img { transform: scale(1); }
.artband__cap { position: absolute; left: 0; right: 0; bottom: 0; padding: 22px 26px;
                display: flex; justify-content: space-between; align-items: end; gap: 18px;
                background: linear-gradient(to top, rgba(16,16,16,.62), rgba(16,16,16,0));
                color: #fff; }
.artband__cap span { font-size: .72rem; letter-spacing: .18em; text-transform: uppercase; opacity: .9; }

/* --------------------------------------------------------------- grid --- */
.grid { display: grid; gap: clamp(16px, 2vw, 26px); }
.grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.grid--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.grid--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }

.card { background: var(--paper); border: 1px solid var(--line-soft); border-radius: var(--r-md);
        padding: clamp(22px, 2.4vw, 32px); display: flex; flex-direction: column; gap: 12px;
        transition: transform var(--t-mid) var(--ease), box-shadow var(--t-mid) var(--ease),
                    border-color var(--t-mid); }
.card:hover { transform: translateY(-4px); box-shadow: var(--shadow-2); border-color: var(--line); }
.card h3 { font-size: var(--step-1); }
.card p { color: var(--ink-2); font-size: .92rem; margin: 0; }
.card__kicker { font-size: .66rem; letter-spacing: .2em; text-transform: uppercase;
                color: var(--accent-deep); font-weight: 600; }

/* capability chips */
.chips { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; }
.chips > .btn { margin-left: auto; }
.chip { padding: 11px 20px; border: 1px solid var(--line); border-radius: var(--r-pill);
        font-size: .86rem; font-weight: 500; background: var(--paper);
        transition: transform var(--t-fast) var(--ease), background var(--t-fast),
                    color var(--t-fast), border-color var(--t-fast); }
.chip:hover { transform: translateY(-2px); background: var(--ink); color: #fff; border-color: var(--ink); }

/* --------------------------------------------------------- client rail -- */
.rail { position: relative; overflow: hidden; padding-block: 8px;
        mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent); }
.rail__track { display: flex; gap: 18px; width: max-content;
               animation: rail 46s linear infinite; }
.rail:hover .rail__track { animation-play-state: paused; }
.rail__cell { flex: 0 0 auto; width: 190px; height: 108px; display: grid; place-items: center;
              background: var(--paper); border: 1px solid var(--line-soft);
              border-radius: var(--r-md); padding: 18px; }
.rail__cell img { max-width: 100%; max-height: 100%; object-fit: contain;
                  filter: grayscale(1); opacity: .72;
                  transition: filter var(--t-mid), opacity var(--t-mid), transform var(--t-mid) var(--ease); }
.rail__cell:hover img { filter: none; opacity: 1; transform: scale(1.05); }
@keyframes rail { to { transform: translateX(-50%); } }

/* --------------------------------------------------------------- team --- */
.team { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: clamp(16px, 2vw, 26px); }
.member { display: grid; gap: 14px; }
.member__ph { position: relative; overflow: hidden; border-radius: var(--r-md); background: var(--paper);
              aspect-ratio: 4 / 5; }
.member__ph img { width: 100%; height: 100%; object-fit: cover; object-position: center 18%;
                  transition: transform 1.2s var(--ease), filter var(--t-mid); }
.member:hover .member__ph img { transform: scale(1.045); }
.member__name { font-family: var(--font-display); font-size: var(--step-1); font-weight: 600;
                letter-spacing: -.02em; }
.member__role { font-size: .72rem; letter-spacing: .14em; text-transform: uppercase; color: var(--accent-deep); }

/* --------------------------------------------------------------- work --- */
.filters { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: clamp(24px, 3vw, 40px); }
.filter { padding: 9px 18px; border-radius: var(--r-pill); border: 1px solid var(--line);
          background: transparent; cursor: pointer; font-size: .78rem; letter-spacing: .05em;
          text-transform: uppercase; color: var(--ink-2);
          transition: background var(--t-fast), color var(--t-fast), border-color var(--t-fast); }
.filter:hover { border-color: var(--ink); color: var(--ink); }
.filter[aria-pressed="true"] { background: var(--ink); color: #fff; border-color: var(--ink); }

/* Masonry columns, and each tile is given its OWN aspect ratio by the builder
   (--ar from the real image dimensions). The frame therefore matches the picture,
   so nothing is cropped and nothing is letterboxed either. A fixed frame cannot
   do this: the images run from 0.87 to 3.56 in ratio. */
/* Columns are packed by the BUILD STEP into three balanced flex columns, because
   CSS `columns` pushes an item to the next column when it will not fit and leaves
   a hole mid-column. Below 1080px the wrappers dissolve (display: contents) and
   real CSS columns take over, so the count can drop responsively. */
.works { display: flex; gap: clamp(14px, 2vw, 22px); align-items: flex-start; }
.works__col { flex: 1 1 0; min-width: 0; display: flex; flex-direction: column;
              gap: clamp(14px, 2vw, 22px); }
.work { display: block; width: 100%; margin: 0;
        position: relative; overflow: hidden;
        border-radius: var(--r-md); background: var(--paper);
        border: 1px solid var(--line-soft); cursor: zoom-in; text-align: left; padding: 0;
        transition: transform var(--t-mid) var(--ease), box-shadow var(--t-mid) var(--ease);
        animation: pop .5s var(--ease) both; }
@keyframes pop { from { opacity: 0; transform: translateY(14px) scale(.985); } }
.work:hover { transform: translateY(-5px); box-shadow: var(--shadow-2); }
.work__ph { aspect-ratio: var(--ar, 4 / 3); overflow: hidden; background: var(--canvas); }
.work__ph img { width: 100%; height: 100%; object-fit: contain;
                transition: filter var(--t-mid) var(--ease), opacity var(--t-mid); }
/* never scale a work image on hover - that would crop it again */
.work:hover .work__ph img { filter: brightness(1.05) saturate(1.05); }
.work__cap { padding: 16px 18px; display: grid; gap: 4px; }
.work__t { font-family: var(--font-display); font-weight: 500; font-size: .98rem;
           letter-spacing: -.02em; }
.work__c { font-size: .66rem; letter-spacing: .18em; text-transform: uppercase; color: var(--muted); }
.work[hidden] { display: none; }

/* lightbox */
.lb { position: fixed; inset: 0; z-index: 200; display: grid; place-items: center;
      background: rgba(12,12,12,.9); padding: clamp(16px, 4vw, 56px); opacity: 0;
      transition: opacity var(--t-mid) var(--ease); }
.lb[hidden] { display: none; }
.lb.is-open { opacity: 1; }
.lb img { max-width: 100%; max-height: 82vh; border-radius: var(--r-md); object-fit: contain; }
.lb__cap { color: #fff; margin-top: 16px; text-align: center; font-size: .9rem; }
.lb__x { position: absolute; top: 18px; right: 20px; width: 46px; height: 46px;
         border-radius: 50%; border: 1px solid rgba(255,255,255,.3); background: transparent;
         color: #fff; cursor: pointer; font-size: 1.2rem; }
.lb__x:hover { background: rgba(255,255,255,.12); }

/* -------------------------------------------------------------- video --- */
.vplayer { display: grid; grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr);
           gap: clamp(16px, 2vw, 28px); align-items: start; }
.vstage { position: relative; border-radius: var(--r-lg); overflow: hidden; background: #0C0C0C;
          box-shadow: var(--shadow-2); }
.vstage video { width: 100%; aspect-ratio: 16 / 9; object-fit: contain; background: #0C0C0C; }
.vstage__meta { position: absolute; left: 0; right: 0; bottom: 0; padding: 46px 22px 18px;
                display: flex; justify-content: space-between; align-items: end; gap: 14px;
                color: #fff; pointer-events: none;
                background: linear-gradient(to top, rgba(0,0,0,.66), transparent); }
.vstage__meta strong { font-family: var(--font-display); font-weight: 500; letter-spacing: -.02em; }
.vstage__meta span { font-size: .66rem; letter-spacing: .18em; text-transform: uppercase; opacity: .8; }
.vlist { display: grid; gap: 8px; max-height: 520px; overflow-y: auto; padding-right: 4px;
         scrollbar-width: thin; }
.vitem { display: grid; grid-template-columns: 96px 1fr; gap: 14px; align-items: center;
         padding: 8px; border: 1px solid transparent; border-radius: var(--r-sm);
         background: transparent; cursor: pointer; text-align: left; width: 100%;
         transition: background var(--t-fast), border-color var(--t-fast); }
.vitem:hover { background: var(--paper); border-color: var(--line-soft); }
.vitem[aria-current="true"] { background: var(--paper); border-color: var(--accent); }
.vitem__ph { width: 96px; aspect-ratio: 16 / 9; border-radius: 8px; overflow: hidden;
             background: #1a1a1a; }
.vitem__ph img { width: 100%; height: 100%; object-fit: cover; }
.vitem__t { font-size: .9rem; font-weight: 500; }
.vitem__g { font-size: .64rem; letter-spacing: .16em; text-transform: uppercase; color: var(--muted); }

/* ----------------------------------------------------------- articles --- */
.posts { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: clamp(16px, 2vw, 26px); }
.post { display: grid; gap: 14px; background: var(--paper); border: 1px solid var(--line-soft);
        border-radius: var(--r-md); overflow: hidden;
        transition: transform var(--t-mid) var(--ease), box-shadow var(--t-mid) var(--ease); }
.post:hover { transform: translateY(-5px); box-shadow: var(--shadow-2); }
.post__ph { aspect-ratio: 16 / 10; overflow: hidden; background: var(--canvas); }
.post__ph img { width: 100%; height: 100%; object-fit: cover; transition: transform 1.1s var(--ease); }
.post:hover .post__ph img { transform: scale(1.05); }
.post__body { padding: 0 22px 24px; display: grid; gap: 10px; }
.post__meta { font-size: .64rem; letter-spacing: .16em; text-transform: uppercase; color: var(--muted);
              display: flex; gap: 12px; }
.post__t { font-size: var(--step-1); font-family: var(--font-display); font-weight: 500;
           letter-spacing: -.025em; }
.post__x { font-size: .9rem; color: var(--ink-2); }
.post__more { font-size: .78rem; letter-spacing: .1em; text-transform: uppercase;
              color: var(--accent-deep); font-weight: 600; }
.post__more::after { content: " →"; transition: margin var(--t-fast); display: inline-block; }
.post:hover .post__more::after { margin-left: 4px; }

/* ------------------------------------------------------------ pillars -- */
.pillar { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
          gap: clamp(24px, 4vw, 64px); align-items: center;
          padding-block: clamp(38px, 5vw, 72px); border-top: 1px solid var(--line-soft); }
.pillar:first-of-type { border-top: 0; }
.pillar:nth-child(even) .pillar__media { order: -1; }
.pillar__media { border-radius: var(--r-md); overflow: hidden; background: var(--paper); }
.pillar__media img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover;
                     transition: transform 1.3s var(--ease); }
.pillar:hover .pillar__media img { transform: scale(1.04); }
.pillar__h { font-size: var(--step-2); margin-bottom: 18px; }
.pillar ul { margin: 0; padding: 0; list-style: none; display: grid; gap: 12px; }
.pillar li { position: relative; padding-left: 26px; color: var(--ink-2); font-size: .95rem; }
.pillar li::before { content: ""; position: absolute; left: 0; top: .62em; width: 12px; height: 1.5px;
                     background: var(--accent); }

/* --------------------------------------------------------- testimonial -- */
/* A testimonial, set as a testimonial: quote glyph, a measure short enough to
   scan, and an attribution panel that actually names who said it. One wide card,
   so the band is not half empty. */
.quote { position: relative; overflow: hidden;
         display: grid; grid-template-columns: minmax(0, 1.62fr) minmax(0, 1fr);
         gap: clamp(22px, 3.4vw, 60px); align-items: center; max-width: none;
         background: var(--paper); border: 1px solid var(--line-soft);
         border-radius: var(--r-lg); box-shadow: var(--shadow-1);
         padding: clamp(26px, 3.4vw, 56px); }
.quote::before { content: "\201C"; position: absolute; left: clamp(10px, 1.6vw, 26px);
                 /* the glyph ink sits well below the top of its em box, so a negative
                    offset this small still shows the whole mark inside the card */
                 top: -.10em; font-family: var(--font-serif); line-height: 1;
                 font-size: clamp(120px, 13vw, 210px); color: var(--accent);
                 opacity: .17; pointer-events: none; }
.quote__say { position: relative; }
.quote__kicker { font-size: .64rem; letter-spacing: .2em; text-transform: uppercase;
                 color: var(--accent-deep); font-weight: 600; margin: 0 0 14px; }
.quote blockquote { margin: 0; font-family: var(--font-serif);
                    font-size: clamp(1.2rem, 1.95vw, 1.85rem); line-height: 1.42;
                    letter-spacing: -.015em; max-width: 46ch; }
.quote blockquote::before, .quote blockquote::after { content: none; }
.quote__by { display: grid; gap: 15px; align-content: center;
             border-left: 1px solid var(--line); padding-left: clamp(20px, 2.8vw, 44px); }
.quote__av { width: 62px; height: 62px; border-radius: 50%; display: grid; place-items: center;
             background: var(--accent); color: var(--on-accent); font-family: var(--font-display);
             font-weight: 700; font-size: 1.05rem; letter-spacing: .02em; }
.quote__who { display: grid; gap: 3px; }
.quote__who strong { font-family: var(--font-display); font-weight: 600; font-size: 1.08rem;
                     letter-spacing: -.02em; }
.quote__who span { font-size: .82rem; color: var(--muted); letter-spacing: .02em; }
.quote__client { display: block; margin-top: 4px; }
.quote__logo { max-width: 150px; max-height: 54px; width: auto; height: auto;
               object-fit: contain; filter: grayscale(1); opacity: .78;
               transition: filter var(--t-mid), opacity var(--t-mid); }
.quote:hover .quote__logo { filter: none; opacity: 1; }

@media (max-width: 860px) {
  .quote { grid-template-columns: 1fr; }
  .quote__by { border-left: 0; border-top: 1px solid var(--line);
               padding-left: 0; padding-top: 20px; }
}

/* -------------------------------------------------------------- forms -- */
.form { display: grid; gap: 18px; }
.form__row { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; }
.field { display: grid; gap: 8px; }
.field label { font-size: .7rem; letter-spacing: .16em; text-transform: uppercase; color: var(--ink-2);
               font-weight: 500; }
.field input, .field textarea, .field select {
  width: 100%; padding: 14px 16px; border: 1px solid var(--line); border-radius: var(--r-sm);
  background: var(--paper); transition: border-color var(--t-fast), box-shadow var(--t-fast); }
.field input:focus, .field textarea:focus, .field select:focus {
  outline: none; border-color: var(--accent); box-shadow: 0 0 0 3px var(--accent-wash); }
.field textarea { min-height: 150px; resize: vertical; }
.form__note { font-size: .8rem; color: var(--muted); }
.form__ok { background: var(--accent-wash); border: 1px solid var(--accent);
            border-radius: var(--r-sm); padding: 14px 16px; font-size: .9rem; }
.form__ok[hidden] { display: none; }
.radios { display: flex; flex-wrap: wrap; gap: 10px; }
.radio { display: inline-flex; align-items: center; gap: 9px; padding: 11px 18px;
         border: 1px solid var(--line); border-radius: var(--r-pill); cursor: pointer;
         font-size: .86rem; transition: border-color var(--t-fast), background var(--t-fast); }
.radio:hover { border-color: var(--ink); }
.radio input { accent-color: var(--accent-deep); }
.radio:has(input:checked) { border-color: var(--accent); background: var(--accent-wash); }

/* ------------------------------------------------------------- footer -- */
.footer { padding-block: clamp(56px, 7vw, 96px) 40px; border-top: 1px solid var(--line); }
.footer__grid { display: grid; grid-template-columns: 1.3fr 1fr 1fr; gap: clamp(24px, 4vw, 56px); }
.footer__sign { font-family: var(--font-serif); font-style: italic; font-size: var(--step-2);
                letter-spacing: -.02em; }
.footer h4 { font-size: .68rem; letter-spacing: .2em; text-transform: uppercase; color: var(--muted);
             font-family: var(--font-body); font-weight: 600; margin-bottom: 16px; }
.footer ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; }
.footer li a { font-size: .9rem; color: var(--ink-2); transition: color var(--t-fast); }
.footer li a:hover { color: var(--accent-deep); }
.footer__base { margin-top: clamp(38px, 5vw, 64px); padding-top: 24px; border-top: 1px solid var(--line-soft);
                display: flex; flex-wrap: wrap; gap: 12px 28px; justify-content: space-between;
                font-size: .74rem; color: var(--muted); letter-spacing: .05em; }

/* ------------------------------------------------------ reveal motion -- */
.reveal { opacity: 0; transform: translateY(26px);
          transition: opacity var(--t-slow) var(--ease) var(--rd, 0ms),
                      transform var(--t-slow) var(--ease) var(--rd, 0ms); }
.reveal.is-in { opacity: 1; transform: none; }
.reveal-line { opacity: 0; transform: scaleX(0); transform-origin: left;
               transition: opacity .8s var(--ease), transform 1.1s var(--ease); }
.reveal-line.is-in { opacity: 1; transform: scaleX(1); }

/* ------------------------------------------------------------ utility -- */
.mt-m { margin-top: clamp(20px, 2.6vw, 34px); }
.mt-l { margin-top: clamp(32px, 4vw, 56px); }
.center { text-align: center; }
.nowrap { white-space: nowrap; }
.note { font-size: .8rem; color: var(--muted); }

/* --------------------------------------------------------- responsive -- */
@media (max-width: 1080px) {
  /* ten menu items plus the wordmark and the button no longer fit side by side once
     the window narrows, so use the drawer menu from 1080 down instead of crowding */
  .nav { display: none; }
  .burger { display: grid; }          /* ...and the drawer button takes its place */
  .grid--4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .posts, .team { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .works { display: block; columns: 2; column-gap: clamp(14px, 2vw, 22px); }
  .works__col { display: contents; }
  .work { margin-bottom: clamp(14px, 2vw, 22px);
          break-inside: avoid; -webkit-column-break-inside: avoid; }
  .vplayer { grid-template-columns: 1fr; }
  .vlist { max-height: none; grid-auto-flow: row; }
}
@media (max-width: 860px) {
  .nav, .topbar__cta .btn { display: none; }
  .burger { display: grid; }
  /* .grid--2 belongs in this list: without it a two-column section kept both
     columns on a phone, squeezing the copy into a ~175px ribbon. */
  .hero__grid, .band__head, .grid--2, .pillar, .footer__grid { grid-template-columns: 1fr; }
  .pillar:nth-child(even) .pillar__media { order: 0; }
  .hero__meta dd { text-align: left; }
  .hero__meta div { flex-direction: column; gap: 2px; }
  .topbar__in { height: 68px; }
  .drawer { padding-top: calc(68px + 24px); }
}
@media (max-width: 640px) {
  .grid--3, .grid--4, .posts, .team, .form__row { grid-template-columns: 1fr; }
  .works { columns: 1; }
  .rail__cell { width: 148px; height: 92px; }
  .vitem { grid-template-columns: 78px 1fr; }
  .vitem__ph { width: 78px; }
  .hero { padding-top: calc(68px + 40px); }
}

/* --------------------------------------------------- reduced motion ---- */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .001ms !important; animation-iteration-count: 1 !important;
    transition-duration: .001ms !important; scroll-behavior: auto !important; }
  .reveal, .reveal-line { opacity: 1; transform: none; }
  .split-words .w > i { transform: none; }
  .rail__track { animation: none; }
  /* tone layer is parked, not hidden */
  .tone__blob { transform: none !important; }
}

@media print {
  .topbar, .drawer, .readbar, .tone, .lb { display: none !important; }
  .reveal, .reveal-line { opacity: 1 !important; transform: none !important; }
}

/* ============================================================================
   Components introduced by the templates (post/builder pass).
   ========================================================================== */

.dot { color: var(--accent); }

.offgrid__line { display: block; font-size: .40em; letter-spacing: .04em;
                 color: var(--muted); font-weight: 500; margin-top: .3em; }

.align-center { align-items: center; }
.align-start  { align-items: start; }
.center-block { margin-inline: auto; }
.eyebrow.center, .center .eyebrow { justify-content: center; }
.hero__actions.center { justify-content: center; }
.narrow { max-width: 760px; }

/* post cards use <a> with spans so the markup stays valid inside a link */
.post__ph, .post__body { display: block; }
.post__body { display: grid; }
.post__meta span + span::before { content: "·"; margin-right: 12px; color: var(--muted); }
.post__t { display: block; }
.post__x { display: block; }

/* service cards */
.plainlist { margin: 0; padding: 0; list-style: none; display: grid; gap: 8px; }
.plainlist li { color: var(--ink-2); font-size: .92rem; }
.card--flush { padding: 0; overflow: hidden; }
.card__ph { aspect-ratio: 16 / 10; overflow: hidden; }
.card__ph img { width: 100%; height: 100%; object-fit: cover;
                transition: transform 1.1s var(--ease); }
.card--flush:hover .card__ph img { transform: scale(1.05); }
.card__pad { padding: clamp(20px, 2.2vw, 28px); display: grid; gap: 10px; }
.card__pad h3 { font-size: var(--step-1); }

/* client logo tiles */
.clientcard { align-items: center; justify-content: center; min-height: 152px; padding: 22px; }
.clientcard img { max-width: 100%; max-height: 92px; object-fit: contain; }

/* video list item text */
.vitem__txt { display: grid; gap: 2px; }
.vitem__t { font-size: .9rem; font-weight: 500; }
.vitem__g { font-size: .64rem; letter-spacing: .16em; text-transform: uppercase;
            color: var(--muted); }

/* lightbox inner */
.lb__inner { display: grid; justify-items: center; max-width: min(1100px, 92vw); }

/* --------------------------------------------------------------- prose --- */
.prose-wrap { max-width: 72ch; margin-inline: auto; }
.prose__hero { width: 100%; border-radius: var(--r-md); margin-bottom: clamp(28px, 4vw, 48px);
               aspect-ratio: 16 / 9; object-fit: cover; }
.prose p { font-size: var(--step-1); line-height: 1.75; color: var(--ink-2);
           margin: 0 0 1.35em; }
.prose h2 { font-size: var(--step-2); margin: 1.9em 0 .7em; color: var(--ink); }
.prose ul { margin: 0 0 1.5em; padding-left: 1.15em; display: grid; gap: .6em; }
.prose li { font-size: var(--step-1); line-height: 1.7; color: var(--ink-2); }
.prose li::marker { color: var(--accent); }
.prose > :first-child { margin-top: 0; }

/* Sources at the foot of an article. They must be plainly readable: a faint
   or unlinked source is worse than none, because it looks cited and is not. */
.prose ul.prose__links { padding-left: 0; gap: .75em; }
.prose .prose__links li { list-style: none; }
.prose .prose__links a { color: var(--ink); font-weight: 500;
                         text-decoration: underline; text-decoration-color: var(--accent);
                         text-decoration-thickness: 2px; text-underline-offset: 3px; }
.prose .prose__links a:hover { color: var(--accent-deep); }

/* the field legend on the TikTok form */
.field__legend { font-size: .7rem; letter-spacing: .16em; text-transform: uppercase;
                 color: var(--ink-2); font-weight: 500; margin-bottom: 10px; display: block; }

/* work cards are not <button> anymore — keep the affordances explicit */
.work:focus-visible { outline: 2px solid var(--accent-deep); outline-offset: 3px; }

/* --------------------------------------------------- video sound toggle --- */
/* Sits BELOW the player. Unmutes the film that is already playing: nothing opens
   over it, the picture never restarts. aria-pressed is the single source of
   truth - the glyph and the ground colour both read it, so they cannot disagree. */
/* The video, its sound toggle and the category chips form one stacked column, so
   the controls sit directly under the picture instead of below the taller list
   beside it. */
.vcol { display: grid; gap: clamp(12px, 1.4vw, 16px); align-content: start; min-width: 0; }
/* Only inside .vcol does the toggle sit hard against the picture; the home
   showreel band keeps the centred placement it had. */
.vcol .vsound__row { justify-content: flex-start; margin-top: 0; }
.vsound__row { display: flex; justify-content: center; margin-top: clamp(22px, 3vw, 36px); }
.vsound { padding: 14px 26px; font-size: .86rem; font-weight: 500;
          background: var(--accent); color: var(--on-accent); border-color: transparent;
          box-shadow: var(--shadow-1); }
.vsound:hover { background: #FFAE38; }
.vsound[aria-pressed="true"] { background: var(--ink); color: #fff; border-color: var(--ink); }
.vsound[aria-pressed="true"]:hover { background: #262626; }
.vsound__ico { flex: 0 0 auto; }
.vsound__wave { opacity: 0; transition: opacity var(--t-mid) var(--ease); }
.vsound__mute { opacity: .7; transition: opacity var(--t-mid) var(--ease); }
.vsound[aria-pressed="true"] .vsound__wave { opacity: 1; }
.vsound[aria-pressed="true"] .vsound__mute { opacity: 0; }
@media (max-width: 700px) {
  .vsound { padding: 12px 18px; font-size: .8rem; }
}

/* ------------------------------------------------- video in an art band --- */
.artband--video video { display: block; width: 100%; aspect-ratio: 16 / 9;
                        object-fit: cover; background: #0C0C0C;
                        transform: scale(1.04);
                        transition: transform 1.4s var(--ease); }
.artband--video.is-in video { transform: scale(1); }

/* ------------------------------------------------------------ YouTube ----- */
/* The player is built on the click. Until then this is only our own poster,
   so no YouTube script, cookie or request reaches the visitor. */
.yt { position: relative; border-radius: var(--r-lg); overflow: hidden;
      background: #0C0C0C; box-shadow: var(--shadow-2); }
.yt__facade { display: block; width: 100%; padding: 0; border: 0; background: none;
              cursor: pointer; position: relative; }
.yt__facade img { display: block; width: 100%; aspect-ratio: 16 / 9; object-fit: cover;
                  transition: transform 1.2s var(--ease), filter var(--t-mid); }
.yt__facade:hover img { transform: scale(1.02); filter: brightness(.9); }
.yt__badge { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%);
             display: inline-flex; align-items: center; gap: 10px;
             padding: 15px 28px; border-radius: var(--r-pill);
             background: var(--accent); color: var(--on-accent);
             font-weight: 600; font-size: .9rem; letter-spacing: .01em;
             box-shadow: var(--shadow-2); white-space: nowrap;
             transition: background var(--t-fast), transform var(--t-fast) var(--ease); }
.yt__facade:hover .yt__badge { background: #FFAE38; transform: translate(-50%, -50%) scale(1.05); }
.yt iframe { display: block; width: 100%; aspect-ratio: 16 / 9; border: 0; }
@media (max-width: 700px) {
  .yt__badge { padding: 12px 18px; font-size: .8rem; }
}

/* --------------------------------------------------------- hero banner --- */
/* Full-bleed film anchoring the top of the home and work pages. The frame is
   the film's own 16:9 up to a share of the viewport height, then it is capped so
   the headline above stays in view on arrival. */
.herobanner { position: relative; overflow: hidden; background: #0C0C0C;
              /* width must be stated explicitly. With `aspect-ratio` plus a capped
                 height the browser shrinks the WIDTH to keep the ratio, so the film
                 stopped short of the right edge instead of spanning the page. */
              width: 100%; aspect-ratio: 16 / 9; max-height: 72vh; }
.herobanner video { display: block; width: 100%; height: 100%; object-fit: cover; }
.herobanner__cap { position: absolute; left: 0; right: 0; bottom: 0;
                   padding: 78px clamp(18px, 4vw, 46px) 24px;
                   display: flex; justify-content: space-between; align-items: end;
                   gap: 18px; color: #fff; pointer-events: none;
                   /* a strong scrim, because one of the two films is pale and white
                      caps on a light frame are unreadable */
                   background: linear-gradient(to top, rgba(8,8,8,.88) 0%,
                               rgba(8,8,8,.62) 42%, rgba(8,8,8,0) 100%); }
.herobanner__cap span { font-size: .72rem; letter-spacing: .18em; text-transform: uppercase;
                        font-weight: 600; text-shadow: 0 1px 14px rgba(0,0,0,.6); }

/* the visual that fills the hero's second column */
.hero__visual { border-radius: var(--r-lg); overflow: hidden; background: var(--paper);
                box-shadow: var(--shadow-1); max-width: 520px; margin-left: auto; }
.hero__visual img { display: block; width: 100%; height: auto;
                    transition: transform 1.3s var(--ease); }
.hero__visual:hover img { transform: scale(1.03); }

/* the real logo, replacing the typed wordmark */
/* align-self matters: .wordmark is a flex column, so the default `stretch` was
   pulling the image to the full column width while the height stayed fixed —
   which flattened the logo. */
.wordmark__logo { display: block; height: 34px; width: auto; align-self: flex-start; }

@media (max-width: 1080px) {
  .hero__visual { max-width: 100%; margin: 0; }
  .herobanner { max-height: 60vh; }
}

/* ---------------------------------------------------------- social reels -- */
.reels { display: flex; gap: clamp(12px, 1.5vw, 18px); overflow-x: auto;
         overscroll-behavior-x: contain; scroll-snap-type: x proximity;
         padding: 6px clamp(18px, 4vw, 46px) 8px; scrollbar-width: thin;
         scroll-padding-left: clamp(18px, 4vw, 46px); }
.reel { flex: 0 0 auto; width: clamp(168px, 17.5vw, 224px); scroll-snap-align: start;
        position: relative; padding: 0; border: 0; background: none; cursor: pointer;
        text-align: left; }
.reel__ph { display: block; aspect-ratio: 9 / 16; border-radius: var(--r-md); overflow: hidden;
            background: #101010; box-shadow: var(--shadow-1);
            transition: box-shadow var(--t-mid) var(--ease), transform var(--t-mid) var(--ease); }
.reel__ph img { display: block; width: 100%; height: 100%; object-fit: contain; }
.reel:hover .reel__ph { transform: translateY(-5px); box-shadow: var(--shadow-2); }
.reel__play { position: absolute; left: 50%; top: 42%; transform: translate(-50%, -50%);
              width: 52px; height: 52px; border-radius: 50%; display: grid; place-items: center;
              background: rgba(255,255,255,.95); color: var(--ink); box-shadow: var(--shadow-2);
              transition: background var(--t-fast), transform var(--t-fast) var(--ease); }
.reel:hover .reel__play { background: var(--accent); transform: translate(-50%, -50%) scale(1.07); }
.reel__meta { display: grid; gap: 3px; margin-top: 10px; }
.reel__meta strong { font-size: .86rem; font-weight: 600; }
.reel__meta span { font-size: .62rem; letter-spacing: .16em; text-transform: uppercase;
                   color: var(--muted); }

/* reel player */
.rl { position: fixed; inset: 0; z-index: 210; display: grid; place-items: center;
      background: rgba(10,10,10,.94); padding: clamp(14px, 3vw, 40px); opacity: 0;
      transition: opacity var(--t-mid) var(--ease); }
.rl[hidden] { display: none; }
.rl.is-open { opacity: 1; }
.rl__inner { display: grid; justify-items: center; gap: 14px; width: min(430px, 92vw); }
/* auto width/height lets the browser fit a vertical film inside both limits while
   keeping its proportions - no crop, no stretch */
.rl__inner video { display: block; width: auto; height: auto; max-width: 100%; max-height: 72vh;
                   border-radius: var(--r-md); background: #000; }
.rl__bar { display: flex; align-items: center; justify-content: space-between; gap: 14px; width: 100%; }
.rl__title { color: #fff; font-family: var(--font-display); font-weight: 500; font-size: .95rem; }
.rl__x { position: absolute; top: 18px; right: 20px; width: 46px; height: 46px; border-radius: 50%;
         border: 1px solid rgba(255,255,255,.3); background: transparent; color: #fff;
         cursor: pointer; font-size: 1.2rem; }
.rl__x:hover { background: rgba(255,255,255,.12); }
.rl__sound { padding: 10px 18px; font-size: .78rem; }
/* on the dark overlay the "speaking" state must go light, not ink */
.rl__sound[aria-pressed="true"] { background: #fff; color: var(--ink); border-color: #fff; }

@media (max-width: 640px) {
  .reel { width: 150px; }
  .reels { padding-inline: 18px; }
}

/* category headings inside the film list */
.vlist__group { position: sticky; top: 0; z-index: 2; margin: 0; padding: 13px 2px 11px;
                display: flex; align-items: center; gap: 11px;
                background: var(--canvas); border-bottom: 1px solid var(--line); }
.vlist__group::before { content: ""; flex: none; width: 3px; height: 17px; border-radius: 2px;
                        background: var(--accent); }
.vlist__group:first-child { padding-top: 2px; }
.vlist__lab { font-family: var(--font-display); font-weight: 700; font-size: 1rem;
              letter-spacing: -.005em; color: var(--ink); }
.vlist__rule { flex: 1; height: 1px; background: var(--line); }
.vlist__n { flex: none; font-size: .68rem; font-weight: 700; letter-spacing: .06em;
            color: var(--accent-deep); background: rgba(248,160,37,.16);
            border-radius: 99px; padding: 3px 9px; }
.vitem__g { display: none; }   /* the group heading already says it */


/* ---------------------------------------------------------- event photo gallery */
.pgal { display: flex; align-items: baseline; flex-wrap: wrap; gap: 8px 18px;
        margin: 0 0 clamp(22px, 2.6vw, 36px); padding-bottom: 14px;
        border-bottom: 1px solid var(--line); }
.pgal__t { margin: 0; font-family: var(--font-display); font-weight: 600;
           font-size: clamp(1.25rem, 2vw, 1.75rem); letter-spacing: -.02em; }
.pgal__n { margin: 0; color: var(--muted); font-size: .9rem; }
.band--tight + .band--tight { padding-top: 0; }


/* --------------------------------------------------- video category chips */
.vfilters { gap: 8px; justify-content: flex-start; }
.vfilter { padding: 9px 16px; font-size: .82rem; cursor: pointer; }
.vfilter span { margin-left: 7px; opacity: .55; font-size: .74rem; font-variant-numeric: tabular-nums; }
.vfilter[aria-pressed="true"] { background: var(--ink); color: #fff; border-color: var(--ink); }
.vfilter[aria-pressed="true"] span { opacity: .7; }
.vitem[hidden], .vlist__group[hidden] { display: none; }


/* ===================================================== edge-to-edge video ===
   The home showreel and the videos-page player are built OUTSIDE .shell, so
   they span the screen by being direct children of the band.
   width is set explicitly: with `aspect-ratio` plus a capped height the browser
   otherwise shrinks the WIDTH to hold the ratio, and the film stops short of the
   right edge (that bug already bit the hero banner once).
   The home band is a montage, so it may be cropped like the hero banner; the
   videos page is a film being watched, so that one letterboxes instead.       */
.artband--bleed, .vstage--bleed { border-radius: 0; box-shadow: none; }
.artband--bleed video { width: 100%; max-height: 78vh; aspect-ratio: 16 / 9;
                        object-fit: cover; transform: none; }
.artband--bleed.is-in video { transform: none; }
.vstage--bleed { max-height: 82vh; background: #0C0C0C; }
/* `cover`, not `contain`: capping the height widens the frame past 16:9, and
   contain then parks black bars down both sides. Cover trims a few percent off
   the top and bottom instead and keeps the film filling the screen. Same
   treatment the hero banner uses. */
.vstage--bleed video { width: 100%; max-height: 82vh; aspect-ratio: 16 / 9;
                       object-fit: cover; }

/* the sound toggle + category chips, under the bleed player */
.vcontrols { display: grid; gap: clamp(12px, 1.6vw, 18px);
             margin-top: clamp(16px, 2vw, 26px); }

/* the film list: one column on a phone, three once there is room */
@media (min-width: 861px) {
  .vlist { grid-template-columns: repeat(3, minmax(0, 1fr));
           gap: 10px 26px; max-height: none; overflow: visible; align-items: start; }
  .vlist__group { grid-column: 1 / -1; position: static; }
}

/* =========================================================== phone polish ==
   Two rules that every small screen gets:
   - nothing a visitor must READ sits below 12.5px (the letter-spaced labels
     were drifting down to 9.9px on a phone);
   - every control a thumb has to hit is at least 44px tall.
   Kept in one block at the end so it is obvious what mobile overrides.      */
@media (max-width: 700px) {
  .wordmark__role, .card__kicker, .work__c, .post__meta, .member__role,
  .quote__kicker, .vstage__tag, .vitem__g, .field label, .field__legend,
  .artband__cap span, .herobanner__cap span, .hero__meta dt, .footer h4,
  .footer__base, .footer__base span, .lb__cap, .filters .filter { font-size: .78rem; }
  .footer h4, .hero__meta dt { letter-spacing: .14em; }
  .eyebrow { font-size: .78rem; margin-bottom: 14px; }
  /* the reels row and the category chips carry text too */
  .reel__meta, .reel__meta span, .vlist__n, .vfilter span, .vstage__meta span {
    font-size: .78rem; }
  .post__meta { flex-wrap: wrap; gap: 4px 10px; }
  .quote__kicker { margin-bottom: 10px; }
}

@media (max-width: 860px) {
  /* Footer links stay comfortably tappable, but a 44px row stacked on a 10px
     gap pushed the link rows 54px apart — far too airy on a phone. The gap
     goes to zero and the row shrinks, so the link text sits ~28px apart. */
  .footer ul { gap: 0; }
  .footer li a { display: inline-flex; align-items: center; min-height: 28px; }
  .footer h4 { margin-bottom: 6px; }
  .footer__grid { gap: 18px; }
  .footer__base { margin-top: 26px; padding-top: 18px; }
  .filter, .chip, .vfilter { display: inline-flex; align-items: center;
                             min-height: 44px; }
  .lb__x { width: 52px; height: 52px; }
}


/* ---------------------------------------------------- full-bleed picture ---
   Built outside .shell so it spans the screen. Used for the about intro
   illustration and the contact artwork. `width: 100vw` is deliberately NOT
   used: as a direct child of a full-width <section> the figure already gets
   the full width, and 100vw would overhang by the scrollbar's width.         */
.bleedband { display: block; width: 100%; background: var(--paper); }
.bleedband img { display: block; width: 100%; height: auto; }


/* ------------------------------------------------------------- honeypot ---
   Off-screen rather than display:none — some bots skip hidden fields but will
   happily fill one that merely sits outside the viewport. tabindex="-1" and
   aria-hidden keep it away from real visitors and screen readers. */
.hp { position: absolute; left: -9999px; top: auto; width: 1px; height: 1px;
      overflow: hidden; }


/* ------------------------------------------- website services page --------
   Two packages: a website, and a website with a customised AI agent. Built for
   the page the owner wrote from her own copy. The check mark on each list item
   is a rotated border, so nothing depends on an icon font. */
.pkg { display: block; }
.pkg__main > * + * { margin-top: 1.05em; }
.pkg__lead { font-size: var(--step-1); color: var(--ink-2); max-width: 54ch; }
.pkg__h { font-size: var(--step-1); letter-spacing: -.01em; margin-top: 1.6em; }
.pkg__main > .eyebrow + .band__title { margin-top: .35em; }
.pkg__plus { font-weight: 600; }
.pkg__case { background: var(--accent-wash); border-left: 3px solid var(--accent);
             border-radius: var(--r-sm); padding: clamp(18px, 2.4vw, 26px); }
.pkg__case p + p { margin-top: .8em; }
/* the price bar that closes each package: name and price left, button right.
   A sticky box beside the copy left a dead column on a wide screen — this fills
   the width instead, and stacks on a phone. */
.pkg__foot { display: flex; align-items: center; justify-content: space-between;
             gap: clamp(18px, 3vw, 40px); flex-wrap: wrap; margin-top: clamp(26px, 3.4vw, 44px);
             background: var(--paper); border: 1px solid var(--line-soft);
             border-left: 4px solid var(--accent);
             border-radius: var(--r-md); padding: clamp(20px, 2.6vw, 30px) clamp(20px, 3vw, 36px);
             box-shadow: var(--shadow-1); }
.pkg__foot .card__kicker { margin-bottom: .2em; }
.pkg__name { font-size: var(--step-2); letter-spacing: -.02em; }
.pkg__foot .pkg__price { margin-top: .35em; }
.pkg__foot .btn { margin-top: 0; flex: none; }
.pkg__foot .pkg__note { flex-basis: 100%; margin-top: .6em; }
.card .btn { margin-top: 1.1em; width: 100%; justify-content: center; }
.card .pkg__price { margin-bottom: .2em; }
.pkg__price { font-family: var(--font-display); font-size: var(--step-2); margin-top: 1.4em;
              display: flex; align-items: baseline; gap: .5em; flex-wrap: wrap; }
.pkg__price span { font-size: var(--step--1); color: var(--muted); font-family: var(--font-body); }
.pkg__price b { font-weight: 700; letter-spacing: -.02em; }
.pkg__note { font-size: var(--step--1); color: var(--muted); margin-top: .9em; }
.card__pad .btn { margin-top: 1.2em; width: 100%; justify-content: center; }
.card .pkg__price { margin-top: 1.2em; }
.ticks { display: grid; gap: .55em; margin-top: .9em; list-style: none; padding-left: 0; }
.ticks li { position: relative; padding-left: 1.6em; color: var(--ink-2); }
.ticks li::before { content: ""; position: absolute; left: .1em; top: .45em; width: .6em; height: .3em;
                    border-left: 2px solid var(--accent-deep); border-bottom: 2px solid var(--accent-deep);
                    transform: rotate(-45deg); }
.ticks--two { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: .5em 1.6em; }
/* the four example questions, as a soft panel rather than four loose lines:
   two columns on a wide screen, one on a phone */
.asks { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: .9em 1.8em; margin-top: 1.2em; list-style: none; padding: clamp(18px, 2.4vw, 26px);
        background: var(--accent-wash); border-radius: var(--r-md);
        border: 1px solid rgba(248, 160, 37, .22); }
.asks li { font-family: var(--font-serif); font-size: var(--step-1); color: var(--ink); }
@media (max-width: 700px) { .asks { grid-template-columns: 1fr; gap: .7em; } }
.cta-band__in { text-align: center; max-width: 62ch; margin-inline: auto; }
.cta-band__title { font-size: var(--step-3); letter-spacing: -.03em; }
.cta-band__lead { color: var(--ink-2); font-size: var(--step-1); margin-top: 1em; }
.cta-band .btn { margin-top: 1.6em; }
@media (max-width: 900px) {
  .pkg { grid-template-columns: 1fr; }
  .pkg__aside { position: static; }
  .ticks--two { grid-template-columns: 1fr; }
}


/* the grouped lists: a short label, then the items as chips. Eleven ticks in a
   column read as homework; sorted into threes and fours under a label, the same
   words are read. Group labels are organisational, the items are the owner's own. */
.wchipsets { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
            gap: clamp(18px, 2.4vw, 32px); margin-top: 1.3em; }
.wchipset__h { display: flex; align-items: center; gap: .7em; font-size: var(--step--1);
              text-transform: uppercase; letter-spacing: .12em; font-weight: 600;
              color: var(--accent-deep); margin-bottom: .7em; }
.wchipset__h::after { content: ""; flex: 1 1 auto; height: 1px; background: var(--line); }
.wchips { display: flex; flex-wrap: wrap; gap: .5em; list-style: none; padding: 0; margin: 0; }
.wchips li { background: var(--paper); border: 1px solid var(--line-soft);
            border-radius: 999px; padding: .45em .9em; font-size: var(--step-0);
            line-height: 1.35; color: var(--ink-2); }
.band--paper .wchips li { background: var(--canvas); }
@media (max-width: 700px) {
  .wchipsets { grid-template-columns: 1fr; gap: 18px; }
  .wchips li { font-size: var(--step--1); padding: .42em .8em; }
}

@media (max-width: 700px) {
  .pkg__foot { flex-direction: column; align-items: flex-start; }
  .pkg__foot .btn { width: 100%; justify-content: center; margin-top: .4em; }
}


/* ============================================================================
   LANDING PAGE — the page that sells the website service (websites.html).
   Everything is prefixed .lp- so nothing can reach any other page's rules: the
   .chips lesson, learned the hard way.
   ========================================================================== */
.lp-hero__card { background: var(--paper); border: 1px solid var(--line-soft);
                 border-radius: var(--r-lg); padding: clamp(22px, 3vw, 34px);
                 box-shadow: var(--shadow-2); }
.lp-hero__row { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between;
                gap: 6px 18px; margin: 1.05em 0 0; padding-bottom: .7em;
                border-bottom: 1px solid var(--line-soft); font-size: var(--step-1); }
.lp-hero__row:last-of-type { border-bottom: 0; }
.lp-hero__row strong { font-family: var(--font-display); font-size: var(--step-1);
                       letter-spacing: -.02em; white-space: nowrap; }
.lp-hero__row span { flex: 1 1 12ch; }
.lp-hero__note { margin-top: 1.1em; color: var(--ink-2); font-size: var(--step--1); line-height: 1.5; }

/* the two packages, side by side */
.lp-pkgs { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
           gap: clamp(20px, 2.6vw, 34px); align-items: stretch; }
.lp-pkg { display: flex; flex-direction: column; background: var(--paper);
          border: 1px solid var(--line-soft); border-radius: var(--r-lg);
          padding: clamp(22px, 2.8vw, 34px); box-shadow: var(--shadow-1); }
.lp-pkg__name { font-size: var(--step-3); letter-spacing: -.025em; margin: .18em 0 .35em; }
.lp-pkg__promise { color: var(--ink-2); margin: 0 0 1.1em; }
.lp-pkg__chips { margin-bottom: 1.4em; }
.lp-pkg__foot { margin-top: auto; border-top: 1px solid var(--line-soft); padding-top: 1.1em; }
.lp-pkg__price { font-size: var(--step-1); margin: 0 0 .8em; color: var(--ink-2); }
.lp-pkg__price strong { font-family: var(--font-display); font-size: var(--step-3);
                        color: var(--ink); letter-spacing: -.03em; }
.lp-pkg__btns { display: flex; flex-wrap: wrap; gap: 10px; }
.lp-pkg__btns .btn { flex: 1 1 auto; justify-content: center; }
.lp-pkg__note { margin: .9em 0 0; color: var(--ink-2); font-size: var(--step--1); line-height: 1.5; }
.lp-more { margin-top: 1.6em; }
.lp-more a { font-weight: 600; color: var(--accent-deep); text-decoration: none;
             border-bottom: 2px solid var(--accent); padding-bottom: 2px; }

/* the after-hours story, and the "great for" row */
.lp-after { margin-top: 1.8em; padding: clamp(20px, 2.6vw, 30px) clamp(20px, 3vw, 36px);
            background: var(--accent-wash); border-left: 4px solid var(--accent);
            border-radius: var(--r-md); font-family: var(--font-serif);
            font-size: var(--step-1); color: var(--ink); line-height: 1.5; }
.lp-suits { margin-top: 1.6em; display: flex; flex-wrap: wrap; align-items: center; gap: .5em; }
.lp-suits strong { font-size: var(--step--1); text-transform: uppercase; letter-spacing: .14em;
                   color: var(--accent-deep); margin-right: .4em; }
.lp-suits li { background: var(--paper); border: 1px solid var(--line-soft);
               border-radius: var(--r-pill); padding: .45em .85em;
               font-size: var(--step-0); color: var(--ink-2); }

/* how it starts */
.lp-steps { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
            gap: clamp(18px, 2.4vw, 30px); }
.lp-step { background: var(--paper); border: 1px solid var(--line-soft);
           border-radius: var(--r-md); padding: clamp(20px, 2.4vw, 30px); box-shadow: var(--shadow-1); }
.lp-step__n { display: inline-flex; align-items: center; justify-content: center;
              width: 40px; height: 40px; border-radius: var(--r-pill);
              background: var(--accent); color: var(--on-accent);
              font-family: var(--font-display); font-weight: 700; font-size: var(--step-1); }
.lp-step__h { font-size: var(--step-1); margin: .8em 0 .4em; }
.lp-step__p { margin: 0; color: var(--ink-2); font-size: .95rem; }

/* questions */
/* two columns on a wide screen so the questions fill the width instead of
   leaving half the page blank; one column everywhere else */
.lp-faqs { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
           gap: 12px; align-items: start; }
@media (max-width: 900px) { .lp-faqs { grid-template-columns: 1fr; } }
.lp-faq { background: var(--paper); border: 1px solid var(--line-soft);
          border-radius: var(--r-md); box-shadow: var(--shadow-1); }
.lp-faq summary { display: flex; align-items: center; justify-content: space-between;
                  gap: 18px; cursor: pointer; list-style: none;
                  padding: clamp(16px, 2vw, 22px) clamp(18px, 2.4vw, 26px);
                  font-family: var(--font-display); font-size: var(--step-1);
                  font-weight: 600; letter-spacing: -.015em; }
.lp-faq summary::-webkit-details-marker { display: none; }
.lp-faq summary::after { content: "+"; font-size: 1.5em; line-height: 1;
                         color: var(--accent-deep); flex: none; }
.lp-faq[open] summary::after { content: "–"; }
.lp-faq__a { padding: 0 clamp(18px, 2.4vw, 26px) clamp(18px, 2.2vw, 24px);
             color: var(--ink-2); line-height: 1.62; }
.cta-band .hero__actions { justify-content: center; }

/* the phone-only bar that follows the reader down the page */
.lp-sticky { display: none; }
@media (max-width: 760px) {
  .lp-sticky { display: flex; position: fixed; left: 0; right: 0; bottom: 0; z-index: 40;
               gap: 10px; padding: 12px 16px calc(12px + env(safe-area-inset-bottom));
               background: rgba(251, 250, 248, .96); border-top: 1px solid var(--line);
               backdrop-filter: blur(8px); }
  .lp-sticky .btn { flex: 1 1 auto; justify-content: center; }
  body:has(.lp-sticky) main { padding-bottom: 96px; }
  .lp-pkgs, .lp-steps { grid-template-columns: 1fr; }
}


/* the AI Agent band: dark, so the one section that sells the upgrade stands out */
.lp-dark { background: var(--ink); color: #fff; }
.lp-dark .band__title { color: #fff; }
.lp-dark .band__lead { color: rgba(255, 255, 255, .80); }
.lp-dark .eyebrow { color: var(--accent); }
.lp-dark .asks { background: rgba(255, 255, 255, .07); border-color: rgba(248, 160, 37, .40); }
.lp-dark .asks li { color: #fff; }
.lp-dark__line { margin-top: 1.5em; max-width: 58ch; color: rgba(255, 255, 255, .88);
                 font-size: var(--step-1); line-height: 1.5; }


/* ------------------------------------------------------- packages: colour --
   Light muted washes, each with a darker version of the same colour for the icon
   and the hairline, so a coloured box still reads as a box with strong text in it.
   The words are unchanged; only the presentation moved. */
:root {
  --z-sky:   #E4EBF4;  --z-sky-line:   #C6D6E8;  --z-sky-ink:   #2C5C8F;
  --z-mint:  #E3EFE5;  --z-mint-line:  #C5DCCA;  --z-mint-ink:  #2C6843;
  --z-lilac: #EDE9F5;  --z-lilac-line: #D7CFE8;  --z-lilac-ink: #574A85;
  --z-amber: #F9F0DA;  --z-amber-line: #EBD9B3;  --z-amber-ink: #8A6316;
}

.wchipsets .wchips--pastel {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
  gap: 10px;
  align-items: start;
}
.wchips--pastel.wchips--row { grid-template-columns: repeat(auto-fit, minmax(290px, 1fr)); }
.wchips .wchip {
  display: flex;
  gap: 10px;
  align-items: flex-start;
  border-radius: 10px;
  padding: .7em .95em;
  border: 1px solid transparent;
  line-height: 1.45;
}
.wchips .wchip .wico { flex: 0 0 auto; margin-top: 2px; }
.wchips .wchip strong { font-weight: 700; color: var(--ink); }

.wchips .wchip--sky   { background: var(--z-sky);   border-color: var(--z-sky-line); }
.wchips .wchip--sky   .wico { color: var(--z-sky-ink); }
.wchips .wchip--mint  { background: var(--z-mint);  border-color: var(--z-mint-line); }
.wchips .wchip--mint  .wico { color: var(--z-mint-ink); }
.wchips .wchip--lilac { background: var(--z-lilac); border-color: var(--z-lilac-line); }
.wchips .wchip--lilac .wico { color: var(--z-lilac-ink); }

/* The price reads on its own panel, so the number is the loudest thing in the
   column rather than a line of type beside a button. */
.pkg__foot .pkg__price, .card .pkg__price {
  background: var(--z-amber);
  border: 1px solid var(--z-amber-line);
  border-radius: 12px;
  padding: .75em 1.05em;
  margin-top: 1.1em;
  width: fit-content;
}
.pkg__price b { color: var(--accent-deep); }
.pkg__price span { color: var(--z-amber-ink); }
@media (max-width: 700px) {
  .wchips .wchip { font-size: var(--step--1); }
}
