/* ============================================================================
   p21.css — SUBPAGE LAYOUT LAYER · v2 (Zara Consult preview, 2026-07)
   Rebuilt to HOMEPAGE scale: monumental serif display type, full-bleed navy /
   tint / cream bands alternating with contained white content, cobalt #011E93 on
   white, red #990000 primary CTA only, radius 0, no shadows, generous rhythm.
   The client called the old subpages "really plain and basic — the big, bold,
   wide sections of the homepage are not present"; this layer answers that.

   Loaded LAST, after zara→lab→v14→v15→v16→v17→v18→v20, so the hv20-* header
   styles (in v20.css) are available on every subpage. Every selector here is
   scoped under a .p21- class (plus the three builder-annotation helpers
   .p21-note / .not-original / .p21-seo) — nothing leaks into the shared
   .hv20- header or the footer. Reuses the zara.css token layer:
   --blue #011E93 fg · --navy #0D1F3C dark bands · --red #990000 (primary CTA
   only) · --serif display · --tint / --tint-2 / --line / --muted / --pad.
   Radius 0 everywhere. body{overflow-x:clip} is already set by v15.css.

   RHYTHM MODEL (matches home): full-bleed BANDS (navy / tint / cream / media)
   stack flush edge-to-edge; CONTAINED white sections carry their own
   padding-block. Inner content is constrained by .p21-wrap (max 1200px).
   ============================================================================ */

/* ----------------------------------------------------------------- RHYTHM
   --band = THE section rhythm. One value, so every seam between two padded
   bands is exactly 2x it and no two seams on the site disagree.

   Before this existed each band picked its own clamp — .p21-list 112px,
   .p21-cta 96px, .p21-proof 104px, .p21-facts 80px, .p21-statement 112px at
   1440 — so the gap the eye reads changed depending on WHICH two bands happened
   to meet: 112px in one seam, 224px in the next, 259px at another. George on
   /company-formation: the intro-to-list gap "is awful", and should read like the
   hero-to-section gap. That reference gap was 184px, which is 2 x 92px, hence
   the 5.75rem ceiling below.

   Full-bleed colour bands (.p21-split) stay flush by design — the colour edge
   marks the boundary, so they need no whitespace around them. That is the
   rhythm model already described at the top of this file; only the numbers had
   drifted away from it.

   Change the seam site-wide by changing this ONE value. Verify with
   node tools/measure-rhythm.mjs, which prints every seam as rendered. */
:root{--band:clamp(3.5rem,6.4vw,5.75rem)}

/* SAME-COLOUR SEAMS — a colour change earns the full seam; a continuous field
   does not. .cf21-q is --paper and .cf21-list is #fff: identical. So on
   accounting / company-formation / freelancers / registered-address those two
   bands are one unbroken white field, and the full 2x--band seam lands where
   the eye can see no section boundary at all — which is why that gap read as
   dead space even after the seams were equalised. Dropping the following
   band's top padding leaves one --band of air: half the section seam, a clean
   2:1 between "new section" and "next block in the same section".
   Kept deliberately narrow — only pairs that are genuinely the same colour.
   .p21-list.tint and every navy band still take the full seam. */
.cf21-q + .p21-list:not(.tint){padding-top:0}
.p21-body + .p21-cards{padding-top:0}
/* Added 2026-07-26. Same reason, a third genuinely-white pair: .p21-body and .p21-cta
   are both --paper (which is literally #fff), so the full seam fell inside an unbroken
   white field with nothing marking a boundary. Live on /about and /careers.
   :not(.tint) on both sides so a page that tints either band keeps its full seam. */
.p21-body:not(.tint) + .p21-cta:not(.tint){padding-top:0}

/* Shared inner container — constrains content inside a full-bleed band. */
.p21-wrap{max-width:var(--maxw);margin:0 auto;padding-inline:var(--pad)}

/* Small-caps cobalt eyebrow, sits above a hero H1 or a section H2. */
.p21-eyebrow{display:block;font-family:var(--sans);font-weight:500;font-size:.8rem;
     letter-spacing:.14em;text-transform:uppercase;color:var(--blue);margin-bottom:1.1rem}

/* ------------------------------------------------------------------ HERO
   Monumental page hero. White by default; .tint = pale cobalt band; .media =
   background photo (inline style) + scrim + white text, content bottom-aligned. */
