/*
Theme Name: HTJ
Theme URI: https://htj.tax/
Description: Premium classic theme for HTJ.tax — US & International Tax Advisory. Faithful translation of the design-approved static prototypes (navy/gold, Oswald + GFS Didot, sharp corners, 1400px container). Built by Systems Ninjas.
Author: Systems Ninjas
Author URI: https://systemsninjas.com/
Version: 1.9.3
Requires at least: 6.0
Tested up to: 6.6
Requires PHP: 7.4
License: GNU General Public License v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: htj
*/

/* ============================================================
   HTJ.tax — "Faithful+ Full"
   Derren's brand executed at Big-4 quality.
   Navy / gold / white · Oswald + GFS Didot · sharp corners.
   This stylesheet is the site-wide global CSS extracted verbatim
   from the approved homepage chrome, followed by the blog
   grammars (.solp / .blg / .post) so the theme-rendered blog
   templates render from a single enqueued sheet.
   ============================================================ */
:root{
  --navy:#05237e;
  --navy-deep:#041d6a;
  --gold:#feb840;
  /* --amber is used as TEXT by both this theme and the migrated page CSS, and
     the page CSS is not ours to rewrite -- so the token itself has to be the
     accessible value and fills opt out via --amber-fill. #ea8c10 measured
     2.54:1 on white (2.35:1 on the author-box grey), against the 4.5:1 AA
     needs at the 10.5-15px these labels use. Same hue carried darker:
     5.42:1 on white, 5.02:1 on #f5f6fa. */
  --amber:#9c5a02;
  /* The bright brand accent, for FILLS and for decorative glyphs (arrows,
     dots, separators) where adjacent words already carry the meaning. */
  --amber-fill:#ea8c10;
  /* The page prototypes reference var(--gold-ink,#b9832a) in ~38 places across
     8+ pages, but --gold-ink was never actually declared -- so every one of
     them silently used the #b9832a fallback, 3.31:1 on white and 3.06:1 on the
     gold chip. Declaring it here fixes the theme AND every migrated page at
     once. Keeps the ochre character rather than collapsing into --amber:
     5.37:1 on white, 4.97:1 on the chip. */
  --gold-ink:#8a6414;
  --grey:#f5f5f5;
  --line:#dfe3f0;
  --ink:#232c4e;
  --white:#fff;
  --f-head:'Oswald',Arial,sans-serif;
  --f-body:'GFS Didot',Georgia,'Times New Roman',serif;
  --ease:cubic-bezier(.22,.8,.3,1);
  --shadow-soft:0 10px 30px rgba(4,29,106,.08);
  --shadow-lift:0 18px 44px rgba(4,29,106,.14);
}
*,*::before,*::after{box-sizing:border-box}
html,body{margin:0;padding:0}
html{scroll-behavior:smooth}
body{
  background:var(--white);
  color:var(--ink);
  font-family:var(--f-body);
  font-size:17px;
  line-height:1.7;
  -webkit-font-smoothing:antialiased;
  overflow-x:hidden;
}
img{max-width:100%;height:auto;border-style:none}
a{color:var(--navy);text-decoration:none;transition:color .2s var(--ease)}
a:hover{color:var(--amber)}
/* inline body-copy links on light sections: understated navy with a subtle underline
   (corporate restraint — links do not pop in a brand colour) */
/* Prose links inside light bands. MUST exclude .btn: a button dropped inside a
   <p> matches `.band-grey p a:hover` (0,2,2), which OUT-SPECIFIES
   `.btn-outline-navy:hover` (0,2,0) — so the button filled navy while its label
   stayed navy-deep, i.e. invisible, and picked up a gold prose underline on top.
   Caught on the FBAR page's "See all articles" button 2026-07-28. */
.band-white p a:not(.btn),.band-grey p a:not(.btn){color:var(--navy);text-decoration:underline;text-decoration-color:rgba(5,35,126,.32);text-underline-offset:3px;text-decoration-thickness:1px}
.band-white p a:not(.btn):hover,.band-grey p a:not(.btn):hover{color:var(--navy-deep);text-decoration-color:var(--gold)}
p{margin:0 0 1.1em}
ul,ol{margin:0 0 1.1em;padding-left:1.2em}
h1,h2,h3,h4,h5,h6{
  font-family:var(--f-head);
  font-weight:400;
  color:var(--navy);
  line-height:1.18;
  margin:0 0 .5em;
}
h1{font-weight:300;letter-spacing:-.01em;font-size:clamp(34px, 3vw + 22px, 56px)}
h2{font-weight:400;letter-spacing:-.005em;font-size:clamp(26px, 1.6vw + 18px, 38px)}
h3{font-weight:400;font-size:clamp(21px, 1vw + 15px, 27px)}
h4{font-weight:500;font-size:19px;letter-spacing:.02em}
h5{font-weight:500;font-size:15px;letter-spacing:.14em;text-transform:uppercase}
strong,b{font-weight:700}
::selection{background:var(--gold);color:var(--navy)}

