/*
Theme Name: GrowthStackPulse
Theme URI: https://www.growthstackpulse.com
Author: Jakub Zachveja
Description: The GrowthStackPulse design system as a WordPress block theme. Tokens live in theme.json, components live in /patterns, page shapes live in /templates. Built from the nine locked page prototypes.
Version: 0.15.0
Requires at least: 6.9
Tested up to: 7.1
Requires PHP: 7.4
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Text Domain: growthstackpulse
*/

/* ============================================================
   TOKEN BRIDGE
   The values are defined ONCE, in theme.json. This block only
   gives them the short names the design CSS below already uses,
   so changing a colour means editing theme.json and nothing else.
   ============================================================ */
:root{
  --surface:var(--wp--preset--color--surface);
  --panel:var(--wp--preset--color--panel);
  --ink:var(--wp--preset--color--ink);
  --mute:var(--wp--preset--color--mute);
  --rule:var(--wp--preset--color--rule);
  --accent:var(--wp--preset--color--accent);
  --deep:var(--wp--preset--color--deep);
  --tint:var(--wp--preset--color--tint);
  --accent-on-dark:var(--wp--preset--color--accent-on-dark);

  --serif:var(--wp--preset--font-family--serif);
  --sans:var(--wp--preset--font-family--sans);
  --mono:var(--wp--preset--font-family--mono);

  --maxw:1288px;
  --pad:40px;
  --measure:74ch;
  --media:840px;
  --rail:236px;
}

/* ============================================================
   DESIGN SYSTEM  --  lifted unchanged from the locked homepage
   prototype. Do not retype values here; they come from above.
   ============================================================ */
/* Ground: LOCKED to cool grey #F4F6F9, chosen 30 Aug 2026. */

*{box-sizing:border-box}
body{
  margin:0; background:var(--surface); color:var(--ink);
  font-family:var(--sans); font-weight:400; font-size:18px;
  line-height:1.6; letter-spacing:.1px; -webkit-font-smoothing:antialiased;
}
img{max-width:100%}
a{text-decoration:none;color:inherit;transition:all .15s ease-in-out}
a:focus-visible,button:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.wrap{max-width:var(--maxw);margin:0 auto;padding:0 var(--pad)}