/* ⚠ The top pad clears the FIXED two-row glass header, which measures 153px at desktop
   (70px on mobile). The old value was clamp(4.5rem,9vw,9rem) = 129.6px at 1440, so every
   page on the stock hero rendered its h1 23px BEHIND the header and read as clipped:
   /about /services /privacy /terms and both careers roles. Measured 2026-07-25 on the
   live preview, fixed at the source so no future page inherits the fault.
   The pages that already looked right (.cf21-hero .blog-hero .c3-hero) set this same
   clamp themselves and override the base, so raising it cannot reach them. */
.p21-hero{background:var(--paper);padding-block:var(--chrome-clear,clamp(12rem,17vw,15.5rem)) var(--band)}
.p21-hero h1{font-family:var(--serif);font-weight:300;color:var(--blue);line-height:1.04;
     letter-spacing:-.012em;font-size:clamp(2.6rem,5.5vw,4.4rem);max-width:16ch}
.p21-hero .p21-lede{color:var(--blue);font-weight:300;max-width:58ch;
     margin-top:clamp(1.2rem,2.5vw,1.8rem);font-size:clamp(1.05rem,1.5vw,1.2rem);line-height:1.6;letter-spacing:.015em}

.p21-hero.tint{background:var(--tint)}

.p21-hero.media{position:relative;display:flex;flex-direction:column;justify-content:flex-end;
     min-height:55vh;background-color:#0a1830;background-size:cover;background-position:center;overflow:hidden;
     padding-block:clamp(3rem,7vw,6rem) var(--band)}
.p21-hero.media::after{content:"";position:absolute;inset:0;
     background:linear-gradient(180deg,rgba(13,31,60,.15) 0%,rgba(13,31,60,0) 30%,rgba(10,22,46,.72) 100%)}
