/* ==========================================================================
   UNREAL editorial system (v29): one cinematic language for every subpage,
   matched to the homepage. Loaded after each page's existing stylesheets.

   - Pages stay complete and readable without JS. Motion runs only when
     <html> carries .ed-motion (set in <head>, never under reduced motion).
   - Brand rules (AGENTS.md §3): monochrome, hairlines, clear liquid glass on
     chrome only, nothing laid over portfolio covers, no added copy.
   ========================================================================== */
:root{
  --ed-ink:#0a0a0c;
  --ed-soft:#f5f5f7;
  --ed-muted:#6e6e73;
  --ed-line:rgba(10,10,12,.09);
  --ed-dark:#0a0a0c;
  --ed-tile:#161618;
  --ed-ease:cubic-bezier(.22,.61,.21,1);
  --ed-sheet:cubic-bezier(.32,.72,0,1);
  --ed-head:74px;
  --ed-r-xl:28px;
  --ed-r-lg:22px;
  --ed-gutter:clamp(20px,5vw,84px);
}
@media(max-width:767px){:root{--ed-head:60px}}

body{font-feature-settings:"kern","liga"}
::selection{background:var(--ed-ink);color:#fff}

/* ---------- Header: the homepage nav, on every subpage ---------- */
.site-header{
  height:var(--ed-head);border-bottom:0;box-shadow:0 1px 0 var(--ed-line);color:var(--ed-ink);
  background:rgba(251,251,253,.86);
  transition:background .45s var(--ed-ease),box-shadow .45s var(--ed-ease),color .45s var(--ed-ease);
}
.header-inner{gap:24px}
.site-logo img{width:104px;transition:filter .45s var(--ed-ease)}
.header-right{display:flex;align-items:center;gap:18px}
.header-quick{display:flex;align-items:center;gap:28px}
.header-quick a{
  display:flex;align-items:center;min-height:44px;color:inherit;text-decoration:none;
  font-size:14px;letter-spacing:-.005em;opacity:.86;transition:opacity .25s var(--ed-ease);
}
.header-quick a:hover,.header-quick a[aria-current="page"]{opacity:1}
.header-quick a[aria-current="page"]{font-weight:600}
.header-enquire{
  display:flex;align-items:center;min-height:44px;padding:0 20px;border:1px solid currentColor;border-radius:999px;
  color:inherit;text-decoration:none;font-size:14px;font-weight:600;white-space:nowrap;
  transition:background .3s var(--ed-ease),color .3s var(--ed-ease),border-color .3s var(--ed-ease);
}
.header-enquire:hover{background:var(--ed-ink);border-color:var(--ed-ink);color:#fff}
.site-header a:focus-visible{outline:2px solid currentColor;outline-offset:4px;border-radius:8px}
.menu-button{color:inherit}
.menu-button span{background:currentColor}
.menu-button:focus-visible{outline-color:currentColor}

/* Over a cinematic hero the header is clear and white until the hero has scrolled away. */
html.ed-js .ed-has-hero .site-header:not(.is-solid),
body.menu-open .site-header{
  background:transparent;box-shadow:none;color:#fff;
  -webkit-backdrop-filter:none;backdrop-filter:none;
}
html.ed-js .ed-has-hero .site-header:not(.is-solid) .site-logo img,
body.menu-open .site-header .site-logo img{filter:invert(1)}
html.ed-js .ed-has-hero .site-header:not(.is-solid) .header-enquire{
  background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.62);
  -webkit-backdrop-filter:blur(5px) saturate(170%);backdrop-filter:blur(5px) saturate(170%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.32),inset 0 -1px 0 rgba(255,255,255,.1);
}
html.ed-js .ed-has-hero .site-header:not(.is-solid) .header-enquire:hover{background:#fff;border-color:#fff;color:var(--ed-ink)}
body.menu-open .header-quick,body.menu-open .header-enquire{visibility:hidden}

/* Menu: the homepage's dark full-screen overlay, numbered links. */
.mobile-menu{
  inset:0;z-index:49;
  padding:calc(var(--ed-head) + clamp(20px,5vh,56px)) clamp(18px,5vw,84px) calc(32px + env(safe-area-inset-bottom));
  background:#0a0a0c;color:#fff;
}
.mobile-menu[aria-hidden="false"]{display:flex;flex-direction:column}
.mobile-menu nav{
  width:100%;max-width:1480px;margin:auto auto 0;border-top:0;gap:clamp(2px,.8vh,12px);counter-reset:ed-menu;
}
.mobile-menu nav a{
  counter-increment:ed-menu;display:flex;align-items:baseline;gap:clamp(14px,2.4vw,26px);
  min-height:44px;padding:2px 0;border:0;color:#fff;
  font-size:clamp(2.4rem,8.6vw,5.2rem);font-weight:700;letter-spacing:-.035em;line-height:1.06;
  transition:opacity .25s var(--ed-ease);
}
.mobile-menu nav a::before{
  content:counter(ed-menu,decimal-leading-zero);flex:0 0 auto;
  font-size:clamp(.68rem,1vw,.82rem);font-weight:600;letter-spacing:.14em;color:#a1a1a6;font-variant-numeric:tabular-nums;
}
@media(hover:hover){.mobile-menu nav a:hover{opacity:.55}}
.mobile-menu-foot{
  width:100%;max-width:1480px;margin:clamp(30px,6vh,60px) auto auto;padding-top:0;
  display:flex;flex-wrap:wrap;align-items:center;gap:14px 30px;color:#bbb;font-size:12.5px;letter-spacing:.04em;
}
.mobile-menu-foot a{
  display:inline-flex;align-items:center;min-height:44px;padding:0 24px;border:1px solid rgba(255,255,255,.4);
  border-radius:999px;color:#fff;font-weight:600;text-decoration:none;letter-spacing:0;
  transition:background .3s var(--ed-ease),color .3s var(--ed-ease);
}
.mobile-menu-foot a:hover{background:#fff;color:var(--ed-ink)}
@media(prefers-reduced-motion:no-preference){
  body.menu-open .mobile-menu nav a{animation:ed-menu-in .7s var(--ed-sheet) both}
  body.menu-open .mobile-menu nav a:nth-child(2){animation-delay:.06s}
  body.menu-open .mobile-menu nav a:nth-child(3){animation-delay:.12s}
  body.menu-open .mobile-menu nav a:nth-child(4){animation-delay:.18s}
  body.menu-open .mobile-menu nav a:nth-child(5){animation-delay:.24s}
  body.menu-open .mobile-menu nav a:nth-child(6){animation-delay:.3s}
  body.menu-open .mobile-menu nav a:nth-child(7){animation-delay:.36s}
  body.menu-open .mobile-menu nav a:nth-child(n+8){animation-delay:.42s}
}
@keyframes ed-menu-in{from{opacity:0;transform:translate3d(0,24px,0)}to{opacity:1;transform:none}}
@media(max-width:767px){
  .header-quick{display:none}
  .header-right{gap:8px}
  .header-enquire{padding:0 15px;font-size:13px}
}
@media(max-height:500px){
  .mobile-menu nav a{font-size:clamp(1.4rem,4.4vw,2.2rem)}
  .mobile-menu-foot{margin-top:24px}
}

/* ---------- Cinematic hero ---------- */
.cine-hero{
  position:relative;isolation:isolate;overflow:hidden;overflow:clip;
  display:flex;flex-direction:column;justify-content:flex-end;
  min-height:max(600px,100vh);min-height:max(600px,100svh);
  margin-top:calc(var(--ed-head) * -1);
  padding:calc(var(--ed-head) + clamp(64px,12vh,140px)) 0 clamp(40px,7vh,84px);
  border:0;background:var(--ed-dark);color:#fff;text-align:center;
}
.cine-hero__media{position:absolute;inset:0;z-index:-2;overflow:hidden;background:var(--ed-dark)}
.cine-hero__media picture{position:absolute;inset:0;display:block}
.cine-hero__media img,.cine-hero__media>video{
  position:absolute;left:0;top:0;width:100%;height:100%;max-width:none;
  object-fit:cover;object-position:var(--ed-focus,50% 50%);
}
.cine-hero__media>video{opacity:0;transition:opacity 1.1s var(--ed-ease)}
.cine-hero__media.is-playing>video{opacity:1}
@media(max-width:767px){.cine-hero__media img{object-position:var(--ed-focus-m,var(--ed-focus,50% 50%))}}
.cine-hero::after{
  content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;
  background:
    linear-gradient(180deg,rgba(5,5,7,.58) 0,rgba(5,5,7,0) calc(var(--ed-head) + 140px)),
    radial-gradient(70% 46% at 50% 64%,rgba(5,5,7,.34),rgba(5,5,7,0) 72%),
    linear-gradient(0deg,rgba(5,5,7,.92) 0,rgba(5,5,7,.7) 30%,rgba(5,5,7,.22) 64%,rgba(5,5,7,.06) 100%);
}
.cine-hero--left::after{
  background:
    linear-gradient(180deg,rgba(5,5,7,.58) 0,rgba(5,5,7,0) calc(var(--ed-head) + 140px)),
    linear-gradient(0deg,rgba(5,5,7,.9) 0,rgba(5,5,7,.6) 28%,rgba(5,5,7,.12) 60%,rgba(5,5,7,0) 100%),
    linear-gradient(90deg,rgba(5,5,7,.45) 0,rgba(5,5,7,0) 60%);
}
@media(max-width:767px){
  .cine-hero::after{
    background:
      linear-gradient(180deg,rgba(5,5,7,.55) 0,rgba(5,5,7,.12) 22%),
      linear-gradient(0deg,rgba(5,5,7,.94) 0,rgba(5,5,7,.78) 42%,rgba(5,5,7,.3) 72%,rgba(5,5,7,.12) 100%);
  }
}
.cine-hero>.shell{position:relative;z-index:1}
.cine-hero .draft-hero-grid{gap:0}
.cine-hero h1,.cine-hero .draft-title{color:#fff;text-shadow:0 2px 40px rgba(0,0,0,.22)}
.cine-hero .draft-title,.cine-hero .draft-title.compact{
  max-width:15ch;font-size:clamp(3.2rem,7.2vw,7.4rem);line-height:.94;letter-spacing:-.052em;font-weight:700;
}
.cine-hero .draft-lede{max-width:44rem;margin-top:clamp(20px,2.4vw,30px);color:rgba(255,255,255,.86);text-shadow:0 1px 18px rgba(0,0,0,.45)}
.cine-hero a:not(.button){color:#fff;text-decoration-color:rgba(255,255,255,.55)}
.cine-hero .hero-actions{justify-content:center;margin-top:clamp(26px,3vw,36px)}
.cine-hero .button{background:#fff;border-color:#fff;color:var(--ed-ink)}
.cine-hero .button.outline,.cine-hero .button.glass{
  background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.62);color:#fff;
  -webkit-backdrop-filter:blur(5px) saturate(170%);backdrop-filter:blur(5px) saturate(170%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.32),inset 0 -1px 0 rgba(255,255,255,.1);
}
.cine-hero .button.outline:hover,.cine-hero .button.glass:hover{background:#fff;color:var(--ed-ink)}
.cine-hero .language-link{color:rgba(255,255,255,.92)}
.cine-hero .draft-aside{
  max-width:46rem;margin:clamp(30px,4vw,48px) auto 0;padding-top:18px;border-top:1px solid rgba(255,255,255,.2);
  color:rgba(255,255,255,.7);font-size:12.5px;line-height:1.6;
}
.cine-hero .draft-aside strong{color:#fff}
.cine-hero .eyebrow{color:rgba(255,255,255,.7)}

/* Daylight plates (bright skies) get a deeper veil so white type stays readable. */
.cine-hero--bright::after{
  background:
    linear-gradient(180deg,rgba(5,5,7,.62) 0,rgba(5,5,7,.28) 34%,rgba(5,5,7,.34) 100%),
    linear-gradient(0deg,rgba(5,5,7,.9) 0,rgba(5,5,7,.62) 40%,rgba(5,5,7,0) 78%);
}

/* Services hub: its inline hero layout yields to the cinematic hero. */
.services-page .services-hero.cine-hero{
  display:flex;place-items:initial;min-height:max(600px,100vh);min-height:max(600px,100svh);
  padding:calc(var(--ed-head) + clamp(64px,12vh,140px)) 0 clamp(40px,7vh,84px);
}
.services-page .cine-hero .services-hero-inner{position:relative;z-index:1}
.services-page .cine-hero .services-hero-title{color:#fff;text-shadow:0 2px 40px rgba(0,0,0,.22);font-weight:700}
.services-page .cine-hero .services-hero-copy{color:rgba(255,255,255,.86);text-shadow:0 1px 18px rgba(0,0,0,.45)}
.services-page .cine-hero h1.services-hero-copy{color:#fff}

.services-page .services-hero.cine-hero+.services-jump-nav{padding-top:clamp(28px,3.2vw,40px)}
@supports (animation-timeline:scroll()){
  @media(prefers-reduced-motion:no-preference){
    .services-page .cine-hero>.services-hero-inner{animation:ed-hero-fade linear both;animation-timeline:scroll(root);animation-range:8vh 82vh}
  }
}
/* subpages.css hides .reveal until its script runs; without JavaScript keep it visible. */
html:not(.ed-js) .reveal{opacity:1;transform:none}

/* Case studies: the title sits low and left, like a film title card. */
.cine-hero--left{text-align:left}
.case-study .cine-hero{padding-block:calc(var(--ed-head) + clamp(64px,12vh,140px)) clamp(44px,7vh,88px)}
.case-study .cine-hero .case-intro-copy>h1,.cine-hero--left h1{
  max-width:12ch;font-size:clamp(3.6rem,8.4vw,9rem);line-height:.9;letter-spacing:-.055em;font-weight:700;
}
.case-study .cine-hero .case-intro-copy>p:not(.eyebrow){color:rgba(255,255,255,.82)}
.case-study:not(.case-study--portrait) .cine-hero .case-intro-copy{align-items:end}

/* Portrait films: the player floats over a softened still of the same film. */
.case-study--portrait .cine-hero{min-height:0;justify-content:center}
.case-study--portrait .cine-hero .cine-hero__media img{filter:blur(28px) saturate(1.15);transform:scale(1.18);opacity:.62}
.case-study--portrait .cine-hero::after{background:linear-gradient(180deg,rgba(5,5,7,.6),rgba(5,5,7,.78))}
.case-study--portrait .cine-hero .case-player--portrait{border-radius:24px;box-shadow:0 50px 110px -40px rgba(0,0,0,.85),0 0 0 1px rgba(255,255,255,.08)}

/* Play/pause for a moving hero (WCAG 2.2.2), liquid glass like the homepage. */
.cine-toggle{
  position:absolute;z-index:2;right:clamp(18px,4vw,64px);bottom:clamp(18px,4vh,40px);
  width:44px;height:44px;padding:0;border:1px solid rgba(255,255,255,.55);border-radius:50%;
  display:grid;place-items:center;color:#fff;cursor:pointer;overflow:hidden;
  background:rgba(255,255,255,.1);-webkit-backdrop-filter:blur(5px) saturate(170%);backdrop-filter:blur(5px) saturate(170%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.32),inset 0 -1px 0 rgba(255,255,255,.1),0 6px 18px rgba(0,0,0,.18);
}
.cine-toggle svg{width:14px;height:14px}
.cine-toggle:focus-visible{outline:2px solid #fff;outline-offset:3px}

@media(prefers-reduced-motion:no-preference){
  .cine-hero__media img{animation:ed-settle 2.6s var(--ed-ease) both}
  .case-study--portrait .cine-hero .cine-hero__media img{animation:none}
  .cine-hero .draft-hero-grid>div>*,.cine-hero .draft-aside,.cine-hero .case-intro-copy>*,.cine-hero .case-film{
    animation:ed-rise 1.15s var(--ed-ease) backwards;
  }
  .cine-hero .draft-hero-grid>div>:nth-child(2),.cine-hero .case-intro-copy>:nth-child(2){animation-delay:.08s}
  .cine-hero .draft-hero-grid>div>:nth-child(3),.cine-hero .case-intro-copy>:nth-child(3){animation-delay:.16s}
  .cine-hero .draft-hero-grid>div>:nth-child(n+4),.cine-hero .case-intro-copy>:nth-child(n+4){animation-delay:.22s}
  .cine-hero .draft-aside,.cine-hero .case-film{animation-delay:.3s}
}
@keyframes ed-settle{from{transform:scale(1.07)}to{transform:scale(1)}}
@keyframes ed-rise{from{opacity:0;transform:translate3d(0,26px,0)}to{opacity:1;transform:none}}

/* Scroll-linked depth where the browser supports it (static elsewhere). */
@supports (animation-timeline:scroll()){
  @media(prefers-reduced-motion:no-preference){
    .cine-hero:not(.cine-hero--still) .cine-hero__media{animation:ed-hero-drift linear both;animation-timeline:scroll(root);animation-range:0 100vh}
  }
}
@keyframes ed-hero-drift{to{transform:translate3d(0,16vh,0)}}
@keyframes ed-hero-fade{to{opacity:.12;transform:translate3d(0,-5vh,0)}}

/* Product hero (GEO): a real screenshot in a browser window rises out of a dark stage. */
.cine-hero--product{justify-content:flex-start;padding-bottom:0;background:radial-gradient(90% 70% at 50% 100%,#1c1c22 0,#0a0a0c 62%)}
.cine-hero--product::after{display:none}
.cine-hero--product .cine-hero__media{display:none}
.cine-hero__product{
  position:relative;z-index:1;width:min(1120px,calc(100% - 2 * var(--ed-gutter)));margin:clamp(44px,6vw,80px) auto 0;
  border-radius:16px 16px 0 0;overflow:hidden;background:#ececf0;
  box-shadow:0 -1px 0 rgba(255,255,255,.12),0 0 0 1px rgba(255,255,255,.06),0 -40px 120px -40px rgba(120,140,255,.28);
  transform-origin:50% 100%;
}
.cine-hero__product::before{
  content:"";display:none;height:30px;
  background:
    radial-gradient(circle at 18px 50%,#c7c7cc 0 4.5px,transparent 5px),
    radial-gradient(circle at 34px 50%,#c7c7cc 0 4.5px,transparent 5px),
    radial-gradient(circle at 50px 50%,#c7c7cc 0 4.5px,transparent 5px),#ececf0;
}
.cine-hero__product img{display:block;width:100%;height:auto;max-height:min(56vh,620px);object-fit:cover;object-position:50% 0}
@media(prefers-reduced-motion:no-preference){
  .cine-hero__product{animation:ed-product-rise 1.4s var(--ed-sheet) .15s both}
}
@keyframes ed-product-rise{from{opacity:0;transform:translate3d(0,80px,0) scale(.96)}to{opacity:1;transform:none}}
@media(max-width:640px){.cine-hero__product{border-radius:12px 12px 0 0}.cine-hero__product::before{height:22px;background-size:auto}.cine-hero__product img{max-height:46vh}}

/* Mosaic hero (production notes): many films, one page. */
.cine-hero__mosaic{position:absolute;inset:-4%;display:grid;grid-template-columns:repeat(4,1fr);grid-auto-rows:1fr;gap:6px;transform:rotate(-4deg) scale(1.12)}
.cine-hero__mosaic img{position:static;width:100%;height:100%;object-fit:cover;border-radius:10px;filter:saturate(.9)}
@media(max-width:767px){.cine-hero__mosaic{grid-template-columns:repeat(2,1fr)}.cine-hero__mosaic img:nth-child(n+7){display:none}}

/* A copy tile can open with a real image from the work it describes. */
.copy-card{--ed-pad:clamp(30px,3.6vw,52px);overflow:hidden}
.copy-card>.copy-card__media{
  display:block;width:calc(100% + 2 * var(--ed-pad));max-width:none;height:auto;aspect-ratio:16/10;object-fit:cover;
  margin:calc(var(--ed-pad) * -1) calc(var(--ed-pad) * -1) clamp(24px,2.6vw,34px);
}

/* Split chapter: one tall image beside the copy (left-aligned heads inside). */
.ed-split{display:grid;grid-template-columns:minmax(0,.82fr) minmax(0,1.18fr);gap:clamp(32px,5.5vw,96px);align-items:start}
.ed-split__media{position:sticky;top:calc(var(--ed-head) + 32px);margin:0;overflow:hidden;border-radius:var(--ed-r-xl);aspect-ratio:4/5;background:#111}
.ed-split__media img{width:100%;height:100%;object-fit:cover;object-position:var(--ed-focus,50% 50%)}
.ed-split .draft-section-head{margin:0 0 clamp(32px,4vw,56px);text-align:left}
.ed-split .draft-heading,.ed-split .draft-section-copy{margin-left:0}
.ed-split .copy-columns{grid-template-columns:1fr}
.ed-split--flip{grid-template-columns:minmax(0,1.18fr) minmax(0,.82fr)}
.ed-split--flip .ed-split__media{order:2}
@media(max-width:980px){
  .ed-split,.ed-split--flip{grid-template-columns:minmax(0,1fr)}
  .ed-split__media{position:relative;top:0;aspect-ratio:4/3;order:0!important}
}

/* ---------- Liquid glass (Josh's CLEAR glass recipe, AGENTS.md §3) ----------
   Not frosted: thin blur, no tint, fresnel highlights top and bottom, a -45° glare and a soft lift.
   .lg on light surfaces (pair with .ed-ambient so it has something to refract), .lg--dark over media/dark.
   Chrome only (controls, chips, badges, panels); never on portfolio covers; never on animated elements. */
.lg{
  position:relative;isolation:isolate;overflow:hidden;
  background:rgba(255,255,255,.42);
  -webkit-backdrop-filter:blur(9px) saturate(180%);backdrop-filter:blur(9px) saturate(180%);
  border:1px solid rgba(255,255,255,.72);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.9),inset 0 -1px 0 rgba(255,255,255,.38),
    0 0 0 1px rgba(10,10,12,.05),0 -8px 24px rgba(10,10,12,.035),0 12px 32px -14px rgba(10,10,12,.2);
}
.lg::before{
  content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;border-radius:inherit;
  background:linear-gradient(135deg,rgba(255,255,255,.6) 0%,rgba(255,255,255,0) 36%,rgba(255,255,255,0) 64%,rgba(255,255,255,.34) 100%);
}
.lg--dark{
  color:#fff;background:rgba(255,255,255,.1);
  -webkit-backdrop-filter:blur(5px) saturate(170%);backdrop-filter:blur(5px) saturate(170%);
  border-color:rgba(255,255,255,.5);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.36),inset 0 -1px 0 rgba(255,255,255,.12),
    0 -8px 24px rgba(0,0,0,.08),0 14px 36px -16px rgba(0,0,0,.5);
}
.lg--dark::before{background:linear-gradient(135deg,rgba(255,255,255,.3) 0%,rgba(255,255,255,0) 40%,rgba(255,255,255,0) 60%,rgba(255,255,255,.16) 100%)}
/* Readability floor for text on glass over BRIGHT media (keep text >= 4.5:1). */
.lg--dark.lg--tint{background:rgba(12,12,14,.48)}
.lg--dark.lg--tint::before{background:linear-gradient(135deg,rgba(255,255,255,.14) 0%,rgba(255,255,255,0) 40%,rgba(255,255,255,0) 60%,rgba(255,255,255,.1) 100%)}
/* Light glass floating over DARK media keeps dark text readable. */
.lg.lg--frost{background:rgba(255,255,255,.72)}
.lg-pill{border-radius:999px}
.lg-card{border-radius:var(--ed-r-xl)}
.lg-badge{
  display:inline-grid;place-items:center;min-width:42px;height:42px;padding:0 12px;border-radius:999px;
  font-size:12px;font-weight:650;letter-spacing:.08em;font-variant-numeric:tabular-nums;
}
@supports not ((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){
  .lg{background:rgba(255,255,255,.86)}
  .lg--dark{background:rgba(22,22,24,.72)}
}
/* Ambient colour field (the homepage team/reviews washes) so light glass has something to refract. */
.ed-ambient{position:relative;isolation:isolate}
.ed-ambient::before{
  content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;
  background:
    radial-gradient(720px 460px at 14% 22%,rgba(96,132,255,.075),transparent 70%),
    radial-gradient(640px 420px at 86% 78%,rgba(255,168,110,.07),transparent 70%);
}

/* Sticky liquid-glass local navigation (chapter jumps), scroll-spied by editorial.js ([data-ed-spy]). */
.lg-subnav{position:sticky;top:calc(var(--ed-head) + 12px);z-index:40;display:flex;justify-content:center;pointer-events:none;margin:0 auto}
.lg-subnav__bar{
  pointer-events:auto;display:flex;align-items:center;gap:2px;max-width:calc(100% - 2 * var(--ed-gutter));
  padding:5px;border-radius:999px;overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none;
}
.lg-subnav__bar::-webkit-scrollbar{display:none}
.lg-subnav__bar.lg{background:rgba(255,255,255,.72)}
.lg-subnav__bar a{
  flex:0 0 auto;display:inline-flex;align-items:center;gap:.3em;min-height:36px;padding:0 15px;border-radius:999px;
  color:var(--ed-ink);text-decoration:none;font-size:13px;font-weight:550;letter-spacing:-.005em;white-space:nowrap;
  transition:background .35s var(--ed-ease),color .35s var(--ed-ease);
}
.lg-subnav__bar a:hover{background:rgba(255,255,255,.55)}
.lg-subnav__bar a.is-active{background:var(--ed-ink);color:#fff}
.lg-subnav__bar a:focus-visible{outline:2px solid var(--ed-ink);outline-offset:2px}
@media(max-width:640px){.lg-subnav__bar a{min-height:34px;padding:0 12px;font-size:12.5px}}

/* ---------- Image interlude (full-bleed band between chapters) ---------- */
.cine-band{
  position:relative;isolation:isolate;overflow:hidden;overflow:clip;margin:0;
  height:clamp(340px,72vh,840px);height:clamp(340px,72svh,840px);background:var(--ed-dark);
}
.cine-band picture{position:absolute;inset:0;display:block}
.cine-band img{
  position:absolute;left:0;top:0;width:100%;height:100%;max-width:none;
  object-fit:cover;object-position:var(--ed-focus,50% 50%);
}
.cine-band--inset{width:min(calc(100% - 2 * var(--ed-gutter)),1460px);margin:clamp(24px,4vw,56px) auto;border-radius:var(--ed-r-xl)}
.cine-band figcaption{
  position:absolute;left:clamp(18px,4vw,56px);bottom:clamp(16px,3vw,32px);z-index:1;max-width:min(560px,80%);
  color:rgba(255,255,255,.88);font-size:12.5px;line-height:1.5;text-shadow:0 1px 14px rgba(0,0,0,.45);
}
.cine-band:has(figcaption)::after{
  content:"";position:absolute;inset:auto 0 0;height:40%;pointer-events:none;
  background:linear-gradient(0deg,rgba(5,5,7,.55),transparent);
}
@supports (animation-timeline:view()){
  @media(prefers-reduced-motion:no-preference){
    .cine-band img{top:-12%;height:124%;animation:ed-band-drift linear both;animation-timeline:view()}
  }
}
@keyframes ed-band-drift{from{transform:translate3d(0,-8%,0)}to{transform:translate3d(0,8%,0)}}
@keyframes ed-band-open{from{clip-path:inset(7% 7% round var(--ed-r-xl))}to{clip-path:inset(0 round var(--ed-r-xl))}}
@media(max-width:640px){.cine-band{height:58svh}.cine-band--inset{border-radius:20px}}

/* ---------- Film stills (case studies) ---------- */
.ed-stills{
  display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:clamp(10px,1.2vw,18px);
  margin:0;padding:0;list-style:none;
}
.ed-stills>*{
  grid-column:span 4;margin:0;overflow:hidden;border-radius:var(--ed-r-lg);background:#111;aspect-ratio:16/9;
}
.ed-stills>:first-child{grid-column:span 8;grid-row:span 2;aspect-ratio:auto}
.ed-stills img{width:100%;height:100%;object-fit:cover;transition:transform 1.2s var(--ed-ease)}
@media(hover:hover){.ed-stills>:hover img{transform:scale(1.035)}}
.ed-stills--even>*,.ed-stills--even>:first-child{grid-column:span 6;grid-row:auto;aspect-ratio:16/9}
@media(max-width:767px){
  .ed-stills{grid-template-columns:repeat(2,minmax(0,1fr))}
  .ed-stills>*,.ed-stills--even>*{grid-column:span 1;aspect-ratio:16/9;border-radius:14px}
  .ed-stills>:first-child{grid-column:1/-1;grid-row:auto;aspect-ratio:16/9}
}

/* The stills gallery sits right under the film, so it needs less air above it. */
.ed-stills-section{padding-block:0 clamp(64px,8vw,120px)}
.case-landscape-film+.ed-stills-section{margin-top:clamp(-40px,-3vw,-16px)}

/* Chinese homepage keeps its own video hero and header logic; links follow its white state. */
.zh-home .site-header:not(.is-past-hero){color:#fff}
.zh-home .site-header:not(.is-past-hero) .header-enquire{
  background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.62);
  -webkit-backdrop-filter:blur(5px) saturate(170%);backdrop-filter:blur(5px) saturate(170%);
}
.zh-home.menu-open .site-header{color:#fff}

/* ---------- Chapters ---------- */
.draft-section,.section{border-top:0}
.draft-section{padding:clamp(96px,11vw,172px) 0}
.draft-section.soft{background:var(--ed-soft)}
.draft-section.dark{background:var(--ed-dark)}
.draft-section-head{max-width:1100px;margin-bottom:clamp(48px,6vw,92px)}
.draft-heading{
  max-width:17ch;font-size:clamp(2.6rem,5.3vw,5.7rem);line-height:.97;letter-spacing:-.05em;font-weight:700;
}
.draft-section-copy{
  max-width:46rem;margin-top:clamp(22px,2.4vw,30px);color:var(--ed-muted);
  font-size:clamp(1.05rem,1.45vw,1.28rem);line-height:1.6;letter-spacing:-.01em;
}
.draft-section.dark .draft-section-copy{color:#a1a1a6}
.draft-section-copy a{color:inherit;text-underline-offset:3px}
.source-note{color:var(--ed-muted)}
.draft-section.dark .source-note{color:#86868b}

/* Gallery cards (service cards): the homepage service-frame look, as a bento. */
.service-cards{grid-template-columns:repeat(12,minmax(0,1fr));gap:clamp(36px,4vw,56px) clamp(16px,1.8vw,28px)}
.service-card{grid-column:span 4;overflow:visible;border:0;border-radius:0;background:transparent}
.service-card img{
  height:auto;aspect-ratio:4/3;border-radius:var(--ed-r-lg);background:#e5e5e8;
  transition:transform .8s var(--ed-ease);
}
.service-card:has(img){isolation:isolate}
.service-card div{padding:20px 2px 0}
.service-card div>span:first-child{color:var(--ed-muted);font-size:11px;letter-spacing:.14em}
.draft-section.dark .service-card div>span:first-child{color:#a1a1a6}
.service-card h3{margin:10px 0 8px;font-size:clamp(1.3rem,1.8vw,1.7rem);line-height:1.12;letter-spacing:-.035em;font-weight:650}
.service-card p{color:var(--ed-muted);font-size:15px;line-height:1.55}
.service-cards:has(>:nth-child(5)) .service-card:nth-child(-n+2),
.service-cards:has(>:nth-child(4):last-child) .service-card,
.service-cards:has(>:nth-child(2):last-child) .service-card{grid-column:span 6}
.service-cards:has(>:nth-child(5)) .service-card:nth-child(-n+2) img,
.service-cards:has(>:nth-child(2):last-child) .service-card img{aspect-ratio:16/10;border-radius:24px}
.service-cards:has(>:nth-child(6)) .service-card:nth-child(n+3){grid-column:span 3}
.service-cards:has(>:nth-child(7)) .service-card{grid-column:span 4}
.service-cards:has(>:nth-child(7)) .service-card img{aspect-ratio:4/3;border-radius:var(--ed-r-lg)}
.draft-section.dark .service-card h3{color:#fff}
.draft-section.dark .service-card p{color:#a1a1a6}
@media(hover:hover){.service-card:hover img{transform:scale(1.02)}}

/* Text tiles (audience): borderless bento with large gradient numerals. */
.audience-grid{gap:clamp(12px,1.4vw,20px)}
.audience-card{
  position:relative;display:flex;flex-direction:column;justify-content:flex-end;overflow:hidden;
  min-height:clamp(280px,25vw,360px);padding:clamp(28px,3vw,40px);border:0;border-radius:var(--ed-r-xl);
  background:var(--ed-soft);
}
.draft-section.soft .audience-card{background:#fff}
.draft-section.dark .audience-card{background:var(--ed-tile);color:#fff}
.audience-card>span:first-child{
  display:block;margin:-.06em 0 clamp(28px,4vw,56px);
  font-size:clamp(3.6rem,6vw,5.8rem);font-weight:700;letter-spacing:-.06em;line-height:1;
  background:linear-gradient(180deg,var(--ed-ink) 0%,rgba(10,10,12,.12) 92%);
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.draft-section.dark .audience-card>span:first-child{background-image:linear-gradient(180deg,#fff 0%,rgba(255,255,255,.12) 92%)}
.audience-card h3{margin:auto 0 12px;font-size:clamp(1.55rem,2.3vw,2.3rem);line-height:1.06;letter-spacing:-.04em;font-weight:700}
.audience-card p{color:var(--ed-muted);font-size:15.5px;line-height:1.58}
.draft-section.dark .audience-card p{color:#a1a1a6}

/* Paired copy cards: soft tiles instead of a ruled table. */
.copy-columns{gap:clamp(12px,1.4vw,20px);background:transparent;border:0;border-radius:0;overflow:visible}
.copy-card{min-height:0;padding:var(--ed-pad);border-radius:var(--ed-r-xl);background:var(--ed-soft)}
.draft-section.soft .copy-card{background:#fff}
.draft-section.dark .copy-card{background:var(--ed-tile);color:#fff}
.copy-card h3{font-size:clamp(1.6rem,2.6vw,2.6rem);line-height:1.05;letter-spacing:-.04em;font-weight:700}
.copy-card p,.copy-card li{color:var(--ed-muted)}
.draft-section.dark .copy-card p,.draft-section.dark .copy-card li{color:#a1a1a6}
.copy-card p+p{margin-top:14px}
.pending-box{border:0;border-radius:var(--ed-r-lg);background:var(--ed-soft);padding:clamp(22px,2.6vw,32px)}
.draft-section.soft .pending-box{background:#fff}

/* Process steps: a timeline with a light rail (dark chapters), lit as it scrolls in. */
.step-grid{position:relative;gap:clamp(20px,2.6vw,40px);padding-top:6px}
.step-grid::before,.step-grid::after{content:"";position:absolute;left:0;right:0;top:0;height:1px;pointer-events:none}
.step-grid::before{background:rgba(255,255,255,.16)}
.step-grid::after{background:linear-gradient(90deg,rgba(255,255,255,.9),rgba(255,255,255,.25));transform-origin:left center}
.step{position:relative;min-height:0;padding:clamp(34px,3.4vw,50px) 0 0;border:0;border-radius:0;background:transparent}
.step::before{
  content:"";position:absolute;top:-5px;left:0;width:11px;height:11px;border-radius:50%;background:#fff;
  box-shadow:0 0 0 6px rgba(255,255,255,.08),0 0 26px rgba(255,255,255,.4);
}
.step>span:first-child{display:block;color:#8e8e93;font-size:11px;letter-spacing:.16em;text-transform:uppercase}
.step h3{margin:20px 0 14px;font-size:clamp(1.7rem,2.8vw,2.9rem);line-height:1.02;letter-spacing:-.045em;font-weight:700}
.step p{color:#a1a1a6;font-size:15.5px;line-height:1.6}
.draft-section:not(.dark) .step-grid::before{background:var(--ed-line)}
.draft-section:not(.dark) .step-grid::after{background:linear-gradient(90deg,var(--ed-ink),rgba(10,10,12,.25))}
.draft-section:not(.dark) .step::before{background:var(--ed-ink);box-shadow:0 0 0 6px rgba(10,10,12,.06)}
.draft-section:not(.dark) .step p{color:var(--ed-muted)}
.step-grid:has(>:nth-child(4)){grid-template-columns:repeat(3,minmax(0,1fr));row-gap:clamp(48px,5vw,72px)}
@supports (animation-timeline:view()){
  @media(prefers-reduced-motion:no-preference){
    .step-grid::after{animation:ed-rail linear both;animation-timeline:view();animation-range:entry 20% cover 55%}
  }
}
@keyframes ed-rail{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@media(max-width:980px){
  .step-grid{padding-top:0;padding-left:30px}
  .step-grid::before,.step-grid::after{left:5px;right:auto;top:6px;bottom:0;width:1px;height:auto}
  .step-grid::after{background:linear-gradient(180deg,rgba(255,255,255,.9),rgba(255,255,255,.25));transform-origin:center top}
  .draft-section:not(.dark) .step-grid::after{background:linear-gradient(180deg,var(--ed-ink),rgba(10,10,12,.25))}
  .step{padding-top:0}
  .step::before{top:6px;left:-30px}
  .step h3{margin-top:14px}
  .step-grid:has(>:nth-child(4)){grid-template-columns:1fr}
}
@supports (animation-timeline:view()){
  @media(prefers-reduced-motion:no-preference) and (max-width:980px){
    .step-grid::after{animation-name:ed-rail-v}
  }
}
@keyframes ed-rail-v{from{transform:scaleY(0)}to{transform:scaleY(1)}}

/* ---------- Numbers: the homepage stats language ---------- */
.fact-band{border-block:0;gap:0;padding-block:clamp(64px,8vw,112px)}
.fact{min-height:0;padding:0 clamp(12px,2vw,28px);border:0;text-align:center;justify-content:flex-start}
.fact+.fact{border-left:1px solid var(--ed-line)}
.fact strong,.result strong,.metric strong{font-weight:700;letter-spacing:-.05em;font-variant-numeric:tabular-nums;white-space:nowrap}
.fact strong{font-size:clamp(3rem,5.4vw,5.6rem);line-height:.98}
.fact span{max-width:19em;margin:14px auto 0;color:var(--ed-muted);font-size:13px;line-height:1.45}
.result-grid{gap:clamp(12px,1.4vw,20px);border:0;border-radius:0;overflow:visible}
.result{padding:clamp(28px,3vw,40px);border:0;border-radius:var(--ed-r-xl);background:var(--ed-soft)}
.draft-section.soft .result{background:#fff}
.draft-section.dark .result{background:var(--ed-tile)}
.result strong{font-size:clamp(2.6rem,4.6vw,4.8rem);line-height:1}
.result span{color:var(--ed-muted);font-size:13px;line-height:1.45}
.metric-grid{gap:clamp(12px,1.4vw,20px);border:0;border-radius:0;overflow:visible}
.metric{border:0;border-radius:var(--ed-r-xl);background:var(--ed-soft)}
.section.dark .metric{background:var(--ed-tile)}
@media(max-width:980px){
  .fact{padding:clamp(26px,5vw,40px) 12px}
  .fact+.fact{border-left:0}
  .fact:nth-child(even){border-left:1px solid var(--ed-line)}
  .fact:nth-child(-n+2){border-bottom:1px solid var(--ed-line)}
  .fact-band{padding-block:clamp(36px,7vw,64px)}
}
@media(max-width:640px){
  .fact-band{grid-template-columns:repeat(2,minmax(0,1fr))}
  .fact{min-height:0;border-right:0}
  .fact strong{font-size:clamp(2.2rem,11vw,3.2rem)}
  .fact span{font-size:11.5px}
  .result-grid,.result-grid.six{grid-template-columns:repeat(2,minmax(0,1fr))}
  .result{min-height:0;padding:22px 18px;border-radius:20px}
  .result strong{font-size:clamp(1.9rem,9vw,2.6rem)}
}

/* ---------- Proof, story and case layouts ---------- */
.proof-visual{border-radius:var(--ed-r-xl);box-shadow:0 44px 90px -46px rgba(0,0,0,.42)}
.proof-copy h2{font-weight:700}
.brief-copy h2{font-weight:700}
@media(min-width:981px){
  .editorial-page .brief-heading{position:sticky;top:calc(var(--ed-head) + 40px);align-self:start}
}
.case-study .case-player{border-radius:24px;box-shadow:0 50px 100px -50px rgba(0,0,0,.5)}
.project-facts dt{color:var(--ed-muted)}

/* Evidence screenshots: phone captures read as phones, desktop captures as a browser window.
   Frames are drawn with shadows/pseudo-elements so the numbered marks stay aligned. */
.shot:not(.shot--wide) .shot-frame{
  border-radius:24px;background:#000;
  box-shadow:0 0 0 6px #1d1d1f,0 0 0 7px #3a3a3c,0 36px 64px -30px rgba(0,0,0,.55);
}
.shot:not(.shot--wide) .shot-frame img{border-radius:24px}
.shot--wide .shot-frame{
  margin-top:0;border-radius:14px;
  box-shadow:0 0 0 1px rgba(0,0,0,.09),0 34px 70px -34px rgba(0,0,0,.4);
}
.shot--wide .shot-frame img{border-radius:14px}
.shot--wide .shot-frame::before{display:none;
  content:"";position:absolute;left:0;right:0;bottom:100%;height:26px;border-radius:12px 12px 0 0;pointer-events:none;
  background:
    radial-gradient(circle at 16px 50%,#c7c7cc 0 4px,transparent 4.5px),
    radial-gradient(circle at 30px 50%,#c7c7cc 0 4px,transparent 4.5px),
    radial-gradient(circle at 44px 50%,#c7c7cc 0 4px,transparent 4.5px),
    #ececf0;
  box-shadow:0 0 0 1px rgba(0,0,0,.09);
}
.shot-dialog .shot-frame::before{display:none}
.shot-dialog .shot .shot-frame{margin-top:0;border-radius:14px;box-shadow:0 0 0 1px var(--ed-line)}
.shot-dialog .shot .shot-frame img{border-radius:14px}
@media(max-width:560px){
  .shot:not(.shot--wide) .shot-frame,.shot:not(.shot--wide) .shot-frame img{border-radius:16px}
  .shot:not(.shot--wide) .shot-frame{box-shadow:0 0 0 4px #1d1d1f,0 0 0 5px #3a3a3c,0 24px 44px -24px rgba(0,0,0,.5)}
}

/* ---------- FAQ: the homepage accordion ---------- */
.faq-list{max-width:900px;border-top:1px solid var(--ed-line)}
.faq-list details{border-bottom:1px solid var(--ed-line)}
.faq-list summary{
  padding:26px 56px 26px 0;font-size:clamp(1.06rem,1.4vw,1.28rem);line-height:1.35;font-weight:600;letter-spacing:-.015em;
  transition:color .3s var(--ed-ease);
}
.faq-list summary:hover{color:#6e6e73}
.faq-list summary::after,.faq-list details[open] summary::after{
  content:"+";right:6px;font-size:26px;font-weight:300;line-height:1;color:#86868b;
  transition:transform .35s var(--ed-ease);
}
.faq-list details[open] summary::after{transform:translateY(-50%) rotate(45deg)}
.faq-list details p{max-width:66ch;padding:0 56px 28px 0;color:var(--ed-muted);font-size:clamp(.98rem,1.1vw,1.06rem);line-height:1.75}
.draft-section.dark .faq-list,.draft-section.dark .faq-list details{border-color:rgba(255,255,255,.14)}
.draft-section.dark .faq-list details p{color:#a1a1a6}

/* FAQ answers open smoothly where the browser can animate to auto height. */
@supports (interpolate-size:allow-keywords){
  .faq-list{interpolate-size:allow-keywords}
  .faq-list details::details-content{height:0;overflow:clip;transition:height .45s var(--ed-ease),content-visibility .45s var(--ed-ease) allow-discrete}
  .faq-list details[open]::details-content{height:auto}
}

/* Keyboard focus and inline links, one style everywhere. */
.button:focus-visible{outline:2px solid var(--ed-ink);outline-offset:3px}
.cine-hero .button:focus-visible,.section.dark .button:focus-visible,.draft-section.dark .button:focus-visible{outline-color:#fff}
:is(.draft-section-copy,.brief-body,.copy-card,.audience-card,.faq-list,.proof-copy) a:not(.button){
  text-decoration-thickness:1px;text-underline-offset:3px;
}

/* ---------- Closing call to action ---------- */
main>.section.dark:is(:last-child,:has(+ .draft-section:last-child)){position:relative;isolation:isolate;overflow:hidden;overflow:clip;padding:clamp(120px,14vw,210px) 0}
main>.section.dark:is(:last-child,:has(+ .draft-section:last-child))::before{
  content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;
  background:radial-gradient(70% 60% at 18% 0%,rgba(255,255,255,.075),transparent 70%),radial-gradient(60% 50% at 100% 100%,rgba(255,255,255,.04),transparent 70%);
}
.section.dark .section-title{font-size:clamp(3rem,6.8vw,7.2rem);line-height:.94;letter-spacing:-.055em;font-weight:700}
.section.dark .section-copy{color:#a1a1a6}
.section.dark .section-copy a{color:#fff}

/* City cross-links that follow the closing CTA join the dark ending instead of sitting as a white strip. */
main>.section.dark+.draft-section:last-child{
  background:var(--ed-dark);color:#fff;padding:0 0 clamp(64px,7vw,104px);
}
main>.section.dark+.draft-section:last-child>.shell{padding-top:clamp(28px,3vw,40px);border-top:1px solid rgba(255,255,255,.12)}
main>.section.dark+.draft-section:last-child .draft-section-head{max-width:none;margin:0 0 14px;text-align:left}
main>.section.dark+.draft-section:last-child .draft-heading{max-width:none;margin:0;font-size:clamp(1.5rem,2.4vw,2.2rem);letter-spacing:-.035em;color:#fff}
main>.section.dark+.draft-section:last-child .draft-section-copy{max-width:none;margin:0;color:#86868b;font-size:clamp(1rem,1.3vw,1.15rem);text-align:left}
main>.section.dark+.draft-section:last-child .draft-section-copy a{color:#fff;text-decoration-color:rgba(255,255,255,.35)}

/* ---------- Contact and team ---------- */
.contact-hero[data-ed-hero]{margin-top:calc(var(--ed-head) * -1);padding-top:var(--ed-head);min-height:max(600px,100svh)}

/* ---------- Pricing ---------- */
.price-intro{border-radius:var(--ed-r-xl)}
.price-table-wrap{border:0;border-radius:var(--ed-r-xl);background:var(--ed-soft)}
.draft-section.soft .price-table-wrap{background:#fff}
.price-table th,.price-table td{border-color:var(--ed-line)}

/* ---------- Chinese pages: CJK type set for CJK ---------- */
html[lang="zh-Hans"] body{
  font-family:-apple-system,BlinkMacSystemFont,"PingFang SC","Hiragino Sans GB","Noto Sans SC","Source Han Sans SC","Microsoft YaHei","Helvetica Neue",Arial,sans-serif;
}
html[lang="zh-Hans"] :is(.draft-title,.draft-heading,.section-title,.page-title,.proof-copy h2,.brief-copy h2,.case-hero h1,.zh-intro h2,.audience-card h3,.copy-card h3,.step h3,.service-card h3){
  letter-spacing:-.012em;line-height:1.16;font-weight:600;
}
html[lang="zh-Hans"] .draft-heading{max-width:15em;font-size:clamp(2.1rem,4.3vw,4.5rem)}
html[lang="zh-Hans"] .cine-hero .draft-title{max-width:12em;font-size:clamp(2.6rem,5.8vw,5.9rem)}
html[lang="zh-Hans"] .case-study .cine-hero h1{font-size:clamp(3rem,7vw,7.2rem)}
html[lang="zh-Hans"] .section.dark .section-title{font-size:clamp(2.5rem,5.4vw,5.6rem);line-height:1.12}
html[lang="zh-Hans"] .step h3,html[lang="zh-Hans"] .audience-card h3{font-size:clamp(1.45rem,2.2vw,2.2rem)}
html[lang="zh-Hans"] :is(p,li,dd,summary,.fact span,.result span){letter-spacing:.012em;line-break:strict}
html[lang="zh-Hans"] :is(.draft-lede,.draft-section-copy,.copy-card p,.audience-card p,.step p,.faq-list details p,.brief-body>p){line-height:1.85}
html[lang="zh-Hans"] :is(.draft-title,.draft-heading,.section-title,h1,h2,h3){text-wrap:balance}
:is(h1,h2,h3) .nw{white-space:nowrap}
@media(max-width:330px){:is(h1,h2,h3) .nw{white-space:normal}}

/* ---------- Round-2 shared fixes (merged from the per-page designers and reviewers) ---------- */
/* Closing CTA: the secondary button is dark glass, not black on black. */
.section.dark .button:not(.light){
  background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.5);color:#fff;
  -webkit-backdrop-filter:blur(5px) saturate(170%);backdrop-filter:blur(5px) saturate(170%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.34),inset 0 -1px 0 rgba(255,255,255,.1);
}
.section.dark .button:not(.light):hover{background:#fff;border-color:#fff;color:var(--ed-ink)}
.cine-hero .language-link:focus-visible{outline:2px solid #fff;outline-offset:3px}
/* Closing CTA head stacks before its title gets squeezed; copy keeps a readable measure. */
@media(min-width:981px) and (max-width:1199px){main>.section.dark .section-head{grid-template-columns:minmax(0,1fr);gap:28px}}
main>.section.dark .section-copy{max-width:36rem}
@media(max-width:980px){.section.dark .section-copy{max-width:33rem}}
main>.section.dark+.draft-section:last-child .draft-section-copy a{white-space:nowrap}
/* No one-word last lines in display type; a better rag in body copy. */
:is(.draft-heading,.section-title,.proof-copy h2,.brief-copy h2,.copy-card h3,.step h3,.service-card h3,.audience-card h3,.faq-list summary){text-wrap:balance}
:is(.draft-lede,.draft-section-copy,.section-copy,.copy-card p,.step p,.audience-card p,.faq-list details p,.brief-body>p){text-wrap:pretty}
/* Step labels on light chapters reach AA. */
.draft-section:not(.dark) .step>span:first-child{color:var(--ed-muted)}
/* Inline spans inside cards keep the text style (seo-review.css styles every span in these cards as a label). */
:is(.step,.audience-card,.service-card,.copy-card) :is(h3,p) span,.result small span{
  font:inherit;color:inherit;letter-spacing:inherit;text-transform:inherit;display:inline;margin:0;padding:0;background:none;
}
/* Chinese phrase spans work in running text too (never inside FAQ questions or answers: the SEO gate reads them). */
html[lang="zh-Hans"] :is(p,li,aside,small,dd) .nw{white-space:nowrap}
@media(max-width:330px){html[lang="zh-Hans"] :is(p,li,aside,small,dd) .nw{white-space:normal}}
html[lang="zh-Hans"] .cine-hero :is(.draft-title,.draft-title.compact){letter-spacing:-.015em;line-height:1.1}
@supports (text-spacing-trim:trim-start){html[lang="zh-Hans"] main{text-spacing-trim:trim-start}}
/* Glass combined with tiles keeps the glass. */
:is(.result,.pending-box,.copy-card,.metric,.audience-card).lg{background:rgba(255,255,255,.42);border:1px solid rgba(255,255,255,.72)}
:is(.result,.pending-box,.copy-card,.metric,.audience-card).lg.lg--dark{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.5)}
/* A fading parent turns glass flat until the fade ends: blocks with glass only rise. */
html.ed-motion [data-ed-reveal]:is(.lg,:has(.lg)):not(.is-in){opacity:1}
/* Inset band opens with the scroll reveal. */
html.ed-motion .cine-band--inset[data-ed-reveal]:not(.is-in){clip-path:inset(7% 7% round var(--ed-r-xl));opacity:1;transform:none}
html.ed-motion .cine-band--inset[data-ed-reveal]{transition:clip-path 1.2s var(--ed-ease)}
/* Ambient washes fade out before the section edge (no tinted seam). */
.ed-ambient::before{-webkit-mask-image:linear-gradient(180deg,#000 60%,transparent);mask-image:linear-gradient(180deg,#000 60%,transparent)}
/* Phone focus for bands, like heroes. */
@media(max-width:767px){.cine-band img{object-position:var(--ed-focus-m,var(--ed-focus,50% 50%))}}
/* Known crops of shared service photos. */
.service-card img[src*="service-social-management"]{object-position:50% 70%}
.service-card img[src*="service-creative-reels"]{object-position:50% 0}
/* Proof-shot enlarged view: marks stay on their boxes; a cloned card is never blank. */
.shot-dialog .proof-shots{clear:both}
.shot-dialog [data-ed-reveal]{opacity:1!important;transform:none!important;transition:none!important;clip-path:none!important}
/* Header over dark chapters: dark glass instead of a pale bar (editorial.js sets .is-over-dark). */
html.ed-js .site-header:is(.is-solid,.is-past-hero).is-over-dark{
  background:rgba(10,10,12,.72);color:#fff;box-shadow:0 1px 0 rgba(255,255,255,.08);
  -webkit-backdrop-filter:blur(20px) saturate(160%);backdrop-filter:blur(20px) saturate(160%);
}
html.ed-js .site-header:is(.is-solid,.is-past-hero).is-over-dark .site-logo img{filter:invert(1)}
.zh-home .site-header.is-past-hero.is-over-dark{color:#fff}
.zh-home .site-header.is-past-hero.is-over-dark .menu-button span{background:#fff}
html.ed-js .site-header:is(.is-solid,.is-past-hero).is-over-dark .header-enquire{border-color:rgba(255,255,255,.62)}
html.ed-js .site-header:is(.is-solid,.is-past-hero).is-over-dark .header-enquire:hover{background:#fff;color:var(--ed-ink);border-color:#fff}
/* Printing shows everything. */
@media print{.reveal,[data-ed-reveal]{opacity:1!important;transform:none!important;clip-path:none!important}}

/* ---------- Round-3 shared fixes (from the 35 independent page reviews) ---------- */
/* Small labels stay hidden, as on the homepage and in production (Josh removed small decorative text). */
.eyebrow,.draft-kicker{display:none!important}
/* Hero copy: entrance rise everywhere; the scroll fade only on wide screens (phones read the hero while scrolling). */
@media(prefers-reduced-motion:no-preference){
  .cine-hero :is(.eyebrow,.draft-title,.draft-lede,.language-link,.draft-aside,.case-intro-copy>h1,.case-intro-copy>p){animation:ed-rise 1.15s var(--ed-ease) backwards}
}
@supports (animation-timeline:scroll()){
  @media(prefers-reduced-motion:no-preference) and (min-width:1200px){
    .cine-hero:not(.cine-hero--product) :is(.draft-title,.draft-lede,.language-link,.draft-aside,.case-intro-copy>h1,.case-intro-copy>p){
      animation:ed-rise 1.15s var(--ed-ease) backwards,ed-hero-fade linear both;
      animation-timeline:auto,scroll(root);animation-range:normal,8vh 82vh;
    }
  }
}
/* Product hero: a real dark background (the header reads it) and no fade over its glass. */
.cine-hero--product{background-color:var(--ed-dark)}
/* Timeline dots sit on the rail. */
@media(min-width:981px){.step::before{top:-11px;z-index:1}}
/* Tinted glass tiles keep their tint. */
:is(.result,.pending-box,.copy-card,.metric,.audience-card).lg.lg--dark.lg--tint{background:rgba(12,12,14,.48)}
.result-grid.six .result:not(.lg):nth-child(n){border:0}
/* Focus rings: brand 2px everywhere; nothing hides under the sticky header or chapter bar. */
.faq-list summary:focus-visible,.draft-section-copy a:focus-visible,.brief-body a:focus-visible{outline:2px solid currentColor;outline-offset:4px;border-radius:6px}
html{scroll-padding-top:calc(var(--ed-head) + 16px)}
html:has(.lg-subnav){scroll-padding-top:calc(var(--ed-head) + 76px)}
[data-enquiry-form] :is(input,select,textarea){scroll-margin-top:calc(var(--ed-head) + 56px);scroll-margin-bottom:24px}
/* FAQ hover tint only where hover exists (it sticks after a tap on phones). */
.faq-list summary:hover{color:inherit}
@media(hover:hover){.faq-list summary:hover{color:#6e6e73}}
/* Closing CTA: no phantom space under the content, no seam where it meets the footer. */
main>.section.dark:is(:last-child,:has(+ .draft-section:last-child)) .section-head{margin-bottom:0}
main>.section.dark:is(:last-child,:has(+ .draft-section:last-child))::before{-webkit-mask-image:linear-gradient(180deg,#000 62%,transparent);mask-image:linear-gradient(180deg,#000 62%,transparent)}
/* Muted copy on ambient washes stays AA. */
.ed-ambient :is(.draft-section-copy,.section-copy,.copy-card p,.audience-card p,.pending-box p,.source-note){color:#5e5e63}
/* Footer bottom row aligned. */
@media(min-width:641px){.footer-bottom{align-items:center}}
/* Phone screenshots: the bezel is the shadow; no black fill. */
.shot:not(.shot--wide) .shot-frame{background:transparent}
/* Menu open over a dark chapter: header clear, like over the hero. */
html.ed-js body.menu-open .site-header:is(.is-solid,.is-past-hero).is-over-dark{background:transparent;box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none}
/* Very small phones: keep Chinese phrases whole, shrink display type instead. */
@media(max-width:330px){
  :is(h1,h2,h3) .nw{white-space:nowrap}
  html[lang="zh-Hans"] .cine-hero .draft-title{font-size:2rem}
  html[lang="zh-Hans"] .draft-heading{font-size:1.7rem}
  html[lang="zh-Hans"] .section.dark .section-title{font-size:1.9rem}
}

/* ---------- Round-4: one family per component (consistency review) ---------- */
/* Header and page measure match the homepage nav and .wrap exactly. */
:root{--ed-gutter:clamp(20px,5vw,84px)}
@media(max-width:1023px){:root{--ed-head:54px}}
.site-header>.shell.header-inner{width:auto;max-width:none;margin:0;padding-inline:var(--ed-gutter)}
.shell{width:min(calc(100% - 2 * var(--ed-gutter)),1312px)}
/* Footer: the homepage footer's type and rhythm. */
.site-footer{padding:72px 0 calc(30px + env(safe-area-inset-bottom))}
.site-footer .footer-grid{grid-template-columns:1.35fr repeat(3,minmax(130px,1fr));gap:48px 56px;padding-bottom:0}
.site-footer .footer-brand img{width:150px}
.site-footer .footer-brand p{max-width:27em;margin-top:24px;color:rgba(255,255,255,.58);font-size:13px;line-height:1.75}
.site-footer .footer-column h2{margin:0 0 20px;color:rgba(255,255,255,.5);font-size:10px;font-weight:700;letter-spacing:.18em}
.site-footer .footer-column a,.site-footer .footer-column span{display:block;width:max-content;max-width:100%;min-height:0;margin:0 0 13px;color:rgba(255,255,255,.86);font-size:13px;line-height:1.5;transition:color .25s var(--ed-ease)}
.site-footer .footer-column a:hover{color:#fff;text-decoration:none}
.site-footer .footer-column:has(>a:nth-of-type(9)){columns:2 150px;column-gap:24px}
.site-footer .footer-column:has(>a:nth-of-type(9)) h2{column-span:all}
.site-footer .footer-bottom{margin-top:64px;padding-top:24px;align-items:center;color:rgba(255,255,255,.5);font-size:10px;font-weight:650;letter-spacing:.13em}
.site-footer .footer-bottom a{min-height:0;color:rgba(255,255,255,.7)}
.site-footer .footer-bottom a:hover{color:#fff}
@media(max-width:900px){.site-footer .footer-grid{grid-template-columns:1.4fr 1fr;gap:46px 36px}}
@media(max-width:560px){
  .site-footer{padding-top:56px}
  .site-footer .footer-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:42px 20px}
  .site-footer .footer-brand{grid-column:1/-1}
  .site-footer .footer-column a{width:auto;overflow-wrap:anywhere}
  .site-footer .footer-bottom{align-items:flex-start;flex-direction:column}
}
/* Buttons: the homepage CTA spec. */
.button{min-height:56px;padding:0 28px;font-size:15px;font-weight:600;letter-spacing:.01em}
@media(max-width:640px){.button{min-height:50px;padding:0 24px;font-size:14px}}
/* Header: the Enquire pill over a hero is the homepage's clear outline; the current section is lit. */
html.ed-js .ed-has-hero .site-header:not(.is-solid) .header-enquire,
.zh-home .site-header:not(.is-past-hero) .header-enquire{background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none;box-shadow:none;border-color:currentColor}
.zh-home .site-header:not(.is-past-hero){box-shadow:none}
.header-quick a[aria-current]{opacity:1;font-weight:600}
/* Chapter bar on phones fades at the edge instead of cutting a word. */
@media(max-width:767px){.lg-subnav__bar{-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 36px),transparent);mask-image:linear-gradient(90deg,#000 calc(100% - 36px),transparent);padding-inline-end:28px}}
/* Chinese display type: one weight and tracking for every zh title. */
html[lang="zh-Hans"] .section.dark .section-title{letter-spacing:-.012em;font-weight:600;line-height:1.16}
html[lang="zh-Hans"] .cine-hero :is(.draft-title,.draft-title.compact){font-weight:600}

/* SHARED HERO for every service-detail page (Brisbane, Sydney, Melbourne, builder, agent branding, Chinese buyer,
   zh real estate, zh Chinese buyer): title bottom-left, lede + actions under it, the facts aside as a glass card right. */
.cine-hero--editorial{text-align:left}
.cine-hero--editorial .draft-hero-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(300px,380px);column-gap:clamp(40px,6vw,104px);row-gap:0;align-items:end}
.cine-hero--editorial .draft-hero-grid>div{grid-column:1;min-width:0}
.cine-hero--editorial :is(.draft-title,.draft-title.compact){max-width:11ch;margin:0;font-size:clamp(3.2rem,6.6vw,6.6rem)}
html[lang="zh-Hans"] .cine-hero--editorial :is(.draft-title,.draft-title.compact){max-width:9em;font-size:clamp(2.6rem,5.4vw,5.4rem)}
.cine-hero--editorial .draft-lede{max-width:38rem;margin-left:0;margin-right:0}
.cine-hero--editorial .hero-actions{justify-content:flex-start;margin-inline:0}
.cine-hero--editorial .language-link{margin-left:0}
.cine-hero--editorial .draft-aside{grid-column:2;max-width:none;margin:0;padding:24px 26px;border-radius:var(--ed-r-lg);border-top:1px solid rgba(255,255,255,.5);text-align:left}
@media(max-width:980px){
  .cine-hero--editorial .draft-hero-grid{grid-template-columns:minmax(0,1fr)}
  .cine-hero--editorial .draft-aside{grid-column:1;margin-top:28px}
}
@media(max-width:640px){
  .cine-hero--editorial .hero-actions{width:min(340px,100%)}
  .cine-hero--editorial :is(.draft-title,.draft-title.compact){font-size:clamp(2.6rem,11.6vw,4rem)}
  html[lang="zh-Hans"] .cine-hero--editorial :is(.draft-title,.draft-title.compact){font-size:clamp(2.2rem,9.6vw,3rem)}
}

/* SHARED CLOSING CTA with the page's own film or city still behind it (service and case pages):
   <section class="section dark cta-film"><figure class="cta-film__media" aria-hidden="true"><img … alt=""></figure> …</section> */
main>.section.dark.cta-film{position:relative;isolation:isolate;overflow:hidden;overflow:clip}
.cta-film__media{position:absolute;inset:0;z-index:-2;margin:0}
.cta-film__media img{width:100%;height:100%;max-width:none;object-fit:cover;object-position:var(--ed-focus,50% 50%)}
main>.section.dark.cta-film::after{
  content:"";position:absolute;inset:0;z-index:-1;pointer-events:none;
  background:linear-gradient(90deg,rgba(10,10,12,.9) 0,rgba(10,10,12,.66) 45%,rgba(10,10,12,.42) 100%),linear-gradient(0deg,#0a0a0c 0,rgba(10,10,12,0) 42%),linear-gradient(180deg,rgba(10,10,12,.6) 0,rgba(10,10,12,0) 30%);
}
@media(max-width:980px){main>.section.dark.cta-film::after{background:linear-gradient(0deg,rgba(10,10,12,.92) 0,rgba(10,10,12,.7) 55%,rgba(10,10,12,.5) 100%)}}

/* SHARED single-word case titles (KOKOMO. SCORPIO. SOLACE.): one size, optically on the grid. */
.case-study .cine-hero .case-intro-copy>h1.is-word{font-size:clamp(3.4rem,12vw,9.6rem);margin-left:-.04em}
@media(max-width:640px){.case-study .cine-hero .case-intro-copy>h1.is-word{font-size:clamp(3rem,18vw,4.6rem)}}

/* ---------- Motion (only with html.ed-motion) ---------- */
html.ed-motion [data-ed-reveal]{
  transition:opacity .9s var(--ed-ease),transform 1s var(--ed-ease),clip-path 1.1s var(--ed-ease);
  transition-delay:calc(var(--ed-i,0) * 70ms);
}
html.ed-motion [data-ed-reveal]:not(.is-in){opacity:0;transform:translate3d(0,30px,0)}
html.ed-motion .draft-heading[data-ed-reveal]:not(.is-in),
html.ed-motion .section-title[data-ed-reveal]:not(.is-in){clip-path:inset(0 0 100% 0);transform:translate3d(0,18%,0);opacity:1}
html.ed-motion .draft-heading[data-ed-reveal].is-in,
html.ed-motion .section-title[data-ed-reveal].is-in{clip-path:inset(-10% -4% -18% -4%)}

/* ---------- Responsive ---------- */
@media(max-width:980px){
  .service-cards{grid-template-columns:repeat(2,minmax(0,1fr))!important;gap:36px 18px}
  .service-card,.service-cards .service-card:nth-child(n){grid-column:auto!important}
  .service-cards .service-card:nth-child(n) img{aspect-ratio:4/3;border-radius:20px}
  .audience-card{min-height:240px}
}
@media(max-width:640px){
  .draft-section{padding:clamp(72px,18vw,96px) 0}
  .draft-heading{font-size:clamp(2.3rem,10.4vw,3.3rem)}
  html[lang="zh-Hans"] .draft-heading{font-size:clamp(1.9rem,8.2vw,2.6rem)}
  .cine-hero{min-height:max(560px,100svh);padding-bottom:max(32px,env(safe-area-inset-bottom))}
  .cine-hero .draft-title,.cine-hero .draft-title.compact{font-size:clamp(2.8rem,12.8vw,4.4rem)}
  html[lang="zh-Hans"] .cine-hero .draft-title{font-size:clamp(2.3rem,10.4vw,3.4rem)}
  .cine-hero .hero-actions{flex-direction:column;align-items:stretch;width:min(340px,100%);margin-inline:auto}
  .cine-hero--left .hero-actions{margin-inline:0}
  .case-study .cine-hero .case-intro-copy>h1,.cine-hero--left h1{font-size:clamp(3rem,13vw,4.4rem)}
  .service-cards{grid-template-columns:1fr!important;gap:32px}
  .audience-card{min-height:220px;border-radius:22px}
  .copy-card{border-radius:22px}
  .faq-list summary{padding:22px 40px 22px 0}
  .faq-list details p{padding-right:0}
  .section.dark .section-title{font-size:clamp(2.6rem,12vw,3.8rem)}
  html[lang="zh-Hans"] .section.dark .section-title{font-size:clamp(2.2rem,9.6vw,3.2rem)}
}
@media(prefers-reduced-motion:reduce){
  .cine-hero__media>video{display:none}
  .service-card img,.ed-stills img{transition:none}
}