/* ---------- layout primitives ---------- */
.container{max-width:1200px;margin:0 auto;padding:0 28px}
.container-wide{max-width:1400px;margin:0 auto;padding:0 28px}
.section{padding:96px 0}
.band-white{background:var(--white)}
.band-grey{background:var(--grey)}
.band-navy{background:var(--navy);color:#eef1fb}
.band-navy-deep{background:var(--navy-deep);color:#eef1fb}
.band-gold{background:var(--gold);color:var(--navy)}
.band-navy h2,.band-navy h3,.band-navy-deep h2,.band-navy-deep h3{color:var(--white)}
@media (max-width:720px){.section{padding:56px 0}.container,.container-wide{padding:0 20px}}

/* eyebrow kicker */
.eyebrow{
  display:inline-block;
  font-family:var(--f-head);
  font-weight:500;
  font-size:12px;
  letter-spacing:.28em;
  text-transform:uppercase;
  color:var(--navy);
  margin-bottom:18px;
  position:relative;
  padding-left:44px;
}
.eyebrow::before{
  content:"";position:absolute;left:0;top:50%;width:30px;height:2px;background:var(--gold);
}
.band-navy .eyebrow,.band-navy-deep .eyebrow{color:var(--gold)}

/* ---------- buttons (sharp corners, deliberate) ---------- */
.btn{
  display:inline-block;
  font-family:var(--f-head);
  font-weight:500;
  font-size:14px;
  letter-spacing:.16em;
  text-transform:uppercase;
  padding:16px 44px;
  border:2px solid transparent;
  cursor:pointer;
  transition:transform .25s var(--ease), box-shadow .25s var(--ease), background .25s var(--ease), color .25s var(--ease), border-color .25s var(--ease);
  text-align:center;
  line-height:1.2;
}
.btn{text-decoration:none}
a.btn,a.btn:hover,a.btn:focus{text-decoration:none}
.btn:hover{transform:translateY(-2px)}
/* Element-qualified so a stray descendant rule cannot out-specify the button's
   own colours again. Same trick the build rules prescribe for beating utility
   classes: qualify with the element, do not add another class. */
a.btn-gold,a.btn-gold:hover{color:var(--navy)}
a.btn-navy,a.btn-navy:hover{color:var(--white)}
a.btn-outline-navy{color:var(--navy)}
a.btn-outline-navy:hover{color:var(--white);background:var(--navy)}
.btn:active{transform:translateY(0)}
.btn-gold{background:var(--gold);color:var(--navy);border-color:var(--gold)}
.btn-gold:hover{box-shadow:0 12px 28px rgba(234,140,16,.35);color:var(--navy)}
.btn-navy{background:var(--navy);color:var(--white);border-color:var(--navy)}
.btn-navy:hover{background:var(--navy-deep);color:var(--white);box-shadow:0 12px 28px rgba(4,29,106,.3)}
.btn-outline-navy{background:transparent;color:var(--navy);border-color:var(--navy)}
.btn-outline-navy:hover{background:var(--navy);color:var(--white)}
/* A ghost button is transparent, so it only exists if its text contrasts with
   whatever is behind it. This USED to default to white — which meant dropping
   one on a light band produced a button that was simply not there. That is
   exactly what happened to "Send an email" on /contact/: white text, white
   border, white background.
   The default is now the LIGHT-surface treatment, and dark containers opt in
   below. The failure modes are not symmetric: a missed dark container gives a
   navy button on navy, which is obvious the moment anyone looks at the page,
   whereas the old default failed silently and invisibly. Light is also the
   common case for new sections. `contrast-sweep.mjs` guards both directions. */
.btn-ghost{background:transparent;color:var(--navy);border-color:rgba(5,35,126,.42)}
.btn-ghost:hover{color:var(--navy);border-color:var(--navy);background:rgba(5,35,126,.05)}

.solp-hero .btn-ghost,.band-navy .btn-ghost,.band-navy-deep .btn-ghost,
.cta-band .btn-ghost,.footer .btn-ghost,.hero:not(.hero--light) .btn-ghost{
  background:transparent;color:var(--white);border-color:rgba(255,255,255,.55)
}
.solp-hero .btn-ghost:hover,.band-navy .btn-ghost:hover,.band-navy-deep .btn-ghost:hover,
.cta-band .btn-ghost:hover,.footer .btn-ghost:hover,.hero:not(.hero--light) .btn-ghost:hover{
  background:transparent;color:var(--gold);border-color:var(--gold)
}
.btn-sm{padding:12px 28px;font-size:13px}
button.btn{font-family:var(--f-head)}
@media (max-width:480px){.btn{padding:15px 30px;width:100%;max-width:340px}}

/* ---------- scroll reveal (content VISIBLE by default; hidden states only under html.js) ---------- */
html.js .reveal{opacity:0;transform:translateY(24px);transition:opacity .45s var(--ease), transform .45s var(--ease)}
html.js .reveal.in{opacity:1;transform:none}
html.js .reveal-d1.in{transition-delay:.08s}
html.js .reveal-d2.in{transition-delay:.16s}
html.js .reveal-d3.in{transition-delay:.24s}
html.js.rm .reveal{opacity:1 !important;transform:none !important;transition:none !important}

/* hero H1 staggered line reveal — gated the same way */
html.js .hl{display:block;opacity:0;transform:translateY(26px);transition:opacity .5s var(--ease), transform .5s var(--ease)}
html.js.hero-in .hl{opacity:1;transform:none}
html.js.hero-in .hl:nth-child(2){transition-delay:.12s}
html.js.hero-in .hl:nth-child(3){transition-delay:.24s}
html:not(.js) .hl{display:block}
html.js.rm .hl{opacity:1 !important;transform:none !important;transition:none !important}

/* ============================================================
   0 · HEADER
   ============================================================ */
.util-strip{
  background:var(--navy-deep);
  color:#c9d2f2;
  font-family:var(--f-head);
  font-size:13px;
  letter-spacing:.12em;
}
.util-inner{
  display:flex;justify-content:space-between;align-items:center;
  min-height:38px;gap:16px;
}
.util-tag{font-weight:400;text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.util-member{display:flex;align-items:center;gap:10px;text-transform:uppercase;font-size:11px;letter-spacing:.2em;white-space:nowrap}
.util-member .mri-pill{
  background:var(--white);
  padding:3px 10px;
  display:inline-flex;align-items:center;
}
.util-member .mri-pill img{height:20px;width:auto;display:block}
@media (max-width:640px){.util-tag{font-size:11px}.util-member span{display:none}}

.mainbar{
  position:sticky;top:0;z-index:900;
  background:var(--white);
  border-bottom:1px solid var(--line);
  transition:box-shadow .3s var(--ease);
}
.mainbar.scrolled{box-shadow:0 8px 28px rgba(4,29,106,.12)}
.mainbar-inner{
  display:flex;align-items:center;justify-content:space-between;gap:24px;
  padding-top:18px;padding-bottom:18px;
  transition:padding .3s var(--ease);
}
.mainbar.scrolled .mainbar-inner{padding-top:10px;padding-bottom:10px}
.brand{display:flex;align-items:center;flex:0 0 auto}
/* The brand mark is now the client's stacked HTJ.Tax + "member of Moores
   Rowland International" lockup. It needs more height than the old one-line
   mark did: the member line is only ~14% of the artwork, so at the previous
   52px it rendered at roughly 6px and could not be read. */
.brand img{height:78px;width:auto;display:block;transition:height .3s var(--ease)}
.mainbar.scrolled .brand img{height:62px}
@media (max-width:900px){.brand img{height:64px}.mainbar.scrolled .brand img{height:56px}}
.util-tagline{font-family:var(--f-head);font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:#c9d2f2;white-space:nowrap}
@media (max-width:640px){.util-tagline{display:none}}

/* desktop nav */
.nav{display:flex;align-items:center;gap:4px;list-style:none;margin:0;padding:0}
.nav > li{margin:0}
.nav > li > a,
.nav > li > button.nav-link{
  display:inline-block;
  font-family:var(--f-head);
  font-weight:400;
  font-size:14.5px;
  letter-spacing:.09em;
  text-transform:uppercase;
  color:var(--navy);
  background:none;border:0;cursor:pointer;
  padding:14px 15px;
  position:relative;
}
.nav > li > a::after,
.nav > li > button.nav-link::after{
  content:"";position:absolute;left:15px;right:100%;bottom:8px;height:2px;background:var(--gold);
  transition:right .28s var(--ease);
}
.nav > li:hover > a::after,
.nav > li:hover > button.nav-link::after,
.nav > li > a:focus-visible::after,
.nav > li > button.nav-link:focus-visible::after{right:15px}
.nav .caret{display:inline-block;margin-left:6px;width:7px;height:7px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg) translateY(-2px);opacity:.55}

/* mega panels — anchored to sticky .mainbar (li static) */
.nav > li.has-panel{position:static}
.mega{
  position:absolute;left:0;right:0;top:100%;
  background:var(--white);
  border-top:2px solid var(--gold);
  box-shadow:0 30px 60px rgba(4,29,106,.16);
  opacity:0;visibility:hidden;pointer-events:none;
  transform:translateY(6px);
  transition:opacity .18s var(--ease), transform .18s var(--ease), visibility 0s linear .18s;
  z-index:800;
}
/* invisible hover-bridge: fills the gap between trigger and panel so the cursor never leaves the li subtree (kills flicker) */
.mega::before{content:"";position:absolute;left:0;right:0;top:-30px;height:30px}
.nav > li.has-panel.open > .mega{
  opacity:1;visibility:visible;pointer-events:auto;transform:none;
  transition:opacity .18s var(--ease), transform .18s var(--ease), visibility 0s;
}
.mega-inner{max-width:1400px;margin:0 auto;padding:40px 28px 34px;display:grid;gap:40px}
.mega-group h6{
  font-family:var(--f-head);font-weight:500;font-size:12px;letter-spacing:.22em;
  text-transform:uppercase;color:var(--navy);margin:0 0 14px;
  padding-bottom:10px;border-bottom:1px solid var(--line);
}
.mega-group ul{list-style:none;margin:0;padding:0}
.mega-group li{margin:0}
.mega-group a{
  display:block;position:relative;
  font-family:var(--f-body);font-size:15.5px;color:var(--ink);
  padding:6px 18px 6px 0;
  transition:color .2s var(--ease), padding-left .2s var(--ease);
}
.mega-group a::after{
  content:"\2192";position:absolute;right:2px;top:6px;color:var(--amber);
  opacity:0;transform:translateX(-6px);transition:opacity .2s var(--ease), transform .2s var(--ease);
  font-family:var(--f-head);font-size:14px;
}
.mega-group a:hover{color:var(--amber);padding-left:4px}
.mega-group a:hover::after{opacity:1;transform:none}

/* About panel bio card */
/* Photo LEFT, name + description ALONGSIDE — Derren, 2026-07-29: "note how the
   description is alongside the picture not underneath", matching the original
   site. Stacked, the card ran 549px tall inside a 714px panel and pushed the
   link list into a single narrow column with the rest of the panel empty. */
.mega-bio{
  background:var(--grey);
  padding:20px;
  display:grid;grid-template-columns:164px 1fr;gap:20px;align-items:start;
  overflow:hidden;
  border-bottom:3px solid var(--gold);
}
.mega-bio-photo{position:relative;aspect-ratio:1/1;overflow:hidden}
.mega-bio-photo img{width:100%;height:100%;object-fit:cover;object-position:center 22%;display:block;filter:grayscale(.1) contrast(1.04)}
.mega-bio-body{padding:0;display:flex;flex-direction:column;gap:9px}
.mega-bio-body .bio-name{font-family:var(--f-head);font-weight:600;font-size:20px;color:var(--navy);letter-spacing:.02em;line-height:1.1}
.mega-bio-body .bio-role{font-size:10.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--gold-ink,#b9832a);margin-top:-6px}
.mega-bio-body p{font-size:13.5px;line-height:1.6;margin:0;color:var(--ink)}
.mega-bio-body p.bio-strap{color:var(--navy);font-weight:500}
.mega-feature .feat-desc{font-size:12.5px;line-height:1.5;color:var(--ink);opacity:.85;margin-top:2px}
.mega-about-cta{grid-column:1/-1;display:flex;align-items:center;justify-content:space-between;gap:28px;margin-top:2px;padding-top:20px;border-top:1px solid rgba(4,29,106,.14)}
.mega-about-cta span{font-size:14px;line-height:1.5;color:var(--ink)}
.mega-about-cta a{white-space:nowrap;font-family:var(--f-head);font-weight:600;letter-spacing:.09em;text-transform:uppercase;font-size:12px;color:var(--navy);border-bottom:2px solid var(--gold);padding-bottom:3px}
.mega-about-cta a:hover{color:var(--amber)}

/* Featured cards inside panels */
.mega-feature{
  border:1px solid var(--line);
  padding:24px;
  display:flex;flex-direction:column;gap:12px;
  background:var(--white);
}
.mega-feature img{width:96px;height:auto;display:block}
.mega-feature .fsr-seal-sm{width:108px;height:108px}
.cred-badge-chip .fsr-seal-sm{width:74px;height:74px;flex:0 0 74px}
.mega-feature .feat-label{font-family:var(--f-head);font-size:11px;font-weight:500;letter-spacing:.22em;text-transform:uppercase;color:var(--amber)}
.mega-feature .feat-title{font-family:var(--f-head);font-size:16px;font-weight:400;color:var(--navy);line-height:1.35}
.mega-feature a.feat-link{font-family:var(--f-head);font-size:13px;letter-spacing:.1em;text-transform:uppercase;color:var(--amber)}
.mega-feature a.feat-link:hover{color:var(--navy)}
.mega-cta-card{
  background:var(--navy);
  padding:28px 24px;
  display:flex;flex-direction:column;gap:16px;justify-content:center;
}
.mega-cta-card p{color:#dfe5fa;font-size:15px;line-height:1.55;margin:0}
.mega-offices-strip{
  grid-column:1 / -1;
  border-top:1px solid var(--line);
  padding-top:18px;
  font-family:var(--f-head);font-size:13px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink);
  display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center;
}
.mega-offices-strip a{color:var(--navy);border-bottom:2px solid var(--gold);padding-bottom:1px}
.mega-offices-strip a:hover{color:var(--amber)}
.mega--about .mega-inner{grid-template-columns:minmax(440px,1.15fr) minmax(320px,1fr);align-items:start}
.mega--about .mega-group ul{display:grid;grid-template-columns:1fr 1fr;gap:0 26px}
.mega--places .mega-inner{grid-template-columns:repeat(5,1fr)}
.mega--solutions .mega-inner{grid-template-columns:repeat(4,1fr) 280px}

/* slim dropdown (Our Offices) */
.nav > li.has-drop{position:relative}
.drop{
  position:absolute;top:100%;left:0;min-width:250px;
  background:var(--white);
  border-top:2px solid var(--gold);
  box-shadow:0 24px 48px rgba(4,29,106,.16);
  list-style:none;margin:0;padding:10px 0;
  opacity:0;visibility:hidden;pointer-events:none;transform:translateY(6px);
  transition:opacity .18s var(--ease), transform .18s var(--ease), visibility 0s linear .18s;
  z-index:800;
}
.nav > li.has-drop:hover > .drop,
.nav > li.has-drop:focus-within > .drop,
.nav > li.has-drop.open > .drop{
  opacity:1;visibility:visible;pointer-events:auto;transform:none;
  transition:opacity .18s var(--ease), transform .18s var(--ease), visibility 0s;
}
.drop a{
  display:block;padding:9px 22px;
  font-family:var(--f-body);font-size:15px;color:var(--ink);
}
.drop a:hover{color:var(--amber);background:var(--grey)}

.header-cta{flex:0 0 auto}
.header-cta .btn{padding:13px 30px;font-size:13px}

/* burger + mobile nav */
.burger{
  display:none;background:none;border:0;cursor:pointer;padding:10px;
}
.burger span{display:block;width:26px;height:2px;background:var(--navy);margin:6px 0;transition:transform .3s var(--ease), opacity .3s var(--ease)}
.mobile-nav{
  display:none;
  position:fixed;inset:0;z-index:1000;
  background:var(--navy-deep);
  overflow-y:auto;
  padding:0 0 60px;
}
.mobile-nav.open{display:block}
.mobile-nav-head{
  display:flex;justify-content:space-between;align-items:center;
  padding:18px 20px;border-bottom:1px solid rgba(255,255,255,.14);
}
.mobile-nav-head .m-logo{background:var(--white);padding:6px 12px}
.mobile-nav-head .m-logo img{height:38px;width:auto;display:block}
.m-close{background:none;border:0;color:var(--white);font-size:34px;line-height:1;cursor:pointer;padding:4px 10px;font-family:var(--f-head)}
.mobile-nav a{color:#e8ecfb}
.mobile-nav .m-list{list-style:none;margin:0;padding:10px 20px}
.mobile-nav .m-list > li{border-bottom:1px solid rgba(255,255,255,.12)}
.mobile-nav .m-list > li > a{
  display:block;padding:16px 4px;
  font-family:var(--f-head);font-size:17px;letter-spacing:.08em;text-transform:uppercase;
}
.mobile-nav details{border-bottom:0}
.mobile-nav summary{
  list-style:none;cursor:pointer;
  display:flex;justify-content:space-between;align-items:center;
  padding:16px 4px;
  font-family:var(--f-head);font-size:17px;letter-spacing:.08em;text-transform:uppercase;color:#e8ecfb;
}
.mobile-nav summary::-webkit-details-marker{display:none}
.mobile-nav summary::after{content:"+";font-size:22px;color:var(--gold);transition:transform .25s var(--ease)}
.mobile-nav details[open] > summary::after{transform:rotate(45deg)}
.mobile-nav .m-sub{padding:0 4px 14px 14px}
.mobile-nav .m-sub h6{font-family:var(--f-head);font-size:11px;font-weight:500;letter-spacing:.22em;text-transform:uppercase;color:var(--gold);margin:14px 0 6px}
.mobile-nav .m-sub ul{list-style:none;margin:0;padding:0}
.mobile-nav .m-sub a{display:block;padding:7px 0;font-family:var(--f-body);font-size:15.5px;color:#c9d2f2}
.mobile-nav .m-sub a:hover{color:var(--gold)}
.mobile-nav .m-cta{padding:22px 20px}
body.nav-locked{overflow:hidden}
@media (max-width:1080px){
  .nav,.header-cta{display:none}
  .burger{display:block}
}

/* ============================================================
   1 · HERO
   ============================================================ */
.hero{
  position:relative;
  background:
    radial-gradient(1100px 600px at 80% -10%, rgba(254,184,64,.10), transparent 60%),
    radial-gradient(900px 700px at -10% 110%, rgba(255,255,255,.06), transparent 55%),
    linear-gradient(155deg, #072a92 0%, var(--navy) 42%, var(--navy-deep) 100%);
  color:#eef1fb;
  overflow:hidden;
}
.hero::before{ /* subtle world-map dot field */
  content:"";position:absolute;inset:0;
  background-image:radial-gradient(rgba(255,255,255,.13) 1px, transparent 1.4px);
  background-size:26px 26px;
  -webkit-mask-image:radial-gradient(720px 460px at 62% 38%, #000 0%, transparent 72%);
  mask-image:radial-gradient(720px 460px at 62% 38%, #000 0%, transparent 72%);
  opacity:.5;pointer-events:none;z-index:1;
}
.hero-video{position:absolute;inset:0;z-index:0;overflow:hidden;pointer-events:none}
.hero-video:empty{display:none} /* STILL HERO IS THE DEFAULT — the layered navy gradient shows; the iframe (only on ?hero=video) fills this and re-enables the overlay */
.hero-video iframe{
  position:absolute;top:50%;left:50%;
  width:max(100vw, 178vh);height:max(100vh, 57vw);
  transform:translate(-50%, -50%);
  border:0;opacity:0;transition:opacity 1.2s var(--ease);
}
.hero-video iframe.ready{opacity:1}
.hero-video::after{content:"";position:absolute;inset:0;
  background:
    linear-gradient(155deg, rgba(7,42,146,.94) 0%, rgba(5,35,126,.90) 42%, rgba(4,29,106,.94) 100%);
  /* video stays a faint depth shimmer — its captions must never be readable through the overlay */
}
.hero-inner{
  position:relative;z-index:2;
  display:grid;grid-template-columns:1.25fr .85fr;gap:64px;align-items:center;
  padding-top:110px;padding-bottom:120px;
}
.hero-kicker{
  color:var(--gold);
  font-size:13px;font-weight:500;letter-spacing:.24em;text-transform:uppercase;
  margin:0 0 22px;max-width:56ch;line-height:1.7;
}
.hero h1{color:var(--white);margin-bottom:26px;max-width:18ch;text-wrap:balance}
.hero-sub{
  font-size:19px;line-height:1.75;color:#d5dcf5;max-width:54ch;margin-bottom:36px;
}
.hero-cta-row{display:flex;flex-wrap:wrap;gap:16px;margin-bottom:18px}
.hero-friction{
  font-size:14.5px;color:#aeb9e4;font-style:italic;margin:0 0 26px;
}
.hero-trustline{
  font-family:var(--f-head);font-size:12.5px;letter-spacing:.14em;text-transform:uppercase;
  color:#9aa8dd;display:flex;flex-wrap:wrap;gap:8px 14px;
}
.hero-trustline .dot{color:var(--gold)}

.cred-panel{
  background:var(--white);
  color:var(--ink);
  border-top:4px solid var(--gold);
  box-shadow:0 30px 70px rgba(2,12,48,.45);
  padding:36px 34px 30px;
}
.cred-panel .cred-title{
  font-family:var(--f-head);font-weight:500;font-size:19px;color:var(--navy);
  letter-spacing:.03em;margin:0 0 20px;
}
.cred-list{list-style:none;margin:0 0 22px;padding:0}
.cred-list li{
  position:relative;padding:9px 0 9px 34px;
  font-size:15.5px;line-height:1.5;
  border-bottom:1px solid var(--grey);
}
.cred-list li:last-child{border-bottom:0}
.cred-list li svg{position:absolute;left:0;top:12px;width:20px;height:20px}
.cred-badge-chip{
  display:flex;align-items:center;gap:14px;
  background:var(--grey);
  padding:12px 16px;
}
.cred-badge-chip img{width:58px;height:auto;flex:0 0 auto}
.cred-badge-chip span{font-family:var(--f-head);font-size:12.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--navy);line-height:1.5}
@media (max-width:1080px){
  .hero-inner{grid-template-columns:1fr;gap:48px;padding-top:80px;padding-bottom:88px}
  .hero h1{max-width:none}
  .cred-panel{max-width:560px}
}
@media (max-width:480px){
  .hero-inner{padding-top:60px;padding-bottom:68px}
  .cred-panel{padding:28px 22px 24px}
}

/* ============================================================
   2 · PRESS MARQUEE
   ============================================================ */
.press{padding:72px 0 64px}
.press h5{text-align:center;color:var(--navy);margin-bottom:38px}
.press h5 .rule{display:block;width:34px;height:2px;background:var(--gold);margin:14px auto 0}
.marquee{
  overflow:hidden;position:relative;
  -webkit-mask-image:linear-gradient(90deg, transparent, #000 9%, #000 91%, transparent);
  mask-image:linear-gradient(90deg, transparent, #000 9%, #000 91%, transparent);
}
.marquee-track{
  display:flex;align-items:center;gap:0;
  width:max-content;
  animation:marq 32s linear infinite;
  padding:6px 0;
}
.marquee:hover .marquee-track{animation-play-state:paused}
@keyframes marq{from{transform:translateX(0)}to{transform:translateX(-50%)}}
.press-mark{flex:0 0 auto;opacity:.82;transition:opacity .25s var(--ease);display:flex;align-items:center}
.press-mark:hover{opacity:1}
.press-mark svg{display:block;height:30px;width:auto}
.press-mark img{display:block;height:34px;width:auto}
/* Trailing padding = inter-logo gap, so a -50% shift lands on exactly one period
   (seam between set-end and next-set-start matches inter-logo spacing → seamless, no drift) */
.marquee-set{display:flex;align-items:center;gap:84px;flex:0 0 auto;padding-right:84px}
html.rm .marquee-track{animation:none;width:auto;flex-wrap:wrap;justify-content:center;gap:40px 60px}
html.rm .marquee-set{padding-right:0}
html.rm .marquee-set[aria-hidden="true"]{display:none}
html.rm .marquee{-webkit-mask-image:none;mask-image:none}
.press-harvard{
  text-align:center;margin-top:40px;font-size:16.5px;color:var(--ink);
}
.press-harvard a{font-family:var(--f-head);font-size:13px;letter-spacing:.1em;text-transform:uppercase;white-space:nowrap;border-bottom:2px solid var(--gold);padding-bottom:2px;color:var(--navy)}
.press-harvard a:hover{color:var(--amber)}

/* ============================================================
   3 · RECOGNITION
   ============================================================ */
.recognition-grid{
  display:grid;grid-template-columns:360px 1fr;gap:72px;align-items:center;
}
.fsr-badge-card{
  background:var(--white);
  padding:30px;
  box-shadow:var(--shadow-soft);
  transition:transform .35s var(--ease), box-shadow .35s var(--ease);
}
.fsr-badge-card:hover{transform:translateY(-6px);box-shadow:var(--shadow-lift)}
.fsr-badge-card img{display:block;width:100%}
.fsr-seal-lg{display:block;width:100%;aspect-ratio:1/1;filter:drop-shadow(0 20px 34px rgba(4,29,106,.24))}
.fsr-seal-sm{display:block}
.seal-arc{font-family:'Oswald',sans-serif;font-size:13px;font-weight:500;letter-spacing:1.4px}
.recognition-copy h2{max-width:20ch}
.recognition-line{font-family:var(--f-head);font-size:14px;letter-spacing:.1em;text-transform:uppercase;color:var(--amber);margin:0 0 26px}
blockquote.pull{
  margin:0 0 32px;padding:6px 0 6px 26px;
  border-left:3px solid var(--gold);
  font-style:italic;font-size:19.5px;line-height:1.75;color:var(--ink);
  max-width:62ch;
}
blockquote.pull cite{display:block;margin-top:14px;font-style:normal;font-family:var(--f-head);font-size:13px;letter-spacing:.12em;text-transform:uppercase;color:var(--navy)}
.recognition-btns{display:flex;flex-wrap:wrap;gap:16px}
@media (max-width:900px){
  .recognition-grid{grid-template-columns:1fr;gap:44px}
  .fsr-badge-card{max-width:340px}
}

/* lightbox */
dialog.lightbox{
  border:0;padding:0;background:transparent;max-width:min(920px, 92vw);width:100%;
}
dialog.lightbox::backdrop{background:rgba(4,29,106,.82)}
.lightbox-frame{background:var(--white);padding:14px;box-shadow:0 40px 90px rgba(0,0,0,.5);position:relative}
.lightbox-frame img{display:block;width:100%;max-height:82vh;object-fit:contain}
.lightbox-close{
  position:absolute;top:-16px;right:-16px;width:40px;height:40px;
  background:var(--navy);color:var(--white);border:0;cursor:pointer;
  font-size:20px;line-height:1;font-family:var(--f-head);
  transition:background .2s var(--ease);
}
.lightbox-close:hover{background:var(--amber-fill)}

/* ============================================================
   4 · MEMBER BADGES
   ============================================================ */
.badges{padding:88px 0}
.badges h5{text-align:center;color:var(--navy);margin-bottom:14px}
.badges h5 .rule{display:block;width:34px;height:2px;background:var(--gold);margin:14px auto 0}
.badges-sub{text-align:center;color:#5a6486;font-size:15px;line-height:1.6;max-width:64ch;margin:0 auto 46px}
/* An explicit grid, not wrapping flex. Twelve cards in a flex row wrap to
   whatever the container happens to allow — 5+5+2 at one width, 4+4+4 at
   another — and the orphan row reads as a mistake. Column COUNT is the thing
   being designed here, so it is stated. */
.badge-row{display:grid;grid-template-columns:repeat(4,1fr);gap:22px;justify-items:stretch}

/* ---- accreditation cards --------------------------------------------------
   Round 39. Every card has the SAME anatomy: a caption row set in our type,
   then the mark. Before this the original nine carried their caption baked
   into the PNG — nine captions in nine sizes, colours and typefaces sitting
   in a row beside three set in ours. Uldis: "make sure these elements all
   look like designed by the same person."

   The caption row is a FIXED height, not auto: the whole point is that every
   mark in the row sits on the same line. Three lines are reserved because the
   longest caption ("Member of the Worshipful Company of Tax Advisers") needs
   three, and a row where one logo hangs lower than its neighbours is the
   defect this replaced. */
.badge-card{
  width:auto;height:200px;
  border:1px solid var(--line);background:var(--white);
  display:grid;grid-template-rows:58px 1fr;gap:10px;
  padding:20px 18px 22px;text-align:center;
  transition:transform .3s var(--ease), box-shadow .3s var(--ease), border-color .3s var(--ease);
}
/* --f-body, not --f-head: these read as a caption under a serif-set page, and
   the heading sans would make twelve credentials look like twelve buttons. */
.bc-cap{
  /* Top-aligned, not centred: with a fixed row a one-line caption would float
     to the middle while its two-line neighbour started higher, so the row of
     captions read ragged. Aligning the FIRST line puts every caption on one
     line and every mark on another. */
  display:flex;align-items:flex-start;justify-content:center;
  font-family:var(--f-body);font-weight:400;font-size:13.5px;line-height:1.28;
  color:var(--navy);letter-spacing:.005em;
  overflow:hidden;
}
.bc-mark{display:flex;align-items:center;justify-content:center;min-height:0}
.bc-mark img{
  /* full colour and as large as the box allows — the accrediting bodies' names
     have to be legible; this is credibility, not decoration */
  max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain;
  opacity:.94;transition:transform .3s var(--ease), opacity .3s var(--ease);
}
.badge-card:hover{transform:translateY(-5px);box-shadow:var(--shadow-soft);border-color:#c8cfe8}
.badge-card:hover .bc-mark img{opacity:1;transform:scale(1.03)}
/* A round seal reads optically smaller than a wide wordmark at equal height,
   so let the square lockups fill more of their box. */
.bc-mark img[width="300"],.bc-mark img[width="105"],.bc-mark img[width="156"]{max-height:100%}

/* Two up on phones. One per row was tolerable at nine badges; at twelve — and
   this list is meant to keep growing — it turned the section into a very long
   scroll between the visitor and the rest of the page. */
@media (max-width:900px){ .badge-row{grid-template-columns:repeat(3,1fr);gap:18px} }
@media (max-width:640px){
  .badge-row{grid-template-columns:repeat(2,1fr);gap:14px}
  .badge-card{height:166px;padding:14px 12px 16px;grid-template-rows:52px 1fr;gap:8px}
  .bc-cap{font-size:11.5px;line-height:1.24}
}

/* ── Public registers ──────────────────────────────────────────────────────
   The IRS and Embassy listings are a different KIND of proof from the member
   logos above: a public record anyone can check, not a body we joined. They
   also have no seal we are allowed to reproduce, so a bordered card would have
   been a logo box with the logo missing. Set as register entries instead —
   no box, a gold keyline, and the link carrying the weight, because being
   checkable IS the credential. Twelve logo cards then sit as a clean 4x3. */
.registers{margin:54px auto 0;max-width:940px}
.registers-label{
  font-family:var(--f-head);font-weight:400;font-size:12px;letter-spacing:.22em;
  text-transform:uppercase;color:#67729c;text-align:center;margin:0 0 26px;
}
.register-list{
  list-style:none;margin:0;padding:0;
  display:grid;grid-template-columns:repeat(2,1fr);gap:28px;
}
.register-list a{
  display:block;height:100%;text-decoration:none;
  padding:22px 26px;border-left:2px solid var(--gold);
  background:linear-gradient(90deg,rgba(5,35,126,.032),rgba(5,35,126,0) 72%);
  transition:background .3s var(--ease), transform .3s var(--ease);
}
.register-list a:hover,.register-list a:focus-visible{
  background:linear-gradient(90deg,rgba(5,35,126,.07),rgba(5,35,126,0) 78%);
  transform:translateX(3px);
}
/* A background shift alone is far too quiet to serve as a focus indicator, and
   the browser default ring does not belong in this type. Navy rather than the
   gold used on the search toggle: gold measures about 1.8:1 on white, under the
   3:1 WCAG asks of a focus indicator, where navy is 13.5:1. The gold ring is
   worth revisiting site-wide for the same reason. */
.register-list a:focus-visible{
  outline:2px solid var(--navy);
  outline-offset:3px;
}
.reg-auth{
  display:block;font-family:var(--f-head);font-weight:400;font-size:13px;
  letter-spacing:.13em;text-transform:uppercase;color:var(--navy);
}
.reg-status{
  display:block;font-family:var(--f-body);font-size:21px;line-height:1.3;
  color:var(--navy);margin-top:7px;
}
.reg-entity{
  display:block;font-family:var(--f-body);font-size:13.5px;line-height:1.5;
  color:#5a6486;margin-top:8px;
}
/* Not --amber. The brand amber is built for gold-on-navy; as 12px text on this
   near-white panel it measures 2.54:1, well under the 4.5:1 AA needs. This is
   the same hue carried darker, and it clears 4.5:1 on the panel at rest AND on
   the darker hover tint (measured 5.10 / 4.74). */
.reg-cta{
  display:inline-block;font-family:var(--f-head);font-weight:400;font-size:12px;
  letter-spacing:.1em;text-transform:uppercase;color:#9c5a02;margin-top:14px;
}
.reg-arrow{display:inline-block;margin-left:7px;transition:transform .3s var(--ease)}
.register-list a:hover .reg-arrow,.register-list a:focus-visible .reg-arrow{transform:translateX(4px)}
@media (max-width:720px){
  .registers{margin-top:40px}
  .register-list{grid-template-columns:1fr;gap:16px}
  .register-list a{padding:18px 20px}
  .reg-status{font-size:19px}
}

/* ============================================================
   5 · PERSONA ROUTER
   ============================================================ */
.persona h2{max-width:24ch}
.persona-sub{color:#c3cdf0;max-width:60ch;margin-bottom:48px;font-size:17.5px}
.persona-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;margin-bottom:56px}
.persona-tile{
  position:relative;display:flex;flex-direction:column;gap:10px;
  background:var(--white);padding:32px 28px 26px;
  color:var(--ink);
  transition:transform .3s var(--ease), box-shadow .3s var(--ease);
  overflow:hidden;
}
.persona-tile::before{
  content:"";position:absolute;top:0;left:0;right:0;height:3px;
  background:var(--gold);transform:scaleX(0);transform-origin:left;
  transition:transform .35s var(--ease);
}
.persona-tile:hover{transform:translateY(-6px);box-shadow:0 24px 50px rgba(2,12,48,.35)}
.persona-tile:hover::before{transform:scaleX(1)}
.persona-who{
  font-family:var(--f-head);font-size:12px;font-weight:500;letter-spacing:.18em;
  text-transform:uppercase;color:var(--amber);
}
.persona-tile h3{font-size:21px;color:var(--navy);margin:0}
.persona-arrow{
  margin-top:auto;padding-top:14px;
  font-family:var(--f-head);font-size:13px;letter-spacing:.12em;text-transform:uppercase;color:var(--navy);
  display:flex;align-items:center;gap:8px;
}
.persona-arrow .ar{color:var(--amber-fill);transition:transform .3s var(--ease);font-size:16px}
.persona-tile:hover .persona-arrow .ar{transform:translateX(6px)}
.qualifier{display:grid;grid-template-columns:1fr 1fr;gap:24px}
.qual-panel{
  border:1px solid rgba(255,255,255,.22);
  padding:28px 30px;
}
.qual-panel h4{color:var(--gold);letter-spacing:.12em;text-transform:uppercase;font-size:14px;margin-bottom:12px}
.qual-panel p,.qual-panel li{color:#dfe5fa;font-size:16px;line-height:1.7}
.qual-panel ul{margin:0;padding-left:1.1em}
@media (max-width:980px){
  .persona-grid{grid-template-columns:repeat(2,1fr)}
  /* Nine tiles over two columns leaves the last one stranded in a half-empty
     row. Let it run the full width so the row reads as deliberate. */
  .persona-tile:last-child:nth-child(odd){grid-column:1/-1}
}
@media (max-width:700px){.persona-grid,.qualifier{grid-template-columns:1fr}}

/* ============================================================
   6 · EXPERTISE FLIP CARDS + SEO UNFOLD
   ============================================================ */
.expertise h4{margin-bottom:34px}
.flip-row{display:grid;grid-template-columns:1fr 1fr;gap:28px;margin-bottom:80px}
.flip{perspective:1400px;outline:none;cursor:pointer;min-height:400px}
.flip-inner{
  position:relative;width:100%;height:100%;min-height:400px;
  transform-style:preserve-3d;
  transition:transform .65s var(--ease);
}
.flip:hover .flip-inner,
.flip:focus-visible .flip-inner,
.flip.flipped .flip-inner{transform:rotateY(180deg)}
.flip-face{
  position:absolute;inset:0;
  -webkit-backface-visibility:hidden;backface-visibility:hidden;
  display:flex;flex-direction:column;justify-content:center;
  padding:44px 40px;
}
.flip-front{
  background:linear-gradient(160deg, var(--navy) 0%, var(--navy-deep) 100%);
  color:var(--white);align-items:flex-start;gap:18px;
}
.flip-front svg{width:46px;height:46px}
.flip-front h3{color:var(--white);font-size:26px;font-weight:400;margin:0}
.flip-front .flip-hint{
  font-family:var(--f-head);font-size:11.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--gold);
  margin-top:auto;padding-top:26px;
}
.flip-back{
  background:var(--white);border:1px solid var(--line);
  transform:rotateY(180deg);
  box-shadow:var(--shadow-soft);
}
.flip-back h3{font-size:17px;letter-spacing:.06em;text-transform:uppercase;font-weight:500;margin-bottom:14px}
.flip-back p{font-size:15px;line-height:1.7;margin:0}
html.rm .flip{min-height:0;cursor:default}
html.rm .flip-inner{min-height:0;transform:none !important;transition:none}
html.rm .flip-face{position:static;transform:none;padding:30px}
html.rm .flip-front{display:none}
html.rm .flip-back{display:flex}
@media (max-width:820px){.flip-row{grid-template-columns:1fr;margin-bottom:60px}}

.unfold-wrap{position:relative}
.unfold-title{margin-bottom:26px}
.unfold{
  position:relative;max-height:320px;overflow:hidden;
  transition:max-height .5s var(--ease);
}
.unfold::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:150px;
  background:linear-gradient(180deg, rgba(255,255,255,0), var(--white) 88%);
  pointer-events:none;transition:opacity .3s var(--ease);
}
.unfold.open::after{opacity:0}
.unfold h2{font-size:clamp(21px, 1.2vw + 15px, 26px);margin:1.6em 0 .6em}
.unfold p{max-width:70ch}
.seo-cols{columns:2;column-gap:48px;max-width:none;margin:0 0 1.1em}
.seo-cols li{break-inside:avoid;margin-bottom:9px;font-size:15.5px;line-height:1.6}
@media (max-width:820px){.seo-cols{columns:1}}
.unfold-btn-row{text-align:center;margin-top:28px}

/* ============================================================
   7 · HOW WE HELP
   ============================================================ */
.howhelp h3{max-width:30ch;margin-bottom:24px}
.howhelp-lead{max-width:72ch}
.check-list{list-style:none;margin:26px 0 34px;padding:0}
.check-list li{position:relative;padding:8px 0 8px 36px;font-size:17px}
.check-list li svg{position:absolute;left:0;top:11px;width:21px;height:21px}
.howhelp-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;margin-top:64px}
.hh-card{
  background:var(--white);
  border-top:3px solid var(--gold);
  box-shadow:var(--shadow-soft);
  padding:34px 30px;
  transition:transform .3s var(--ease), box-shadow .3s var(--ease);
}
.hh-card:hover{transform:translateY(-5px);box-shadow:var(--shadow-lift)}
.hh-card h4{font-size:18px;letter-spacing:.04em;margin-bottom:14px;line-height:1.4}
.hh-card p{font-size:15.5px;line-height:1.7;margin:0}
@media (max-width:900px){.howhelp-cards{grid-template-columns:1fr;max-width:560px}}

/* ============================================================
   8 · REASONS ACCORDIONS
   ============================================================ */
.reasons h2{max-width:26ch;margin-bottom:44px}
.acc{border-top:1px solid var(--line)}
.acc-item{border-bottom:1px solid var(--line)}
.acc-head{margin:0}
.acc-btn{
  width:100%;display:flex;align-items:center;justify-content:space-between;gap:24px;
  background:none;border:0;cursor:pointer;text-align:left;
  padding:24px 6px;
  font-family:var(--f-head);font-weight:400;font-size:19px;line-height:1.4;color:var(--navy);
  transition:color .2s var(--ease);
}
.acc-btn:hover{color:var(--amber)}
.acc-ico{
  flex:0 0 auto;width:34px;height:34px;position:relative;
  border:1px solid var(--gold);
}
.acc-ico::before,.acc-ico::after{
  content:"";position:absolute;background:var(--amber-fill);
  transition:transform .3s var(--ease);
}
.acc-ico::before{left:50%;top:9px;bottom:9px;width:2px;transform:translateX(-50%)}
.acc-ico::after{top:50%;left:9px;right:9px;height:2px;transform:translateY(-50%)}
.acc-btn[aria-expanded="true"] .acc-ico::before{transform:translateX(-50%) scaleY(0)}
.acc-panel{
  overflow:hidden;max-height:0;
  transition:max-height .45s var(--ease);
}
.acc-body{padding:2px 6px 30px;max-width:76ch}
.acc-body p{font-size:16.5px}
.acc-body ul{list-style:none;padding:0;margin:0}
.acc-body ul li{position:relative;padding:6px 0 6px 30px;font-size:16.5px}
.acc-body ul li::before{content:"";position:absolute;left:2px;top:17px;width:14px;height:2px;background:var(--gold)}

/* ============================================================
   9 · GLOBAL REACH
   ============================================================ */
.reach h2{max-width:26ch}
.reach-sub{color:#c3cdf0;max-width:64ch;margin-bottom:48px;font-size:17.5px}
.reach-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:2px;background:rgba(255,255,255,.14);border:1px solid rgba(255,255,255,.14);margin-bottom:36px}
.reach-tile{
  background:var(--navy-deep);
  padding:30px 28px;display:block;
  transition:background .3s var(--ease);
  position:relative;
}
a.reach-tile:hover{background:#0a2a8f}
.reach-tile .r-country{
  font-family:var(--f-head);font-weight:500;font-size:18px;letter-spacing:.06em;
  text-transform:uppercase;color:var(--gold);display:block;margin-bottom:4px;
}
.reach-tile .r-city{color:#dfe5fa;font-size:15.5px;display:block}
.reach-tile .r-link{
  font-family:var(--f-head);font-size:12px;letter-spacing:.14em;text-transform:uppercase;
  color:#9aa8dd;display:block;margin-top:12px;transition:color .25s var(--ease);
}
a.reach-tile:hover .r-link{color:var(--gold)}
.reach-note{color:#aeb9e4;font-size:16px;font-style:italic}
@media (max-width:900px){.reach-grid{grid-template-columns:repeat(2,1fr)}}
@media (max-width:560px){.reach-grid{grid-template-columns:1fr}}

/* ============================================================
   10 · FIRM SUCCESSES COUNTERS
   ============================================================ */
.successes h2{text-align:center;margin-bottom:8px}
.successes .succ-rule{width:34px;height:2px;background:var(--gold);margin:0 auto 56px}
.counter-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:44px 32px}
.counter{text-align:center}
.counter .num{
  font-family:var(--f-head);font-weight:400;
  font-size:clamp(40px, 3vw + 24px, 54px);
  color:var(--navy);line-height:1;letter-spacing:-.01em;
  font-variant-numeric:tabular-nums;
}
.counter .num .suffix{color:var(--amber);font-weight:300}
.counter .label{
  margin-top:12px;font-size:14.5px;line-height:1.5;color:var(--ink);
  font-family:var(--f-body);
}
@media (max-width:900px){.counter-grid{grid-template-columns:repeat(2,1fr)}}

/* ============================================================
   11 · TESTIMONIALS
   ============================================================ */
.testi-head{
  display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;
  gap:20px;margin-bottom:44px;
}
.testi-chips{display:flex;flex-wrap:wrap;gap:10px}
.chip{
  font-family:var(--f-head);font-size:12px;font-weight:500;letter-spacing:.12em;text-transform:uppercase;
  color:var(--navy);border:1px solid #c8cfe8;background:var(--white);
  padding:8px 16px;white-space:nowrap;
}
.testi-shell{position:relative}
.t-track{
  display:flex;gap:24px;
  overflow-x:auto;scroll-snap-type:x mandatory;
  scrollbar-width:none;
  padding:4px 4px 12px;
  cursor:grab;
}
.t-track::-webkit-scrollbar{display:none}
.t-track.dragging{cursor:grabbing;scroll-snap-type:none}
.t-card{
  flex:0 0 calc((100% - 48px) / 3);
  scroll-snap-align:start;
  background:var(--white);
  border:1px solid var(--line);
  box-shadow:var(--shadow-soft);
  padding:32px 30px 26px;
  display:flex;flex-direction:column;
}
.t-quote{font-size:15.5px;line-height:1.75;margin:0 0 20px}
.t-quote.clamped{display:-webkit-box;-webkit-line-clamp:9;-webkit-box-orient:vertical;overflow:hidden}
.t-more{
  align-self:flex-start;background:none;border:0;cursor:pointer;padding:0;margin:-10px 0 18px;
  font-family:var(--f-head);font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--amber);
}
.t-more:hover{color:var(--navy)}
.t-person{display:flex;align-items:center;gap:14px;margin-top:auto;padding-top:18px;border-top:1px solid var(--grey)}
.t-avatar{
  position:relative;width:48px;height:48px;flex:0 0 auto;border-radius:50%;
  background:var(--navy);color:var(--white);overflow:hidden;
  display:flex;align-items:center;justify-content:center;
  font-family:var(--f-head);font-size:15px;letter-spacing:.05em;
}
.t-avatar img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.t-id{min-width:0}
.t-name{font-family:var(--f-head);font-weight:500;font-size:15px;color:var(--navy);letter-spacing:.03em}
.t-role{font-size:12.5px;color:#5a6491;line-height:1.45}
.t-src{
  display:flex;align-items:center;gap:7px;margin-top:6px;
  font-family:var(--f-head);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:#676e8b;
}
.t-src svg{width:13px;height:13px;flex:0 0 auto}
.t-nav{display:flex;gap:12px;justify-content:flex-end;margin-top:26px}
.t-arrow{
  width:52px;height:52px;border:1px solid var(--navy);background:var(--white);
  color:var(--navy);cursor:pointer;font-size:20px;font-family:var(--f-head);
  transition:background .25s var(--ease), color .25s var(--ease);
}
.t-arrow:hover{background:var(--navy);color:var(--gold)}
@media (max-width:1080px){.t-card{flex-basis:calc((100% - 24px) / 2)}}
@media (max-width:720px){.t-card{flex-basis:100%}}
/* reduced motion: static grid of first 6 + expander */
html.rm .t-track{display:grid;grid-template-columns:repeat(3,1fr);overflow:visible;cursor:default}
html.rm .t-card{display:none}
html.rm .t-card:nth-child(-n+6){display:flex}
html.rm .testi-shell.show-all .t-card{display:flex}
html.rm .t-nav{display:none}
html.rm .t-showall{display:inline-block}
.t-showall{display:none;margin-top:30px}
@media (max-width:1080px){html.rm .t-track{grid-template-columns:repeat(2,1fr)}}
@media (max-width:720px){html.rm .t-track{grid-template-columns:1fr}}

/* ============================================================
   12 · VIDEO ROW
   ============================================================ */
.videos{padding:88px 0}
.video-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
.yt{
  position:relative;aspect-ratio:16 / 9;overflow:hidden;
  background:var(--navy-deep);cursor:pointer;border:0;padding:0;display:block;width:100%;
}
.yt img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transition:transform .5s var(--ease), opacity .3s var(--ease);opacity:.92}
.yt:hover img{transform:scale(1.045);opacity:1}
.yt .play{
  position:absolute;top:50%;left:50%;transform:translate(-50%, -50%);
  width:68px;height:68px;border-radius:50%;
  background:rgba(4,29,106,.88);
  display:flex;align-items:center;justify-content:center;
  transition:background .25s var(--ease), transform .25s var(--ease);
}
.yt:hover .play{background:var(--navy);transform:translate(-50%, -50%) scale(1.08)}
.yt .play::after{
  content:"";display:block;margin-left:5px;
  border-style:solid;border-width:11px 0 11px 18px;
  border-color:transparent transparent transparent var(--gold);
}
.yt iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
@media (max-width:820px){.video-grid{grid-template-columns:1fr;max-width:560px;margin:0 auto}}

/* ============================================================
   13 · FINAL CTA BAND
   ============================================================ */
.cta-band{padding:84px 0;text-align:center}
.cta-band h2{color:var(--navy);margin-bottom:10px}
.cta-band p{color:#3d3113;font-size:18px;margin-bottom:34px}

/* ============================================================
   14 · INSIGHTS
   ============================================================ */
.insights-head{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:44px;flex-wrap:wrap}
.insight-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;align-items:stretch}
.insight-card{display:flex;flex-direction:column;color:var(--ink)}
.insight-thumb{overflow:hidden;aspect-ratio:16 / 9;background:var(--grey);margin-bottom:18px}
.insight-thumb img{width:100%;height:100%;object-fit:cover;transition:transform .5s var(--ease)}
.insight-card:hover .insight-thumb img{transform:scale(1.05)}
.insight-card h3{font-size:19px;line-height:1.45;margin-bottom:16px;transition:color .25s var(--ease)}
.insight-card:hover h3{color:var(--amber)}
.insight-read{
  margin-top:auto;align-self:flex-start; /* pin CTA to card bottom → equal-height cards, no ragged whitespace above the footer */
  font-family:var(--f-head);font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--navy);
  border-bottom:2px solid var(--gold);padding-bottom:2px;
}
@media (max-width:900px){.insight-grid{grid-template-columns:1fr;max-width:520px}}

/* ============================================================
   15 · FOOTER
   ============================================================ */
.footer{padding:88px 0 0;font-size:15px}
.footer a{color:#c9d2f2}
.footer a:hover{color:var(--gold)}
/* .footer a out-specifies .btn-gold's own colour, so the footer CTA was
   rendering pale blue on gold (1.47:1 — barely readable). Buttons opt out of
   the blanket footer link colour and keep their designed contrast. */
.footer .btn-gold,.footer .btn-gold:hover{color:var(--navy)}
.footer-grid{
  display:grid;grid-template-columns:1.5fr .8fr 1.15fr;gap:56px;
  padding-bottom:52px;
}
/* Footer column headings. Tagged h2, not h6: every page jumped h1 -> h6 here,
   which is the one heading-ladder break that appeared on all 946 URLs. The
   `.foot-h` class carries the look so the markup level is free to be correct. */
.footer h6,
.footer .foot-h{
  font-family:var(--f-head);font-weight:500;font-size:12.5px;letter-spacing:.24em;
  text-transform:uppercase;color:var(--gold);margin:0 0 22px;
}
.footer-logos{display:flex;align-items:center;gap:14px;margin-bottom:24px;flex-wrap:wrap}
.footer-logos .logo-pill{background:var(--white);padding:8px 14px;display:inline-flex;align-items:center}
.footer-logos img{height:40px;width:auto;display:block}
.footer-intro{color:#aeb9e4;line-height:1.75;margin-bottom:28px;max-width:44ch}
.follow-row{display:flex;gap:12px}
.follow-row a{
  width:42px;height:42px;border:1px solid rgba(255,255,255,.28);
  display:flex;align-items:center;justify-content:center;
  transition:border-color .25s var(--ease), background .25s var(--ease);
}
.follow-row a:hover{border-color:var(--gold);background:rgba(254,184,64,.1)}
.follow-row svg{width:17px;height:17px;fill:#c9d2f2;transition:fill .25s var(--ease)}
.follow-row a:hover svg{fill:var(--gold)}
.offices-acc details{border-bottom:1px solid rgba(255,255,255,.12)}
.offices-acc summary{
  list-style:none;cursor:pointer;
  display:flex;justify-content:space-between;align-items:center;gap:12px;
  padding:10px 2px;
  font-family:var(--f-head);font-size:14px;letter-spacing:.08em;text-transform:uppercase;color:#e8ecfb;
}
.offices-acc summary::-webkit-details-marker{display:none}
.offices-acc summary::after{content:"+";color:var(--gold);font-size:17px;flex:0 0 auto;transition:transform .25s var(--ease)}
.offices-acc details[open] > summary::after{transform:rotate(45deg)}
.offices-acc .office-body{padding:2px 2px 16px;color:#aeb9e4;font-size:14px;line-height:1.7}
.offices-acc .office-body p{margin:0 0 8px}
.offices-acc .office-body a{font-family:var(--f-head);font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--gold)}
.quick-links ul{list-style:none;margin:0;padding:0}
.quick-links li{margin:0 0 4px}
.quick-links a{display:inline-block;padding:5px 0;font-size:15.5px}
.contact-block p{margin:0 0 14px;color:#aeb9e4;line-height:1.55}
.contact-block .c-label{
  display:block;font-family:var(--f-head);font-size:11px;font-weight:500;
  letter-spacing:.2em;text-transform:uppercase;color:#a6aecd;margin-bottom:2px;
}
.contact-block a{color:#e8ecfb}
.contact-block a:hover{color:var(--gold)}
.footer-legal{
  border-top:1px solid rgba(255,255,255,.14);
  padding:26px 0;
  display:flex;flex-wrap:wrap;justify-content:space-between;gap:12px;
  color:#a6aecd;font-size:13.5px;
}
.footer-legal a{color:#c9d2f2;border-bottom:1px solid rgba(254,184,64,.5)}
.footer-legal a:hover{color:var(--gold)}
@media (max-width:1080px){.footer-grid{grid-template-columns:1fr 1fr;gap:48px}}
@media (max-width:640px){.footer-grid{grid-template-columns:1fr}}

/* ============================================================
   REDUCED MOTION
   ============================================================ */
@media (prefers-reduced-motion: reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important}
}

/* ============================================================
   STANDING RULE — section-to-footer whitespace (background-aware)
   Collapse the last section's bottom padding ONLY when the footer shares
   its background colour (white-on-white), where two stacked paddings make a
   dead white band. Our footer is DARK (band-navy-deep): its top padding is
   dark chrome, NOT white breathing room — so the only visible white gap above
   the footer is this section's bottom padding. It must stay symmetric with the
   section's top (96px / 56px mobile), or the page looks bottom-cramped.
   → On any page whose footer is dark, do NOT collapse the last section.
   ============================================================ */
.section.section--to-footer{padding-bottom:96px}
@media (max-width:720px){.section.section--to-footer{padding-bottom:56px}}

/* ============================================================
   FOOTER — office directory becomes a full-width bottom row (was a 22-row
   tower crammed in one narrow column). Pure CSS: grid order + span, no markup move.
   ============================================================ */
.footer-grid .offices-acc{
  grid-column:1 / -1;order:5;
  border-top:1px solid rgba(255,255,255,.12);
  margin-top:14px;padding-top:34px;
  display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));
  gap:0 46px;align-content:start;
}
.footer-grid .offices-acc > h6,
.footer-grid .offices-acc > .foot-h{grid-column:1 / -1;margin-bottom:18px}
.offices-acc details{break-inside:avoid}

/* ============================================================
   SN BADGE — locked Systems Ninjas footer standard (electric-trace mark)
   ============================================================ */
.sn-badge{display:inline-flex;align-items:center;gap:9px;text-decoration:none}
.footer-legal a.sn-badge{border-bottom:0}
.sn-badge .pb{font-size:12px;color:rgba(255,255,255,.5);letter-spacing:.02em}
.sn-badge .nm{font-family:var(--f-head);font-weight:500;font-size:13px;letter-spacing:.05em;color:#fff;transition:color .2s var(--ease)}
.sn-badge:hover .nm{color:var(--gold)}
.sn-ic{position:relative;width:26px;height:26px;flex:none}
.sn-ic-box{position:absolute;inset:0;border-radius:5px;border:2px solid #fff;background:#fff;overflow:hidden;display:flex;align-items:center;justify-content:center}
.sn-ic-box img{width:100%;height:100%;object-fit:contain}
.sn-ic svg{position:absolute;inset:-3px;width:32px;height:32px;pointer-events:none}
.sn-trace{fill:none;stroke:var(--gold);stroke-width:2;stroke-linecap:round;stroke-dasharray:40 120;animation:sn-electric 4s ease-in infinite}
@keyframes sn-electric{0%{stroke-dashoffset:160;opacity:0}5%{opacity:1}30%{stroke-dashoffset:0;opacity:1}35%{opacity:0}100%{stroke-dashoffset:0;opacity:0}}

/* ============================================================
   SCROLL-TO-TOP — locked SN standard, bottom-LEFT, appears past 600px
   ============================================================ */
.to-top{
  position:fixed;left:24px;bottom:26px;z-index:1090;
  width:48px;height:48px;border-radius:50%;
  background:var(--navy);color:#fff;border:0;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 12px 30px rgba(4,29,106,.34);
  opacity:0;visibility:hidden;transform:translateY(8px);
  transition:opacity .3s var(--ease),visibility .3s var(--ease),transform .25s var(--ease),background .25s var(--ease);
}
.to-top svg{width:22px;height:22px}
.to-top.show{opacity:1;visibility:visible;transform:translateY(0)}
.to-top:hover{background:var(--navy-deep);transform:translateY(-3px)}
@media (max-width:560px){.to-top{left:16px;bottom:18px;width:44px;height:44px}}

/* ============================================================================
   BLOG GRAMMARS — .solp (hero/cta) + .blg (card grid/archive) + .post (article)
   Extracted from the approved blog / blog-category / blog-post prototypes so the
   theme-rendered blog templates (home.php, category.php, archive.php, single.php,
   search.php, 404.php) style from this one sheet. Imported hand-designed Pages
   carry their own identical scoped copy — harmless duplication.
   ============================================================================ */
.solp{--solp-max:1180px}
.solp .succ-rule{width:34px;height:2px;background:var(--gold)}

/* ===== solp hero ===== */
.solp-hero{position:relative;background:var(--navy-deep);color:#fff;overflow:hidden}
.solp-hero::before{content:"";position:absolute;inset:0;background:
  radial-gradient(120% 90% at 82% -10%, rgba(254,184,64,.14), transparent 60%),
  radial-gradient(90% 80% at 0% 120%, rgba(255,255,255,.05), transparent 55%);pointer-events:none}
.solp-hero .container{position:relative}
.solp-hero-inner{max-width:860px;padding:78px 0 60px}
.crumbs{font-family:var(--f-head);font-size:12.5px;letter-spacing:.12em;text-transform:uppercase;color:rgba(255,255,255,.6);margin-bottom:26px}
.crumbs a{color:rgba(255,255,255,.6)}
.crumbs a:hover{color:var(--gold)}
.crumbs .sep{margin:0 9px;color:rgba(255,255,255,.32)}
.crumbs .here{color:var(--gold)}
.solp-hero .eyebrow{color:var(--gold)}
.solp-hero h1{font-size:clamp(2.5rem, 1.7rem + 3.4vw, 3.9rem);line-height:1.04;font-weight:400;color:#fff;margin:12px 0 20px;letter-spacing:.4px}
.solp-hero h1 em{font-style:normal;color:var(--gold)}
.solp-lede{font-size:clamp(1.06rem,1rem + .35vw,1.24rem);line-height:1.62;color:rgba(255,255,255,.82);max-width:62ch}
.cat-count{font-family:var(--f-head);font-size:13px;letter-spacing:.12em;text-transform:uppercase;color:rgba(255,255,255,.55);margin-bottom:18px}

/* topic quick-filter under the hero headline */
.blg-filter{display:flex;flex-wrap:wrap;gap:9px;margin-top:32px}
.blg-filter a{display:inline-flex;align-items:center;font-family:var(--f-head);font-size:12.5px;letter-spacing:.06em;text-transform:uppercase;color:rgba(255,255,255,.82);border:1px solid rgba(255,255,255,.22);padding:8px 14px;transition:border-color .25s var(--ease),color .25s var(--ease),background .25s var(--ease)}
.blg-filter a:hover{border-color:var(--gold);color:var(--navy-deep);background:var(--gold)}
.blg-filter a.is-current{background:var(--gold);color:var(--navy-deep);border-color:var(--gold)}

/* ===== featured (latest) ===== */
.blg-feat{position:relative;background:var(--navy);color:#fff;overflow:hidden;border-top:3px solid var(--gold)}
.blg-feat::before{content:"";position:absolute;right:-6%;top:-30%;width:52%;height:160%;background:
  radial-gradient(closest-side, rgba(254,184,64,.16), transparent 72%);pointer-events:none}
.blg-feat .container{position:relative}
.blg-feat-in{display:grid;grid-template-columns:1.35fr .9fr;gap:44px;align-items:center;padding:52px 0 56px}
.blg-feat .flag{font-family:var(--f-head);font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--gold);display:inline-flex;align-items:center;gap:10px}
.blg-feat .flag::after{content:"";width:26px;height:1px;background:var(--gold);opacity:.6}
.blg-feat .chip{margin:20px 0 14px}
.blg-feat h2{color:#fff;font-size:clamp(1.7rem,1.2rem + 1.9vw,2.55rem);line-height:1.1;font-weight:400;margin:0 0 18px;letter-spacing:.3px;max-width:20ch}
.blg-feat .meta{font-family:var(--f-head);font-size:12.5px;letter-spacing:.09em;text-transform:uppercase;color:rgba(255,255,255,.62);margin-bottom:26px}
.blg-feat .fig{position:relative;min-height:196px;border:1px solid rgba(255,255,255,.16);display:grid;place-items:center;background:
  linear-gradient(150deg, rgba(255,255,255,.05), rgba(255,255,255,0) 60%)}
.blg-feat .fig .mono{font-family:var(--f-head);font-weight:300;font-size:78px;color:rgba(254,184,64,.9);line-height:1}
.blg-feat .fig img{width:100%;height:100%;object-fit:cover;position:absolute;inset:0}
.blg-feat .fig .kicker{position:absolute;bottom:16px;left:16px;font-family:var(--f-head);font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:rgba(255,255,255,.5)}

/* ===== chips (shared) ===== */
.chip.chip-cat{color:var(--gold-ink,#b9832a);background:rgba(254,184,64,.14);border:1px solid rgba(254,184,64,.4);padding:5px 11px;text-transform:uppercase;font-size:11.5px;font-weight:500;letter-spacing:.09em;white-space:normal}
.blg-feat .chip{color:var(--gold);background:rgba(254,184,64,.13);border-color:rgba(254,184,64,.44)}
.blg-card .chip{display:inline-flex;align-items:center;color:var(--gold-ink,#b9832a);background:rgba(254,184,64,.14);border:1px solid rgba(254,184,64,.4);padding:5px 11px;font-size:11.5px;font-weight:500;letter-spacing:.09em;text-transform:uppercase;white-space:nowrap}

/* ===== card grid ===== */
.blg-grid{display:flex;flex-wrap:wrap;justify-content:center;align-items:stretch;gap:22px;margin-top:8px}
.blg-card{position:relative;display:flex;flex-direction:column;flex:1 1 340px;max-width:378px;background:#fff;border:1px solid var(--line,#e7e9f0);border-top:3px solid transparent;padding:28px 26px 26px;transition:transform .3s var(--ease),box-shadow .3s var(--ease),border-color .3s var(--ease),border-top-color .3s var(--ease)}
.blg-card:hover{transform:translateY(-5px);box-shadow:0 20px 44px -26px rgba(5,35,126,.55);border-color:var(--line,#e7e9f0);border-top-color:var(--gold)}
.blg-card .c-top{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:18px}
.blg-card .date{font-family:var(--f-head);font-size:11.5px;letter-spacing:.1em;text-transform:uppercase;color:#676e8b;white-space:nowrap}
.blg-card h3{font-family:var(--f-head);font-weight:500;font-size:20px;line-height:1.24;color:var(--navy);margin:0;letter-spacing:.2px;transition:color .25s var(--ease)}
.blg-card:hover h3{color:var(--amber)}
.blg-card .spacer{flex:1 1 auto;min-height:18px}
.blg-card .more{display:inline-flex;align-items:center;gap:9px;font-family:var(--f-head);font-size:12.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--navy);margin-top:22px}
.blg-card .more .ar{transition:transform .3s var(--ease)}
.blg-card:hover .more{color:var(--amber)}
.blg-card:hover .more .ar{transform:translateX(5px)}
.blg-card a.cover{position:absolute;inset:0}

/* view-all row */
.blg-all{text-align:center;margin-top:40px}

/* ===== topic directory ===== */
.blg-topics{display:flex;flex-wrap:wrap;justify-content:center;gap:12px;margin-top:6px}
.blg-topics a{display:inline-flex;align-items:center;gap:9px;background:#fff;border:1px solid var(--line,#e7e9f0);padding:13px 18px;font-family:var(--f-head);font-size:13.5px;letter-spacing:.03em;color:var(--navy);transition:border-color .3s var(--ease),transform .3s var(--ease),color .3s var(--ease)}
.blg-topics a::before{content:"";width:6px;height:6px;background:var(--gold);flex:none}
.blg-topics a:hover{border-color:var(--gold);transform:translateY(-2px);color:var(--amber)}

/* ===== pagination ===== */
.blg-pager{display:flex;justify-content:center;align-items:center;gap:8px;margin-top:44px;flex-wrap:wrap}
.blg-pager a,.blg-pager span{display:inline-flex;align-items:center;justify-content:center;min-width:44px;height:44px;padding:0 14px;font-family:var(--f-head);font-size:14px;letter-spacing:.04em;border:1px solid var(--line,#e7e9f0);color:var(--navy);background:#fff;transition:border-color .25s var(--ease),color .25s var(--ease),background .25s var(--ease)}
.blg-pager a:hover{border-color:var(--gold);color:var(--amber)}
.blg-pager .current,.blg-pager .is-current{background:var(--navy);color:#fff;border-color:var(--navy)}
.blg-pager .dots{border:0;background:none;min-width:24px;color:#676e8b}
.blg-pager .nav-a,.blg-pager .prev,.blg-pager .next{letter-spacing:.1em;text-transform:uppercase;font-size:12px}

/* ===== solp CTA ===== */
.solp-cta{background:var(--navy);color:#fff;text-align:center}
.solp-cta .container{padding-top:70px;padding-bottom:74px}
.solp-cta h2{color:#fff;margin:0 0 14px}
.solp-cta p{color:rgba(255,255,255,.8);max-width:60ch;margin:0 auto 30px;font-size:1.08rem;line-height:1.6}

@media (max-width:900px){ .blg-feat-in{grid-template-columns:1fr;gap:30px} .blg-feat .fig{min-height:150px} }
@media (max-width:820px){ .solp-hero-inner{padding:60px 0 48px} }
@media (max-width:600px){
  .blg-grid>*{flex-basis:100%!important;max-width:none!important}
  .blg-feat .fig{display:none}
}

/* ============================================================================
   SINGLE POST — .post grammar (article typography, sticky TOC, author box)
   ============================================================================ */
.post{--grey:#f5f6fa;--white:#fff;--shadow-soft:0 10px 30px rgba(4,29,106,.08);--shadow-lift:0 18px 44px rgba(4,29,106,.14)}

/* 1 · POST BREADCRUMB BAR (namespaced) */
.pcrumbs-wrap{border-bottom:1px solid var(--line,#e7e9f0);background:#fff}
.pcrumbs{list-style:none;margin:0;padding:14px 0;display:flex;align-items:center;flex-wrap:nowrap;gap:10px;font-family:var(--f-head);font-size:12px;letter-spacing:.12em;text-transform:uppercase;overflow:hidden}
.pcrumbs li{display:flex;align-items:center;gap:10px;min-width:0;flex:0 0 auto}
.pcrumbs li.crumb-current{flex:0 1 auto;min-width:0}
.pcrumbs a{color:var(--navy);white-space:nowrap}
.pcrumbs a:hover{color:var(--amber)}
.pcrumbs .sep{color:var(--amber-fill);flex:0 0 auto}
.pcrumbs .crumb-current span{color:#5a6491;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* 2 · POST HEADER */
.post-head{padding:64px 0 34px}
.post-head-inner{max-width:70ch;margin:0 auto}
.cat-chip{display:inline-block;background:var(--navy);color:#fff;font-family:var(--f-head);font-weight:500;font-size:11.5px;letter-spacing:.22em;text-transform:uppercase;padding:7px 16px;margin-bottom:22px}
a.cat-chip:hover{background:var(--navy-deep);color:var(--gold)}
.post-title{font-family:var(--f-head);color:var(--navy);font-weight:300;letter-spacing:-.01em;font-size:clamp(30px, 1.7vw + 24px, 44px);line-height:1.16;margin:0 0 24px}
.post-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;font-family:var(--f-head);font-size:13px;letter-spacing:.06em;color:#5a6491;padding-bottom:26px;border-bottom:1px solid var(--line,#e7e9f0)}
.post-meta .byline{display:flex;align-items:center;gap:10px;color:var(--navy)}
.post-meta .byline img{width:34px;height:34px;border-radius:50%;object-fit:cover;object-position:top center;display:block;border:1px solid var(--line,#e7e9f0)}
.post-meta .byline a{color:var(--navy)}
.post-meta .byline a:hover{color:var(--amber)}
.post-meta .m-dot{color:var(--amber-fill)}
@media (max-width:720px){.post-head{padding:44px 0 26px}}

/* 3 · ANSWER CAPSULE (AEO) */
.answer-capsule{max-width:70ch;margin:34px auto 0;background:var(--grey);border-left:3px solid var(--gold);padding:26px 30px 22px}
.answer-capsule .cap-label{display:block;font-family:var(--f-head);font-weight:500;font-size:11.5px;letter-spacing:.26em;text-transform:uppercase;color:var(--navy);margin-bottom:10px}
.answer-capsule p{font-size:19px;line-height:1.7;margin:0;color:var(--ink)}

/* 4 · LAYOUT — content column + sticky TOC sidebar */
.post-layout{display:grid;grid-template-columns:minmax(0, 70ch) 264px;gap:72px;justify-content:center;padding:48px 0 72px}
.toc-side{position:relative}
.toc-side .toc-box{position:sticky;top:118px;border-left:1px solid var(--line,#e7e9f0);padding-left:24px}
.toc-title{font-family:var(--f-head);font-weight:500;font-size:11.5px;letter-spacing:.26em;text-transform:uppercase;color:var(--navy);margin:0 0 14px}
.toc-list{list-style:none;margin:0;padding:0}
.toc-list li{margin:0}
.toc-list a{display:block;position:relative;font-family:var(--f-body);font-size:14.5px;line-height:1.5;color:#5a6491;padding:6px 0;transition:color .2s var(--ease)}
.toc-list a:hover{color:var(--amber)}
.toc-list a::before{content:"";position:absolute;left:-25px;top:8px;bottom:8px;width:2px;background:var(--gold);opacity:0;transition:opacity .2s var(--ease)}
.toc-list a.active{color:var(--navy)}
.toc-list a.active::before{opacity:1}
.toc-mobile{display:none}
@media (max-width:1080px){
  .post-layout{grid-template-columns:minmax(0, 70ch);gap:0;padding:40px 0 56px}
  .toc-side{display:none}
  .toc-mobile{display:block;margin:0 0 36px;border:1px solid var(--line,#e7e9f0);background:#fff}
  .toc-mobile summary{list-style:none;cursor:pointer;display:flex;justify-content:space-between;align-items:center;gap:14px;padding:16px 20px;font-family:var(--f-head);font-weight:500;font-size:12px;letter-spacing:.24em;text-transform:uppercase;color:var(--navy)}
  .toc-mobile summary::-webkit-details-marker{display:none}
  .toc-mobile summary::after{content:"+";font-size:20px;color:var(--amber-fill);transition:transform .25s var(--ease)}
  .toc-mobile[open] > summary::after{transform:rotate(45deg)}
  .toc-mobile .toc-list{padding:2px 20px 16px}
  .toc-mobile .toc-list a{padding:7px 0}
  .toc-mobile .toc-list a::before{content:none}
}

/* 5 · ARTICLE CONTENT TYPOGRAPHY */
.article{min-width:0}
.article > p{max-width:70ch}
.article h2{font-family:var(--f-head);color:var(--navy);font-weight:400;letter-spacing:-.005em;font-size:clamp(24px, 1.2vw + 18px, 31px);line-height:1.22;margin:1.9em 0 .7em;padding-bottom:14px;position:relative}
.article h2::after{content:"";position:absolute;left:0;bottom:0;width:44px;height:2px;background:var(--gold)}
.article h3{font-family:var(--f-head);color:var(--navy);font-weight:500;font-size:clamp(19px, .6vw + 16px, 22px);letter-spacing:.01em;margin:1.7em 0 .55em}
.article ul{list-style:none;padding:0;margin:0 0 1.3em}
.article ul li{position:relative;padding:6px 0 6px 30px;font-size:17px;line-height:1.7}
.article ul li::before{content:"";position:absolute;left:2px;top:19px;width:14px;height:2px;background:var(--gold)}
.article ol{margin:0 0 1.3em;padding-left:1.4em}
.article ol li{padding:6px 0;font-size:17px;line-height:1.7}
/* Numerals are body copy, not chrome: an amber numeral reads as emphasis the
   author never wrote (and, next to a link, as a link). Brand colour stays on
   the design system's own marks — eyebrows, kickers, rules, arrows. */
.article ol li::marker{font-family:var(--f-head);color:var(--navy);font-size:15px}
/* in-article links follow the SAME locked rule as body copy elsewhere (see the
   `.band-white p a` rule near the top): understated navy with a subtle underline.
   Corporate restraint — links never pop in a brand colour. */
.article a{color:var(--navy);text-decoration:underline;text-decoration-color:rgba(5,35,126,.32);text-underline-offset:3px;text-decoration-thickness:1px;border-bottom:0;transition:color .2s var(--ease), text-decoration-color .2s var(--ease)}
.article a:hover{color:var(--navy-deep);text-decoration-color:var(--gold)}
.article blockquote{margin:2em 0;padding:8px 0 8px 28px;border-left:3px solid var(--navy);font-style:italic;font-size:20px;line-height:1.75;color:var(--ink)}
.article blockquote p{margin:0 0 .6em}
.article blockquote p:last-child{margin-bottom:0}
.article blockquote cite{display:block;margin-top:12px;font-style:normal;font-family:var(--f-head);font-size:12.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--navy)}
.article hr{border:0;width:64px;height:2px;background:var(--gold);margin:56px auto}
.article code{font-family:Consolas,'Courier New',monospace;font-size:.88em;background:var(--grey);border:1px solid var(--line,#e7e9f0);padding:1px 7px;color:var(--navy);white-space:nowrap}
.article em{font-style:italic}
.article img{height:auto}

/* table — always inside .table-wrap, scrolls on narrow screens */
.table-wrap{overflow-x:auto;border:1px solid var(--line,#e7e9f0);margin:2em 0;-webkit-overflow-scrolling:touch}
.table-wrap table{border-collapse:collapse;width:100%;min-width:620px}
.table-wrap caption{caption-side:top;text-align:left;font-family:var(--f-head);font-weight:500;font-size:11.5px;letter-spacing:.22em;text-transform:uppercase;color:var(--navy);padding:16px 20px 12px;border-bottom:1px solid var(--line,#e7e9f0);background:var(--grey)}
.table-wrap th,.table-wrap td{text-align:left;vertical-align:top;padding:13px 20px;border-bottom:1px solid var(--line,#e7e9f0);font-size:15.5px;line-height:1.6}
.table-wrap thead th{font-family:var(--f-head);font-weight:500;font-size:12.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--navy);background:#fff;border-bottom:2px solid var(--gold);white-space:nowrap}
.table-wrap tbody tr:last-child td{border-bottom:0}
.table-wrap tbody th{font-family:var(--f-head);font-weight:400;font-size:15px;color:var(--navy);letter-spacing:.02em}

/* figure */
.article figure{margin:2.2em 0}
.article figure img{display:block;width:100%}
.article figcaption{padding:12px 2px 0;font-size:14.5px;font-style:italic;color:#5a6491;line-height:1.6}
.article figcaption::before{content:"";display:inline-block;width:18px;height:2px;background:var(--gold);margin-right:10px;vertical-align:4px}

/* ------------------------------------------------------------------
   MIGRATED-CONTENT SAFETY NET
   15 years of posts carry markup the old editor left behind: raw video
   URLs, 1400px iframes, bare tables, oversized images. The render layer
   (inc/htj-content-render.php) normalises the markup; these rules make
   sure nothing can push the column sideways on a phone.
   ------------------------------------------------------------------ */

/* no post should ever scroll horizontally */
.article{overflow-wrap:break-word}
/* the browser's parser splits a <p> around any block element the old editor
   nested inside one, leaving empty paragraphs that render as random gaps */
.article p:empty{display:none}
.article img{max-width:100%;height:auto}
.article pre{overflow-x:auto;max-width:100%}
.article iframe,.article video,.article embed,.article object{max-width:100%}

/* a bare table that escaped the wrapper still must not break the page */
.article > table{display:block;overflow-x:auto;max-width:100%}

/* the article never opens with a stacked margin. The second selector covers
   desktop, where the mobile TOC is display:none but still the first child. */
.article > *:first-child,
.article > .toc-mobile + *{margin-top:0}

/* in-article video — the click-to-load facade (reuses the .yt component) */
.post-video{margin:2.4em 0}
.post-video .yt{border:1px solid var(--line,#e7e9f0)}
/* re-assert the component's fill: the generic `.article img` rules above have
   equal specificity and would otherwise collapse the thumbnail to its natural
   4:3 size, showing YouTube's letterbox bars instead of cropping them */
.post-video .yt img{height:100%;max-width:none}
.post-video-note{margin:10px 0 0;text-align:right}
.post-video-note a{
  font-family:var(--f-head);font-size:11.5px;font-weight:500;
  letter-spacing:.2em;text-transform:uppercase;color:#5a6491;
  border-bottom:1px solid transparent;transition:color .2s var(--ease), border-color .2s var(--ease);
}
.post-video-note a:hover{color:var(--amber);border-bottom-color:var(--amber)}

/* responsive iframe box — 16/9, no reserved-size jump */
.video-embed{position:relative;aspect-ratio:16 / 9;margin:2.4em 0;background:var(--navy-deep,#041d6a);border:1px solid var(--line,#e7e9f0)}
.video-embed iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
/* non-video embeds (maps, forms, docs) keep a taller, scrollable box */
.video-embed:has(iframe[src*="google.com/maps"]),
.video-embed:has(iframe[src*="docs.google.com"]),
.video-embed:has(iframe[src*="form"]){aspect-ratio:auto;height:600px}

/* blog-index lead image — derived from the post's own video/inline image, so
   it arrives at 16:9; give the frame that ratio and keep the kicker legible */
.blg-feat .fig:has(img){aspect-ratio:16 / 9;min-height:0}
.blg-feat .fig:has(img)::after{
  content:"";position:absolute;inset:auto 0 0 0;height:46%;
  background:linear-gradient(to top, rgba(4,29,106,.78), rgba(4,29,106,0));pointer-events:none;
}
.blg-feat .fig .kicker{z-index:1}

/* ------------------------------------------------------------------
   BLOG CARD THUMBNAILS
   Derren wants a lead image on every card (as the old site had). The
   image is derived from the post's own media (htj_thumb_url); the few
   posts with none get a branded fallback tile so the grid stays even.
   ------------------------------------------------------------------ */
.blg-card-media{position:relative;z-index:0;margin:-28px -26px 20px;aspect-ratio:16 / 9;overflow:hidden;background:var(--navy-deep)}
.blg-card-media img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .5s var(--ease)}
.blg-card:hover .blg-card-media img{transform:scale(1.05)}
/* Branded DEFAULT thumbnail — used when a post/page carries no derivable image
   (most non-blog pages). Never leave the frame blank. */
/* Container-agnostic on purpose. This used to enumerate `.related` and
   `#insights`; a third block (#recent-posts) fell straight through the list and
   the branded tile rendered as two lines of bare text. A fallback style must
   apply wherever `.is-fallback` appears, not where we remembered to list. */
.blg-card-media.is-fallback,
.insight-thumb.is-fallback{display:grid;place-items:center;align-content:center;gap:6px;
  background:radial-gradient(120% 150% at 100% 0, rgba(11,49,153,.6), transparent 60%), var(--navy-deep)}
.blg-card-media.is-fallback .ph-mark,
.insight-thumb.is-fallback .ph-mark{font-family:var(--f-head);font-weight:300;font-size:46px;color:rgba(254,184,64,.9);line-height:1}
.blg-card-media.is-fallback .ph-word,
.insight-thumb.is-fallback .ph-word{font-family:var(--f-head);font-weight:400;font-size:11px;letter-spacing:.28em;text-transform:uppercase;color:rgba(255,255,255,.55)}
/* the transparent click layer must stay ABOVE the media */
.blg-card a.cover{z-index:2}
@media (max-width:600px){ .blg-card-media{margin:-28px -26px 18px} }

/* ------------------------------------------------------------------
   ON-BRAND SEARCH (AJAX live results; degrades to a normal GET search)
   ------------------------------------------------------------------ */
.blg-search-wrap{display:flex;justify-content:center}
.htj-search{position:relative;width:100%;max-width:620px}
.htj-search-field{display:flex;align-items:stretch;background:#fff;border:1px solid var(--line);box-shadow:0 12px 34px -20px rgba(4,29,106,.45)}
.htj-search-field input{flex:1 1 auto;min-width:0;border:0;outline:0;background:transparent;padding:16px 20px;font-family:var(--f-body);font-size:16px;color:var(--ink)}
.htj-search-field input::placeholder{color:#8a90a8}
.htj-search-field button{flex:0 0 auto;border:0;cursor:pointer;background:var(--gold);color:var(--navy-deep);padding:0 22px;display:grid;place-items:center;transition:background .25s var(--ease)}
.htj-search-field button:hover{background:var(--amber-fill);color:var(--navy)}
.htj-search-field button svg{width:20px;height:20px;display:block}
.htj-search:focus-within .htj-search-field{border-color:var(--gold);box-shadow:0 0 0 3px rgba(254,184,64,.28),0 12px 34px -20px rgba(4,29,106,.45)}
.htj-search-results{position:absolute;left:0;right:0;top:calc(100% + 6px);z-index:40;background:#fff;border:1px solid var(--line);box-shadow:0 26px 54px -24px rgba(4,29,106,.5);max-height:62vh;overflow-y:auto;text-align:left}
.htj-search-results a{display:block;padding:13px 18px;font-family:var(--f-head);font-size:15px;line-height:1.32;color:var(--navy);border-bottom:1px solid var(--line)}
.htj-search-results a:last-child{border-bottom:0}
.htj-search-results a:hover{background:var(--grey);color:var(--amber)}
.htj-search-empty{display:block;padding:14px 18px;color:#8a90a8;font-size:14px;font-family:var(--f-head)}

/* ---------------------------------------------------------------------------
   HEADER SEARCH — the collapsed, site-wide variant.

   Deliberately quiet: a single muted glyph in the bar that only earns colour on
   hover/focus, so it never competes with the gold "Talk To Us" CTA next to it.
   No placeholder copy and no visible label — the magnifier is the whole
   affordance. The expanded panel is anchored to the right edge of the bar so it
   opens inward and never overflows the viewport.
--------------------------------------------------------------------------- */
.hsearch{position:relative;flex:0 0 auto;display:flex;align-items:center}
.hsearch-toggle{
  display:grid;place-items:center;
  width:38px;height:38px;padding:0;
  background:transparent;border:0;border-radius:50%;
  color:#7b839e;cursor:pointer;
  transition:color .2s var(--ease),background .2s var(--ease);
}
.hsearch-toggle svg{width:19px;height:19px;display:block}
.hsearch-toggle:hover{color:var(--navy);background:var(--grey)}
.hsearch-toggle:focus-visible{outline:2px solid var(--gold);outline-offset:2px}
.hsearch.is-open .hsearch-toggle{color:var(--navy);background:var(--grey)}

.hsearch-panel{
  position:absolute;top:calc(100% + 14px);right:0;z-index:950;
  width:min(380px,calc(100vw - 40px));
}
.hsearch-panel[hidden]{display:none}
.htj-search--header{max-width:none}
.htj-search--header .htj-search-field{
  box-shadow:0 18px 44px -22px rgba(4,29,106,.55);
}
.htj-search--header .htj-search-field input{padding:12px 16px;font-size:15px}
.htj-search--header .htj-search-field button{padding:0 16px}
.htj-search--header .htj-search-field button svg{width:17px;height:17px}

/* On phones the bar is tight — let the panel span it rather than hang off the
   right edge, and sit flush under the bar. */
@media (max-width:640px){
  .hsearch{position:static}
  .hsearch-panel{
    top:100%;left:0;right:0;width:auto;
    padding:0 20px 14px;
    background:var(--white);
    border-bottom:1px solid var(--line);
  }
}

/* full-width TOC-less layout — 533 posts have no headings at all, and an
   empty "On this page" rail reads as a bug, so the column simply centres */
.post-layout.no-toc{grid-template-columns:minmax(0, 72ch);gap:0}

/* 6 · INLINE CTA (mid-content) */
.inline-cta{margin:3em 0;border:1px solid var(--line,#e7e9f0);border-left:3px solid var(--gold);background:#fff;padding:30px 32px 28px;display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:20px 28px}
.inline-cta .ic-copy{flex:1 1 320px;min-width:0}
.inline-cta .ic-kicker{display:block;font-family:var(--f-head);font-weight:500;font-size:11px;letter-spacing:.26em;text-transform:uppercase;color:var(--amber);margin-bottom:8px}
.inline-cta p{font-size:17.5px;line-height:1.65;margin:0;color:var(--ink)}
.inline-cta .btn{flex:0 0 auto}
@media (max-width:560px){.inline-cta{padding:24px 22px}.inline-cta .btn{width:100%}}

/* 7 · AUTHOR BOX (E-E-A-T) */
.author-box{margin:64px 0 0;background:var(--grey);border-top:3px solid var(--gold);padding:34px 34px 30px;display:flex;gap:26px;align-items:flex-start}
.author-box img{width:96px;height:96px;flex:0 0 auto;object-fit:cover;object-position:top center;display:block}
.author-box .a-body{min-width:0}
.author-box .a-label{display:block;font-family:var(--f-head);font-weight:500;font-size:11px;letter-spacing:.26em;text-transform:uppercase;color:var(--amber);margin-bottom:6px}
.author-box .a-name{font-family:var(--f-head);font-weight:500;font-size:20px;color:var(--navy);letter-spacing:.03em;margin:0 0 4px}
.author-box .a-creds{font-family:var(--f-head);font-size:12.5px;letter-spacing:.1em;text-transform:uppercase;color:#5a6491;margin:0 0 12px;line-height:1.7}
.author-box .a-bio{font-size:15.5px;line-height:1.7;margin:0 0 14px}
.author-box .a-more{font-family:var(--f-head);font-size:12.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--navy);border-bottom:2px solid var(--gold);padding-bottom:2px}
.author-box .a-more:hover{color:var(--amber)}
.author-box .a-foot{display:flex;align-items:center;flex-wrap:wrap;gap:16px 20px;margin-top:16px}
.author-box .a-social{display:flex;gap:10px}
.author-box .a-social a{width:34px;height:34px;display:grid;place-items:center;border:1px solid var(--line,#dfe3f0);color:var(--navy);transition:background .25s ease,color .25s ease,border-color .25s ease}
.author-box .a-social a:hover{background:var(--navy);color:#fff;border-color:var(--navy)}
.author-box .a-social svg{width:16px;height:16px;fill:currentColor}
@media (max-width:560px){.author-box{flex-direction:column;padding:26px 22px}}

/* 8 · RELATED POSTS */
.related{padding:72px 0;background:var(--grey)}
.related-head{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:40px;flex-wrap:wrap}
.related-head h2{font-size:clamp(24px, 1.4vw + 17px, 34px);margin:0}
.related .insight-grid{display:grid;grid-template-columns:repeat(3, 1fr);gap:28px}
.related .insight-card{display:block;color:var(--ink);background:#fff;box-shadow:var(--shadow-soft);transition:transform .3s var(--ease), box-shadow .3s var(--ease)}
.related .insight-card:hover{transform:translateY(-5px);box-shadow:var(--shadow-lift);color:var(--ink)}
.related .insight-thumb{overflow:hidden;aspect-ratio:16 / 9;background:var(--navy-deep);display:grid;place-items:center;margin-bottom:0}
.related .insight-thumb img{width:100%;height:100%;object-fit:cover}
.related .insight-thumb .ph{font-family:var(--f-head);font-weight:300;font-size:34px;color:rgba(254,184,64,.85);letter-spacing:.04em}
.related .insight-body{padding:22px 24px 24px}
.related .insight-cat{display:block;font-family:var(--f-head);font-weight:500;font-size:10.5px;letter-spacing:.22em;text-transform:uppercase;color:var(--amber);margin-bottom:10px}
.related .insight-card h3{font-family:var(--f-head);color:var(--navy);font-size:18px;font-weight:400;line-height:1.45;margin:0 0 14px;transition:color .25s var(--ease)}
.related .insight-card:hover h3{color:var(--amber)}
.related .insight-read{font-family:var(--f-head);font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--navy);border-bottom:2px solid var(--gold);padding-bottom:2px}
@media (max-width:900px){.related .insight-grid{grid-template-columns:1fr;max-width:520px;margin:0 auto}}

/* 9 · post CTA band (navy) */
.post .cta-band,.cta-band.band-navy{padding:80px 0;text-align:center}
.cta-band.band-navy h2{color:#fff;margin-bottom:10px;font-size:clamp(26px, 1.6vw + 18px, 38px)}
.cta-band.band-navy p{color:#c3cdf0;font-size:18px;margin-bottom:34px}

/* ============================================================
   THEME UTILITY — full-width main wrapper for theme-rendered templates
   ============================================================ */
.site-main{display:block}
.htj-min{padding:96px 0}
@media (max-width:720px){.htj-min{padding:56px 0}}

/* ============================================================================
   HOMEPAGE — approved design (Camila 2026-07-22 round-2 + white hero variant)
   Ported from previews/htj-a.html 2026-07-25 with the front-page.php body.
   Appended deliberately: several rules below OVERRIDE earlier theme
   definitions (.cred-panel, .cred-list, .cred-panel .cred-title) which still
   carried the superseded opaque-white-box treatment. Cascade order is the
   mechanism — do not hoist this block above the originals.
   The preview-only .cro-pill rules are deliberately NOT ported.
   ========================================================================= */
/* ---- White hero variant (Camila 2026-07-22): scoped overrides; dark-hero CSS stays intact & reversible ---- */
.hero.hero--light{
  background:
    radial-gradient(1100px 620px at 82% -12%, rgba(254,184,64,.16), transparent 60%),
    radial-gradient(900px 700px at -12% 112%, rgba(5,35,126,.05), transparent 55%),
    linear-gradient(170deg, #ffffff 0%, #f6f8fc 58%, #eef2fa 100%);
  color:var(--ink);
}
.hero.hero--light::before{
  background-image:radial-gradient(rgba(5,35,126,.11) 1px, transparent 1.4px);
  opacity:.42;
}
.hero.hero--light h1{color:var(--navy)}
.hero.hero--light .hero-kicker{color:#9a6f10}
.hero.hero--light .hero-sub{color:#41506f}
.hero.hero--light .hero-friction{color:#6b7594}
.hero.hero--light .hero-trustline{color:#566288}
.hero.hero--light .btn-ghost{color:var(--navy);border-color:rgba(5,35,126,.42)}
.hero.hero--light .btn-ghost:hover{border-color:var(--navy);color:var(--navy);background:rgba(5,35,126,.05)}
.hero.hero--light .cred-panel{box-shadow:0 20px 52px rgba(2,12,48,.16)}

/* ===== Camila round-2 · 1. one solid CTA leads the eye to the paid action ===== */
.hero .btn-primary{background:var(--gold);color:var(--navy);border:1.5px solid var(--gold);font-weight:600}
.hero .btn-primary:hover{background:#ffca63;border-color:#ffca63;box-shadow:0 14px 34px rgba(254,184,64,.30);color:var(--navy)}

/* ===== Camila round-2 · 2. credential panel integrated INTO the hero band ===== */
/* was: opaque white box floating on navy = read as pasted-on. Now a tinted glass
   panel in the brand palette, gold hairline, with Derren's portrait carrying it. */
.cred-panel{
  background:linear-gradient(180deg, rgba(6,32,110,.66) 0%, rgba(4,20,74,.88) 100%);
  -webkit-backdrop-filter:blur(16px) saturate(115%);
  backdrop-filter:blur(16px) saturate(115%);
  border:1px solid rgba(254,184,64,.30);
  border-top:3px solid var(--gold);
  color:#fff;
  padding:0;
  overflow:hidden;
}
/* Explicit height, NOT aspect-ratio+max-height — that combo makes the browser hold
   the ratio by shrinking WIDTH, so the photo stops filling the card. Height scales
   with the viewport so a 768px laptop doesn't get a card that eats the whole hero. */
.cred-photo{margin:0;position:relative;height:clamp(215px,30vh,310px);overflow:hidden;background:var(--navy-deep)}
.cred-photo picture{display:block;width:100%;height:100%}
/* landscape source in a wider band => cover crops VERTICALLY only, so the X value is
   inert here; Y 8% keeps the crown off the top edge without losing his chin. */
.cred-photo img{width:100%;height:100%;object-fit:cover;object-position:50% 8%;display:block;filter:saturate(.88) contrast(1.04)}
/* scrim top AND bottom: the portrait's bright office background is what made the
   old white box read as foreign — tint it into the navy band at both edges. */
.cred-photo::after{
  content:'';position:absolute;inset:0;pointer-events:none;
  background:
    linear-gradient(180deg, rgba(5,27,94,.55) 0%, rgba(5,27,94,.10) 22%, rgba(4,20,74,0) 40%, rgba(4,20,74,.52) 78%, rgba(5,27,94,.97) 100%);
}
.cred-body{padding:18px 30px 24px}
.cred-eyebrow{font-family:var(--f-head);font-size:11.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--gold);margin:0 0 6px}
.cred-panel .cred-title{font-family:var(--f-body);font-weight:400;font-size:28px;color:#fff;letter-spacing:.01em;margin:0 0 5px;line-height:1.15}
.cred-role{font-family:var(--f-head);font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:#9aa8dd;margin:0 0 18px}
.cred-list{margin:0}
.cred-list li{color:rgba(255,255,255,.92);border-bottom:1px solid rgba(255,255,255,.11)}
.cred-list li:last-child{border-bottom:0}
@media (max-width:1080px){.cred-photo{height:clamp(230px,34vw,340px)}}
@media (max-width:480px){.cred-panel{padding:0}.cred-body{padding:18px 22px 24px}.cred-panel .cred-title{font-size:24px}}

.cro-anchor{position:relative}

/* ============================================================================
   Theme-native content pages (engagement letters + booking) — page.php branch 2.
   These carry no prototype chrome of their own, so the theme supplies the
   article furniture. Kept narrow: this must not touch the imported prototypes.
   ========================================================================= */
.article--page{max-width:820px;margin:0 auto;padding:38px 0 64px}
.article--page .lede{font-size:19px;line-height:1.65;color:#41506f;margin:0 0 30px}

/* Engagement-letter index on the hub page. Rendered as a real <ul>; the theme
   strips the list furniture so the cards read as a grid, not bullets. */
.el-index{display:grid;grid-template-columns:repeat(2,1fr);gap:12px;margin:0 0 12px;padding:0;list-style:none}
@media (max-width:640px){.el-index{grid-template-columns:1fr}}
.el-index li{margin:0;padding:0;list-style:none}
/* Out-specify `.article ul li::before` — the decorative gold dash belongs on
   prose lists, not on cards that already carry their own border and arrow. */
.article ul.el-index li{padding-left:0}
.article ul.el-index li::before{content:none;display:none}
.article .el-index-item{display:flex;align-items:center;justify-content:space-between;gap:14px;
  padding:16px 18px;border:1px solid rgba(5,35,126,.16);background:#fff;text-decoration:none;
  transition:border-color .2s var(--ease), background .2s var(--ease), transform .2s var(--ease)}
.article .el-index-item:hover{border-color:var(--navy);background:rgba(5,35,126,.03);transform:translateY(-2px);text-decoration:none}
.el-index-name{font-family:var(--f-head);font-size:15px;letter-spacing:.02em;color:var(--navy);line-height:1.3}
.el-index-go{color:var(--gold);font-size:17px;line-height:1;flex:none}

/* Fluent Forms sits inside our article column; strip the plugin's own page
   assumptions so it inherits the site's type and spacing instead of fighting it. */
.article--page .fluentform{margin:26px 0 0}
.article--page .fluentform .ff-el-group{margin-bottom:18px}
.article--page .fluentform .ff-el-input--label label{font-family:var(--f-head);font-size:13px;letter-spacing:.06em;
  text-transform:uppercase;color:var(--navy)}
.article--page .fluentform input[type=text],
.article--page .fluentform input[type=email],
.article--page .fluentform input[type=tel],
.article--page .fluentform textarea,
.article--page .fluentform select{border:1px solid rgba(5,35,126,.22);border-radius:0;padding:11px 13px;font-size:15px}
.article--page .fluentform input:focus,
.article--page .fluentform textarea:focus,
.article--page .fluentform select:focus{border-color:var(--navy);outline:2px solid rgba(5,35,126,.14);outline-offset:1px}
.article--page .fluentform .ff-btn-submit{background:var(--gold);color:var(--navy);border:1.5px solid var(--gold);
  border-radius:0;font-family:var(--f-head);letter-spacing:.08em;text-transform:uppercase;padding:13px 26px;font-weight:600}
.article--page .fluentform .ff-btn-submit:hover{background:#ffca63;border-color:#ffca63}

/* --- Trustindex verified-reviews strip (homepage #testimonials) ------------
   Sits under the hand-built LinkedIn carousel. Given its own top rule and
   generous spacing so it reads as a separate, quieter layer of proof rather
   than a second competing testimonial block. Collapses cleanly if the
   third-party script never loads. */
.ti-strip{margin-top:56px;padding-top:40px;border-top:1px solid rgba(11,26,74,.10)}
.ti-lede{
  font-family:var(--f-head);font-size:12.5px;font-weight:500;letter-spacing:.2em;
  text-transform:uppercase;color:#5a6491;text-align:center;margin:0 0 26px;
}
.ti-strip .ti-widget{margin:0 auto}
/* Reserve the box BEFORE the vendor script fills it.
   Trustindex leaves a placeholder <div> and lazy-loads the widget when that div
   enters the viewport. An empty div is zero-height, so the IntersectionObserver
   never fired and the widget silently rendered nothing — no console error, no
   failed request, just an invisible gap. `:empty` stops matching the moment the
   real .ti-widget replaces the placeholder, so this only ever applies pre-load,
   and it doubles as CLS insurance by holding the space in advance. */
.ti-strip > div:empty{min-height:420px}
/* …and if the vendor never delivers, take the reserved space back rather than
   leave a 420px hole under a heading promising reviews. Set by theme.js after
   an 8s grace period. See the note there. */
.ti-strip.ti-dead{display:none}
@media (max-width:900px){ .ti-strip > div:empty{min-height:620px} }
@media (max-width:640px){
  .ti-strip{margin-top:38px;padding-top:30px}
  .ti-lede{letter-spacing:.14em;margin-bottom:20px}
}

/* on-demand webinar single — reuses .yt; the playlist variant has no facade */
.yt-list{position:relative;padding-top:56.25%;height:0}
.yt-list iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.odw-summary{margin-top:22px}
.odw-back{margin-top:28px;font-size:14px}

/* ==========================================================================
   Justified body prose — Derren, Slack 2026-07-28: "can the paragraphs here
   be justified?" (screenshot of /1040-form/). Applied to the shared prose
   containers so every page of that family matches rather than one page
   looking different. hyphens:auto is not optional here — justified text
   without hyphenation opens rivers of white space at narrow widths.
   ========================================================================== */
/* 2026-07-29 — REWRITTEN FROM AN ALLOWLIST TO A DENYLIST.
   The rule used to name the containers it wanted justified (.geo-prose,
   .unfold, .article...). Derren came back with "the justification is missing
   in some places", and a rendered sweep of all 40 pages found he was right
   458 times: every paragraph and list item in an imported page that did not
   happen to sit inside one of those named containers fell back to `start`.
   An allowlist only ever covers the containers you thought of, and
   hand-imported page HTML invents new ones constantly.

   So: justify every prose leaf inside <main>, then exempt the exceptions.
   Specificity is the safety mechanism — this selector is (0,0,2), so all 13
   deliberately-centred patterns (.badges-sub, .press-harvard, .ti-lede,
   .solp-lead, .off-note, .ty-lede, .cta-band p …) still out-specify it and
   keep their design alignment. They were enumerated first, with
   probe-align.mjs, rather than assumed.

   Justifying a one-line block is a no-op — the last line of a justified block
   is never stretched, and a single-line block is all last line — so the blast
   radius is exactly the multi-line prose Derren is asking about. That is why
   "over-justify rather than under-justify" is safe to follow literally here.
   hyphens:auto is not optional: justified text without hyphenation opens
   rivers of white space at narrow widths. */
main :is(p, li, dd){
  text-align:justify;
  text-justify:inter-word;
  -webkit-hyphens:auto;
  hyphens:auto;
}
/* Structural lists are navigation, not prose. A wrapped contents row or
   credential line stretched to both margins reads as a layout bug. */
main :is(.toc, .geo-toc, .el-index, .blg-pager, .register-list, .cred-list,
         .trust-line, .badge-row, .persona-grid, .breadcrumbs,
         .press-card, .press-grid, .press-quote, .press-issn,
         .dj-actions, .dj-act, .yt-card, .yt-grid, .zoomlb) :is(p, li),
main :is(.toc, .geo-toc, .el-index, .blg-pager, .register-list, .cred-list) li{
  text-align:left;
  -webkit-hyphens:manual;
  hyphens:manual;
}
/* Never justify short display copy — a card blurb or a pull quote set
   justified opens gaps you can drive a bus through.
   2026-07-29: .solp-lede / .solp-sub / .geo-sub / .article li were on this
   list and have been REMOVED from it deliberately. The lede is the first
   paragraph under every H1 — large, ragged, and the single most likely thing
   Derren was looking at when he said justification was missing. His
   instruction outranks the typographic preference; hyphens:auto keeps it clean. */
.article .a-excerpt,
.article figcaption,
.article blockquote p{
  text-align:left;
  -webkit-hyphens:manual;
  hyphens:manual;
}

/* Item 10, Derren 2026-07-28: "the reverse side of these tiles need to be
   justified...as is the rest of the website....justify justify justify pls" */
.flip-back p{
  text-align:justify;
  text-justify:inter-word;
  -webkit-hyphens:auto;
  hyphens:auto;
}

/* Static press row for inner pages (the homepage uses the scrolling .marquee;
   a second marquee on a bio page would fight the reading rhythm). Same
   .press-mark glyphs, laid out as a single wrapped row. */
.press-row{
  display:flex;
  flex-wrap:wrap;
  align-items:center;
  gap:14px 40px;
}
.press-row .press-mark{display:inline-flex;align-items:center}
.press-row .press-mark svg{height:26px;width:auto;display:block}
.press-row .press-mark img{height:30px;width:auto;display:block}
@media (max-width:640px){
  .press-row{gap:12px 26px}
  .press-row .press-mark svg{height:20px}
  .press-row .press-mark img{height:24px}
}


/* Single HTJ.Tax + Moores Rowland International lockup (supplied by the client
   2026-07-28, replacing the two separate logo pills). Sized so the "member of
   Moores Rowland International" sub-line stays legible; the two-pill version
   made the footer look misaligned. */
.footer-logos .logo-pill-lockup{padding:10px 16px}
.footer-logos .logo-pill-lockup img{height:96px}
@media (max-width:640px){
  .footer-logos .logo-pill-lockup img{height:76px}
}


/* ---------- shared trust band (htj_trust_block / <!--HTJ_TRUST-->) ----------
   Money pages were carrying the argument with none of the proof: press marks,
   Derren's credentials and the since-1980 line all lived on the homepage only.
   One block, one stylesheet, every page. */
.trust-band .trust-creds{margin-top:34px}
.trust-band .trust-creds-lead{
  font-family:var(--f-head);font-size:15px;letter-spacing:.04em;
  color:var(--navy);margin:0 0 16px;
}
.trust-band .cred-list{
  list-style:none;margin:0;padding:0;
  display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
  gap:10px 40px;
}
.trust-band .cred-list li{
  display:flex;align-items:flex-start;gap:10px;margin:0;
  font-size:15px;line-height:1.5;color:var(--ink);
}
.trust-band .cred-list li svg{width:19px;height:19px;flex:0 0 19px;margin-top:3px}
.trust-band .trust-line{
  margin:22px 0 0;padding-top:18px;border-top:1px solid var(--line,#e7e9f0);
  font-family:var(--f-head);font-size:13px;letter-spacing:.1em;
  text-transform:uppercase;color:#5c6690;
}
.trust-band .trust-line .dot{margin:0 10px;color:var(--gold)}
@media (max-width:760px){
  .trust-band .cred-list{grid-template-columns:1fr}
  .trust-band .trust-line{display:flex;flex-wrap:wrap;gap:4px 0}
  .trust-band .trust-line .dot{margin:0 8px}
}

/* --- memberships + verified reviews inside the shared trust band -----------
   Added 2026-07-29. The band now stacks four layers of proof, so each one
   needs a visible seam or it reads as one undifferentiated wall of logos.
   Each layer gets a hairline rule and its own quiet label; the label is what
   tells a reader these are memberships rather than more press. */
.trust-band .trust-members{margin-top:40px;padding-top:34px;border-top:1px solid rgba(11,26,74,.10)}
.trust-band .trust-sublabel{
  font-family:var(--f-head);font-size:12.5px;font-weight:500;letter-spacing:.2em;
  text-transform:uppercase;color:#5a6491;text-align:center;margin:0 0 26px;
}
/* The homepage badge wall is the hero of its own section and can breathe. In
   the middle of a long read it is a supporting element, so the CARD is scaled
   down with the caption and mark — .badge-card is a fixed box, so shrinking
   only the artwork would leave twelve hollow rectangles. Same badges, less
   shouting: five to a row here against the homepage's four.
   The caption row shrinks with everything else, but it stays FIXED so the
   marks keep sharing a line. */
.trust-band .badge-row{gap:16px}
/* Six columns => twelve is an exact 6x2, at every container width. */
.trust-band .badge-row{grid-template-columns:repeat(6,1fr);gap:16px}
.trust-band .badge-card{height:150px;padding:14px 11px 15px;grid-template-rows:48px 1fr;gap:8px}
.trust-band .bc-cap{font-size:11.5px;line-height:1.22}
.trust-band .trust-reviews{margin-top:40px}
@media (max-width:760px){
  .trust-band .trust-members{margin-top:30px;padding-top:26px}
  .trust-band .trust-sublabel{letter-spacing:.14em;margin-bottom:18px}
}
@media (max-width:1080px){ .trust-band .badge-row{grid-template-columns:repeat(4,1fr)} }
@media (max-width:760px){ .trust-band .badge-row{grid-template-columns:repeat(3,1fr);gap:12px} }
@media (max-width:520px){
  .trust-band .badge-row{grid-template-columns:repeat(2,1fr);gap:12px}
  .trust-band .badge-card{height:140px;padding:12px 10px 13px;grid-template-rows:46px 1fr;gap:7px}
  .trust-band .bc-cap{font-size:10.5px;line-height:1.2}
}
.post-video-cap{
  font-family:var(--f-head);font-size:14px;letter-spacing:.05em;
  color:var(--navy);margin:0 0 10px;
}


/* Nested contents entries. The live page lists all 20 destinations flat; a flat
   20 in a two-column box reads as noise, so the nine Willfulness sub-sections
   sit under their parent instead. Same coverage, less shouting. */
.geo-toc .toc-sub{list-style:none;margin:8px 0 4px;padding:0 0 0 26px;columns:1}
.geo-toc .toc-sub li{margin:0 0 7px;font-size:13.5px;counter-increment:none}
.geo-toc .toc-sub a{color:#4a5480}
.geo-toc .toc-sub a::before{content:"— ";color:var(--gold-ink,#b9832a);font-size:11px}
.geo-toc .toc-sub a:hover{color:var(--gold-ink,#b9832a)}

/* A video dropped into a full-width prototype section would stretch the 480px
   YouTube thumbnail across the whole container and go soft. Cap it at the
   thumbnail's own useful width; the blog's narrower article column is
   unaffected because it never reaches this size. */
.section .container > .post-video{max-width:640px;margin-left:0}

/* Country headings inside a "Read more" fold need their own rhythm - without
   this the first one collides with the summary row. */
.geo-more-body h3{margin:26px 0 10px}
.geo-more-body > h3:first-child{margin-top:20px}

/* ============================================================================
   ACCORDION SUMMARY — split-title fix (round 38)
   ----------------------------------------------------------------------------
   The page-level accordions lay <summary> out as
       display:flex; justify-content:space-between
   which silently assumes the summary has exactly TWO flex items: the title text
   and the ::after "+" marker. Put a link inside a title and it becomes three —
   so space-between throws the title's own words to opposite margins. On
   /us-pre-immigration-tax-planning/ item 5 rendered as
       "5.                              Foreign Tax Credit          +"
   1 summary of 45 on that page; the same latent trap sits on all 24 pages that
   use this pattern, waiting for anyone to add a link to a heading.

   Fix the assumption, not the instance: pack the title left and push ONLY the
   marker right. Any number of inline children now behaves.

   Specificity note: these rules live in the stylesheet (<head>) while the page
   rules are inline in the body, so equal specificity would lose on document
   order. `:is(...)` adds a class-level weight, making these (0,1,2) against the
   page's (0,1,1). Do not simplify this to a bare `summary` selector — it will
   silently stop applying. */
main :is(.geo-why, .faq-item, .geo-faq, .geo-law) summary{
  justify-content:flex-start;
  /* The flex `gap` existed to hold the marker off the title. margin-left:auto
     does that now, and leaving it would indent a split title by 16px against
     its single-text-node neighbours. */
  gap:0;
}
main :is(.geo-why, .faq-item, .geo-faq, .geo-law) summary::after{
  margin-left:auto;
  padding-left:16px;
  flex:0 0 auto;
}

/* ============================================================================
   DERREN — PRINCIPAL PAGE COMPONENTS  (round 38c)
   ----------------------------------------------------------------------------
   All of this lives here rather than in a <style> block inside post_content.
   Round 38b shipped it inline and it redefined `.follow-row` — which is the
   FOOTER's 42px social-icon row — so the page broke the footer, and the theme's
   `.follow-row a{width:42px}` squashed the page's own cards to 42px. One name
   collision, three visible defects. Page-scoped components get a `dj-` prefix
   and live in the stylesheet where a collision is visible.

   Do NOT re-declare .solp, .solp-hero, .crumbs, .solp-lede or .solp-cta in a
   page: they are canonical above and complete.
   ========================================================================== */

/* ---- a real photograph, presented as one ---------------------------------
   Not a hero background. A background-image at 20% opacity behind text reads
   as filler; the same photo shown at full strength in a frame reads as proof. */
.dj-figure{margin:0}
.dj-figure .fr{position:relative;overflow:hidden;border:1px solid var(--line,#e7e9f0);border-bottom:3px solid var(--gold);background:var(--navy-deep)}
.dj-figure img{display:block;width:100%;height:auto}
.dj-figure figcaption{margin-top:14px;font-family:var(--f-head);font-size:12px;letter-spacing:.11em;text-transform:uppercase;color:var(--muted,#6b7183)}

/* ---- recognition lead ----------------------------------------------------
   Two columns: the story on the left, the award stated as an object on the
   right. Round 38d removed the supplied medallion (clip-art beside this
   typography) and left the column empty, which read as a hole. */
.dj-award{display:grid;grid-template-columns:1fr minmax(228px,262px);gap:26px 48px;align-items:start}
.dj-award h3{font-size:clamp(1.45rem,1.1rem + 1.2vw,1.95rem);line-height:1.2;margin:0 0 16px;font-weight:400;color:var(--navy)}
.dj-award p{margin:0 0 18px;max-width:62ch}
.dj-quote2{margin:0;padding:2px 0 2px 22px;border-left:3px solid var(--gold);font-family:var(--f-head);font-size:18px;line-height:1.46;color:var(--navy);max-width:58ch}
.dj-quote2 cite{display:block;margin-top:12px;font-style:normal;font-size:11.5px;letter-spacing:.11em;text-transform:uppercase;color:var(--muted,#6b7183)}
.dj-award-foot{display:flex;flex-wrap:wrap;align-items:center;gap:14px 22px;margin-top:26px}
.dj-issn{font-family:var(--f-head);font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted,#6b7183)}

/* ---- the award, drawn in the site's own language -------------------------
   NOT a reproduction of the publisher's badge. Inventing a lookalike of
   somebody else's official mark is how the fabricated mastheads shipped in
   round 30 — see [[feedback_never_redraw_client_marks]]. This is HTJ's own
   award callout: it states the same true fact (publisher, year, award,
   region) in navy + gold + Oswald, so it belongs to this page rather than
   sitting on it. CSS, not an image: crisp at every DPI, themed by the same
   tokens as everything else, and nothing to host or re-cut later.
   The notch is a 3px gold outline drawn as a clipped backing plate; the
   inner plate is clipped 3px shallower so the gold reads as an edge, not a
   fill. Do not give either plate a border — a border follows the box, not
   the clip path, and would cut across the point. */
.dj-seal{position:relative;padding-bottom:3px;background:var(--gold);
  clip-path:polygon(0 0,100% 0,100% calc(100% - 20px),50% 100%,0 calc(100% - 20px));
  filter:drop-shadow(0 18px 26px rgba(4,29,106,.28))}
.dj-seal-in{position:relative;background:var(--navy-deep);color:#fff;text-align:center;padding:32px 22px 44px;
  clip-path:polygon(0 0,100% 0,100% calc(100% - 20px),50% 100%,0 calc(100% - 20px))}
.dj-seal-in::before{content:"";position:absolute;left:9px;right:9px;top:9px;bottom:23px;
  border:1px solid rgba(254,184,64,.36);pointer-events:none}
.dj-seal .s-pub{display:block;font-family:var(--f-head);font-size:10.5px;letter-spacing:.19em;
  text-transform:uppercase;color:var(--gold);line-height:1.55}
.dj-seal .s-yr{display:block;font-family:var(--f-body);font-size:52px;line-height:1;
  margin:10px 0 13px;letter-spacing:.03em;color:#fff}
.dj-seal .s-rule{display:block;width:36px;height:2px;background:var(--gold);margin:0 auto 15px}
.dj-seal .s-main{display:block;font-family:var(--f-head);font-weight:400;font-size:16px;
  line-height:1.38;letter-spacing:.02em;color:#fff}
.dj-seal .s-reg{display:block;margin-top:13px;font-family:var(--f-head);font-size:10.5px;
  letter-spacing:.2em;text-transform:uppercase;color:rgba(255,255,255,.62)}
@media (max-width:860px){
  .dj-award{grid-template-columns:1fr}
  .dj-seal{max-width:262px;margin:0 auto}
}

/* ---- "also featured in" — typographic, no scan thumbnails ----------------
   The clippings were shown as cropped card images and read as clutter; the
   mastheads already appear as real logos in the credibility band below. The
   scan is still one click away, it just no longer competes with the copy. */
.dj-press{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
.dj-pcard{display:flex;flex-direction:column;justify-content:space-between;gap:18px;
  background:#fff;border:1px solid var(--line,#e7e9f0);border-left:3px solid var(--gold);
  padding:22px 22px 20px;min-height:118px;width:100%;text-align:left;font:inherit;color:inherit;cursor:pointer;
  transition:transform .22s var(--ease),box-shadow .22s var(--ease),border-color .22s var(--ease)}
.dj-pcard:hover{transform:translateY(-3px);box-shadow:0 14px 32px -18px rgba(5,35,126,.5)}
.dj-pcard .nm{font-family:var(--f-head);font-size:19px;line-height:1.24;color:var(--navy);letter-spacing:.2px}
.dj-pcard .kd{display:inline-flex;align-items:center;gap:9px;font-family:var(--f-head);font-size:11.5px;letter-spacing:.11em;text-transform:uppercase;color:var(--gold-ink,#b9832a)}
.dj-pcard .kd .ar{transition:transform .28s var(--ease)}
.dj-pcard:hover .kd .ar{transform:translateX(5px)}

/* ---- education / career ---------------------------------------------------- */
.dj-cols{display:grid;grid-template-columns:1fr 1fr;gap:46px;align-items:start}
.dj-cols h3{font-family:var(--f-head);font-size:12.5px;letter-spacing:.13em;text-transform:uppercase;color:var(--gold-ink,#b9832a);margin:0 0 18px}
.dj-cols ul{list-style:none;margin:0;padding:0}
.dj-cols li{position:relative;padding-left:26px;margin:0 0 15px;font-size:15.5px;line-height:1.62}
.dj-cols li::before{content:"";position:absolute;left:0;top:.66em;width:12px;height:2px;background:var(--gold)}

/* ---- follow row — page component, NOT the footer's .follow-row ------------- */
/* Flex + centred wrap, not grid: with FIVE cards any fixed column count leaves
   an orphan on the last row. Centring makes every wrap point look deliberate. */
.dj-follow{display:flex;flex-wrap:wrap;justify-content:center;gap:16px}
.dj-foll{flex:1 1 208px;max-width:252px;display:flex;align-items:center;gap:14px;background:#fff;border:1px solid var(--line,#e7e9f0);
  border-bottom:3px solid var(--gold);padding:17px 19px;
  transition:transform .22s var(--ease),box-shadow .22s var(--ease)}
.dj-foll:hover{transform:translateY(-3px);box-shadow:0 14px 30px -18px rgba(5,35,126,.5)}
.dj-foll .ic{flex:0 0 auto;width:36px;height:36px;border-radius:50%;background:var(--navy-deep);display:flex;align-items:center;justify-content:center}
.dj-foll .ic svg{width:17px;height:17px;fill:#fff}
.dj-foll:hover .ic{background:var(--gold)}
.dj-foll:hover .ic svg{fill:var(--navy-deep)}
.dj-foll .tx{min-width:0}
.dj-foll .t1{display:block;font-family:var(--f-head);font-size:15px;color:var(--navy);letter-spacing:.2px}
.dj-foll .t2{display:block;font-size:12.5px;color:var(--muted,#6b7183);margin-top:3px}
/* Three cards at the five-card width leave the row looking thin inside a
   1200px container; the cards breathe instead of the container. */
.dj-follow.is-wide .dj-foll{flex:1 1 260px;max-width:332px;padding:19px 22px}

@media (max-width:1000px){ .dj-press{grid-template-columns:repeat(2,1fr)} }
@media (max-width:860px){
  .dj-cols{grid-template-columns:1fr;gap:32px}
}
@media (max-width:560px){ .dj-press{grid-template-columns:1fr} }

/* ---- CTA tiles ------------------------------------------------------------ */
.dj-actions{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:18px}
.dj-act{display:flex;flex-direction:column;justify-content:space-between;background:var(--navy-deep);color:#fff;
  padding:28px 26px 24px;border-bottom:3px solid var(--gold);min-height:178px;
  transition:transform .22s var(--ease),box-shadow .22s var(--ease)}
.dj-act:hover{transform:translateY(-3px);box-shadow:0 16px 34px -18px rgba(5,35,126,.7)}
.dj-act .t{font-family:var(--f-head);font-size:19px;line-height:1.3;color:#fff}
.dj-act .g{margin-top:18px;font-family:var(--f-head);font-size:11.5px;letter-spacing:.11em;text-transform:uppercase;color:var(--gold)}

/* ---- YouTube feed cards ---------------------------------------------------- */
.yt-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(268px,1fr));gap:26px}
.yt-card{display:block;background:#fff;border:1px solid var(--line,#e7e9f0);border-bottom:3px solid var(--gold);
  transition:transform .22s var(--ease),box-shadow .22s var(--ease)}
.yt-card:hover{transform:translateY(-3px);box-shadow:0 16px 34px -20px rgba(5,35,126,.55)}
.yt-thumb{position:relative;display:block;aspect-ratio:16/9;overflow:hidden;background:var(--navy-deep)}
.yt-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.yt-play{position:absolute;inset:0;margin:auto;width:54px;height:54px;border-radius:50%;background:rgba(10,16,38,.72);
  display:flex;align-items:center;justify-content:center;transition:background .22s var(--ease)}
.yt-play svg{width:25px;height:25px;fill:#fff;margin-left:3px}
.yt-card:hover .yt-play{background:var(--gold)}
.yt-card:hover .yt-play svg{fill:var(--navy-deep)}
.yt-card h3{font-size:16.5px;line-height:1.34;margin:16px 18px 0;font-weight:400;color:var(--navy)}
.yt-date{display:block;margin:9px 18px 18px;font-family:var(--f-head);font-size:11.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted,#6b7183)}

/* ---- click-to-enlarge overlay --------------------------------------------
   Replaces the live site's Elementor pop-ups. The scan is matted on white with
   real padding — a magazine page bled to the viewport edge looked unfinished. */
.zoomlb{position:fixed;inset:0;z-index:9999;background:rgba(8,13,32,.94);
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  padding:64px 40px 56px;opacity:0;pointer-events:none;transition:opacity .2s var(--ease)}
.zoomlb.is-open{opacity:1;pointer-events:auto}
.zoomlb-scroll{max-width:1040px;max-height:100%;overflow:auto;-webkit-overflow-scrolling:touch;
  background:#fff;padding:22px;box-shadow:0 30px 80px -30px rgba(0,0,0,.8)}
.zoomlb img{display:block;width:100%;height:auto;background:#fff}
.zoomlb-cap{flex:0 0 auto;color:rgba(255,255,255,.82);font-family:var(--f-head);font-size:12.5px;
  letter-spacing:.1em;text-transform:uppercase;text-align:center;margin-top:18px;max-width:60ch}
.zoomlb-close{position:absolute;top:18px;right:22px;width:46px;height:46px;border:1px solid rgba(255,255,255,.28);
  background:transparent;color:#fff;font-size:26px;line-height:1;cursor:pointer;transition:border-color .22s var(--ease),background .22s var(--ease)}
.zoomlb-close:hover{border-color:var(--gold);background:rgba(254,184,64,.12)}
.zoomlb-hint{position:absolute;bottom:16px;left:0;right:0;text-align:center;color:rgba(255,255,255,.5);font-size:12.5px}
@media (max-width:720px){
  .zoomlb{padding:56px 16px 46px}
  .zoomlb-scroll{padding:12px}
}

/* ---- solp hero: CTA row + trust line ------------------------------------
   These belong to the canonical .solp grammar but only ever existed inside the
   per-page <style> blocks. A page that (correctly) carries no inline CSS lost
   them, and the trust line collapsed into one run-on sentence with no dots.
   Promoted here. Pages that still declare them inline win on document order,
   so nothing else changes. */
.solp-hero-cta{display:flex;gap:16px;flex-wrap:wrap;align-items:center;margin-top:34px}
.solp-trust{margin-top:28px;font-size:14.5px;color:rgba(255,255,255,.66);
  display:flex;gap:10px 18px;flex-wrap:wrap;align-items:center}
.solp-trust .tdot{width:5px;height:5px;border-radius:50%;background:var(--gold);opacity:.75;flex:0 0 auto}

/* ---- prose block, page-scoped (do not rely on .geo-prose: that is declared
        per-page inline and does not exist on a page without a <style> block) */
.dj-prose{max-width:78ch}
.dj-prose p{margin:0 0 16px}
.dj-prose p:last-child{margin-bottom:0}

/* ---- award lockup: the gold rule that opens the block --------------------
   Round 38d declared a SECOND .dj-award here (display:block) which silently
   beat the grid at line 2041 on document order — the seal rendered full width
   under the copy instead of beside it. The rule that stays is the decorative
   one; the layout lives with the rest of the component above. Do not
   re-declare .dj-award a third time. */
.dj-award{border-left:3px solid var(--gold);padding-left:32px}
@media (max-width:860px){ .dj-award{padding-left:22px} }