.p21-hero.media .p21-wrap{position:relative;z-index:2}
.p21-hero.media h1,.p21-hero.media .p21-eyebrow{color:#fff}
.p21-hero.media .p21-lede{color:rgba(255,255,255,.92);text-shadow:0 1px 18px rgba(8,18,38,.45)}

/* ------------------------------------------------------------------ SPLIT
   Full-bleed two-column band (mirrors home's .split): media flush to one edge,
   text padded and vertically centred. .rev flips sides. .navy = navy band with
   white text. .tint = pale tint on the text column. Stacks below 900px, media
   first. Markup: .p21-media (img/video) + .p21-txt (h2 + p + optional dotlink). */
.p21-split{display:grid;grid-template-columns:1fr 1fr;gap:0;align-items:stretch;background:var(--paper)}
/* 2026-07-24: the media is a positioning context and the img/video is taken OUT of
   flow. Before this, a PORTRAIT file drove the band's height: the img had height:100%,
   but a percentage height against an auto-height parent resolves to auto, so the image
   rendered at its own aspect (720x1080 for a 2:3 file) and dragged the whole row with
   it — sofia-cathedral and the two portrait team shots blew four bands out to 1080px.
   Out of flow, the image can no longer grow the container, so the row height comes from
   min-height and the text column as intended, and object-fit:cover crops to fill.
   Landscape images are unaffected: they were already shorter than the clamp. */
.p21-split .p21-media{min-height:clamp(420px,44vw,600px);overflow:hidden;background:var(--tint);order:0;position:relative}
.p21-split.rev .p21-media{order:1}
/* a team portrait in a split or a card frames the head, not the waist: centred, /services cut the
   payroll portrait at the chin and /careers both job cards at the eyes (2026-10-06). :where keeps it
   below page rules (about's hero sets its own). */
:is(.p21-split .p21-media,.p21-card-img) img:where([src*="/img/team/"]){object-position:50% 12%}
.p21-split .p21-media img,.p21-split .p21-media video{position:absolute;inset:0;
     width:100%;height:100%;object-fit:cover;display:block}
.p21-split .p21-txt{display:flex;flex-direction:column;justify-content:center;
     padding:clamp(2.4rem,5.5vw,5.5rem)}
.p21-split .p21-txt h2{font-family:var(--serif);font-weight:300;color:var(--blue);line-height:1.1;
     letter-spacing:-.01em;font-size:clamp(1.8rem,3.4vw,2.8rem);max-width:18ch}
.p21-split .p21-txt p{color:var(--blue);font-weight:300;font-size:1.075rem;line-height:1.65;
     margin-top:1.2rem;max-width:48ch}
.p21-split .p21-txt .dotlink{margin-top:1.8rem}

.p21-split.tint .p21-txt{background:var(--tint)}
.p21-split.navy{background:var(--navy)}
.p21-split.navy .p21-txt h2{color:#fff}
.p21-split.navy .p21-txt p{color:rgba(255,255,255,.86)}
.p21-split.navy .p21-txt .dotlink{color:#fff}
.p21-split.navy .p21-txt .dotlink::before{background:#fff}
.p21-split.navy .p21-txt a:not(.btn):not(.dotlink){color:#fff;border-bottom:1px solid rgba(255,255,255,.5)}

@media (max-width:900px){
  .p21-split,.p21-split.rev{grid-template-columns:1fr}
  .p21-split .p21-media,.p21-split.rev .p21-media{order:-1;min-height:clamp(240px,60vw,380px)}
}

/* ------------------------------------------------------------------ LIST
   Full-bleed pale-tint band. The <ul> becomes a 2-col grid of quiet cells, each
   with a cobalt top hairline + serif lead (calmer than home's service boxes).
   Plain <ul><li> markup keeps working. Collapses to 1 col below 680px. */
.p21-list{background:var(--tint);padding-block:var(--band)}
.p21-list>*{max-width:var(--maxw);margin-inline:auto;padding-inline:var(--pad)}
.p21-list h2{font-family:var(--serif);font-weight:300;color:var(--blue);line-height:1.12;
     letter-spacing:-.01em;font-size:clamp(1.9rem,3.4vw,2.7rem);margin-bottom:clamp(1.8rem,3.5vw,2.6rem);max-width:22ch}
.p21-list ul{list-style:none;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
     gap:0 clamp(2rem,4vw,4rem)}
.p21-list li{border-top:1px solid var(--blue);padding:1.3rem 0 1.5rem;
     font-family:var(--serif);font-weight:300;color:var(--blue);font-size:clamp(1.15rem,1.7vw,1.4rem);line-height:1.3}
.p21-list li .sub{display:block;margin-top:.5rem;font-family:var(--sans);font-weight:300;
     font-size:.95rem;line-height:1.55;color:var(--muted)}
@media (max-width:680px){ .p21-list ul{grid-template-columns:1fr} }
/* a lone item needs no divider: on /services it read as a broken underline of the line above */
.p21-list li:only-child{border-top:0}
/* 2026-09-29 (13" pass): the auto margin above CENTRED any child with its own measure, so the
   22ch heading on /services, the careers roles and /lp/company-formation sat ~270px right of
   the paragraph under it. svc.css already fixed this for the service pages; the same rule
   here reaches the rest. The band pads to the container edge and its children sit on it.
   The /lp pages that centre their list heading on purpose still do (their rule is stronger). */
.p21-list{padding-inline:max(var(--pad),calc((100% - var(--maxw))/2 + var(--pad)))}
.p21-list>*{max-width:none;margin-inline:0;padding-inline:0}

/* ------------------------------------------------------------------ BODY
   Contained white reading column (~68ch). Legal / long-form prose. Larger type,
   serif cobalt h2 with a short cobalt rule above, wider spacing. */
.p21-body{max-width:var(--maxw);margin:0 auto;padding-block:var(--band);padding-inline:var(--pad)}
/* George, 2026-08-04: "make all the pages wider". Was 68ch (~567px), which left half
   the container empty on /privacy /terms /careers. Full container now, the same value
   the homepage and every other page run. */
.p21-body>*{max-width:none}
.p21-body h2{font-family:var(--serif);font-weight:300;color:var(--blue);line-height:1.12;
     letter-spacing:-.01em;font-size:clamp(1.7rem,3vw,2.4rem);margin:clamp(2.4rem,4.5vw,3.4rem) 0 1rem}
.p21-body h2::before{content:"";display:block;width:2.4rem;height:2px;background:var(--blue);margin-bottom:1.1rem}
.p21-body h2:first-child{margin-top:0}
.p21-body h3{font-family:var(--serif);font-weight:400;color:var(--blue);
     font-size:clamp(1.25rem,2vw,1.55rem);margin:1.8rem 0 .6rem}
.p21-body p{color:var(--blue);font-weight:300;font-size:1.0625rem;line-height:1.75;margin-bottom:1.2rem}
.p21-body ul,.p21-body ol{margin:0 0 1.2rem 1.3rem;color:var(--blue);font-weight:300;font-size:1.0625rem;line-height:1.7}
.p21-body li{margin-bottom:.5rem}
.p21-body a:not(.btn){color:var(--blue);border-bottom:1px solid var(--line);padding-bottom:1px}
.p21-body a:not(.btn):hover{border-color:var(--blue)}

/* ------------------------------------------------------------------ STATEMENT
   Full-bleed band holding ONE big serif line — a page's key sentence. Navy by
   default (white text); .cream = pale-tint band with cobalt text. */
.p21-statement{background:var(--navy);padding-block:var(--band)}
.p21-statement p,.p21-statement .p21-statement-line{font-family:var(--serif);font-weight:300;color:#fff;
     line-height:1.22;letter-spacing:-.005em;font-size:clamp(1.9rem,3.6vw,2.8rem);max-width:24ch}
.p21-statement cite{display:block;margin-top:1.6rem;font-style:normal;font-family:var(--sans);
     font-size:.9rem;letter-spacing:.04em;color:rgba(255,255,255,.62)}
.p21-statement.cream{background:var(--tint)}
.p21-statement.cream p,.p21-statement.cream .p21-statement-line{color:var(--blue)}
.p21-statement.cream cite{color:var(--muted)}
/* .has-cta: the line keeps its place on the left and a button sits on the right, as in
   .p21-cta (careers, 2026-10-12: her slogan band took over the jobs@ button). */
.p21-statement.has-cta .p21-wrap{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:1.6rem 3rem}

/* ------------------------------------------------------------------ FULLBAND
   Full-bleed video/photo band (mirrors home's .v16-phoneband). Video covers,
   dark scrim, optional caption bottom-left. Height ~52vh (36vh mobile).
   Markup: <section class="p21-fullband"><video …></video>
           <div class="p21-fullband-cap">caption</div></section> */
.p21-fullband{position:relative;overflow:hidden;background:#0a1830;
     height:clamp(340px,52vh,560px)}
.p21-fullband video,.p21-fullband img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
.p21-fullband::after{content:"";position:absolute;inset:0;
     background:linear-gradient(180deg,rgba(13,31,60,.22),rgba(10,22,46,.5))}
.p21-fullband-cap{position:absolute;left:0;bottom:0;z-index:2;margin:clamp(1.2rem,3vw,2.2rem);
     font-family:var(--serif);font-weight:300;color:#fff;font-size:clamp(1.4rem,3vw,2.3rem);
     line-height:1.15;max-width:20ch;text-shadow:0 1px 18px rgba(8,18,38,.5)}
@media (max-width:680px){ .p21-fullband{height:36vh;min-height:240px} }

/* ------------------------------------------------------------------ CARDS
   Contained grid of 2–3 photo cards (blog index / service hub). Image top
   (4:3 cover), serif heading, one or two lines, optional dotlink.
   Markup: <section class="p21-cards"><div class="p21-wrap">
             <div class="p21-cards-grid"><article class="p21-card">…</article>…</div>
           </div></section> */
.p21-cards{background:var(--paper);padding-block:var(--band)}
.p21-cards>.p21-wrap>h2{font-family:var(--serif);font-weight:300;color:var(--blue);line-height:1.12;
     font-size:clamp(1.9rem,3.4vw,2.7rem);margin-bottom:clamp(2rem,4vw,3rem);max-width:22ch}
.p21-cards-grid{display:grid;grid-template-columns:1fr;gap:clamp(2rem,3.5vw,3rem)}
@media (min-width:640px){ .p21-cards-grid{grid-template-columns:1fr 1fr} }
@media (min-width:980px){ .p21-cards-grid.three{grid-template-columns:repeat(3,1fr)} }
.p21-card{display:flex;flex-direction:column}
.p21-card .p21-card-img{aspect-ratio:4/3;overflow:hidden;background:var(--tint)}
.p21-card .p21-card-img img{width:100%;height:100%;object-fit:cover;display:block;
     transition:transform .5s ease,filter .5s ease}
.p21-card:hover .p21-card-img img{transform:scale(1.03)}
.p21-card h3{font-family:var(--serif);font-weight:300;color:var(--blue);line-height:1.15;
     font-size:clamp(1.35rem,2.1vw,1.75rem);margin-top:1.1rem}
.p21-card .p21-card-date{font-family:var(--sans);font-weight:500;font-size:.72rem;letter-spacing:.12em;
     text-transform:uppercase;color:var(--blue);margin-top:.9rem;order:-1}
.p21-card p{color:var(--muted);font-weight:300;font-size:1rem;line-height:1.6;margin-top:.7rem}
.p21-card .dotlink{margin-top:1.1rem}

/* ------------------------------------------------------------------ PROOF
   Full-bleed navy testimonial band — 1–3 serif-italic quotes with small-caps
   attribution (a calmer cousin of home's proofcards).
   Markup: <section class="p21-proof"><div class="p21-wrap">
             <blockquote class="p21-quote"><p>…</p><cite>Name · Company</cite></blockquote>…
           </div></section> */
.p21-proof{background:var(--navy);padding-block:var(--band)}
.p21-proof>.p21-wrap>h2{font-family:var(--serif);font-weight:300;color:#fff;line-height:1.12;
     font-size:clamp(1.7rem,3vw,2.4rem);margin-bottom:clamp(2rem,4vw,3rem);max-width:22ch}
.p21-proof-grid{display:grid;grid-template-columns:1fr;gap:clamp(2.2rem,4vw,3.4rem)}
@media (min-width:820px){ .p21-proof-grid.two{grid-template-columns:1fr 1fr} .p21-proof-grid.three{grid-template-columns:repeat(3,1fr)} }
.p21-quote{margin:0;display:flex;flex-direction:column;gap:1.2rem}
.p21-quote p{font-family:var(--serif);font-weight:300;font-style:italic;color:#fff;
     font-size:clamp(1.2rem,1.9vw,1.55rem);line-height:1.4}
.p21-quote p::before{content:"\201C"} .p21-quote p::after{content:"\201D"}
.p21-quote cite{font-style:normal;font-family:var(--sans);font-weight:500;font-size:.74rem;
     letter-spacing:.09em;text-transform:uppercase;color:rgba(255,255,255,.7);line-height:1.5}

/* ------------------------------------------------------------------ FACTS
   Horizontal fact strip (mirrors home's trust band): big serif cobalt numbers
   with muted captions, hairline separators on desktop, wraps on mobile.
   Markup: <section class="p21-facts"><div class="p21-wrap">
             <div class="p21-fact"><b>2001</b><span>established</span></div>…
           </div></section> */
.p21-facts{background:var(--paper);padding-block:var(--band)}
/* ⚠ GRID, not flex-wrap. Flex sized every tile to its own label, so twelve tiles with
   labels of wildly different length ("Established" vs "Client's Companies on a Monthly
   Basis") landed 4/4/3/1 at 1440 with the last tile stranded alone on its own row, and
   no two rows aligned. A grid gives equal columns and clean rows at any tile count.
   Column count is settable per page via --fcols because the strip serves 12 tiles on
   /about and /lp/ecommerce but only 3 on /lp/company-formation. A page overriding it
   wins the cascade, since page <style> blocks load after this file. */
.p21-facts>.p21-wrap{display:grid;grid-template-columns:repeat(var(--fcols,4),1fr);gap:2rem 0;
     border-block:1px solid var(--line);padding-block:clamp(2rem,4vw,3rem)}
.p21-fact{text-align:center;padding-inline:clamp(1rem,2.5vw,2rem)}
.p21-fact+.p21-fact{border-left:1px solid var(--line)}
.p21-fact b{display:block;font-family:var(--serif);font-weight:300;color:var(--blue);
     font-size:clamp(2.2rem,4vw,3.4rem);line-height:.95;letter-spacing:-.02em}
.p21-fact span{display:block;margin-top:.7rem;font-size:.9rem;color:var(--muted);letter-spacing:.02em;line-height:1.4}
/* The divider reset has to follow the column count: whichever tile starts a row loses
   its left border. nth-child cannot read a custom property, so each breakpoint states
   its own. Scoped by min-width so the desktop rule cannot leak into the narrower steps. */
@media (min-width:901px){ .p21-fact:nth-child(4n+1){border-left:0} }
@media (max-width:900px) and (min-width:621px){
  .p21-facts>.p21-wrap{--fcols:3}
  .p21-fact:nth-child(3n+1){border-left:0}
}
@media (max-width:620px){
  .p21-facts>.p21-wrap{--fcols:2;gap:1.8rem 0}
  .p21-fact:nth-child(odd){border-left:0}
}

/* ------------------------------------------------------------------ CTA
   Full-bleed NAVY closing band (mirrors home's lead/form section): one big
   white serif line + a red primary CTA. Markup keeps its inner .p21-wrap. */
.p21-cta{background:var(--navy);padding-block:var(--band)}
.p21-cta .p21-wrap{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:1.6rem 3rem}
.p21-cta .p21-cta-line{font-family:var(--serif);font-weight:300;color:#fff;line-height:1.15;
     font-size:clamp(1.6rem,3vw,2.3rem);max-width:22ch}

/* ------------------------------------------------------------------ ARTICLE
   Editorial blog / publication page: title, small-caps cobalt date, running
   text at 68ch with serif cobalt h2 (cobalt rule above) + blockquote emphasis. */
.p21-article{max-width:var(--maxw);margin:0 auto;padding-block:var(--band);padding-inline:var(--pad)}
.p21-article .p21-article-title{font-family:var(--serif);font-weight:300;color:var(--blue);
     line-height:1.06;letter-spacing:-.012em;font-size:clamp(2.2rem,4vw,3.2rem);max-width:22ch}
.p21-article .p21-date{font-family:var(--sans);font-weight:500;font-size:.75rem;letter-spacing:.12em;
     text-transform:uppercase;color:var(--blue);margin-top:1.2rem;margin-bottom:clamp(2rem,4vw,2.8rem)}
.p21-article-body{max-width:none}   /* superseded below; kept in step, not 68ch */
.p21-article-body p{color:var(--blue);font-weight:300;font-size:1.0625rem;line-height:1.75;margin-bottom:1.25rem}
.p21-article-body h2{font-family:var(--serif);font-weight:300;color:var(--blue);line-height:1.12;
     font-size:clamp(1.6rem,3vw,2.2rem);margin:clamp(2.2rem,4vw,3rem) 0 .9rem}
.p21-article-body h2::before{content:"";display:block;width:2.4rem;height:2px;background:var(--blue);margin-bottom:1.1rem}
.p21-article-body h3{font-family:var(--serif);font-weight:400;color:var(--blue);
     font-size:clamp(1.25rem,2vw,1.55rem);margin:1.8rem 0 .5rem}
.p21-article-body blockquote{margin:1.8rem 0;padding-left:1.4rem;border-left:2px solid var(--blue)}
.p21-article-body blockquote p{font-family:var(--serif);font-style:italic;font-size:clamp(1.3rem,2vw,1.7rem);
     line-height:1.4;color:var(--blue)}
.p21-article-body a:not(.btn){color:var(--blue);border-bottom:1px solid var(--line);padding-bottom:1px}
.p21-article-body a:not(.btn):hover{border-color:var(--blue)}
.p21-article-body ul,.p21-article-body ol{margin:0 0 1.25rem 1.3rem;color:var(--blue);
     font-weight:300;font-size:1.0625rem;line-height:1.7}
.p21-article-body li{margin-bottom:.5rem}

/* ==========================================================================
   BUILDER ANNOTATIONS — keep exactly as visible as before (meeting notes, not
   shipped page copy). Look UNCHANGED from p21 v1.
   ========================================================================== */

/* .p21-note — "copy to be decided" placeholder. Visible but calm. */
.p21-note{max-width:var(--maxw);margin:clamp(1.5rem,4vw,2.5rem) auto;padding:1.4rem 1.6rem;
     margin-inline:auto;width:calc(100% - 2*var(--pad));
     background:#FFF7CC;border:2px dashed #B8860B}
.p21-note .p21-note-lab{display:block;font-family:var(--sans);font-weight:600;font-size:.72rem;
     letter-spacing:.12em;text-transform:uppercase;color:#8a6508;margin-bottom:.5rem}
.p21-note p,.p21-note span:not(.p21-note-lab){color:#5a4a10;font-size:1rem;line-height:1.5}

/* .not-original — inline "invented text" marker (works in headings + paragraphs). */
.not-original{background:#FFF3BD;border-bottom:1px dashed #B8860B}
/* The marker paints a pale yellow behind whatever colour the surrounding section set. On a
   dark band that text is white, so the marker turned it into white-on-#FFF3BD: 1.12:1, i.e.
   invisible. Same problem the blog hero already fixes further down. Pin a dark ink wherever
   the marker lands on an inverted ground, rather than per section: 12.6:1 on the yellow.
   Found by tools/contrast-audit.mjs on /careers, 2026-08-06. */
.p21-cta .not-original,.navy .not-original,.p21-split.navy .not-original{color:#2B2000}

/* .p21-seo — SEO suggestion block, sits under a heading; clearly an annotation. */
.p21-seo{border-left:2px solid var(--blue);padding:.35rem 0 .35rem .9rem;margin:.6rem 0 1.2rem;
     font-size:.8125rem;line-height:1.5;color:var(--blue);max-width:60ch}
.p21-seo b{font-weight:700;color:var(--blue)}
.p21-seo i,.p21-seo em{font-style:italic}

/* ── design-pass hygiene (codex review): shared classes replacing one-off inline styles ── */
.p21-article-img{width:100%;height:auto;display:block;margin-bottom:clamp(1.6rem,3vw,2.4rem)}
.p21-h2-gap{margin-top:clamp(2.8rem,5.5vw,4.4rem)}
.p21-seo.on-media{background:rgba(255,255,255,.94);margin-top:1.4rem;padding:.6rem .9rem}
.p21-wrap.pad-block{padding-block:clamp(2rem,4vw,3rem)}
.dotlink.no-rule{border:0}

/* .seo-add — draft SEO copy shown in place for client review (yellow, additive only). */
.seo-add{background:#FFF3BD;border-bottom:1px dashed #B8860B}

/* ============================================================================
   ARTICLE MEDIA & TABLES — added 2026-07-25 for the Publications migration.

   WHY THIS EXISTS: the first three blog posts were plain prose, so .p21-article-body
   only ever needed p / h2 / h3 / ul / blockquote. The remaining fifteen articles are
   not plain prose — her live pages carry a comparison TABLE (jurisdiction vs corporate
   tax vs dividend WHT), two embedded YOUTUBE videos, a photo GALLERY (the Alliott
   Milan piece) and a content-bearing INFOGRAPHIC (the tax-rates scheme). None of that
   had a rule anywhere: the only table CSS in the project is .ctable in lab.css, a
   fixed-layout comparison-tool class that is wrong here, so a bare <table> in an
   article body would have rendered at BROWSER DEFAULT — cramped, borderless, wrong
   font — inside a serif editorial column.

   Everything here is scoped under .p21-article-body, so it cannot reach the shared
   chrome, the footer, or any other page. Same token layer as the rest of p21.css:
   cobalt --blue on white, --line hairlines, --serif display, --sans small-caps
   labels, weight 300, radius 0, no shadows.
   ============================================================================ */

/* An article may open on a heading when it has no lead image — kill the big top
   margin there so it does not gap under the hero. Mirrors .p21-body h2:first-child. */
.p21-article-body h2:first-child{margin-top:0}

/* TABLE — always wrap it: <div class="p21-table"><table>…</table></div>
   The wrapper scrolls horizontally instead of crushing the columns on a phone;
   min-width keeps a 3-column tax comparison legible rather than wrapping every
   cell to three lines at 320px. First cell is flush left so the table aligns to
   the prose column; last cell is flush right. */
.p21-article-body .p21-table{overflow-x:auto;margin:clamp(1.8rem,3.5vw,2.6rem) 0}
.p21-article-body table{width:100%;min-width:30rem;border-collapse:collapse;
     text-align:left;font-variant-numeric:tabular-nums}
.p21-article-body th,.p21-article-body td{padding:.85rem 1.2rem .85rem 0;
     border-bottom:1px solid var(--line);vertical-align:top;
     color:var(--blue);font-weight:300;font-size:1rem;line-height:1.55}
.p21-article-body th:last-child,.p21-article-body td:last-child{padding-right:0}
.p21-article-body thead th{font-family:var(--sans);font-weight:500;font-size:.75rem;
     letter-spacing:.1em;text-transform:uppercase;padding-bottom:.7rem;
     border-bottom:1.5px solid var(--blue)}
.p21-article-body tbody tr:last-child td{border-bottom:0}
/* She bolds heavily inside cells (**Bulgaria**, **10% (Flat)**). Against 300-weight
   body text, 700 shouts — 500 reads as emphasis without breaking the page colour. */
.p21-article-body th strong,.p21-article-body td strong,
.p21-article-body th b,.p21-article-body td b{font-weight:500}

/* EMBEDDED VIDEO — <div class="p21-embed"><iframe …></iframe></div>
   width:100% is explicit on purpose: aspect-ratio without a resolved width has
   inflated a page in this project before (see the .p21-split portrait note above). */
.p21-article-body .p21-embed{position:relative;width:100%;aspect-ratio:16/9;overflow:hidden;
     background:var(--tint);margin:clamp(1.8rem,3.5vw,2.6rem) 0}
.p21-article-body .p21-embed iframe{position:absolute;inset:0;width:100%;height:100%;
     border:0;display:block}

/* FIGURE + CAPTION — for an image she captions, e.g. the tax-rates infographic.
   .p21-article-img already carries its own bottom margin; zero it inside a figure
   so the caption sits with its image rather than floating. */
.p21-article-body figure{margin:clamp(1.8rem,3.5vw,2.6rem) 0}
.p21-article-body figure img{width:100%;height:auto;display:block}
.p21-article-body figure .p21-article-img{margin-bottom:0}
.p21-article-body figcaption{margin-top:.8rem;font-size:.875rem;line-height:1.5;
     color:var(--muted);font-weight:300}

/* GALLERY — a set of photos shown together, not one lead image.
   <div class="p21-gallery"><figure><img><figcaption>…</figcaption></figure>…</div>
   4:3 cover matches .p21-card-img so galleries and index cards crop alike. */
.p21-article-body .p21-gallery{display:grid;grid-template-columns:1fr;
     gap:clamp(1rem,2vw,1.4rem);margin:clamp(1.8rem,3.5vw,2.6rem) 0}
@media (min-width:640px){ .p21-article-body .p21-gallery{grid-template-columns:1fr 1fr} }
.p21-article-body .p21-gallery figure{margin:0}
.p21-article-body .p21-gallery img{width:100%;aspect-ratio:4/3;object-fit:cover;display:block}

/* .p21-back — the "Back to Publications" line. Markup has carried this class since
   the first post but it had no rule, so the link sat tight against the last
   paragraph. Applies uniformly to the three existing posts too. */
.p21-article-body .p21-back{margin-top:clamp(2.4rem,5vw,3.6rem)}

/* ============================================================================
   BLOG HERO + READING COLUMN — 2026-07-25 r2, after George's review of the live
   pages. Brings the blog onto the SAME treatment as the r7 service pages, which
   solve both of these in company-formation's page-scoped block.

   THE HEADER BUG: the site header is `position:fixed` and, as two rows with the
   big logo, it measures ~153px at desktop. The stock .p21-hero pads
   clamp(4.5rem,9vw,9rem) on top = 129.6px at 1440. 129.6 < 153, so every blog
   h1 rendered UNDERNEATH the header and the title read as clipped. The service
   pages already carry the fix as `.cf21-hero` with the comment "Extra top
   padding clears the fixed two-row glass header" — same clamp reused here.

   THE LEFT-JAM: .p21-article-body was max-width:68ch with no auto margin, so the
   column sat hard against the left of a 1200px container and left ~370px of dead
   space on the right. The service intro band centres its text at max-width:1100px
   with paragraphs at 75ch; the article column now does the same, so prose keeps a
   readable measure while images and tables span the full container, centred.
   ============================================================================ */

/* Hero: navy band, white type, clear of the fixed header. Replaces .tint on blog pages. */
.p21-hero.blog-hero{background:var(--navy);padding-top:var(--chrome-clear,clamp(12rem,17vw,15.5rem))}
.p21-hero.blog-hero h1{color:#fff;max-width:24ch;line-height:1.03;letter-spacing:-.012em;
     font-size:clamp(2.4rem,6.4vw,5rem)}   /* below the service 6.875rem cap: article
     titles run long (the EU-India one is 103 characters) and 110px broke into a wall */
.p21-hero.blog-hero .p21-lede{color:rgba(255,255,255,.92)}
.p21-hero.blog-hero .p21-lede.not-original{color:var(--blue)}  /* keep the yellow marker legible */

/* Reading column: the body spans the page container, prose sits in a centred
   measure inside it, media spans the full width. Centred, not jammed left.

   ⚠ The measure is in REM, deliberately, not ch. `ch` resolves against each
   element's own font, so 75ch of 35px serif h2 is far wider than 75ch of 17px
   sans body — centring both then produced a ragged left edge, headings poking
   out past their own paragraphs. One rem value = one width = one clean edge. */
.p21-article-body{max-width:none;margin-inline:0}
/* ⚠ The 44rem centred measure is GONE (George, 2026-08-04: "make all the pages wider").
   It was the right call for long-form prose in isolation, but it made the blog the only
   part of the site running a narrow centred column, and he wants one width everywhere.
   margin-inline:0 so the text starts on the page's left edge, not centred in the box. */
.p21-article-body>h2,.p21-article-body>h3,.p21-article-body>p,
.p21-article-body>ul,.p21-article-body>ol,.p21-article-body>blockquote{
     max-width:none;margin-inline:0}
/* Lists keep their bullet indent: margin-inline:auto above would otherwise wipe
   the 1.3rem left margin the base rule gives them, so re-hang it as padding. */
.p21-article-body>ul,.p21-article-body>ol{padding-left:1.3rem}
.p21-article-body>.p21-article-img,.p21-article-body>figure,
.p21-article-body>.p21-gallery,.p21-article-body>.p21-embed,
.p21-article-body>.p21-table{max-width:100%;margin-inline:auto}