.eyebrow{
  font-family:var(--sans);font-weight:700;font-size:13px;line-height:20px;
  letter-spacing:1.6px;text-transform:uppercase;color:var(--accent);margin:0;
}
.btn{
  font-family:var(--sans);font-weight:700;font-size:14px;letter-spacing:.2px;
  background:var(--accent);color:#fff;border:0;border-radius:3px;
  padding:11px 18px;cursor:pointer;white-space:nowrap;display:inline-block;
  transition:all .15s ease-in-out;
}
.btn:hover{background:var(--deep);color:#fff}
.btn-ghost{background:#fff;color:var(--accent);border:1px solid var(--rule);padding:10px 17px}
.btn-ghost:hover{background:var(--accent);color:#fff;border-color:var(--accent)}

/* ---------------- header ----------------
   Three-part bar: wordmark left, nav centred, actions right. Floats on the
   hero's own ground at the top, then turns solid on scroll. */
.site-header{
  position:fixed;top:0;left:0;right:0;z-index:40;
  background:transparent;border-bottom:1px solid transparent;
  transition:background .2s ease-in-out, border-color .2s ease-in-out;
}
.hdr{
  display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:32px;
  height:88px;
}
.wordmark{
  font-family:var(--serif);font-weight:500;font-size:26px;letter-spacing:-.6px;
  white-space:nowrap;line-height:1;justify-self:start;color:#fff;
}
.nav{display:flex;align-items:center;gap:30px;justify-self:center}
.nav a{
  font-family:var(--sans);font-weight:700;font-size:14px;letter-spacing:.1px;
  white-space:nowrap;color:#EAF4F0;
}
.nav a:hover{color:#fff}
.hdr-actions{display:flex;align-items:center;gap:18px;justify-self:end}
.hdr-link{font-family:var(--sans);font-weight:700;font-size:14px;color:#EAF4F0;white-space:nowrap}
.hdr-link:hover{color:#fff}
.hdr-cta{
  font-family:var(--sans);font-weight:700;font-size:14px;letter-spacing:.2px;line-height:1;
  background:#fff;color:var(--accent);
  border-radius:3px;padding:11px 18px;white-space:nowrap;
  display:inline-flex;align-items:center;
  transition:all .15s ease-in-out;
}
.hdr-cta:hover{background:var(--tint);color:var(--deep)}

/* scrolled past the hero */
.site-header.solid{background:var(--surface);border-bottom-color:var(--rule)}
.site-header.solid .wordmark{color:var(--ink)}
.site-header.solid .wordmark:hover{color:var(--accent)}
.site-header.solid .nav a,
.site-header.solid .hdr-link{color:var(--ink)}
.site-header.solid .nav a:hover,
.site-header.solid .hdr-link:hover{color:var(--accent)}
.site-header.solid .hdr-cta{background:var(--accent);color:#fff}
.site-header.solid .hdr-cta:hover{background:var(--deep)}

.menu-toggle{display:none;background:none;border:0;color:#fff;font-size:22px;cursor:pointer;padding:6px}
.site-header.solid .menu-toggle{color:var(--ink)}

/* ---------------- hero ----------------
   The brand green, at full depth, built from the same recipe as the covers
   and the footer: a radial field with the house grain over it at the same
   size and opacity. Square edges. Green appears once at full scale here and
   once as a control on the newsletter button, and nowhere else. */
.hero{
  position:relative;overflow:hidden;
  background:radial-gradient(130% 120% at 50% 8%, #0A8A66 0%, #00543F 44%, #02241B 100%);
}
.hero::after{
  content:"";position:absolute;inset:0;background-image:var(--grain);
  background-size:108px;mix-blend-mode:overlay;opacity:.7;pointer-events:none;
}
.hero-in{
  position:relative;z-index:1;
  padding:172px 0 128px;text-align:center;
  display:flex;flex-direction:column;align-items:center;gap:22px;
}
.hero .eyebrow{color:#8FE3C4}
/* Base H1 for every page that is NOT the green hero. Same scale, ink colour. */
h1{font-family:var(--serif);font-weight:500;font-size:54px;line-height:1.1;letter-spacing:-1.7px;margin:0;max-width:620px;text-wrap:balance;color:var(--ink)}

.hero h1{
  font-family:var(--serif);font-weight:500;font-size:54px;line-height:1.1;
  letter-spacing:-1.7px;margin:0;max-width:620px;text-wrap:balance;color:#fff;
}
.hero-sub{font-family:var(--sans);font-weight:400;font-size:20px;line-height:1.55;color:#BCD9CE;margin:0;max-width:56ch}
.chips{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin-top:12px}
.chip{
  position:relative;
  font-family:var(--sans);font-weight:700;font-size:13px;letter-spacing:.3px;
  border:1px solid rgba(255,255,255,.24);border-radius:50px;padding:9px 18px;
  background:transparent;color:#EAF4F0;transition:all .15s ease-in-out;
}
/* Hover revised 6 Sep 2026, his call, option C. The pill now behaves the
   same way here as it does on the 404: the house 4px lift plus a change to
   the element's own rule. The old white fill inversion is gone, so there is
   one pill gesture on the site rather than two.
   The ::after is the hit-area buffer. Without it the lift moves the pill
   out from under the cursor and hover flickers. His find, on the 404. */
.chip::after{content:"";position:absolute;left:0;right:0;top:0;bottom:-6px}
.chip:hover{border-color:#fff;color:#fff;transform:translateY(-4px)}

/* ---------------- sections ---------------- */
section{padding:88px 0}
.hero + section{padding-top:80px}
section.alt{background:var(--panel);border-top:1px solid var(--rule);border-bottom:1px solid var(--rule)}
.sec-head{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:44px;flex-wrap:wrap}
.sec-head h2{margin:8px 0 0}
.sec-head .sub{margin:8px 0 0;max-width:58ch}
.more{font-family:var(--sans);font-weight:700;font-size:14px;letter-spacing:.2px;color:var(--accent);white-space:nowrap}
.more:hover{color:var(--deep)}

/* ---------------- one scale for every section heading ---------------- */
.sec-head h2,
.tools-intro h2,
.faq-aside h2,
.author-card h2,
.signup h2{
  font-family:var(--serif);font-weight:500;
  font-size:32px;line-height:1.22;letter-spacing:-.5px;
}
/* :not(.eyebrow) matters. A container rule like ".faq-aside p" scores higher
   than ".eyebrow", so without it the eyebrow silently loses its green and
   renders mute. That is why "Common questions" was grey. */
.sec-head .sub,
.tools-intro p:not(.eyebrow),
.faq-aside p:not(.eyebrow){font-size:16px;line-height:1.6;color:var(--mute)}

/* ---------------- article cards ---------------- */
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:56px 16px}
.card{
  display:flex;flex-direction:column;gap:24px;padding-bottom:32px;
  border-bottom:1px solid var(--rule);
  transition:all .15s ease-in-out;
}
.card:hover{transform:translateY(-4px);border-bottom-color:var(--accent)}
.cover{
  --ox:50%;--oy:50%;   /* fallback light source: an uncategorised post still
                          blooms from its centre rather than not at all */
  aspect-ratio:16/10;border-radius:8px;position:relative;overflow:hidden;
  display:flex;align-items:flex-end;padding:20px;
}
/* Same material as the footer: one quiet field of the category colour with
   the house grain over it at the same size and opacity. No second bloom,
   no contour layer. */
.cover::after{
  content:"";position:absolute;inset:0;background-image:var(--grain);
  background-size:108px;mix-blend-mode:overlay;opacity:.7;pointer-events:none;
}
.cover b{
  position:relative;z-index:1;
  font-family:var(--sans);font-weight:800;font-size:17px;line-height:1.25;
  color:#fff;text-shadow:0 1px 14px rgba(0,0,0,.35);
}
/* Each field carries its own numbers as tokens as well as painting itself,
   so anything that needs to REBUILD the field at a different origin can,
   without a second copy of the palette. --hx is where the light goes on
   hover. Added 18 Sep 2026 for the card-cover bloom. */
.g-growth  {--c1:#0F7F5F;--c2:#061F1A;--ox:28%;--oy:22%;--hx:36%;
            background:radial-gradient(125% 115% at 28% 22%, #0F7F5F 0%, #061F1A 100%)}
.g-martech {--c1:#11738D;--c2:#061A24;--ox:72%;--oy:22%;--hx:64%;
            background:radial-gradient(125% 115% at 72% 22%, #11738D 0%, #061A24 100%)}
.g-salesops{--c1:#21529F;--c2:#0A1128;--ox:28%;--oy:78%;--hx:36%;
            background:radial-gradient(125% 115% at 28% 78%, #21529F 0%, #0A1128 100%)}
.g-ai      {--c1:#4F3792;--c2:#120C24;--ox:72%;--oy:78%;--hx:64%;
            background:radial-gradient(125% 115% at 72% 78%, #4F3792 0%, #120C24 100%)}
.card-cat{font-family:var(--sans);font-weight:700;font-size:12px;letter-spacing:1.2px;text-transform:uppercase}
.c-growth{color:#007354}.c-martech{color:#0E6E85}.c-salesops{color:#0B63C5}.c-ai{color:#6B4BA8}
.card h3{font-family:var(--serif);font-weight:500;font-size:22px;line-height:1.3;letter-spacing:-.3px;margin:0}
.card:hover h3{color:var(--accent)}
.card-body{display:flex;flex-direction:column;gap:15px;flex:1;padding-right:32px}
.byline{display:flex;align-items:center;gap:10px;margin-top:auto;padding-top:16px}
.avatar{width:28px;height:28px;border-radius:50%;flex:none;background:var(--tint);border:1px solid var(--rule);display:flex;align-items:center;justify-content:center;font-family:var(--serif);font-weight:500;font-size:13px;color:var(--accent)}
.byline-txt{font-family:var(--sans);font-weight:700;font-size:13px;letter-spacing:.2px}
.byline-date{font-family:var(--mono);font-size:11px;letter-spacing:.5px;color:var(--mute)}

/* ---------------- tools: full-width band, no box ---------------- */
.tools-band{background:var(--panel);border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);padding:92px 0}
.tools-panel{display:grid;grid-template-columns:minmax(0,340px) minmax(0,1fr);gap:80px;align-items:start}
.tools-intro .eyebrow{color:var(--accent);margin:0 0 12px}
.tools-intro h2{margin:0 0 14px}
.tools-intro p:not(.eyebrow){margin:0 0 24px}
.tools-intro .allt{font-family:var(--sans);font-weight:700;font-size:15px;letter-spacing:.2px;color:var(--accent);display:inline-flex;align-items:center;gap:8px}
.tools-intro .allt:hover{color:var(--deep);gap:13px}


.tgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:40px 48px}
/* LOCKED 2026-09-03. The 3px category left rule is gone, replaced by the
   grained category tile beside the text. His call, and his reasoning: the
   small square is the site's own mark, so the tools band is where it earns
   its keep. Same gesture as the article cards on hover: a 4px lift. */
.titem{
  display:grid;grid-template-columns:52px minmax(0,1fr);gap:20px;align-items:start;
  transition:all .15s ease-in-out;
}
.titem:hover{transform:translateY(-4px)}
.titem h3{
  font-family:var(--serif);font-weight:500;font-size:20px;line-height:1.35;letter-spacing:-.2px;
  margin:0;color:var(--ink);transition:all .15s ease-in-out;
}
.titem:hover h3{color:var(--tk)}
.titem p{margin:11px 0 0;font-size:15px;line-height:1.6;color:var(--mute)}
.titem .tkind{font-family:var(--mono);font-size:11px;letter-spacing:.5px;color:var(--mute);display:block;margin-top:12px}

.tk-growth  {--tk:#007354}
.tk-martech {--tk:#0E6E85}
.tk-salesops{--tk:#0B63C5}
.tk-ai      {--tk:#6B4BA8}

/* ---------------- author ---------------- */
.author-card{
  background:var(--panel);border:1px solid var(--rule);border-radius:8px;
  border-top:2px solid var(--accent);
  padding:48px;display:grid;grid-template-columns:160px minmax(0,1fr);gap:44px;align-items:start;
}
/* The mark, not a face. Same gradient and grain as the article covers, so the
   block is made of the house material rather than waiting on a photo. */
.author-mono{
  width:160px;height:190px;border-radius:8px;position:relative;overflow:hidden;
  display:flex;align-items:center;justify-content:center;
  background:radial-gradient(125% 115% at 28% 22%, #0F7F5F 0%, #061F1A 100%);
}
.author-mono::after{
  content:"";position:absolute;inset:0;background-image:var(--grain);
  background-size:108px;mix-blend-mode:overlay;opacity:.7;pointer-events:none;
}
.author-mono b{
  position:relative;z-index:1;font-family:var(--serif);font-weight:500;
  font-size:88px;line-height:1;letter-spacing:-2px;color:#fff;
}
.author-body{display:flex;flex-direction:column;gap:22px}
.author-head{display:flex;flex-direction:column;gap:6px}
.author-card h2{margin:0}
.author-role{font-family:var(--sans);font-weight:700;font-size:13px;letter-spacing:1.2px;text-transform:uppercase;color:var(--mute);margin:0}
.author-card p.bio{margin:0;font-size:17px;line-height:1.65;max-width:62ch}
.author-links{display:flex;gap:12px;flex-wrap:wrap;align-items:center}

/* ---------------- faq: third pattern, split column ---------------- */
.faq-split{display:grid;grid-template-columns:minmax(0,340px) minmax(0,1fr);gap:64px;align-items:start}
.faq-aside{position:static}
.faq-aside h2{margin:8px 0 14px}
.faq-aside p:not(.eyebrow){margin:0 0 22px}
.faq-list{border-top:1px solid var(--rule)}
.faq-item{border-bottom:1px solid var(--rule)}
.faq-item summary{
  list-style:none;cursor:pointer;
  display:flex;align-items:center;justify-content:space-between;gap:24px;
  padding:24px 4px;
  font-family:var(--serif);font-weight:500;font-size:21px;line-height:1.35;letter-spacing:-.2px;
  transition:all .15s ease-in-out;
}
.faq-item summary::-webkit-details-marker{display:none}
.faq-item summary:hover{color:var(--accent)}
.faq-item summary .plus{
  flex:none;width:26px;height:26px;border-radius:50%;border:1px solid var(--rule);
  display:flex;align-items:center;justify-content:center;
  font-family:var(--sans);font-weight:700;font-size:16px;color:var(--accent);line-height:1;
}
.faq-item[open] summary .plus{background:var(--accent);color:#fff;border-color:var(--accent)}
.faq-item[open] summary .plus span{display:none}
.faq-item[open] summary .plus::after{content:"\2013"}
.faq-answer{padding:0 60px 26px 4px;margin:0;font-size:17px;line-height:1.65;color:var(--mute)}

/* ---------------- newsletter CTA band ---------------- */
.signup{background:var(--panel);color:var(--ink);padding:68px 0 108px;border-top:1px solid var(--rule)}
.signup-in{max-width:880px;margin:0 auto;text-align:center;display:flex;flex-direction:column;align-items:center;gap:14px}
.signup .eyebrow{color:var(--accent);margin:0}
.signup h2{margin:0;max-width:none;color:var(--ink)}
@media (min-width:900px){.signup h2{white-space:nowrap}}
.signup p.lead{margin:0;font-size:17px;line-height:1.55;color:var(--mute);max-width:48ch}
.signup-right{display:flex;flex-direction:column;align-items:center;gap:10px;width:100%;max-width:500px;margin-top:8px}
.form{display:flex;gap:10px;width:100%}
.form input[type=email]{
  flex:1;min-width:0;font-family:var(--sans);font-size:16px;color:var(--ink);
  background:#fff;border:1px solid var(--rule);border-radius:3px;padding:14px 16px;
}
.form input[type=email]::placeholder{color:#8A8A8A}
.form input[type=email]:focus{outline:2px solid var(--accent);outline-offset:2px}
.form button{
  font-family:var(--sans);font-weight:700;font-size:15px;letter-spacing:.2px;
  background:var(--accent);color:#fff;border:0;border-radius:3px;padding:14px 24px;cursor:pointer;white-space:nowrap;
  transition:all .15s ease-in-out;
}
.form button:hover{background:var(--deep)}
.signup small{font-size:12.5px;line-height:1.5;color:var(--mute)}
.signup .status{margin:0;font-size:13px;font-weight:700;color:var(--accent);min-height:0}
.signup .status:empty{display:none}
/* newsletter form wiring (0.9.5) */
.signup .status.is-error{color:#B42318}
.signup-note a{color:var(--mute);text-decoration:underline}
.signup-note a:hover{color:var(--accent)}
.signup-right p{margin:0}
.gsp-nl button[disabled]{opacity:.7;cursor:progress}
.gsp-sr{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.gsp-hp{position:absolute!important;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden}
.signup .gsp-nl[hidden],.signup .signup-note[hidden]{display:none!important}
/* newsletter success state (0.9.7): the band's eyebrow, heading and lead swap to
   the confirmation; "Open {provider}" takes the form's place. No card, no box. */
.nl-done{width:100%;display:flex;flex-direction:column;align-items:center;gap:14px;animation:nl-in .25s ease-out}
.nl-done:focus{outline:none}
.nl-email{font-weight:700;color:var(--ink);overflow-wrap:anywhere}
.signup p.lead.nl-lead-done{max-width:none}
.nl-open{display:inline-flex;align-items:center;justify-content:center;font-family:var(--sans);font-weight:700;font-size:15px;letter-spacing:.2px;
  background:var(--accent);color:#fff;border-radius:3px;padding:14px 24px;white-space:nowrap}
.nl-open:hover{background:var(--deep);color:#fff}
.signup .nl-help{margin:0;font-size:12.5px;line-height:1.5;color:var(--mute)}
.nl-retry{background:none;border:0;padding:0;font:inherit;color:var(--accent);text-decoration:underline;cursor:pointer}
.nl-retry:hover{color:var(--deep)}
@keyframes nl-in{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
@media (prefers-reduced-motion:reduce){.nl-done{animation:none}}
@media (max-width:767px){.nl-open{width:100%}}

/* ---------------- footer ---------------- */
.site-footer{
  background:var(--ink);color:#fff;
  border-radius:32px 32px 0 0;
  margin-top:-40px;position:relative;z-index:1;overflow:hidden;
  padding:72px 0 36px;
}
/* Same grain as the covers, so the footer is made of the house material
   rather than being a flat fill. */
.site-footer::after{
  content:"";position:absolute;inset:0;background-image:var(--grain);
  background-size:108px;mix-blend-mode:overlay;opacity:.7;pointer-events:none;
}
.site-footer > .wrap{position:relative;z-index:1}
.foot-top{display:grid;grid-template-columns:1.7fr 1fr 1fr 1fr;gap:48px 32px}
.foot-brand .wordmark{font-size:24px;color:#fff}
.foot-brand a.wordmark:hover{color:var(--accent-on-dark)}
.foot-brand p{margin:14px 0 0;font-size:15px;line-height:1.6;color:#A9ACC9;max-width:32ch}
.foot-brand .contact{margin-top:20px;font-family:var(--mono);font-size:12px;letter-spacing:.5px;color:var(--accent-on-dark);display:block}
.foot-brand .place{margin-top:8px;font-family:var(--mono);font-size:12px;letter-spacing:.5px;color:#767A9E;display:block}
/* Plain text, not a heading. These are navigation labels, and an <h6>
   after the page's H2s put four empty levels into the document outline
   for nothing. 18 Sep 2026. */
.foot .foot-label{
  font-family:var(--sans);font-weight:800;font-size:12px;letter-spacing:.9px;text-transform:uppercase;
  margin:0 0 18px;padding-bottom:12px;color:#fff;border-bottom:1px solid #363A63;
}
.foot ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}
.foot a{font-size:15px;color:#A9ACC9}
.foot a:hover{color:var(--accent-on-dark)}
.foot-base{margin-top:56px;padding-top:24px;border-top:1px solid #363A63;display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap}
.foot-base p{margin:0;font-family:var(--mono);font-size:12px;letter-spacing:.5px;color:#767A9E}

@media (max-width:1080px){
  .tools-panel{grid-template-columns:1fr;gap:48px}
}
@media (max-width:1000px){
  .foot-top{grid-template-columns:1fr 1fr}
  .faq-split{grid-template-columns:1fr;gap:32px}
  .faq-aside{position:static}
}
@media (max-width:900px){
  .nav{display:none}.menu-toggle{display:block}
  h1{font-size:38px;letter-spacing:-1px}
  .hero-in{padding:132px 0 60px}
  section{padding:60px 0}
  .author-card{grid-template-columns:1fr;gap:28px;padding:32px}
  .author-mono{width:140px;height:166px}
  .author-mono b{font-size:76px}
  .tools-band{padding:60px 0}
  .tools-panel{grid-template-columns:1fr;gap:40px}
  .tgrid{gap:32px}
}
@media (max-width:768px){
  :root{--pad:24px}
  .hero-sub{font-size:18px}
  .sec-head h2,.tools-intro h2,.faq-aside h2,.author-card h2,.signup h2{font-size:26px;letter-spacing:-.3px}
  .grid{gap:32px}
  .card-body{padding-right:0}
  .signup{padding:52px 0 88px}
  .form{flex-direction:column}
  .form button{width:100%}
  .site-footer{border-radius:24px 24px 0 0}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important}}



/* ---------------- the tools item's tile, LOCKED 2026-09-03 ------------
   52px, 8px radius, the category's own cover gradient with the house grain
   at 108px and 0.7. No new material: the four gradients already exist in
   this file for the article covers. Rejected on the way here: the tile
   above the headline, which pushed the band 120px taller and made the tile
   read as decoration on its own line rather than a mark attached to the
   item. */
.ttile{
  --ox:50%;--oy:50%;
  width:52px;height:52px;border-radius:8px;position:relative;overflow:hidden;flex:none;
}
.ttile::after{
  content:"";position:absolute;inset:0;background-image:var(--grain);
  background-size:108px;mix-blend-mode:overlay;opacity:.7;pointer-events:none;
}


/* ---------------- statement, LOCKED 2026-09-05 ------------------------
   The site's thesis, said once, in the publication's own voice. Centred,
   white ground, no mark, statement only.
   The type carries the argument: the vanity metrics are set in the faded
   tone and the sentence that matters is in --ink, so the emphasis is the
   point rather than decoration. Serif, one step below the hero at 44px.
   The faded tone is --ink at 45% rather than --mute. --mute is a neutral
   grey and --ink is a deep navy, so mixing them read as two colours in one
   sentence instead of one sentence with emphasis. Faded ink keeps both
   halves in a single hue and adds no token to the palette.
   Rejected on the way here: quote marks, which tell a reader someone said
   this and send them looking for a name, when nobody said it. The accent
   rule was the in-system alternative and was also not taken. */
.stmt-sec{padding:104px 0}
.stmt-wrap{display:flex;flex-direction:column;align-items:center;text-align:center}
.stmt{max-width:880px;margin:0}
.stmt p{
  font-family:var(--serif);font-weight:500;font-size:44px;line-height:1.18;
  letter-spacing:-1.2px;margin:0;color:rgba(29,32,71,.45);
}
.stmt b{font-weight:500;color:var(--ink)}
@media (max-width:900px){.stmt-sec{padding:72px 0}.stmt p{font-size:32px;letter-spacing:-.7px}.stmt{max-width:none}}


/* ============================================================
   BLOCK EDITOR BRIDGE
   Small rules that only exist because WordPress renders the
   markup slightly differently from the static prototype.
   ============================================================ */

/* WordPress cannot wrap a whole card in one link, so the title
   link is stretched to cover the card instead. Same result. */
.card{position:relative}
.card .wp-block-post-title a::after{content:"";position:absolute;inset:0;z-index:2}
.card .byline,.card .card-cat{position:relative;z-index:3}

/* Neutralise the block wrappers so his own layout rules win. */
/* REMOVED: .wp-block-group.wrap{max-width:none} outranked .wrap (0,2,0 beats 0,1,0)
   and stripped the 1288px page width. The layout type is "default", so WordPress
   never constrains these groups anyway and the rule was never needed. */
.wp-block-post-template{list-style:none;margin:0;padding:0}
.wp-block-post-template.grid{display:grid}
.wp-block-query{margin:0}
.wp-block-post-title{margin:0}
.wp-block-post-title a{color:inherit;text-decoration:none}
.wp-block-post-excerpt__excerpt{margin:0}
.wp-block-post-excerpt{margin:0}

/* The editor canvas has no <header>/<footer> chrome, so keep the
   fixed header from covering the first block while editing. */
.editor-styles-wrapper .site-header{position:static}


/* House grain. Never changes. */
:root{--grain:url("data:image/avif;base64,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")}


/* ============================================================
   BLOCK BRIDGE  --  part 2
   Rules that exist only because WordPress emits slightly
   different markup from the static prototype. Nothing here
   changes the design; it re-attaches it to block output.
   ============================================================ */

/* Paragraph blocks used purely as containers for inline links.
   display:contents removes the <p> from layout entirely, so the
   parent flex/grid rules apply to the links exactly as before. */
.chip-w,.more-w,.hdr-link-w,.hdr-cta-w,.contact-w,.allt-w,.btn-w{display:contents}

/* Navigation block: his .nav owns the spacing, not the block. */
.nav .wp-block-navigation__container,
.nav.wp-block-navigation{gap:30px}
.nav .wp-block-navigation-item__content{font-family:var(--sans);font-weight:700;font-size:14px}

/* Site title block renders a <p>; the wordmark styling sits on it. */
.wp-block-site-title.wordmark{margin:0}
.wp-block-site-title.wordmark a{font:inherit;letter-spacing:inherit;color:inherit}

/* Post terms block renders a wrapper div with links inside. */
.card-cat a{color:inherit;text-decoration:none}
.card-cat{display:block}

/* ------------------------------------------------------------
   CATEGORY COLOUR, AUTOMATICALLY
   WordPress puts the category slug on every post in a loop, so
   the cover gradient and the label colour resolve themselves
   from whichever category the article is filed under. Nobody
   picks a colour by hand, ever.
   ------------------------------------------------------------ */
/* --ox / --oy are the field's OWN light source, and the hover bloom rebuilds
   itself at that point rather than holding a second copy of the palette. On
   the homepage prototype these rode on the .g-* classes; here the cover is
   coloured by the post's category class instead, so the tokens belong on
   these four rules. Without them var(--ox) is undefined, the bloom's gradient
   is invalid, and nothing happens on hover - which is exactly what shipped in
   0.7.0. Added 18 Sep 2026. */
.category-growth-strategy  .cover{--ox:28%;--oy:22%;background:radial-gradient(125% 115% at 28% 22%, #0F7F5F 0%, #061F1A 100%)}
.category-martech-tools    .cover{--ox:72%;--oy:22%;background:radial-gradient(125% 115% at 72% 22%, #11738D 0%, #061A24 100%)}
.category-sales-operations .cover{--ox:28%;--oy:78%;background:radial-gradient(125% 115% at 28% 78%, #21529F 0%, #0A1128 100%)}
.category-ai-automation    .cover{--ox:72%;--oy:78%;background:radial-gradient(125% 115% at 72% 78%, #4F3792 0%, #120C24 100%)}

.category-growth-strategy  .card-cat{color:#007354}
.category-martech-tools    .card-cat{color:#0E6E85}
.category-sales-operations .card-cat{color:#0B63C5}
.category-ai-automation    .card-cat{color:#6B4BA8}

.category-growth-strategy  .card:hover h3 a{color:#007354}
.category-martech-tools    .card:hover h3 a{color:#0E6E85}
.category-sales-operations .card:hover h3 a{color:#0B63C5}
.category-ai-automation    .card:hover h3 a{color:#6B4BA8}

/* ------------------------------------------------------------
   THE COVER IS NOT A PICTURE
   ------------------------------------------------------------
   The nine prototypes never used an image here. A cover is the
   category's own gradient, the house grain over it, and the
   headline in white -- which is why the cards above resolve
   their colour from a class and nothing else. So the card cover
   is a real element that always exists, not a featured-image
   block that renders nothing when no image is set. That was why
   covers were missing site-wide.

   A featured image, if one is ever set on a post, layers
   underneath and fills the same frame. Nothing has to change
   for that to work, and nothing breaks while none are set.
   ------------------------------------------------------------ */
.cover{min-height:0}
.cover > *{margin-block-start:0;margin-block-end:0}
.cover .wp-block-post-title{
  position:relative;z-index:1;margin:0;
  font-family:var(--sans);font-weight:800;font-size:17px;line-height:1.25;
  color:#fff;text-shadow:0 1px 14px rgba(0,0,0,.35);
}
.cover .wp-block-post-featured-image{position:absolute;inset:0;margin:0;z-index:0}
.cover img{display:block;width:100%;height:100%;object-fit:cover;border-radius:0}

.col{margin:0 auto;max-width:var(--measure)}


/* Scrolled state, driven by assets/js/header.js */
.site-header.solid{background:var(--surface);border-bottom-color:var(--rule)}

/* ============================================================
   BLOCK BRIDGE  --  part 3
   ============================================================ */

/* The navigation block's own colour rule outranks .nav a, so the header
   links have to be re-coloured at matching weight. Transparent state
   first, then the solid state after scroll. */
.site-header .nav .wp-block-navigation-item__content{color:#EAF4F0}
.site-header .nav .wp-block-navigation-item__content:hover{color:#fff}
.site-header.solid .nav .wp-block-navigation-item__content{color:var(--ink)}
.site-header.solid .nav .wp-block-navigation-item__content:hover{color:var(--accent)}
.nav .wp-block-navigation__responsive-container-open,
.nav .wp-block-navigation__responsive-container-close{color:inherit}

/* WordPress's own admin bar is fixed at the top of the screen, and so is
   the site header, so while logged in they sit on top of each other.
   Logged-out visitors never see this. */
body.admin-bar .site-header{top:32px}
@media screen and (max-width:782px){
  body.admin-bar .site-header{top:46px}
}

/* ============================================================
   HEADER  --  two states, revised 6 Sep 2026 on his call
   ============================================================

   SOLID IN EVERY STATE, revised 18 Sep 2026.

   The transparent treatment existed for one page and one hero: the
   header floated over the homepage's full-bleed green field, with
   white type on it. That hero is gone. The homepage hero is now a
   contained panel on a WHITE ground, and every other page uses
   Hero B, which is the light --panel band. Nothing on this site puts
   a dark field under the header any more, so the transparent state
   meant white type on white - which is what it looked like in
   production.

   The whole `body.home .site-header:not(.solid)` block is therefore
   deleted rather than retuned. Nothing sets .solid now either; the
   scroll class is .compact and it controls height only.

   Height: 74px open, 62px past 16px of scroll. The wordmark stays at
   26px in BOTH states - only the bar moves, so nothing in the type
   system shifts. Headers that scale their logo look like a bug for
   the first 200ms.
   ------------------------------------------------------------ */

:root{ --hdr-h:74px; --hdr-h-scrolled:62px; }

.hdr{ height:var(--hdr-h); transition:height .22s ease-in-out }
.site-header.compact .hdr{ height:var(--hdr-h-scrolled) }

/* Default state, every page: solid. */
.site-header{ background:var(--surface); border-bottom-color:var(--rule) }
.wordmark{ color:var(--ink) }
.wordmark:hover{ color:var(--accent) }
.site-header .nav .wp-block-navigation-item__content{ color:var(--ink) }
.site-header .nav .wp-block-navigation-item__content:hover{ color:var(--accent) }
.hdr-link{ color:var(--ink) }
.hdr-link:hover{ color:var(--accent) }
.hdr-cta{ background:var(--accent); color:#fff }
.hdr-cta:hover{ background:var(--deep); color:#fff }
.menu-toggle{ color:var(--ink) }

@media (prefers-reduced-motion:reduce){ .hdr{ transition:none } }

/* ============================================================
   404  --  lifted from the locked 404 prototype
   ============================================================
   Scoped under .e404 throughout, because the chips here are the
   light-ground variant and would otherwise overwrite the dark
   chips sitting on the homepage hero.
   ------------------------------------------------------------ */

.e404{
  background:var(--panel);border-bottom:1px solid var(--rule);
  padding:176px 0 96px;overflow:hidden;
}
.e404-in{display:flex;flex-direction:column;align-items:center;text-align:center;gap:22px}
.e404 .hero-sub{color:var(--mute)}

.e404 .chips{display:flex;flex-wrap:wrap;justify-content:center;gap:10px;margin-top:10px}
.e404 .chips a{
  position:relative;
  font-family:var(--sans);font-weight:700;font-size:12px;letter-spacing:1.2px;
  text-transform:uppercase;color:var(--ink);
  background:var(--surface);border:1px solid var(--rule);border-radius:50px;
  padding:11px 20px;transition:all .15s ease-in-out;
}
/* The pill hover buffer he found on this exact page: without it the 4px
   lift moves the pill out from under the cursor and hover flickers. */
.e404 .chips a::after{content:"";position:absolute;left:0;right:0;top:0;bottom:-6px}
.e404 .chips a:hover{border-color:var(--accent);color:var(--accent);transform:translateY(-4px)}

/* The numerals are made of the house material: category field plus grain,
   clipped to the text. This is why the page needs no illustration. */
.bignum{
  font-family:var(--serif);font-weight:500;
  font-size:clamp(160px,23vw,330px);line-height:.86;letter-spacing:-14px;
  margin:30px 0 0;padding-right:14px;
  color:var(--ink);
  user-select:none;
  background-image:var(--grain),radial-gradient(120% 150% at 30% 15%, #0F7F5F 0%, #00382A 55%, #061F1A 100%);
  background-size:108px,100% 100%;
  background-blend-mode:overlay,normal;
  -webkit-background-clip:text;background-clip:text;
  -webkit-text-fill-color:transparent;
}
@supports not ((-webkit-background-clip:text) or (background-clip:text)){
  .bignum{background-image:none;-webkit-text-fill-color:var(--ink)}
}
@media (max-width:768px){
  .e404{padding-top:128px}
  .bignum{letter-spacing:-7px}
}

/* /subscribed/ (0.9.8): the 404's shape with a confirmation in it. The grained
   numerals become a grained check mark, same material, masked from an SVG. */
.e-sub .hero-sub{max-width:60ch}
.e-sub .hero-sub strong{color:var(--ink);font-weight:700;white-space:nowrap}
.bigcheck{
  width:clamp(170px,22vw,300px);aspect-ratio:120/100;max-width:100%;margin:34px 0 0;
  background-image:var(--grain),radial-gradient(120% 150% at 30% 15%, #0F7F5F 0%, #00382A 55%, #061F1A 100%);
  background-size:108px,100% 100%;background-blend-mode:overlay,normal;
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 100'%3E%3Cpath d='M14 54 L44 82 L106 16' fill='none' stroke='%23000' stroke-width='19' stroke-linecap='square' stroke-linejoin='miter'/%3E%3C/svg%3E") center/contain no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 100'%3E%3Cpath d='M14 54 L44 82 L106 16' fill='none' stroke='%23000' stroke-width='19' stroke-linecap='square' stroke-linejoin='miter'/%3E%3C/svg%3E") center/contain no-repeat;
}
@media (max-width:480px){.e-sub .hero-sub strong{white-space:normal;overflow-wrap:anywhere}}

/* Empty states. Neither prototype drew one, because both were built with
   content in them. Same treatment in the article grid and the tools band so
   an unfinished site reads as deliberate rather than broken. */
.empty-state{
  margin:0;font-size:16px;line-height:1.6;color:var(--mute);
  grid-column:1 / -1;
}

/* ============================================================
   BLOCK BRIDGE  --  part 4: author, statement, FAQ
   ============================================================ */

/* These were <div> in the prototype and are paragraph blocks here, so they
   arrive with the browser's default paragraph margins. */
.author-mono{margin:0}
.author-links{margin:0}
.stmt p{margin:0}

/* ------------------------------------------------------------
   FAQ ITEMS  --  ready for when the questions exist
   ------------------------------------------------------------
   A question is a core Details block carrying the class faq-item.
   The prototype put the +/- circle in a <span> inside the summary;
   a Details block's summary can only hold plain text, so the circle
   is drawn as a pseudo-element instead. Identical result, and the
   question stays editable as ordinary text.
   ------------------------------------------------------------ */
.faq-item.wp-block-details{border-bottom:1px solid var(--rule);margin:0}
.faq-item.wp-block-details > summary{
  list-style:none;cursor:pointer;
  display:flex;align-items:center;justify-content:space-between;gap:24px;
  padding:24px 4px;
  font-family:var(--serif);font-weight:500;font-size:21px;line-height:1.35;letter-spacing:-.2px;
  color:var(--ink);transition:all .15s ease-in-out;
}
.faq-item.wp-block-details > summary:has(> h3){padding:0 4px 0 0}
.prose .faq-item.wp-block-details > summary > h3.faq-q,.faq-item.wp-block-details > summary > h3.faq-q{flex:1;min-width:0;display:block;margin:0;padding:24px 4px;font:inherit;letter-spacing:inherit;color:inherit}
.faq-item.wp-block-details > summary::-webkit-details-marker{display:none}
.faq-item.wp-block-details > summary::marker{content:""}
.faq-item.wp-block-details > summary:hover{color:var(--accent)}
.faq-item.wp-block-details > summary::after{
  content:"+";
  flex:none;width:26px;height:26px;border-radius:50%;
  border:1px solid var(--rule);
  display:flex;align-items:center;justify-content:center;
  font-family:var(--sans);font-weight:700;font-size:16px;line-height:1;
  color:var(--accent);transition:all .15s ease-in-out;
}
.faq-item.wp-block-details[open] > summary::after{
  content:"\2013";background:var(--accent);color:#fff;border-color:var(--accent);
}
.faq-item.wp-block-details .faq-answer{
  padding:0 60px 26px 4px;margin:0;font-size:17px;line-height:1.65;color:var(--mute);
}

/* ============================================================
   ABOUT PAGE  --  merged from the locked About prototype
   ============================================================
   133 rules in that prototype. 74 were already in the theme and
   were skipped. 19 looked like conflicts and every one of them was
   either already resolved by the header work or cosmetically
   identical. What is left is below, plus the Hero B split.
   ------------------------------------------------------------ */

/* HERO B: the panel band. Every destination page uses this; only the
   homepage gets the green field. Kept as a separate class so the two
   heroes can never overwrite each other again. */

.wordmark:hover{color:var(--accent)}
.band{background:var(--panel);border-top:1px solid var(--rule);border-bottom:1px solid var(--rule)}
.sec-head h2,.std-aside h2{font-family:var(--serif);font-weight:500;font-size:32px;line-height:1.22;letter-spacing:-.5px;margin:8px 0 0}
.mission .eyebrow{padding-left:28px}
.mission-grid{margin-top:22px;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:80px;align-items:start}
.statement{margin:0;border-left:2px solid var(--accent);padding-left:26px;font-family:var(--serif);font-weight:500;font-size:28px;line-height:1.34;letter-spacing:-.4px}
.mission-note{margin:8px 0 0;font-size:17px;line-height:1.65;color:var(--mute)}
.band{background:var(--panel);border-top:1px solid var(--rule);border-bottom:1px solid var(--rule)}
.cov .sec-head{text-align:center;margin-bottom:52px}
.cov .sec-head .sub{margin:10px auto 0}
.hubs{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}
.hub{display:flex;flex-direction:column;align-items:center;text-align:center;background:var(--surface);border:1px solid var(--rule);border-radius:8px;padding:30px 26px 32px;transition:all .15s ease-in-out}
.hub .tile{width:52px;height:52px;border-radius:8px;position:relative;overflow:hidden;flex:none}
.hub .tile::after{content:"";position:absolute;inset:0;background-image:var(--grain);background-size:108px;mix-blend-mode:overlay;opacity:.7;pointer-events:none}
.hub h3{font-family:var(--serif);font-weight:500;font-size:20px;line-height:1.3;letter-spacing:-.2px;margin:20px 0 0;transition:all .15s ease-in-out}
.hub p{margin:12px 0 0;font-size:15px;line-height:1.6;color:var(--mute)}
.hub:hover{transform:translateY(-4px);border-color:var(--tk)}
.hub:hover h3{color:var(--tk)}
.cov-act{display:flex;justify-content:center;margin-top:44px}
.f-growth{background:radial-gradient(125% 115% at 28% 22%, #0F7F5F 0%, #061F1A 100%)}
.f-martech{background:radial-gradient(125% 115% at 72% 22%, #11738D 0%, #061A24 100%)}
.f-salesops{background:radial-gradient(125% 115% at 28% 78%, #21529F 0%, #0A1128 100%)}
.f-ai{background:radial-gradient(125% 115% at 72% 78%, #4F3792 0%, #120C24 100%)}
.std-split{display:grid;grid-template-columns:minmax(0,340px) minmax(0,1fr);gap:64px;align-items:start}
.std-aside h2{margin:8px 0 14px}
.std-aside p:not(.eyebrow){margin:0;font-size:16px;line-height:1.6;color:var(--mute)}
.rule-list{border-top:1px solid var(--rule)}
.rule-row{border-bottom:1px solid var(--rule);padding:24px 4px;display:grid;grid-template-columns:38px minmax(0,1fr)}
.rule-row .n{font-family:var(--mono);font-size:11px;letter-spacing:.5px;color:var(--accent);padding-top:9px}
.rule-row h3{font-family:var(--serif);font-weight:500;font-size:21px;line-height:1.35;letter-spacing:-.2px;margin:0}
.rule-row p{margin:9px 0 0;font-size:17px;line-height:1.65;color:var(--mute);padding-right:60px}
.rule-row:last-child{border-bottom:0}
.std-sec{padding-bottom:48px}
.who-sec{padding-top:48px}

@media (max-width:1080px){
  .hubs{grid-template-columns:repeat(2,minmax(0,1fr));gap:32px 16px}
}

@media (max-width:900px){
  .mission-grid{grid-template-columns:1fr;gap:28px}
  .mission-note{padding-left:28px;margin-top:0}
  .std-split{grid-template-columns:1fr;gap:32px}
  .rule-row p{padding-right:0}
}

@media (max-width:768px){
  .sec-head h2,.author-card h2,.signup h2{font-size:26px;letter-spacing:-.3px}
  .hubs{grid-template-columns:1fr;gap:32px}
}

/* Block bridge for the coverage hubs: the prototype wraps each hub in one
   <a>. Blocks cannot do that, so the heading link is stretched to cover the
   card instead, exactly as on the article cards. */
.hub{position:relative}
.hub h3 a{color:inherit;text-decoration:none}
.hub h3 a::after{content:"";position:absolute;inset:0;z-index:2}
.mission-note + .mission-note{margin-top:18px}

/* ============================================================
   ABOUT FIXES  --  6 Sep 2026
   ============================================================ */

/* 1. The About prototype declares .btn-ghost TWICE: once for its
   typography and once for its colours. Only the colour half made it
   into the theme, so the ghost button lost its font. This is the half
   that was missing. */
.btn-ghost{
  border-radius:3px;display:inline-block;
  font-family:var(--sans);font-weight:700;font-size:14px;letter-spacing:.2px;
  transition:all .15s ease-in-out;
}

/* 2. The homepage .sec-head is a flex row: heading left, link right.
   The About coverage head is a centred stack. The prototype handled
   this by declaring a plain .sec-head with no flex at all; here the
   flex version is the base, so the coverage one has to switch it off
   explicitly rather than just adding text-align. */
.cov .sec-head{display:block;text-align:center;margin-bottom:52px}
.cov .sec-head .sub{margin:10px auto 0}

/* 3. Hero B is no longer given the .hero class, so the section that
   follows it needs the same tightened top padding .hero + section gives. */

/* Defensive: the About page was inserted before Hero B stopped carrying the
   .hero class, so that markup is already saved inside the page and a change
   to the pattern file cannot reach it. Same specificity as .hero h1 and it
   comes later, so it wins either way and no page has to be rebuilt. */

/* ============================================================
   HERO B  --  the single authoritative definition
   ============================================================
   Hero B no longer carries the .hero class, but pages published
   before that change still have the old markup saved inside them,
   and a pattern file cannot reach content already in the database.
   So every rule .hero applies is neutralised here at matching
   specificity. Later in the file, so it wins either way, and no
   published page ever has to be rebuilt.

   The four rules that leak: the green field, the grain overlay,
   the mint eyebrow, and the white headline.
   ------------------------------------------------------------ */
.hero-b{
  position:relative;overflow:hidden;
  background:var(--panel);
  border-bottom:1px solid var(--rule);
}
.hero-b::after{content:none;display:none}
.hero-b .eyebrow{color:var(--accent)}
.hero-b h1{color:var(--ink)}
.hero-b .hero-sub{color:var(--mute)}
.hero-b + section{padding-top:80px}

/* ============================================================
   AUTHOR ARCHIVE  --  merged from the locked author prototype
   ============================================================
   The author hero is Hero B's panel ground with a two-column
   inner layout: copy left, monogram right. Scoped under
   .hero-author so it cannot touch the centred Hero B used by
   every other destination page.

   Deliberately NOT merged: the prototype's floating .build
   widget, which was the live option toggle used while the page
   was being designed. It is a design tool, not part of the page.
   ------------------------------------------------------------ */

.hero-author{padding:144px 0 88px}
.hero-author .hero-in{
  display:grid;grid-template-columns:minmax(0,1fr) 300px;
  gap:64px;align-items:stretch;
  padding:0;text-align:left;
}
.hero-author h1{max-width:none}
.hero-copy{display:flex;flex-direction:column;gap:16px}
.hero-role{
  font-family:var(--sans);font-weight:700;font-size:13px;letter-spacing:1.2px;
  text-transform:uppercase;color:var(--mute);margin:0;
}
.hero-author .bio{margin:0;font-size:18px;line-height:1.65;max-width:62ch}
.hero-links{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end;margin-top:auto}

/* The monogram. House material, not a photo. His decision, permanent. */
.mono{
  width:300px;min-height:330px;border-radius:8px;position:relative;overflow:hidden;
  display:flex;align-items:center;justify-content:center;justify-self:end;
  background:radial-gradient(125% 115% at 28% 22%, #0F7F5F 0%, #061F1A 100%);
}
.mono::after{
  content:"";position:absolute;inset:0;background-image:var(--grain);
  background-size:108px;mix-blend-mode:overlay;opacity:.7;pointer-events:none;
}
.mono b{
  position:relative;z-index:1;font-family:var(--serif);font-weight:500;
  font-size:158px;line-height:1;letter-spacing:-5px;color:#fff;
}

/* ------------------------------------------------------------
   PAGINATION
   The prototype hand-wrote <a class="on"> and <span class="gap">.
   WordPress emits .page-numbers, .current and .dots inside its own
   nav, so the design is re-attached to those class names here.
   ------------------------------------------------------------ */
.pager{
  margin-top:72px;
  display:flex;align-items:center;justify-content:center;gap:8px;position:relative;
}
.pager .wp-block-query-pagination-numbers{
  display:flex;align-items:center;gap:8px;
}
.pager .page-numbers{
  min-width:38px;height:38px;border-radius:50px;display:inline-flex;align-items:center;
  justify-content:center;font-family:var(--sans);font-weight:700;font-size:14px;
  letter-spacing:.2px;color:var(--ink);padding:0 12px;transition:all .15s ease-in-out;
  text-decoration:none;
}
.pager a.page-numbers:hover{background:var(--tint);color:var(--deep)}
.pager .page-numbers.current{background:var(--accent);color:#fff}
.pager .page-numbers.dots{color:var(--mute);pointer-events:none;background:transparent}
.pager .wp-block-query-pagination-next,
.pager .wp-block-query-pagination-previous{
  position:absolute;right:0;
  font-family:var(--sans);font-weight:700;font-size:14px;letter-spacing:.2px;
  color:var(--accent);border-radius:0;height:auto;min-width:0;padding:0;
  text-decoration:none;
}
.pager .wp-block-query-pagination-previous{right:auto;left:0}
.pager .wp-block-query-pagination-next:hover,
.pager .wp-block-query-pagination-previous:hover{background:transparent;color:var(--deep)}

/* The empty state. In the prototype this was toggled with body.empty;
   here WordPress's own no-results block supplies it, so it is simply
   visible whenever it renders. */
.no-posts{font-size:18px;line-height:1.65;color:var(--mute);max-width:62ch;margin:0}

@media (max-width:1080px){
  .hero-author .hero-in{gap:44px;grid-template-columns:minmax(0,1fr) 240px}
  .mono{width:240px}
  .mono b{font-size:126px}
}
@media (max-width:900px){
  .hero-author{padding:132px 0 64px}
  .hero-author .hero-in{align-items:start;gap:32px;grid-template-columns:1fr}
  .hero-links{margin-top:6px}
  .mono{width:220px;height:260px;min-height:0;justify-self:start;order:-1}
  .mono b{font-size:116px}
  .hero-author h1{font-size:40px;letter-spacing:-1px}
}
@media (max-width:768px){
  .hero-author{padding:116px 0 56px}
  .hero-author h1{font-size:34px;letter-spacing:-.8px}
  .pager{flex-wrap:wrap;gap:6px;margin-top:52px}
  .pager .wp-block-query-pagination-next,
  .pager .wp-block-query-pagination-previous{
    position:static;width:100%;text-align:center;margin-top:14px;
  }
}

/* ============================================================
   CATEGORY ROW  --  from the locked blog index prototype
   ============================================================
   Shared by the blog index and all four category archives.

   The prototype hand-wrote class="on" for the active item. Here
   the active state is driven off WordPress's own body class, so
   one markup block serves five pages and nothing has to know
   which page it is on. Same trick as the card colours.
   ------------------------------------------------------------ */
.catrow{display:flex;gap:28px;flex-wrap:wrap;align-items:center;margin:0 0 44px}
.catrow a{
  font-family:var(--sans);font-weight:700;font-size:12px;letter-spacing:1.2px;
  text-transform:uppercase;color:var(--mute);padding-bottom:7px;
  border-bottom:2px solid transparent;transition:all .15s ease-in-out;
}
.catrow a:hover{color:var(--ink)}
.catrow a.c-growth:hover  {color:#007354;border-bottom-color:#007354}
.catrow a.c-martech:hover {color:#0E6E85;border-bottom-color:#0E6E85}
.catrow a.c-salesops:hover{color:#0B63C5;border-bottom-color:#0B63C5}
.catrow a.c-ai:hover      {color:#6B4BA8;border-bottom-color:#6B4BA8}

/* Active state, resolved from the body class WordPress already sets. */
body.blog .catrow a.all,
body.home .catrow a.all{color:var(--ink);border-bottom-color:var(--ink)}
body.category-growth-strategy  .catrow a.c-growth  {color:#007354;border-bottom-color:#007354}
body.category-martech-tools    .catrow a.c-martech {color:#0E6E85;border-bottom-color:#0E6E85}
body.category-sales-operations .catrow a.c-salesops{color:#0B63C5;border-bottom-color:#0B63C5}
body.category-ai-automation    .catrow a.c-ai      {color:#6B4BA8;border-bottom-color:#6B4BA8}

@media (max-width:900px){ .catrow{gap:18px} }

/* ============================================================
   TOOLS HUB  --  from the locked tools hub prototype
   ============================================================
   The homepage tools band and the hub share class names but are
   two arrangements: the band is a loose auto-fitting preview,
   the hub is a strict two-column list with a rule under each row.
   Scoped under .tools-hub so the band on the homepage is
   untouched. This was one of the 37 conflicts found across the
   nine prototypes, and it is a variant rather than a clash.
   ------------------------------------------------------------ */
.tools-hub .tgrid{grid-template-columns:repeat(2,minmax(0,1fr));gap:40px 64px}
.tools-hub .titem{
  gap:22px;padding-bottom:34px;border-bottom:1px solid var(--rule);
}
.tools-hub .titem:hover{border-bottom-color:var(--tk)}
.tools-hub .titem h3{font-size:21px;line-height:1.32;letter-spacing:-.25px}
.tools-hub .titem .tkind{margin-top:auto;padding-top:16px}
.tools-hub .titem .tbody{display:flex;flex-direction:column;height:100%}
.tools-hub .titem h3,.tools-hub .titem p{flex:none}

/* grid-column matters: .tgrid is a two-column grid, so without it the
   empty state gets squeezed into the left half and reads as broken.
   Same fix the article grid's empty state already had. */
.no-tools{
  font-size:18px;line-height:1.65;color:var(--mute);max-width:62ch;margin:0;
  grid-column:1 / -1;
}

@media (max-width:900px){
  .tools-hub .tgrid{grid-template-columns:1fr;gap:32px}
}

/* The category archive eyebrow takes that category's mark colour,
   resolved from the body class. Specified in the URL structure doc. */
body.category-growth-strategy  .hero-b .eyebrow{color:#007354}
body.category-martech-tools    .hero-b .eyebrow{color:#0E6E85}
body.category-sales-operations .hero-b .eyebrow{color:#0B63C5}
body.category-ai-automation    .hero-b .eyebrow{color:#6B4BA8}

/* term-description renders a wrapper div; keep it on the hero sub measure. */
.hero-in .wp-block-term-description{margin:0}
.hero-in .wp-block-term-description p{margin:0}

/* The tool row's heading link stretches to cover the row, the same way the
   article card and the coverage hub do, because blocks cannot wrap a whole
   grid in one anchor. */
.titem{position:relative}
.titem h3 a{color:inherit;text-decoration:none}
.titem h3 a::after{content:"";position:absolute;inset:0;z-index:2}
.titem h3{margin:0}
.titem .tbody > p{margin:11px 0 0}

/* ============================================================
   ARTICLE PAGE  --  merged from the locked article prototype
   ============================================================
   The author card is smaller on an article than it is on the
   homepage or the About page, and the prose rules are the full
   set rather than the interim ones. Both are scoped under
   .article so the other pages keep the version they had.
   ------------------------------------------------------------ */

.article{padding:144px 0 0}
.media{max-width:var(--media);margin:0 auto}
.art-head{display:flex;flex-direction:column;gap:20px}
.art-head .card-cat{margin:0}
.byline-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap;padding-top:22px;border-top:1px solid var(--rule)}
.avatar-lg{width:44px;height:44px;border-radius:50%;flex:none;background:var(--tint);border:1px solid var(--rule);display:flex;align-items:center;justify-content:center;font-family:var(--serif);font-weight:500;font-size:19px;color:var(--accent)}
.byline-stack{display:flex;flex-direction:column;gap:2px}
.byline-name{font-family:var(--sans);font-weight:700;font-size:15px;letter-spacing:.2px}
.byline-role{font-family:var(--sans);font-weight:700;font-size:12px;letter-spacing:1.2px;text-transform:uppercase;color:var(--mute)}
.byline-dates{margin-left:auto;display:flex;flex-direction:column;gap:2px;text-align:right}
.art-grid{display:grid;grid-template-columns:minmax(0,1fr) var(--rail);column-gap:80px;row-gap:0;align-items:start}
.art-grid > *{grid-column:1;min-width:0}
.art-head{max-width:var(--measure);margin:0 auto;width:100%}
html{scroll-behavior:smooth}
.prose h2,.prose h3,.faq-inline h2{scroll-margin-top:112px}
.toc{grid-column:2;grid-row:2 / span 20;position:sticky;top:112px;align-self:start}
.toc summary{list-style:none;cursor:default;display:flex;align-items:center;justify-content:space-between;gap:12px;font-family:var(--sans);font-weight:800;font-size:12px;letter-spacing:.9px;text-transform:uppercase;color:var(--ink);padding-bottom:12px;margin-bottom:18px;border-bottom:1px solid var(--rule)}
.toc summary::-webkit-details-marker{display:none}
.toc nav ul{list-style:none;margin:0;padding:0 0 0 18px;position:relative;border-left:1px solid var(--rule);display:flex;flex-direction:column;gap:14px}
.toc li{padding:0}
.toc li.sub{padding-left:16px}
.toc a{font-family:var(--sans);font-weight:400;font-size:15px;line-height:1.45;color:var(--mute);display:block}
.toc li.sub a{font-size:14px}
.toc a:hover{color:var(--accent)}
.toc a.on{color:var(--ink);font-weight:700}
.toc-bar{position:absolute;left:-1px;top:0;width:2px;height:24px;background:var(--accent);border-radius:2px;transition:transform .28s cubic-bezier(.33,1,.68,1), height .28s cubic-bezier(.33,1,.68,1)}
.art-cover{aspect-ratio:16/10;border-radius:8px;position:relative;overflow:hidden;max-width:var(--media);width:100%;margin:44px auto 0;display:flex;align-items:flex-end;padding:26px}
.art-cover::after{content:"";position:absolute;inset:0;background-image:var(--grain);background-size:108px;mix-blend-mode:overlay;opacity:.7;pointer-events:none}
.art-cover b{position:relative;z-index:1;font-family:var(--sans);font-weight:800;font-size:24px;line-height:1.25;letter-spacing:-.1px;text-wrap:balance;color:#fff;text-shadow:0 1px 14px rgba(0,0,0,.35)}
.tldr{max-width:var(--measure);width:100%;margin:44px auto 0;background:var(--panel);border:1px solid var(--rule);border-radius:8px;padding:30px 34px;display:flex;flex-direction:column;gap:18px}
.tldr .eyebrow{margin:0}
.tldr-lead{margin:0;font-size:18px;line-height:1.55;font-weight:500;color:var(--ink);max-width:60ch}
.tldr ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:11px}
.tldr li{position:relative;padding-left:20px;font-size:16px;line-height:1.6;color:var(--mute)}
.tldr li::before{content:"";position:absolute;left:0;top:10px;width:6px;height:6px;border-radius:50%;background:var(--accent)}
.prose{padding:56px 0 0}
.prose p{margin:0 0 24px}
.prose h2,.faq-inline h2{font-family:var(--serif);font-weight:500;font-size:32px;line-height:1.22;letter-spacing:-.5px;margin:52px 0 18px;text-wrap:balance}
.article .prose h3,.legal .prose h3{font-family:var(--serif);font-weight:500;font-size:21px;line-height:1.35;letter-spacing:-.2px;margin:38px 0 12px}
.article .prose a,.legal .prose a{color:var(--accent);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:#9BC6B7}
.prose a:hover{color:var(--deep);text-decoration-color:var(--deep)}
.article .prose ul,.article .prose ol,.legal .prose ul,.legal .prose ol{margin:0 0 24px;padding-left:24px;display:flex;flex-direction:column;gap:10px}
.article .prose li,.legal .prose li{padding-left:4px}
.prose li::marker{color:var(--accent)}
.prose ol li::marker{font-family:var(--mono);font-size:15px}
.pull{margin:40px 0;padding:4px 0 4px 26px;border-left:2px solid var(--accent);font-family:var(--serif);font-weight:400;font-size:24px;line-height:34px;letter-spacing:-.2px;color:var(--ink)}
.pull p{margin:0}
figure{margin:44px auto;max-width:var(--media)}
.shot{border:1px solid var(--rule);border-radius:8px;background:var(--panel);aspect-ratio:16/9;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px}
.shot span{font-family:var(--mono);font-size:11px;letter-spacing:.5px;color:var(--mute);text-align:center;padding:0 24px}
figcaption{font-family:var(--mono);font-size:11px;line-height:1.6;letter-spacing:.5px;color:var(--mute);margin-top:12px}
.tablewrap{max-width:100%;width:100%;margin:44px auto;overflow-x:auto}
table{border-collapse:collapse;width:100%;min-width:520px}
th,td{text-align:left;padding:14px 24px 14px 0;border-bottom:1px solid var(--rule);vertical-align:top;font-size:16px;line-height:1.55}
th{font-family:var(--sans);font-weight:800;font-size:12px;letter-spacing:.9px;text-transform:uppercase;border-bottom:1px solid var(--ink);padding-bottom:12px}
td:first-child{font-weight:700}
.sources{max-width:var(--measure);margin:0 auto;padding:8px 0 0}
.sources ol{padding-left:0;list-style:none;gap:14px}
.sources li{padding-left:0;font-size:15px;line-height:1.6;color:var(--mute);display:flex;gap:0}
.sources li a{color:var(--accent)}
.sources .n{font-family:var(--mono);font-size:11px;letter-spacing:.5px;color:var(--mute);flex:none;width:30px;padding-top:5px}
.faq-inline{padding:8px 0 0}
.author-wrap{padding:64px 0 0}
.article .author-card{background:var(--panel);border:1px solid var(--rule);border-radius:8px;border-top:2px solid var(--accent);padding:36px;display:grid;grid-template-columns:120px minmax(0,1fr);gap:32px;align-items:start;max-width:var(--media);margin:0 auto}
.article .author-mono{width:120px;height:142px;border-radius:8px;position:relative;overflow:hidden;display:flex;align-items:center;justify-content:center;background:radial-gradient(125% 115% at 28% 22%, #0F7F5F 0%, #061F1A 100%)}
.article .author-mono b{position:relative;z-index:1;font-family:var(--serif);font-weight:500;font-size:66px;line-height:1;letter-spacing:-2px;color:#fff}
.article .author-body{display:flex;flex-direction:column;gap:14px}
.article .author-card h2{font-family:var(--serif);font-weight:500;font-size:26px;line-height:1.22;letter-spacing:-.4px;margin:0}
.prefsrc{max-width:var(--media);width:100%;margin:60px auto 0;border-left:2px solid var(--accent);padding:4px 0 4px 26px;display:flex;justify-content:space-between;align-items:center;gap:32px}
.prefsrc .ps-lead{font-family:var(--serif);font-weight:500;font-size:21px;line-height:1.35;letter-spacing:-.2px;color:var(--ink);margin:0 0 8px;text-wrap:balance}
.prefsrc .ps-note{margin:0;font-size:15px;line-height:1.6;color:var(--mute)}
.ps-add{flex:none;display:inline-flex;align-items:center;gap:11px;background:var(--surface);border:1px solid var(--rule);border-radius:3px;padding:12px 20px;font-family:var(--sans);font-weight:700;font-size:14px;letter-spacing:.2px;color:var(--ink);transition:all .15s ease-in-out}
.ps-add svg{width:17px;height:17px;flex:none;display:block}
.ps-add:hover{background:var(--tint);border-color:var(--accent);color:var(--deep)}
.byline-id{display:flex;align-items:center;gap:14px;color:inherit}
.byline-id:hover .byline-name{color:var(--accent)}

@media (prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  .toc-bar{transition:none}
}

@media (min-width:1000px){
  .prose figure,.prose .tablewrap{width:var(--media);max-width:var(--media);margin-left:calc((100% - var(--media))/2)}
}

@media (min-width:1001px){
  .toc summary{pointer-events:none}
  .toc summary .plus{display:none}
}

@media (max-width:1000px){
  .art-grid{grid-template-columns:minmax(0,1fr)}
  .art-grid > *{grid-column:1}
  .toc,.art-grid > .toc{grid-column:1;grid-row:auto;position:static;margin:44px auto 0;max-width:var(--measure);width:100%}
  .toc summary{cursor:pointer;font-size:13px}
  .toc summary .plus{flex:none;width:26px;height:26px;border-radius:50%;border:1px solid var(--rule);display:flex;align-items:center;justify-content:center;font-family:var(--sans);font-weight:700;font-size:16px;color:var(--accent);line-height:1}
  .toc[open] summary .plus{background:var(--accent);color:#fff;border-color:var(--accent)}
  .toc[open] summary .plus span{display:none}
  .toc[open] summary .plus::after{content:"\2013"}
}

@media (max-width:900px){
  .article .author-card{grid-template-columns:1fr;gap:24px;padding:28px}
}

@media (max-width:768px){
  .article{padding-top:116px}
  .prose h2,.faq-inline h2,.sec-head h2,.signup h2{font-size:26px;letter-spacing:-.3px}
  .pull{font-size:20px;line-height:29px}
  .byline-dates{margin-left:0;text-align:left;width:100%}
  .tldr{padding:24px 22px;gap:15px}
  .tldr-lead{font-size:17px}
  .tldr li{font-size:15px}
  .prefsrc{flex-direction:column;align-items:flex-start;gap:20px;padding-left:20px;margin-top:44px}
  .prefsrc .ps-lead{font-size:19px}
}

/* ------------------------------------------------------------
   ARTICLE BLOCK BRIDGE
   ------------------------------------------------------------ */

/* The cover material comes from the post's category, exactly like the
   card covers, so nobody picks a colour by hand. */
body.category-growth-strategy  .art-cover{background:radial-gradient(125% 115% at 28% 22%, #0F7F5F 0%, #061F1A 100%)}
body.category-martech-tools    .art-cover{background:radial-gradient(125% 115% at 72% 22%, #11738D 0%, #061A24 100%)}
body.category-sales-operations .art-cover{background:radial-gradient(125% 115% at 28% 78%, #21529F 0%, #0A1128 100%)}
body.category-ai-automation    .art-cover{background:radial-gradient(125% 115% at 72% 78%, #4F3792 0%, #120C24 100%)}
body.category-growth-strategy  .art-head .card-cat{color:#007354}
body.category-martech-tools    .art-head .card-cat{color:#0E6E85}
body.category-sales-operations .art-head .card-cat{color:#0B63C5}
body.category-ai-automation    .art-head .card-cat{color:#6B4BA8}

/* The cover carries the title as a plain paragraph, not a second heading. */
.art-cover .wp-block-post-title{
  position:relative;z-index:1;margin:0;
  font-family:var(--sans);font-weight:800;font-size:26px;line-height:1.2;
  color:#fff;text-shadow:0 1px 14px rgba(0,0,0,.35);max-width:22ch;
}
.art-cover .wp-block-post-featured-image{position:absolute;inset:0;margin:0;z-index:0}
.art-cover .wp-block-post-featured-image img{width:100%;height:100%;object-fit:cover}

/* post-content becomes the prose column. */
.wp-block-post-content.prose{max-width:var(--measure);margin:0 auto;width:100%} /* width:100% (0.10.2): without it the column sized to its widest child, so a 520px table pushed articles sideways on phones; the table now scrolls inside its own box */
.article .wp-block-post-terms{display:block}
.article .wp-block-post-terms a{color:inherit;text-decoration:none}
.byline-row .wp-block-post-date{font-family:var(--mono);font-size:11px;letter-spacing:.5px;color:var(--mute)}

/* Blocks he inserts into the body keep the design's measure. */
.prose .tldr,.prose .sources,.prose .faq-inline{max-width:100%}

/* The card byline carries the author initial, as in the locked design.
   One author, so the letter is fixed rather than derived. */
.byline .avatar{margin:0}

/* ------------------------------------------------------------
   TOOLS AS CONTENT
   The tile gradient and the hover colour come from the tool's
   category, resolved from the class WordPress puts on each item
   in the loop. Same mechanism as the article cards.
   ------------------------------------------------------------ */
/* Not scoped to .tools-hub: the homepage band runs the same loop, so a
   tool's tile takes its category colour in both places from one rule. */
.wp-block-post-template.tgrid{list-style:none;margin:0;padding:0}
.category-growth-strategy  .ttile{background:radial-gradient(125% 115% at 28% 22%, #0F7F5F 0%, #061F1A 100%)}
.category-martech-tools    .ttile{background:radial-gradient(125% 115% at 72% 22%, #11738D 0%, #061A24 100%)}
.category-sales-operations .ttile{background:radial-gradient(125% 115% at 28% 78%, #21529F 0%, #0A1128 100%)}
.category-ai-automation    .ttile{background:radial-gradient(125% 115% at 72% 78%, #4F3792 0%, #120C24 100%)}
.category-growth-strategy  {--tk:#007354}
.category-martech-tools    {--tk:#0E6E85}
.category-sales-operations {--tk:#0B63C5}
.category-ai-automation    {--tk:#6B4BA8}
.tkind{display:block}
.tkind a{color:inherit;text-decoration:none}
.titem .wp-block-post-excerpt{margin:0}
.titem .wp-block-post-excerpt__excerpt{margin:11px 0 0;font-size:15px;line-height:1.6;color:var(--mute)}
.titem > *{margin-block-start:0;margin-block-end:0}
.tbody > *{margin-block-start:0}

/* With no tools published the homepage band would be an intro column
   beside empty space, so the whole band steps out. */
.tools-band:has(.wp-block-query-no-results){display:none}
.tools-band .wp-block-query{margin:0;min-width:0}

/* ------------------------------------------------------------
   ONE TOOL'S OWN PAGE
   The page shape only. What a tool DOES on it -- the inputs and
   the arithmetic -- is still an open question and deliberately
   not decided here. Built from locked components: the Hero B
   head, then the article measure for the body.
   ------------------------------------------------------------ */
.tool-single{padding:80px 0 0}
.tool-single .prose{padding:0}
.hero-b .wp-block-post-excerpt__excerpt{margin:0}

/* Core blocks that stand in for the prototype's hand-written markup. */
.prose .wp-block-table{max-width:none;margin:34px 0;overflow-x:auto}
.prose .wp-block-table table{margin:0}
.prose .wp-block-image{margin:34px 0}
.prose .wp-block-image figcaption{margin-top:12px}
.prose .wp-block-quote{margin:0}

/* ------------------------------------------------------------
   ARTICLE FIXES  --  2026-09-06
   Everything here corrects a difference between the live page
   and the locked article prototype. Each rule says which.
   ------------------------------------------------------------ */

/* 0. The article column. Every group child also carries WordPress's
   24px block gap, which stacked on top of the margins the design
   already sets. Clearing it is right, but the line that clears it also
   clears the design's own margins, so those are restated straight
   after -- otherwise the cover and the preferred-source block end up
   flush against what precedes them. */
.art-grid > *,
.art-head > *{margin-block-start:0;margin-block-end:0}

.art-grid > .art-cover{margin:44px auto 0}
.art-grid > .prefsrc{margin:60px auto 0}

/* 0b. The article title. The global h1 is the homepage hero's, 54px and
   capped at 620px. The article prototype sets its own: 44px, and free to
   wrap at the measure, which is why a long headline breaks into two
   balanced lines instead of running short. */
.art-head h1,
.art-head .wp-block-post-title{font-size:44px;line-height:1.14;letter-spacing:-1.2px;max-width:none}

/* 1. The byline row. WordPress puts a 24px block gap between the
   children of every group, which pushed the name off the role and
   the dates onto their own line. The design's spacing is the flex
   gap, so the block gap is switched off inside the byline only. */
.byline-row > *,
.byline-id > *,
.byline-stack > *,
.byline-dates > *{margin-block-start:0;margin-block-end:0}
.byline-stack .wp-block-post-author-name{margin:0}
.byline-name a{color:inherit}
.byline-name a:hover{color:var(--accent)}

/* 2. TL;DR pasted into the post body. The prose list rules are more
   specific than the box's own, so the dot ended up under the text
   and the box had no gap after it. Both restored to the design. */
.article .prose .tldr{margin:44px auto}
/* The design puts the box above the article body, so it carries a top
   margin only. Pasted as the body's FIRST block it inherited the prose
   column's own 56px top padding as well, which read as a hole under the
   cover. The design's two gaps -- 44px above the box, 56px below it --
   are restored exactly. */
.article .prose:has(> .tldr:first-child){padding-top:44px}
.article .prose > .tldr:first-child{margin-top:0;margin-bottom:56px}
.article .prose .tldr ul{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:11px}
.article .prose .tldr li{padding-left:20px;font-size:16px;line-height:1.6;color:var(--mute)}
.article .prose > *:last-child{margin-bottom:0}

/* 3. Tables. The core table block draws a 1px box round every cell,
   which outranks the design's rules. The design is rules under rows
   only, an uppercase head with a dark rule, and a bold first column. */
.prose .wp-block-table{margin:44px auto;max-width:100%;width:100%;overflow-x:auto}
.prose .wp-block-table table{border-collapse:collapse;width:100%;min-width:520px;margin:0;border:0}
.prose .wp-block-table th,
.prose .wp-block-table td{
  border:0;border-bottom:1px solid var(--rule);background:none;
  text-align:left;padding:14px 24px 14px 0;vertical-align:top;
  font-size:16px;line-height:1.55;word-break:normal;
}
.prose .wp-block-table th{
  font-family:var(--sans);font-weight:800;font-size:12px;letter-spacing:.9px;text-transform:uppercase;
  border-bottom:1px solid var(--ink);padding-bottom:12px;
}
.prose .wp-block-table td:first-child{font-weight:700}
/* Core draws a 3px rule under thead on top of the header cells' own
   1px. The design is a single hairline in the ink colour. */
.prose .wp-block-table thead{border-bottom:0}
.prose .wp-block-table tfoot{border-top:0}
.prose .wp-block-table tr:last-child td{border-bottom:0}
.prose .wp-block-table.is-style-stripes{background:none;border:0}
.prose .wp-block-table.is-style-stripes tbody tr:nth-child(odd){background:none}
.prose .wp-block-table figcaption{
  font-family:var(--mono);font-size:11px;line-height:1.6;letter-spacing:.5px;
  color:var(--mute);margin-top:12px;text-align:left;
}

/* Tables sit at the width of the text column on every page (0.11.0, Jakub):
   a table wider than the paragraphs around it is harder to read. Wide tables
   scroll inside their own box instead of breaking out of the column. */

/* 4. Related articles. The section hides itself when the post has no
   stablemates in its category, so a thin site never shows an empty band. */
.related-band:has(.wp-block-query-no-results){display:none}
.related-band .wp-block-query{margin:0}

/* 5. Mobile, last in the file so it outranks the desktop rules above
   rather than being outranked by them. */
@media (max-width:768px){
  .art-head h1,
  .art-head .wp-block-post-title{font-size:30px;letter-spacing:-.7px}
  .art-grid > .prefsrc{margin-top:44px}
  .article .prose:has(> .tldr:first-child){padding-top:32px}
  .article .prose > .tldr:first-child{margin-bottom:40px}
}

/* ============================================================
   CONTACT PAGE  --  merged from the locked contact prototype
   ============================================================
   Two sections and nothing else: Hero B, then the split. Contact
   is a destination, not a document, so it keeps the hero.

   The split is the site's existing 340 + 1fr, the same geometry
   as the homepage tools band and the About standards section.
   The narrow column is on the left everywhere on this site, so
   it is on the left here.
   ------------------------------------------------------------ */

/* REVISED 7 Sep. The aside is gone. It held a two-working-day promise and
   a corrections commitment the site is not yet operating, then it held an
   address and a LinkedIn link, then just an address -- and a 340px column
   holding one address is not a column. So the split went with it.

   The form is now the page's single action, centred at the form's own
   measure, with the address closing it below a rule: findable by anyone
   who would rather write than fill in fields, and not competing with the
   form for attention. .c-split, .c-aside and .c-block were removed rather
   than left to rot; nothing else on the site used them. */
.c-form-wrap{max-width:640px;width:100%;margin:0 auto}
.c-form-wrap > *{margin-block-start:0;margin-block-end:0}

/* The closing line, pulled in toward the form. It was reading as a
   separate block: 44px above the rule and 26px below it is more than
   double the form's own 20px field rhythm. 32px above is a clear step up
   from that rhythm without divorcing the line from it, and 20px below
   matches the field gap exactly, which is what ties the two together. */
.c-direct{
  max-width:640px;margin:32px auto 0;padding-top:20px;border-top:1px solid var(--rule);
  display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;
  font-size:16px;line-height:1.6;color:var(--mute);
}

/* An empty trailing paragraph in the page content -- the residue of
   pasting a shortcode into a fresh block -- still takes WordPress's block
   gap and pushed the closing line 18px further down. It is invisible and
   nobody would ever find it, so it is neutralised here as well as being
   worth deleting from the page. */
.c-form-wrap .wp-block-post-content > p:empty{display:none;margin:0}
.c-direct a{font-family:var(--sans);font-weight:700;color:var(--accent)}
.c-direct a:hover{color:var(--deep)}

/* ------------------------------------------------------------
   FLUENT FORMS, WEARING THE DESIGN'S CONTROLS
   ------------------------------------------------------------
   Read off the plugin's own stylesheet and its per-form inline
   <style> block, not guessed at. Two facts shape everything
   below.

   1. THE PLUGIN SHIPS DESIGN TOKENS on :root and paints from
      them. Redefining those tokens on the form is better than
      fighting every rule that reads one -- the plugin's own CSS
      then paints in the site's colours, and it keeps working if
      the form is ever rebuilt under a different ID.

   2. WHERE A RULE STILL HAS TO WIN, THE FORM'S CLASS IS DOUBLED.
      The plugin's button rule is
        form.fluent_form_3 .ff-btn-submit:not(.ff_btn_no_style)
      -- three classes and an element, which outranks any
      three-class selector of ours. Four classes beats it, and
      needs no !important. This is why every rule here reads
      .frm-fluent-form.frm-fluent-form and not once.
   ------------------------------------------------------------ */

.c-form-wrap .fluentform,
.c-form-wrap .frm-fluent-form{
  --fluentform-primary:var(--accent);
  --fluentform-secondary:var(--mute);
  --fluentform-border-color:var(--rule);
  --fluentform-border-radius:3px;
  --fluentform-danger:#B3261E;
}

.c-form-wrap .fluentform{margin:0}
.c-form-wrap .frm-fluent-form.frm-fluent-form fieldset{border:0;margin:0;padding:0;min-width:0}
.c-form-wrap .frm-fluent-form.frm-fluent-form .ff-el-group{margin:0 0 20px}
.c-form-wrap .frm-fluent-form.frm-fluent-form fieldset > .ff-el-group:last-child{margin-bottom:0}

/* ONE gap between fields, 20px, everywhere. Measured on the live form,
   because two earlier attempts at this were wrong. There were TWO causes,
   and the visible gap is the sum of them:

   1. THE LABEL WRAPPER IS AN INLINE-BLOCK. .ff-el-input--label sits on the
      group's text baseline, so the group's own line-height opened 7px of
      dead space ABOVE every label, and the wrapper's 5px bottom margin
      added to the label's 8px below it. Every labelled field therefore had
      a 27px visible gap where its margin said 20, and the consent field --
      which has no label wrapper -- had 20. Setting the wrapper to block
      removes both: the label starts at the group's top edge, and its own
      8px is the only space before the input.

   2. THE NAME ROW IS NOT .ff-t-container. Fluent Forms' Name field is
      .ff-field_container .ff-name-field-wrapper, and NO rule anywhere gave
      it a bottom margin -- so the row had a 7px gap after it against 27px
      elsewhere. An earlier fix of mine targeted .ff-t-container, which is
      the generic two-column container and is not present on this form.
      Both are matched now, scoped to direct children of the fieldset so a
      container nested inside a field cannot double the margin.

   Result, measured: five gaps of exactly 20px, label to input 8px. */
.c-form-wrap .frm-fluent-form.frm-fluent-form .ff-el-input--label{display:block;margin:0;padding:0}
.c-form-wrap .frm-fluent-form.frm-fluent-form fieldset > .ff-field_container,
.c-form-wrap .frm-fluent-form.frm-fluent-form fieldset > .ff-t-container{margin:0 0 20px}
.c-form-wrap .frm-fluent-form.frm-fluent-form .ff-t-cell .ff-el-group{margin-bottom:0}

/* labels, and the required asterisk in the accent */
.c-form-wrap .frm-fluent-form.frm-fluent-form .ff-el-input--label label{
  font-family:var(--sans);font-weight:700;font-size:13px;letter-spacing:.2px;
  color:var(--ink);margin:0 0 8px;display:block;line-height:1.4;
}
.c-form-wrap .frm-fluent-form.frm-fluent-form .ff-el-is-required.asterisk-right label:after,
.c-form-wrap .frm-fluent-form.frm-fluent-form .ff-el-is-required.asterisk-left label:before{color:var(--accent)}

/* every control takes one treatment: input, select and textarea alike */
.c-form-wrap .frm-fluent-form.frm-fluent-form .ff-el-form-control{
  font-family:var(--sans);font-size:16px;line-height:1.5;color:var(--ink);
  background:#fff;border:1px solid var(--rule);border-radius:3px;
  padding:14px 16px;width:100%;height:auto;box-shadow:none;
  transition:all .15s ease-in-out;
}
.c-form-wrap .frm-fluent-form.frm-fluent-form textarea.ff-el-form-control{resize:vertical;min-height:170px}
.c-form-wrap .frm-fluent-form.frm-fluent-form .ff-el-form-control::placeholder{color:#8A8A8A;opacity:1}
.c-form-wrap .frm-fluent-form.frm-fluent-form .ff-el-form-control:focus{
  outline:2px solid var(--accent);outline-offset:2px;
  border-color:var(--accent);box-shadow:none;
}

/* the native select arrow differs per browser, so it is replaced with one
   drawn from the palette. Inline SVG, no icon set, nothing to load. */
.c-form-wrap .frm-fluent-form.frm-fluent-form select.ff-el-form-control{
  appearance:none;-webkit-appearance:none;padding-right:44px;cursor:pointer;
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5 6 6.5l5-5' stroke='%23007354' stroke-width='1.6' fill='none' stroke-linecap='round'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 16px center;
}

/* Name and Surname side by side. The plugin lays its columns out in a
   flex row with percentage widths; the design's 1fr 1fr grid with a
   16px gutter replaces both. */
.c-form-wrap .frm-fluent-form.frm-fluent-form .ff-t-container{
  display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:0;
}
.c-form-wrap .frm-fluent-form.frm-fluent-form .ff-t-cell{padding:0;width:auto;flex:none;min-width:0}

/* ---- THE CONSENT LINE -----------------------------------------------
   The plugin lays this field out as a TABLE, and correctly:
     .ff-el-tc            display:table; width:100%
     label.ff_tc_label    display:table-row
     span.ff_tc_checkbox  display:table-cell; width:20px
     div.ff_t_c           display:table-cell
   An earlier grid rule of mine on .ff-el-tc outranked the plugin's
   display:table and replaced it. A table-row inside a grid becomes an
   anonymous shrink-to-fit table in an 18px column, which is why the
   sentence wrapped one word wide. THE TABLE IS LEFT ALONE NOW. Only the
   design's own measurements are applied to it: the 12px gap is the
   checkbox cell's width less the 18px box, and the 8px the plugin pushes
   the box down with !important has to be answered in kind to sit it on
   the first line. */
.c-form-wrap .frm-fluent-form.frm-fluent-form .ff-el-tc .ff_tc_checkbox{
  vertical-align:top;width:30px;padding-top:3px!important;
}
.c-form-wrap .frm-fluent-form.frm-fluent-form .ff_t_c{
  vertical-align:top;padding-top:0;
  font-family:var(--sans);font-size:14px;line-height:1.55;color:var(--mute);font-weight:400;
}
.c-form-wrap .frm-fluent-form.frm-fluent-form .ff_t_c a{
  color:var(--accent);text-decoration:underline;text-decoration-thickness:1px;
  text-underline-offset:3px;text-decoration-color:#9BC6B7;
}

/* The consent box is DRAWN, not native. Every other control on this page
   is an explicit white field with a 1px rule border and a 3px radius; the
   checkbox was the one thing still wearing the operating system's own
   colours, which is why it came out as a dark square. It stays white in
   both states -- the tick and the border carry the change, so nothing on
   the page gains a heavy filled block. */
.c-form-wrap .frm-fluent-form.frm-fluent-form input[type=checkbox]{
  appearance:none;-webkit-appearance:none;
  width:18px;height:18px;flex:none;margin:0;padding:0;
  background:#fff;border:1px solid var(--rule);border-radius:3px;
  cursor:pointer;position:relative;box-shadow:none;vertical-align:top;
  transition:all .15s ease-in-out;
}
.c-form-wrap .frm-fluent-form.frm-fluent-form input[type=checkbox]:hover{border-color:var(--accent)}
.c-form-wrap .frm-fluent-form.frm-fluent-form input[type=checkbox]:checked{
  background:#fff;border-color:var(--accent);
}
.c-form-wrap .frm-fluent-form.frm-fluent-form input[type=checkbox]:checked::after{
  content:"";position:absolute;left:50%;top:46%;
  width:4px;height:8px;
  border:solid var(--accent);border-width:0 2px 2px 0;
  transform:translate(-50%,-50%) rotate(45deg);
}
.c-form-wrap .frm-fluent-form.frm-fluent-form input[type=checkbox]:focus-visible{
  outline:2px solid var(--accent);outline-offset:2px;
}

/* the button */
/* The button takes the site's OWN button metrics -- 14px, 11/18 padding,
   the same .btn used in the header and on every card. The contact
   prototype specified a bigger 15px/15-30 slab, which was fine in a wide
   right-hand column and reads as a block now the form is 640px centred:
   at 15/15-30 it stood as tall as the inputs above it. The site has one
   button; this is it. */
.c-form-wrap .frm-fluent-form.frm-fluent-form .ff-btn-submit,
.c-form-wrap .frm-fluent-form.frm-fluent-form .ff-btn{
  font-family:var(--sans);font-weight:700;font-size:14px;letter-spacing:.2px;
  background:var(--accent);color:#fff;border:0;border-radius:3px;
  padding:11px 18px;cursor:pointer;width:auto;height:auto;box-shadow:none;
  transition:all .15s ease-in-out;
}
.c-form-wrap .frm-fluent-form.frm-fluent-form .ff-btn-submit:hover,
.c-form-wrap .frm-fluent-form.frm-fluent-form .ff-btn:hover{background:var(--deep);color:#fff}

/* validation and confirmation, in the house colours rather than the
   plugin's bootstrap red and green */
.c-form-wrap .frm-fluent-form.frm-fluent-form .text-danger,
.c-form-wrap .frm-fluent-form.frm-fluent-form .error-text{
  font-family:var(--sans);font-size:13px;line-height:1.5;color:#B3261E;margin:6px 0 0;
}
.c-form-wrap .frm-fluent-form.frm-fluent-form .ff-el-is-error .ff-el-form-control{border-color:#B3261E}
.c-form-wrap .frm-fluent-form.frm-fluent-form .ff-el-help-message{
  font-family:var(--sans);font-size:13px;line-height:1.5;color:var(--mute);margin:6px 0 0;
}
.c-form-wrap .ff-message-success{
  background:var(--tint);border:1px solid var(--rule);border-left:2px solid var(--accent);
  border-radius:3px;padding:18px 22px;margin:0;
  font-family:var(--sans);font-size:16px;line-height:1.6;color:var(--ink);
}

@media (max-width:768px){
  .c-form-wrap .frm-fluent-form.frm-fluent-form .ff-t-container{grid-template-columns:1fr}
}

/* ============================================================
   LEGAL DOCUMENTS  --  merged from the locked legal prototype
   ============================================================
   No hero. A legal page is a document, not a destination, so it
   opens on a centred H1 and goes straight into the measure. That
   is the whole design; there is nothing else to it, and the
   newsletter band is deliberately absent -- a legal page is not
   somewhere to sell a subscription.

   The Cookie Policy's body is GENERATED BY COMPLIANZ and gets
   regenerated whenever the plugin or the cookie scan updates it.
   So the rules below change its TYPE, COLOUR AND SPACING and
   leave its structure and its behaviour alone. Nothing here can
   break the consent widget because nothing here touches how it
   works. Two column-widths are the only layout changes, both
   because the shipped values are too narrow to read, and both
   revertible in one line.

   Complianz's document.min.css loads BEFORE the theme stylesheet,
   verified in the browser, so equal-specificity rules here win on
   order. No specificity games are needed and none are used.
   ------------------------------------------------------------ */

.legal{padding:168px 0 112px}
.legal h1{
  font-family:var(--serif);font-weight:500;font-size:54px;line-height:1.1;
  letter-spacing:-1.7px;margin:0 auto;max-width:760px;text-align:center;
  text-wrap:balance;color:var(--ink);
}
.legal .col{margin-top:72px}
.legal .prose{padding:0}
.legal .prose > *{margin-block-start:0;margin-block-end:0}
.legal .prose > *:last-child{margin-bottom:0}
.legal .prose h2{padding:0}

/* The zeroing above is there to kill WordPress's block gap, and at two
   classes it also outranks the design's own margins on `.prose h2` and
   `.prose p` -- verified in the browser: a hand-written legal page came
   out as one unbroken wall of text. Restated here for DIRECT children
   only, so Complianz's generated body (which is wrapped, never a direct
   child) keeps the spacing it already has. Same failure and same fix as
   the article grid. */
.legal .prose > h2{margin:52px 0 18px}
.legal .prose > h2:first-child{margin-top:0}
.legal .prose > p{margin:0 0 24px}
.legal .prose > h5:first-child{margin:0 0 44px}
.legal .prose > h5:first-child + h2{margin-top:0}

/* The two heading levels Complianz uses below h3. The article never
   needed them, so the design never set them. */
.legal .prose h4{
  font-family:var(--serif);font-weight:500;font-size:18px;line-height:1.4;
  letter-spacing:-.1px;margin:30px 0 10px;padding:0;color:var(--ink);
}
.legal .prose h5{
  font-family:var(--sans);font-weight:700;font-size:12px;letter-spacing:.9px;
  text-transform:uppercase;color:var(--mute);margin:0;padding:0;
}

/* A placeholder in a legal document has to be impossible to miss,
   because shipping one by accident is the whole risk. */
.legal .fill{
  font-family:var(--mono);font-size:14px;letter-spacing:.2px;
  background:var(--tint);color:var(--deep);
  border-radius:3px;padding:2px 7px;white-space:nowrap;
}

/* ---- the cookie list -------------------------------------------------
   Complianz's own grid, at columns wide enough to read: it ships at
   100px + 152px, which puts a cookie name on two lines and leaves the
   rest of the measure empty. The label/value pairs become a ruled list,
   which is the same treatment the article's tables get. */
.legal .cookies-per-purpose{
  display:grid;grid-template-columns:150px minmax(0,1fr);
  margin:0 0 24px;border-top:1px solid var(--rule);
}
.legal .cookies-per-purpose > div{padding:12px 0;border-bottom:1px solid var(--rule)}
.legal .name-header,
.legal .retention-header,
.legal .function-header{padding-right:24px}
.legal .name,
.legal .retention,
.legal .function{font-size:16px;line-height:1.55;color:var(--mute);word-break:break-word}
.legal .cookies-per-purpose .purpose{grid-column:1/-1;padding:20px 0 8px;border-bottom:0}
.legal .cookies-per-purpose .purpose h4{margin:0}

/* Complianz leaves Function blank until the cookie database is synced.
   A label with nothing after it reads as broken, so an empty pair steps
   out until there is something to put in it. */
.legal .cookies-per-purpose .function:empty,
.legal .cookies-per-purpose .function-header:has(+ .function:empty){display:none}

/* ---- the per-service accordion, in the FAQ's language ---- */
.legal .cmplz-dropdown{margin:0;border-top:1px solid var(--rule)}
.legal .cmplz-dropdown:last-of-type{border-bottom:1px solid var(--rule)}
.legal .cmplz-service-header{padding:20px 0;cursor:pointer;list-style:none}
.legal .cmplz-service-header::-webkit-details-marker{display:none}
.legal .cmplz-service-header h3{margin:0;font-size:21px;line-height:1.35}
.legal .cmplz-service-header p{margin:5px 0 0;font-size:15px;line-height:1.6;color:var(--mute)}

/* ---- the consent categories ---- */
.legal .cmplz-category{border-bottom:1px solid var(--rule)}
.legal .cmplz-category-header{
  grid-template-columns:minmax(0,1fr) auto auto;
  gap:16px;align-items:center;padding:16px 0;
}
.legal .cmplz-category-title{
  font-family:var(--sans);font-weight:700;font-size:15px;letter-spacing:.2px;color:var(--ink);
}
.legal .cmplz-always-active{
  font-family:var(--mono);font-size:11px;letter-spacing:.5px;color:var(--mute);white-space:nowrap;
}
.legal .cmplz-description{
  font-size:15px;line-height:1.6;color:var(--mute);padding:0 0 18px;
}
.legal .cmplz-category-toggle{
  background:none;border:0;padding:0;cursor:pointer;color:var(--accent);
  display:inline-flex;align-items:center;
}
.legal .cmplz-category-toggle svg{fill:currentColor}

@media (max-width:900px){
  .legal{padding:128px 0 80px}
  .legal h1{font-size:38px;letter-spacing:-1px}
  .legal .col{margin-top:52px}
}
@media (max-width:768px){
  .legal .prose h2{font-size:26px;letter-spacing:-.3px}
  .legal .cookies-per-purpose{grid-template-columns:1fr}
  .legal .cookies-per-purpose > div{padding:8px 0}
  .legal .name-header,
  .legal .retention-header,
  .legal .function-header{border-bottom:0;padding:12px 0 0}
}


/* ============================================================
   LEGAL DOCUMENTS, v0.7.4 (23 Sep 2026)
   All four legal pages are now HAND-WRITTEN, the Cookie Policy
   included. Complianz no longer generates any document body; it
   only supplies the consent panel, embedded in the Cookie Policy
   with the [cmplz-manage-consent] shortcode. The generated-document
   rules above are kept so a switch back to Complianz's text still
   renders, but nothing on the live site uses them any more.
   ------------------------------------------------------------ */

/* ---- the "Last updated" line: the same on all four pages ----
   A paragraph, not an h5: a date is not a heading, and a heading
   here put an empty level into the page outline. Same look as the
   old h5 line, so nothing visible moves on the Privacy Policy. */
.legal .prose > .legal-updated{
  font-family:var(--sans);font-weight:700;font-size:12px;line-height:1.6;
  letter-spacing:.9px;text-transform:uppercase;color:var(--mute);
  margin:0 0 44px;
}
.legal .prose > .legal-updated + h2{margin-top:0}
.legal .prose > .legal-updated + p{margin-top:0}

/* The shortcode block can leave an empty paragraph either side of
   the consent panel. An empty paragraph is 24px of unexplained gap. */
.legal .prose > p:empty{display:none}

/* ---- cookie tables ----
   The article table breaks out to the 840px media width. A legal page
   is one column of reading, so here the table stays inside the measure.
   Cookie names are code and read as code; the first column loses the
   article table's bold because the mono face already sets it apart. */
.legal .prose > .wp-block-table{margin:28px 0 44px;width:100%;max-width:100%}
.legal .prose .wp-block-table table{min-width:0;table-layout:auto}
.legal .prose .wp-block-table th,
.legal .prose .wp-block-table td{padding:14px 20px 14px 0;font-size:15px;line-height:1.55}
.legal .prose .wp-block-table th:last-child,
.legal .prose .wp-block-table td:last-child{padding-right:0}
.legal .prose .wp-block-table td{color:var(--mute)}
.legal .prose .wp-block-table td:first-child{font-weight:400;color:var(--ink)}
/* Column widths: the name and the lifetime are short, the description is
   the sentence, so it gets what is left. Measured on the live page. */
.legal .prose .cookie-table td:nth-child(1){width:30%}
.legal .prose .cookie-table td:nth-child(2){width:18%}
.legal .prose .cookie-table td:nth-child(4){width:17%}
.legal .prose code{
  font-family:var(--mono);font-size:13px;letter-spacing:0;line-height:1.7;
  color:var(--ink);background:var(--panel);border:1px solid var(--rule);
  border-radius:3px;padding:1px 6px;white-space:nowrap;
}
.legal .prose td code{display:inline-block;margin:0 4px 4px 0}

/* ---- the consent panel ----
   The one live control on any legal page, so it sits on the same
   8px panel surface the article's TL;DR box uses: a content surface,
   not a new component. Rows are ruled like every list on the site.

   Complianz writes these rules with an ID in the selector
   (#cmplz-manage-consent-container...), which outranks any class-only
   rule. So every rule here carries the same ID plus .legal: one class
   more than the plugin, and the theme loads after it, so it wins
   cleanly without !important. */
.legal #cmplz-manage-consent-container.cmplz-manage-consent-container{
  margin:28px 0 44px;background:var(--panel);border:1px solid var(--rule);
  border-radius:8px;padding:4px 28px;
}
.legal #cmplz-manage-consent-container.cmplz-manage-consent-container .cmplz-categories{margin:0;padding:0}
.legal #cmplz-manage-consent-container.cmplz-manage-consent-container .cmplz-categories .cmplz-category{
  background:none;border:0;border-bottom:1px solid var(--rule);
  margin:0;padding:0;border-radius:0;box-shadow:none;
}
.legal #cmplz-manage-consent-container.cmplz-manage-consent-container .cmplz-categories .cmplz-category:not(:last-child){margin-bottom:0}
/* Preferences and Marketing are hidden by Complianz (nothing uses them),
   so "last" has to mean the last one showing, not the last in the DOM. */
.legal #cmplz-manage-consent-container.cmplz-manage-consent-container .cmplz-categories .cmplz-category.cmplz-statistics{border-bottom:0}
.legal #cmplz-manage-consent-container.cmplz-manage-consent-container .cmplz-categories .cmplz-category .cmplz-category-header{
  display:grid;grid-template-columns:minmax(0,1fr) auto 28px;
  gap:18px;align-items:center;padding:18px 0;background:none;
}
.legal #cmplz-manage-consent-container.cmplz-manage-consent-container .cmplz-categories .cmplz-category .cmplz-category-title{
  font-family:var(--sans);font-weight:700;font-size:16px;letter-spacing:.1px;color:var(--ink);
}
.legal #cmplz-manage-consent-container.cmplz-manage-consent-container .cmplz-categories .cmplz-category .cmplz-always-active{
  display:inline-flex;align-items:center;
  font-family:var(--mono);font-size:11px;letter-spacing:.5px;text-transform:uppercase;
  color:var(--accent);white-space:nowrap;
}
/* "Always active" says it in words; a greyed-out box beside the words
   says the same thing twice. */
.legal #cmplz-manage-consent-container.cmplz-manage-consent-container .cmplz-categories .cmplz-category .cmplz-always-active .cmplz-banner-checkbox{display:none}
.legal #cmplz-manage-consent-container.cmplz-manage-consent-container .cmplz-categories .cmplz-category .cmplz-description{
  font-size:15px;line-height:1.6;color:var(--mute);padding:0 0 18px;margin:0;max-width:62ch;
}
.legal #cmplz-manage-consent-container.cmplz-manage-consent-container .cmplz-categories .cmplz-category .cmplz-category-header .cmplz-category-toggle{
  width:28px;height:28px;border-radius:3px;background:none;border:0;padding:0;margin:0;
  display:inline-flex;align-items:center;justify-content:center;color:var(--mute);cursor:pointer;
}
.legal #cmplz-manage-consent-container.cmplz-manage-consent-container .cmplz-categories .cmplz-category .cmplz-category-toggle svg{
  width:14px;height:14px;fill:currentColor;transition:transform .15s ease-in-out;
}
.legal #cmplz-manage-consent-container.cmplz-manage-consent-container .cmplz-categories .cmplz-category .cmplz-category-toggle[aria-expanded="true"] svg{transform:rotate(180deg)}
.legal #cmplz-manage-consent-container.cmplz-manage-consent-container .cmplz-categories .cmplz-category .cmplz-category-toggle:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
@media (hover:hover) and (pointer:fine){
  .legal #cmplz-manage-consent-container.cmplz-manage-consent-container .cmplz-categories .cmplz-category .cmplz-category-toggle:hover{color:var(--accent)}
}

/* The checkbox is drawn the same way as the contact form's consent box:
   white in both states, the accent tick and border carry the change. */
.legal #cmplz-manage-consent-container.cmplz-manage-consent-container .cmplz-categories .cmplz-category .cmplz-banner-checkbox{display:inline-flex;align-items:center;margin:0;padding:0;position:relative}
.legal #cmplz-manage-consent-container.cmplz-manage-consent-container .cmplz-categories .cmplz-category input.cmplz-consent-checkbox{
  appearance:none;-webkit-appearance:none;opacity:1;position:relative;z-index:auto;
  top:auto;left:auto;width:20px;height:20px;flex:none;margin:0;padding:0;
  background:#fff;border:1px solid var(--rule);border-radius:3px;
  cursor:pointer;box-shadow:none;transition:all .15s ease-in-out;
}
.legal #cmplz-manage-consent-container.cmplz-manage-consent-container .cmplz-categories .cmplz-category input.cmplz-consent-checkbox:checked{background:#fff;border-color:var(--accent)}
.legal #cmplz-manage-consent-container.cmplz-manage-consent-container .cmplz-categories .cmplz-category input.cmplz-consent-checkbox:checked::after{
  content:"";position:absolute;left:50%;top:46%;width:5px;height:9px;
  border:solid var(--accent);border-width:0 2px 2px 0;
  transform:translate(-50%,-50%) rotate(45deg);
}
.legal #cmplz-manage-consent-container.cmplz-manage-consent-container .cmplz-categories .cmplz-category input.cmplz-consent-checkbox:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
@media (hover:hover) and (pointer:fine){
  .legal #cmplz-manage-consent-container.cmplz-manage-consent-container .cmplz-categories .cmplz-category input.cmplz-consent-checkbox:hover{border-color:var(--accent)}
}
/* Complianz can draw its own switch on the label; the box above
   replaces it, and the label stays for screen readers only. */
.legal #cmplz-manage-consent-container.cmplz-manage-consent-container .cmplz-categories .cmplz-category .cmplz-banner-checkbox .cmplz-label{
  position:absolute;width:1px;height:1px;padding:0;margin:0;overflow:hidden;clip:rect(0 0 0 0);
}
.legal #cmplz-manage-consent-container.cmplz-manage-consent-container .cmplz-categories .cmplz-category .cmplz-banner-checkbox .cmplz-label::before,
.legal #cmplz-manage-consent-container.cmplz-manage-consent-container .cmplz-categories .cmplz-category .cmplz-banner-checkbox .cmplz-label::after{display:none}

@media (max-width:640px){
  /* Four columns do not fit a phone. Each cookie becomes a small ruled
     block: the name, then what it does, then who sets it and for how long. */
  .legal .prose .cookie-table thead{display:none}
  .legal .prose .cookie-table table,
  .legal .prose .cookie-table tbody,
  .legal .prose .cookie-table tr,
  .legal .prose .cookie-table td{display:block;width:auto}
  .legal .prose .cookie-table tr{padding:16px 0;border-bottom:1px solid var(--rule)}
  .legal .prose .cookie-table tr:first-child{border-top:1px solid var(--ink)}
  .legal .prose .cookie-table td:nth-child(n){border:0;padding:0;white-space:normal;width:auto}
  .legal .prose .cookie-table td:first-child{width:auto;margin-bottom:6px}
  .legal .prose .cookie-table td:nth-child(2)::before,
  .legal .prose .cookie-table td:nth-child(4)::before{
    font-family:var(--sans);font-weight:700;font-size:11px;letter-spacing:.9px;
    text-transform:uppercase;color:var(--ink);margin-right:8px;
  }
  .legal .prose .cookie-table td:nth-child(2)::before{content:"Set by"}
  .legal .prose .cookie-table td:nth-child(4)::before{content:"Lifetime"}
  .legal .prose .cookie-table td:nth-child(3){margin:4px 0 6px;color:var(--ink)}
  .legal .prose .cookie-table td:last-child{white-space:normal}
  .legal #cmplz-manage-consent-container.cmplz-manage-consent-container{padding:2px 20px}
}


/* ============================================================
   HOMEPAGE HERO RESTUDY + THE INTERACTION SYSTEM IT SPREAD.
   Built into the theme 18 Sep 2026, from the locked prototype.

   Everything below was decided in the prototype and is recorded in
   claude/hero-redesign-log.md, claude/interaction-system-log.md and
   claude/homepage-seo-copy-log.md. Values are locked; do not retune
   them here without reading those.
   ============================================================ */

/* ---- the zone the hero sits in ------------------------------ */
.hero-zone{position:relative}
.hero-zone + section{padding-top:40px}
/* Scoped to the first section only, so the rest of the page keeps the
   44px section-head rhythm. */
.hero-zone + section .sec-head{margin-bottom:30px}

/* ---- the split skeleton ------------------------------------- */
.hSplit{padding:110px 0 0}
.hSplit-rig{max-width:var(--maxw);margin:0 auto;padding:0 var(--pad)}
.hSplit-grid{display:grid;grid-template-columns:minmax(0,1fr) 424px;align-items:center}
/* LOCKED 15 Sep 2026. 140px of field behind the card, chosen against 72
   and 106. Below 1120 the two stack and the overlap goes to zero. */
.hSplit-band{border-radius:20px;margin-right:-140px}
.hSplit-in{
  position:relative;z-index:1;
  /* 146/145 rather than 118: the H1 went from three lines to two on
     17 Sep and the band lost exactly one 55px line with it. The band's
     height is the hero's weight, so it is paid back in padding. */
  padding:146px 96px 145px 56px;
  display:flex;flex-direction:column;align-items:flex-start;gap:20px;
}
/* WordPress gives every paragraph and heading its own block margin. The
   flex gap above is the spacing system here, so the children are reset -
   the same device .cover, .titem and .art-head already use in this file. */
.hSplit-in > *{margin-block-start:0;margin-block-end:0}
.hSplit-in h1{max-width:16ch;font-size:50px;letter-spacing:-1.5px}
/* 16ch, not 13. At 13ch the line sets 279/175/272 - long, short, long.
   text-wrap:balance cannot fix that (balance only ever SHORTENS a line),
   and no three-line split of this sentence is even. 16ch gives 385/352 on
   two lines and needs no balance, so it renders the same everywhere. */
.hSplit-in .hero-sub{font-size:19px;max-width:40ch}
.hSplit-card{
  position:relative;z-index:3;background:var(--surface);border:1px solid var(--rule);
  border-radius:8px;padding:22px 26px 20px;
  box-shadow:0 2px 6px rgba(29,32,71,.06),0 22px 48px rgba(29,32,71,.16);
}

/* ---- the category ladder ------------------------------------ */
.lad-head{
  font-family:var(--mono);font-size:10.5px;letter-spacing:1.3px;text-transform:uppercase;
  color:var(--mute);margin:0 0 6px;
}
.lad-row{
  display:grid;grid-template-columns:44px minmax(0,1fr) 16px;gap:16px;align-items:center;
  padding:15px 0;border-bottom:1px solid var(--rule);
  transition:all .15s ease-in-out;
}
.lad-row:last-child{border-bottom:0;padding-bottom:8px}
.ttile.sm{width:44px;height:44px}
.lad-tx{display:flex;flex-direction:column;gap:2px;min-width:0}
.lad-tx b{
  font-family:var(--serif);font-weight:500;font-size:19px;line-height:1.3;letter-spacing:-.2px;
  color:var(--ink);transition:all .15s ease-in-out;
}
.lad-tx i{font-style:normal;font-size:14px;line-height:1.45;color:var(--mute)}
.lad-go{
  font-family:var(--sans);font-weight:700;font-size:15px;color:var(--rule);
  transition:all .15s ease-in-out;text-align:right;
}
.lad-row:hover .lad-tx b{color:var(--tk)}
.lad-row:hover .lad-go{color:var(--tk);transform:translateX(3px)}
.lad-row:focus-visible{outline:2px solid var(--accent);outline-offset:4px;border-radius:3px}

/* ---- the field answers the ladder, without a script ----------
   The one new behaviour in the redesign that used JavaScript. It does
   not need one: :has() lets the grid react to a descendant's state, so
   the grid itself asks "is a row with this category hovered or focused?"
   Supported in Chrome 105+, Safari 15.4+, Firefox 121+. Where it is not,
   nothing happens and the hero is simply static - which is the correct
   failure for an ornament. */
.hF-band{position:relative}
.tintl{
  position:absolute;inset:0;opacity:0;transition:opacity .4s ease-in-out;
  z-index:0;pointer-events:none;
}
.hSplit-grid:has(.lad-row[data-tint="growth"]:hover) .tintl.g-growth,
.hSplit-grid:has(.lad-row[data-tint="growth"]:focus-visible) .tintl.g-growth,
.hSplit-grid:has(.lad-row[data-tint="martech"]:hover) .tintl.g-martech,
.hSplit-grid:has(.lad-row[data-tint="martech"]:focus-visible) .tintl.g-martech,
.hSplit-grid:has(.lad-row[data-tint="salesops"]:hover) .tintl.g-salesops,
.hSplit-grid:has(.lad-row[data-tint="salesops"]:focus-visible) .tintl.g-salesops,
.hSplit-grid:has(.lad-row[data-tint="ai"]:hover) .tintl.g-ai,
.hSplit-grid:has(.lad-row[data-tint="ai"]:focus-visible) .tintl.g-ai{opacity:1}

/* The eyebrow swaps to the hovered category's name. The four alternates
   are drawn by CSS rather than written into the markup, and that is not a
   styling choice: because the swap is pure CSS every string it can show
   would otherwise be real DOM text, and a crawler would read the
   paragraph as one run-on of all five with no separators. Generated
   content is not part of textContent, so the text layer holds exactly the
   one string that is visible. The category names lose nothing - each is
   the anchor text of its own link in the card beside this. */
.hF-cat{
  position:relative;display:block;min-height:20px;margin:0;
  font-family:var(--mono);font-size:11px;letter-spacing:1.4px;text-transform:uppercase;
  color:#8FE3C4;transition:all .15s ease-in-out;
}
.hF-cat span{
  position:absolute;left:0;top:0;white-space:nowrap;
  opacity:0;transition:opacity .2s ease-in-out;
}
.hF-cat .k-rest{opacity:1}
.hF-cat .k-growth::after{content:"Growth Strategy"}
.hF-cat .k-martech::after{content:"MarTech Tools"}
.hF-cat .k-salesops::after{content:"Sales Operations"}
.hF-cat .k-ai::after{content:"AI & Automation"}
.hSplit-grid:has(.lad-row[data-tint="growth"]:hover) .hF-cat .k-rest,
.hSplit-grid:has(.lad-row[data-tint="growth"]:focus-visible) .hF-cat .k-rest,
.hSplit-grid:has(.lad-row[data-tint="martech"]:hover) .hF-cat .k-rest,
.hSplit-grid:has(.lad-row[data-tint="martech"]:focus-visible) .hF-cat .k-rest,
.hSplit-grid:has(.lad-row[data-tint="salesops"]:hover) .hF-cat .k-rest,
.hSplit-grid:has(.lad-row[data-tint="salesops"]:focus-visible) .hF-cat .k-rest,
.hSplit-grid:has(.lad-row[data-tint="ai"]:hover) .hF-cat .k-rest,
.hSplit-grid:has(.lad-row[data-tint="ai"]:focus-visible) .hF-cat .k-rest{opacity:0}
.hSplit-grid:has(.lad-row[data-tint="growth"]:hover) .hF-cat .k-growth,
.hSplit-grid:has(.lad-row[data-tint="growth"]:focus-visible) .hF-cat .k-growth,
.hSplit-grid:has(.lad-row[data-tint="martech"]:hover) .hF-cat .k-martech,
.hSplit-grid:has(.lad-row[data-tint="martech"]:focus-visible) .hF-cat .k-martech,
.hSplit-grid:has(.lad-row[data-tint="salesops"]:hover) .hF-cat .k-salesops,
.hSplit-grid:has(.lad-row[data-tint="salesops"]:focus-visible) .hF-cat .k-salesops,
.hSplit-grid:has(.lad-row[data-tint="ai"]:hover) .hF-cat .k-ai,
.hSplit-grid:has(.lad-row[data-tint="ai"]:focus-visible) .hF-cat .k-ai{opacity:1}

/* ---- the tools drawer, fused to the card's bottom edge -------
   Not a second card: the same card, with a second register joined on the
   1px rule the list already uses. One object, two grounds. */
.hF-col{position:relative;z-index:3;display:flex;flex-direction:column}
.hF-col .hSplit-card{border-radius:8px 8px 0 0;border-bottom:0}
.t-drawer{
  display:flex;align-items:center;gap:14px;
  background:var(--panel);border:1px solid var(--rule);border-top:0;
  border-radius:0 0 8px 8px;padding:20px 26px;
  box-shadow:0 2px 6px rgba(29,32,71,.06),0 22px 48px rgba(29,32,71,.16);
  transition:all .15s ease-in-out;
}
.t-drawer b{
  font-family:var(--serif);font-weight:500;font-size:18px;line-height:1.3;
  letter-spacing:-.2px;color:var(--ink);transition:all .15s ease-in-out;
}
.t-drawer i{font-style:normal;font-size:14px;color:var(--mute);flex:1;min-width:0}
.t-drawer .lad-go{color:var(--rule)}
.t-drawer:hover{background:var(--tint)}
.t-drawer:hover b,.t-drawer:hover .lad-go{color:var(--accent)}
.t-drawer:hover .lad-go{transform:translateX(3px)}
.t-drawer:focus-visible{outline:2px solid var(--accent);outline-offset:3px}

/* ---- the ground under the hero, and its terminus -------------
   The bloom is in the GROUND, never on a component. Violet left, green
   right: violet reads first where the eye starts and the brand colour
   resolves beside the card you want clicked. Everything sits under
   z-index 1 so the hover tint is never competing with it. */
.hero-zone::before{
  content:"";position:absolute;inset:-88px 0 0 0;z-index:0;pointer-events:none;
  -webkit-mask-image:linear-gradient(to bottom,#000 74%,transparent 99%);
  mask-image:linear-gradient(to bottom,#000 74%,transparent 99%);
  background:
    radial-gradient(1100px 860px at 0% 14%, rgba(58,40,112,.42), transparent 64%),
    radial-gradient(1020px 820px at 100% 40%, rgba(15,127,95,.40), transparent 62%);
}
.hSplit,.strip,.hero-end{position:relative;z-index:1}
/* A hairline ON THE RAILS rather than a band edge, so the hero ends the
   way an article section does. */
.hero-end{
  display:block;margin:32px auto 0;
  max-width:var(--maxw);padding:0 var(--pad);
}
.hero-end i{display:block;height:1px;background:var(--rule)}

/* ---- the ticker ---------------------------------------------
   What the reference sites fill with customer logos. This site has no
   customers and no licence to print anyone else's wordmark, so the slot
   carries the only thing that is true on day one: what has been
   published. A magazine puts its contents on the cover.

   Set in the editorial-contract treatment, not as headlines, which is
   what keeps it subordinate to the hero: it reads as a texture first and
   as words second, the same job a logo wall does.

   ON THE RAILS: the track is clipped to the content box, not the
   viewport, so the edge fade lands where every other edge on the page
   lands. The second run is duplicated for the seamless loop and its
   titles are NOT links, so the page does not ship 6 duplicate hrefs. */
.strip{margin:40px auto 0;max-width:var(--maxw);padding:0 var(--pad)}
.strip-clip{
  overflow:hidden;
  -webkit-mask-image:linear-gradient(to right,transparent,#000 6%,#000 94%,transparent);
  mask-image:linear-gradient(to right,transparent,#000 6%,#000 94%,transparent);
}
.strip-track{display:flex;width:max-content;animation:gsp-marq 58s linear infinite}
.strip-clip:hover .strip-track{animation-play-state:paused}
@keyframes gsp-marq{from{transform:translateX(0)}to{transform:translateX(-50%)}}
.strip-run{display:flex;align-items:center}
.strip-item,span.strip-item{
  display:inline-flex;align-items:center;gap:10px;padding:6px 22px;white-space:nowrap;
  transition:all .15s ease-in-out;
}
.strip-item .pip{
  width:5px;height:5px;border-radius:50%;background:var(--accent);flex:none;
  transition:all .15s ease-in-out;
}
.strip-item span.tx{
  font-family:var(--sans);font-weight:800;font-size:11.5px;letter-spacing:1.3px;
  text-transform:uppercase;color:var(--mute);transition:all .15s ease-in-out;
}
.strip-item:hover span.tx{color:var(--ink)}
.strip-item:hover .pip{background:var(--deep)}
.strip-item:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:3px}

/* ---- the header, over a white ground -------------------------
   88px was set when the bar floated over a full-bleed field, where a tall
   header reads as generous. Over a white ground with a contained hero
   under it, the same bar was dead weight. The wordmark stays at its
   locked 26px in BOTH states: only the bar's height changes, so nothing
   in the type system moves. Headers that scale their logo look like a bug
   for the first 200ms. */
.hdr-cta{padding:9px 16px}
/* Height lives in the HEADER section above, on --hdr-h / --hdr-h-scrolled.
   It is not restated here. */

/* ---- card covers: the hero's light, on every article card ----
   Same mechanism as the hero panel and for the same reason: a gradient
   cannot be transitioned, so the moved light is a SECOND field stacked
   over the first at opacity 0 and cross-faded. The grain still paints
   above both because ::after comes after ::before. 21% white, chosen over
   26 (blown out at the centre), 16 and 11.

   Gated on devices that actually have a pointer, so phones never build
   the layer at all and never get the stuck :hover state a touch device
   produces after a tap. It animates opacity only, which the compositor
   handles without layout or repaint. */
@media (hover:hover) and (pointer:fine){
  .card .cover::before{
    content:"";position:absolute;inset:0;z-index:0;opacity:0;pointer-events:none;
    transition:opacity .45s ease-in-out;
    background:radial-gradient(72% 66% at var(--ox) var(--oy),
               rgba(255,255,255,.21) 0%, rgba(255,255,255,0) 70%);
  }
  .card:hover .cover::before{opacity:1}
}

/* ---- the bare link's arrow ----------------------------------
   The arrow lives in its own <i class="ar"> so it can move without
   touching a letter of the label. 2px of travel and a 15% swell.
   transform-origin is LEFT, not centre: scaling from the centre eats into
   the gap as the arrow grows. This also replaces the tools link's old
   gap:8px -> 13px, which relayouts the line every frame to do what a
   transform does for free. */
.more,.allt,.tools-intro .allt{display:inline-flex;align-items:center;gap:6px}
.tools-intro .allt:hover{gap:6px}
.ar{
  display:inline-block;font-style:normal;line-height:1;font-size:15px;
  transform-origin:left center;
  transition:transform .15s ease-in-out;
}
.more:hover .ar,.allt:hover .ar{transform:translateX(2px) scale(1.15)}

/* ---- the statement's ground: REMOVED, 21 Sep 2026 -----------
   Two blooms sat behind the thesis at roughly half the hero's alpha. They
   went through four passes - viewport-anchored and linear-masked (read as
   two rectangles), centred ellipses in a 312px section (clipped on both
   long edges, so a slab), circles with vertical room and no mask, then
   closer and fainter still at 40/60, r300/290, alpha .10/.11.

   He removed it: "I am not set on it at all, and I would rather have
   boring white than something which looks a bit off." The section is plain
   --surface now, and the type carries the whole moment on its own, which
   is what the locked two-part set was always doing anyway.

   WORTH KNOWING BEFORE ANYONE TRIES THIS AGAIN. The failure was never the
   colours, it was that the layer had no edge to justify it. The hero's
   bloom works because the green panel gives the eye something for the
   colour to be coming FROM. In the middle of a white run there is no
   source, so any field reads as a smudge on the page rather than light in
   a room - and it gets worse the more it is toned down, because a faint
   smudge just looks like a rendering artefact. If ambient colour comes
   back here it needs an object to belong to, not a lower alpha.

   The hero's own ground is untouched and stays. */

/* ---- FAQ questions are H3s ----------------------------------
   The question text sits inside <summary> with no heading level at all,
   which makes it invisible to the document outline. It becomes an H3
   under the section's H2. The h3 is summary's only child, which is what
   the content model allows, so the disclosure marker is drawn by CSS
   rather than written as a second element - and that also keeps a stray
   "+" out of the heading's text. */
.faq-item summary{list-style:none;cursor:pointer}
.faq-item summary::-webkit-details-marker{display:none}
.faq-item summary h3{
  display:flex;align-items:center;justify-content:space-between;gap:24px;
  margin:0;padding:24px 4px;
  font-family:var(--serif);font-weight:500;font-size:21px;line-height:1.35;letter-spacing:-.2px;
  color:inherit;transition:color .15s ease-in-out;
}
.faq-item summary:hover h3{color:var(--accent)}
.faq-item summary h3 .plus{
  flex:none;width:26px;height:26px;border-radius:50%;border:1px solid var(--rule);
  display:flex;align-items:center;justify-content:center;
  font-family:var(--sans);font-weight:700;font-size:16px;color:var(--accent);line-height:1;
}
.faq-item summary h3 .plus::after{content:"+"}
.faq-item[open] summary h3 .plus{background:var(--accent);color:#fff;border-color:var(--accent)}
.faq-item[open] summary h3 .plus::after{content:"\2013"}

/* ---- responsive ---------------------------------------------- */
@media (max-width:1120px){
  .hSplit-grid{grid-template-columns:1fr}
  .hSplit-band{margin-right:0}
  .hSplit-in{padding:80px 48px}
  /* The inset belongs to the COLUMN, not the card. Put it on the card and
     the drawer fused to its bottom edge keeps the full column width and
     hangs out past it on both sides. One object, one margin. */
  .hF-col{margin:-44px 40px 0}
}
@media (max-width:900px){
  :root{--hdr-h:66px;--hdr-h-scrolled:56px}
  .hSplit{padding-top:96px}
  .hSplit-in{padding:64px 32px}
  .hSplit-in h1{font-size:38px;letter-spacing:-1px}
  .strip{margin-top:32px}
  .strip-item{padding:6px 16px}
  .hero-end{margin-top:24px}
}
@media (max-width:768px){
  .hSplit-band{border-radius:14px}
  .hF-col{margin:-32px 12px 0}
  .hSplit-card{padding:18px 20px 16px}
  .lad-tx b{font-size:18px}
}
@media (prefers-reduced-motion:reduce){
  .tintl,.hdr,.card .cover::before{transition:none}
  .ar,.ar::before,.ar::after{transition:none!important}
  .strip-track{animation:none;transform:none}
  .strip-clip{overflow-x:auto}
}

/* ============================================================
   HERO B, v0.7.6 (28 Sep 2026)
   ============================================================
   1. Headline steps down in four sizes instead of one. Before,
      54px dropped once to 38px at 900px and never went smaller,
      so phones got a four-line headline. Chosen on the About page
      as "Option A, Stepped"; applies to every centred Hero B page
      (blog, tools, categories, About, contact) so they stay one
      shape. The author hero keeps its own sizes.
   2. Side gutter restored. .hero-in's padding shorthand
      (172px 0 128px, and 132px 0 60px under 900px) set the left
      and right padding to 0, which cancelled the .wrap gutter on
      the same element. On a phone the subline ran to the screen
      edge. padding-inline puts the site's own --pad back.
   ------------------------------------------------------------ */
.hero-b:not(.hero-author) .hero-in{padding-inline:var(--pad)}
/* 0.9.9: the author hero had the same bug. Its padding:0 cancelled the .wrap
   gutter, so below 1368px the copy and the monogram touched the screen edge. */
.hero-author .hero-in{padding-inline:var(--pad)}
/* 0.9.9: stacked layout (under 900px). The 220x260 tile pushed the name
   below the fold and read as a broken image. It becomes a small square
   that sits beside the eyebrow and the name, like a byline avatar. */
@media (max-width:900px){
  .hero-author .hero-in{grid-template-columns:auto minmax(0,1fr);column-gap:20px;row-gap:0;align-items:start}
  .hero-author .mono{width:96px;height:96px;min-height:0;order:0;grid-column:1;grid-row:1;justify-self:start}
  .hero-author .mono b{font-size:52px;letter-spacing:-2px}
  .hero-author .hero-copy{display:contents}
  .hero-author .hero-copy > *{grid-column:1 / -1}
  .hero-author .hero-copy > .eyebrow,
  .hero-author .hero-copy > h1{grid-column:2;align-self:center}
  .hero-author .hero-copy > .eyebrow{grid-row:1;align-self:start;margin-top:14px}
  .hero-author .hero-copy > h1{grid-row:1;align-self:end;margin-bottom:10px}
  .hero-author .hero-copy > .hero-role{margin-top:22px}
  .hero-author .hero-copy > .bio{margin-top:14px}
  .hero-author .hero-copy > .hero-links{margin-top:22px}
}
@media (max-width:420px){
  .hero-author .mono{width:80px;height:80px}
  .hero-author .mono b{font-size:44px}
  .hero-author h1{font-size:30px;letter-spacing:-.6px}
}
.hero-b:not(.hero-author) h1{font-size:54px;line-height:1.1;letter-spacing:-1.7px}
@media (max-width:1080px){ .hero-b:not(.hero-author) h1{font-size:48px;letter-spacing:-1.4px} }
@media (max-width:900px) { .hero-b:not(.hero-author) h1{font-size:40px;line-height:1.12;letter-spacing:-1px} }
@media (max-width:640px) { .hero-b:not(.hero-author) h1{font-size:36px;line-height:1.14;letter-spacing:-.8px} }
@media (max-width:420px) { .hero-b:not(.hero-author) h1{font-size:32px;line-height:1.16;letter-spacing:-.6px} }

/* HERO B headline measure, v0.7.8 (29 Sep 2026)
   The global h1 cap of 620px broke the About headline ("A publication
   about how B2B companies actually grow") into three lines at 54px.
   The cap is now in em, so it scales with the stepped sizes above:
   14em = 756px at 54, 672 at 48, 560 at 40. Measured in the real fonts:
   About sets on 2 lines from 768px up; the blog, tools and contact
   headlines keep exactly the 2 lines they had at every width. */
.hero-b:not(.hero-author) h1{max-width:14em}

/* ============================================================
   ABOUT: MISSION, v0.8.0 (29 Sep 2026)
   ============================================================
   Text left, two cards right: "Moves a dashboard" (panel ground,
   entries struck through) overlapped by "Moves revenue" (white,
   2px accent top edge, card shadow), set 56px lower so it sits in
   front. Chosen from three rounds of options; see
   claude/about-mission-redesign-log.md. Centred vertically on
   purpose: top alignment was tried twice and rejected.
   ------------------------------------------------------------ */
.ms{padding:96px 0}
.ms-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);gap:88px;align-items:center}
.ms-copy{display:flex;flex-direction:column;gap:16px}
.ms-copy > *{margin-block-start:0;margin-block-end:0}
.ms-copy .eyebrow{margin:0}
.ms .ms-title{margin:0;font-family:var(--serif);font-weight:500;font-size:26px;line-height:1.32;letter-spacing:-.4px;color:var(--ink);text-wrap:balance}
.ms-note{margin:0;font-size:17px;line-height:1.65;color:var(--mute);max-width:54ch}
.ms-stack{display:grid;grid-template-columns:1fr 1fr;align-items:start}
.ms-card{border-radius:8px;padding:26px 30px 16px;position:relative}
.ms-off{background:var(--panel);border:1px solid var(--rule);margin-right:-36px;z-index:1}
.ms-on{background:var(--surface);border:1px solid var(--rule);border-top:2px solid var(--accent);margin-top:56px;z-index:2;
  box-shadow:0 2px 6px rgba(29,32,71,.06),0 22px 48px rgba(29,32,71,.13)}
.ms-lbl{margin:0;font-family:var(--mono);font-weight:500;font-size:11px;letter-spacing:1.4px;text-transform:uppercase;color:var(--mute)}
.ms-on .ms-lbl{color:var(--accent)}
.ms-card ul{list-style:none;margin:12px 0 0;padding:0}
.ms-card li{display:flex;align-items:center;gap:12px;padding:13px 0;border-top:1px solid var(--rule);
  font-family:var(--serif);font-weight:500;font-size:20px;line-height:1.3;letter-spacing:-.3px;margin:0}
.ms-off li{color:#A3A6B8;text-decoration:line-through;text-decoration-color:#C3C6D3;text-decoration-thickness:1px}
.ms-on li{color:var(--ink)}
.ms-on li::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--accent);flex:none}
@media (max-width:1080px){
  .ms-grid{grid-template-columns:1fr;gap:40px}
}
@media (max-width:900px){
  .ms{padding:64px 0}
  .ms .ms-title{font-size:23px;letter-spacing:-.3px}
}
@media (max-width:640px){
  .ms-stack{grid-template-columns:1fr}
  .ms-off{margin-right:0}
  .ms-on{margin-top:-10px;margin-left:24px}
  .ms-card li{font-size:18px;padding:11px 0}
}

/* ============================================================
   HEADER, v0.9.0 (30 Sep 2026)
   ============================================================
   Four links in the middle (Contact moved in from the right) and,
   on the right, the Google preferred-source control ("Option B":
   G mark plus a two-line label) beside Subscribe, both 40px tall.
   Below 980px the links and the right side fold into a drawer that
   opens under the bar; the bar keeps the wordmark, Subscribe and the
   menu button. Below 420px Subscribe moves into the drawer too,
   because an iPhone cannot fit all three on one line.

   Replaces the core Navigation block. That block's own mobile
   button was being hidden by `.nav{display:none}` under 900px, so
   phones had no menu at all and the actions crowded the wordmark.
   New class names (.hnav, .hact, .hps, .hsub) so none of the old
   .nav / .hdr-link / .hdr-cta rules can reach this markup.
   ------------------------------------------------------------ */
.hnav{display:flex;align-items:center;gap:30px;justify-self:center}
.hnav a,.hact a,.hsub{font-family:var(--sans);font-weight:700;font-size:14px;letter-spacing:.1px;color:var(--ink);white-space:nowrap;text-decoration:none}
.hnav a{transition:color .15s ease-in-out}
.hnav a:hover,.hnav a[aria-current="page"]{color:var(--accent)}
.hact{display:flex;align-items:center;gap:12px;justify-self:end}
.hsub{display:inline-flex;align-items:center;justify-content:center;height:40px;padding:0 16px;border-radius:3px;background:var(--accent);color:#fff!important;line-height:1;transition:all .15s ease-in-out}
.hsub:hover{background:var(--deep)}
.hps{display:inline-flex;align-items:center;gap:10px;height:40px;padding:0 14px 0 12px;border:1px solid var(--rule);border-radius:3px;background:var(--surface);color:var(--ink);text-decoration:none;transition:all .15s ease-in-out}
.hps:hover{background:var(--tint);border-color:var(--accent);color:var(--deep)}
.hg{width:16px;height:16px;flex:none;display:block}
.hps-t{display:flex;flex-direction:column;line-height:1.15;font-size:11.5px;font-weight:700;letter-spacing:.1px}
.hps-t span:first-child{font-weight:500;font-size:11px;color:var(--mute)}
.hsub-m,.hburger{display:none}

.hburger{width:40px;height:40px;border:0;background:none;cursor:pointer;position:relative;padding:0;justify-self:end;color:var(--ink)}
.hburger i{position:absolute;left:10px;right:10px;height:2px;background:currentColor;border-radius:2px;transition:transform .2s ease,top .2s ease,opacity .2s ease}
.hburger i:nth-child(1){top:14px}.hburger i:nth-child(2){top:19px}.hburger i:nth-child(3){top:24px}
.site-header.open .hburger i:nth-child(1){top:19px;transform:rotate(45deg)}
.site-header.open .hburger i:nth-child(2){opacity:0}
.site-header.open .hburger i:nth-child(3){top:19px;transform:rotate(-45deg)}
.hburger:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

.hdrawer{display:none;position:absolute;left:0;right:0;top:100%;background:var(--surface);border-bottom:1px solid var(--rule);
  box-shadow:0 24px 40px rgba(29,32,71,.12);max-height:calc(100vh - var(--hdr-h));overflow-y:auto}
.site-header.open .hdrawer{display:block}
.hdrawer .wrap{padding-top:8px;padding-bottom:24px}
.hdnav a{display:flex;justify-content:space-between;align-items:center;padding:17px 0;border-bottom:1px solid var(--rule);
  font-family:var(--serif);font-weight:500;font-size:24px;letter-spacing:-.3px;color:var(--ink);text-decoration:none}
.hdnav a::after{content:"\2192";font-family:var(--sans);font-weight:700;font-size:16px;color:var(--accent)}
.hdnav a[aria-current="page"]{color:var(--accent)}
.hdact{display:flex;flex-direction:column;gap:10px;margin-top:22px}
.hdact .hps,.hdact .hsub{justify-content:center;height:46px;font-family:var(--sans);font-weight:700;font-size:15px}

@media (max-width:1180px){ .hdr{gap:24px} .hnav{gap:24px} }
@media (max-width:980px){
  .hnav,.hact{display:none}
  .hsub-m,.hburger{display:inline-flex}
  .hburger{display:block}
  .hdr{grid-template-columns:1fr auto auto;gap:12px}
}
@media (min-width:981px){ .hdrawer{display:none!important} }
@media (max-width:420px){ .hsub-m{display:none} }
@media (prefers-reduced-motion:reduce){ .hburger i{transition:none} }

/* v0.9.1: the Google control goes to "Option A", one line, "Add to Google".
   The two-line label (B) read as crowded in the bar. The full wording stays
   in the title attribute and in the mobile drawer. */
.hps{gap:9px;padding:0 15px 0 13px}
.hps-t{display:inline;font-size:14px;font-weight:700;line-height:1;letter-spacing:.1px}
.hact{gap:14px}

/* HOMEPAGE FAQ, v0.9.2 (30 Sep 2026): the eight questions are in.
   Links inside an answer use the article body's link style. */
.faq-answer a{color:var(--accent);text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:#9BC6B7;transition:color .15s ease-in-out}
.faq-answer a:hover{color:var(--deep);text-decoration-color:currentColor}

/* ============================================================
   MOBILE PASS, v0.9.11 (6 Oct 2026)
   ============================================================
   From the live-site responsive audit of 6 Oct (all 13 pages,
   320 to 1440px). See claude/mobile-pass-findings.md.
   ------------------------------------------------------------ */

/* 1. Author hero, stacked layout (under 900px). The eyebrow and the
      name shared grid row 1, eyebrow pinned to the top and name to
      the bottom of an 80px row. When the name wraps to two lines
      (375px and narrower) the two collided. Now they get a row each,
      the monogram spans both, and the pair sits centred beside it.
      They cannot overlap whatever the name's length. */
@media (max-width:900px){
  .hero-author .mono{grid-row:1 / span 2;align-self:center}
  .hero-author .hero-copy > .eyebrow{grid-row:1;align-self:end;margin:0 0 6px}
  .hero-author .hero-copy > h1{grid-row:2;align-self:start;margin:0}
}

/* 2. Category filter row. On a phone the five labels wrapped onto
      three lines. Under 640px it is one row that scrolls sideways,
      bleeding to the screen edge, with a short fade on the right so
      the cut-off label reads as "more this way". header.js scrolls
      the active label into view on category pages. */
@media (max-width:640px){
  .catrow{
    flex-wrap:nowrap;overflow-x:auto;overscroll-behavior-x:contain;
    gap:22px;margin-inline:calc(var(--pad) * -1);padding-inline:var(--pad);
    scrollbar-width:none;-webkit-overflow-scrolling:touch;
    -webkit-mask-image:linear-gradient(to right,#000 calc(100% - 36px),transparent);
            mask-image:linear-gradient(to right,#000 calc(100% - 36px),transparent);
  }
  .catrow::-webkit-scrollbar{display:none}
  .catrow a{flex:none;white-space:nowrap}
  .catrow.at-end{-webkit-mask-image:none;mask-image:none}
}

/* 3. Footer on a phone. "1fr 1fr" let the brand column's long email
      address set its own width, so the columns came out about 210 and
      100px and "Growth Strategy" broke in two. Columns are now equal
      (minmax(0,1fr)), and under 640px the brand block takes its own
      full-width row above the three link lists. */
@media (max-width:1000px){
  .foot-top{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
}
@media (max-width:640px){
  .foot-top{gap:40px 24px}
  .foot-brand{grid-column:1 / -1}
  .foot-brand p{max-width:40ch}
}
.foot-brand .contact{overflow-wrap:anywhere}

/* 4. FAQ answers on a phone. The 60px right padding lined the text up
      with the question beside the toggle on desktop; on a 360px screen
      it threw away a fifth of the line. */
@media (max-width:640px){
  .faq-answer{padding-right:4px}
}

/* 5. Mobile menu: the page behind the open drawer no longer scrolls.
      header.js sets the class on <html>. */
html.gsp-menu-open,html.gsp-menu-open body{overflow:hidden}

/* ============================================================
   TOOL PAGE  --  v0.10.0, 7 Oct 2026
   ============================================================
   What the ranking tool pages share: a branded hero holding the
   title and the tool, then plain text in one reading column. No
   byline, no date, no contents rail. One template for every tool.
   The hero is the frame (single-tool.html); the calculator is the
   first block of the tool's content and is pulled up so the card
   overlaps the hero panel's bottom edge.
   ------------------------------------------------------------ */

/* category values for the hero tile and label (from the body class) */
.single-tool{--c1:#0F7F5F;--c2:#061F1A;--ox:28%;--oy:22%;--mk:#007354}
.single-tool.category-martech-tools{--c1:#11738D;--c2:#061A24;--ox:72%;--oy:22%;--mk:#0E6E85}
.single-tool.category-sales-operations{--c1:#21529F;--c2:#0A1128;--ox:28%;--oy:78%;--mk:#0B63C5}
.single-tool.category-ai-automation{--c1:#4F3792;--c2:#120C24;--ox:72%;--oy:78%;--mk:#6B4BA8}

/* the hero */
.tstage{padding:110px 0 0}
.tstage-band{background:var(--panel);border:1px solid var(--rule);border-radius:20px;padding:64px 24px 56px}
body:has(.tool-body .prose > .gsp-calc-block:first-child) .tstage-band{padding-bottom:340px}
.tstage-head{max-width:860px;margin:0 auto;display:flex;flex-direction:column;align-items:center;text-align:center;gap:16px}
.tstage-head > *{margin:0}
.tstage-id{display:flex;align-items:center;justify-content:center;gap:12px;min-width:0}
.tstage-tile{display:block;width:24px;height:24px;border-radius:5px;position:relative;overflow:hidden;flex:none;background:radial-gradient(125% 115% at var(--ox) var(--oy),var(--c1) 0%,var(--c2) 100%)}
.tstage-tile::after{content:"";position:absolute;inset:0;background-image:var(--grain);background-size:108px;mix-blend-mode:overlay;opacity:.7}
.tstage-kind{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:2px 10px;margin:0}
.tstage-kind > *{margin:0}
.tstage-kind .wp-block-post-terms{font-family:var(--sans);font-weight:700;font-size:13px;line-height:20px;letter-spacing:1.6px;text-transform:uppercase;color:var(--mute);white-space:nowrap}
.tstage-kind .wp-block-post-terms a{color:inherit;pointer-events:none}
.tstage-kind .taxonomy-category a{color:var(--mk);pointer-events:auto;padding:5px 0;margin:-5px 0}
.tstage-kind .taxonomy-category a:hover{color:var(--deep)}
.tstage-kind .sep{font-size:13px;color:var(--rule)}
.tstage .wp-block-post-title{font-family:var(--serif);font-weight:500;font-size:54px;line-height:1.1;letter-spacing:-1.7px;color:var(--ink);margin:0;text-wrap:balance}
.tstage .wp-block-post-excerpt{margin:0}
.tstage .wp-block-post-excerpt__excerpt{font-size:19px;line-height:1.55;color:var(--mute);max-width:56ch;margin:0 auto}
.tstage-facts{list-style:none;margin:4px 0 0;padding:0;display:flex;flex-wrap:wrap;justify-content:center;gap:8px 22px}
.tstage-facts li{font-family:var(--mono);font-size:12px;letter-spacing:.5px;color:var(--ink);display:flex;align-items:center;gap:8px}
.tstage-facts li::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--mk)}

/* the text: the article reading column */
.tool-body.article{padding:0 0 96px}
.tool-body .wrap{container-type:inline-size}
.tool-body .prose{width:100%;padding-top:56px}
.tool-body .prose > .gsp-calc-block:first-child{margin-top:-296px} /* 340 of panel, minus a 44px gap under the facts */
body:has(.tool-body .prose > .gsp-calc-block:first-child) .tool-body .prose{padding-top:0}
.tool-body .prose > .gsp-calc-block{position:relative;z-index:2;width:min(860px,100cqw);max-width:none;margin-left:calc(50% - min(430px,50cqw));margin-bottom:64px}
.tool-body .prose > .gsp-calc-block .calc{max-width:none;box-shadow:0 2px 6px rgba(29,32,71,.06),0 22px 48px rgba(29,32,71,.16)}
.tool-body .prose > h2:first-child,.tool-body .prose > .gsp-calc-block + h2{margin-top:0}

/* formula line */
.prose .formula{margin:8px 0 28px;border-left:2px solid var(--accent);padding:6px 0 6px 24px;display:flex;flex-direction:column;gap:6px}
.prose .formula > *{margin:0}
.formula-k{font-family:var(--mono);font-size:11px;letter-spacing:1px;text-transform:uppercase;color:var(--mute)}
.prose .formula-eq,.formula-eq{font-family:var(--serif);font-weight:500;font-size:28px;line-height:1.25;letter-spacing:-.5px;color:var(--ink);text-wrap:balance}

/* score scale (gsp/score-scale) */
.prose .scalefig,.scalefig{margin:8px 0 28px;max-width:100%;width:100%}
.scale11{display:grid;grid-template-columns:repeat(var(--n,11),minmax(0,1fr));gap:5px}
.scale11 span{height:46px;border-radius:3px;display:flex;align-items:center;justify-content:center;font-family:var(--serif);font-weight:500;font-size:18px;font-variant-numeric:tabular-nums}
.scale11 .t-low{background:#4A5072;color:#fff}
.scale11 .t-mid{background:#C9CDD8;color:var(--ink)}
.scale11 .t-high{background:#0F7F5F;color:#fff}
.scale11-k{display:grid;grid-template-columns:repeat(var(--n,11),minmax(0,1fr));gap:5px;margin-top:8px}
.scale11-k span{font-size:13px;line-height:1.4;color:var(--mute)}
.scale11-k b{color:var(--ink);font-weight:700;margin-right:4px}

/* tables and FAQ inside the tool text */
.tool-body td{font-variant-numeric:tabular-nums}
.tool-body .prose .faq-list{margin:8px 0 0;border-top:1px solid var(--rule)}
.tool-body .prose .faq-answer{margin:0}

/* related tools: each tile takes its own tool's category, not the page's */
.tool-related{border-top:1px solid var(--rule);padding:88px 0 96px;background:var(--surface)}
.tool-related .tgrid{grid-template-columns:repeat(3,minmax(0,1fr));gap:40px 48px}
.tool-related:has(.wp-block-query-no-results){display:none}
.wp-block-post.category-growth-strategy .ttile{background:radial-gradient(125% 115% at 28% 22%, #0F7F5F 0%, #061F1A 100%)}
.wp-block-post.category-martech-tools .ttile{background:radial-gradient(125% 115% at 72% 22%, #11738D 0%, #061A24 100%)}
.wp-block-post.category-sales-operations .ttile{background:radial-gradient(125% 115% at 28% 78%, #21529F 0%, #0A1128 100%)}
.wp-block-post.category-ai-automation .ttile{background:radial-gradient(125% 115% at 72% 78%, #4F3792 0%, #120C24 100%)}

/* editor: the calculator preview */
.gsp-calc-edit-note{font-family:var(--mono);font-size:11px;letter-spacing:.5px;color:var(--mute);margin:0 0 8px}

@media (max-width:900px){
  .tool-related .tgrid{grid-template-columns:1fr;gap:32px}
  .tool-related{padding:60px 0 64px}
}
@media (max-width:768px){
  .tstage{padding-top:74px}
  .tstage > .wrap{padding:0}
  .tstage-band{border-radius:0;border-left:0;border-right:0;padding:36px 20px 40px}
  body:has(.tool-body .prose > .gsp-calc-block:first-child) .tstage-band{padding-bottom:300px}
  .tool-body .prose > .gsp-calc-block:first-child{margin-top:-268px}
  .tool-body .prose > .gsp-calc-block{margin-bottom:48px}
  .tstage .wp-block-post-title{font-size:36px;letter-spacing:-1px}
  .tstage .wp-block-post-excerpt__excerpt{font-size:17px}
  .tstage-kind .wp-block-post-terms,.tstage-kind .sep{font-size:12px;letter-spacing:1.2px}
  .tstage-facts{gap:6px 16px}
  .scale11{gap:3px}.scale11 span{height:38px;font-size:15px}
  .prose .formula-eq{font-size:22px}
}
@media (max-width:600px){
  .tool-body .prose table{min-width:0}
  .tool-body th,.tool-body td{padding-right:14px;font-size:15px}
}
@media (max-width:560px){
  .scale11-k{grid-template-columns:1fr;gap:2px}
  .scale11-k span{grid-column:auto!important}
}
@media (max-width:430px){
  .tstage-kind .wp-block-post-terms,.tstage-kind .sep{font-size:11px;letter-spacing:1px}
  .tstage-tile{width:20px;height:20px;border-radius:4px}
}


/* ============================================================
   WORDMARK, v0.10.1 (locked 10 Oct 2026)
   GrowthStackPulse in Mulish (the nav and button family) at weight
   640, -0.018em, drawn as SVG outlines in patterns/wordmark.php.
   One word, one weight, one colour. It replaces the typed IBM Plex
   Serif site title, so the bar now speaks in one typeface.
   Colour comes from currentColor, so the existing .wordmark colour
   and hover rules still drive it.
   ============================================================ */
.wordmark .gsp-wm{display:inline-flex;align-items:center;line-height:0;color:inherit;text-decoration:none}
.gsp-wm-svg{display:block;height:18.8px;width:auto;fill:currentColor;transition:color .15s ease-in-out}
.foot-brand .wordmark .gsp-wm-svg{height:17.8px}
.foot-brand .wordmark:hover{color:var(--accent-on-dark)}
@media (max-width:420px){ .site-header .gsp-wm-svg{height:17.3px} }

/* 0.12.0: long unbroken strings (a spreadsheet formula, a URL) wrap instead of
   pushing the page sideways on phones. Tool FAQs now start open, which exposed it. */
.prose p,.prose li,.prose td,.faq-item .faq-answer{overflow-wrap:break-word}
