/* ===== cnp-deferred.css  (built from 9 live sheets, head order) ===== */

/* --- viz3-offpalette-css  <-  /novo/wp-content/themes/coachfocus-child/viz3_offpalette.css (2754 B) --- */
/* =====================================================================
   VIZ3_OFFPALETTE.CSS · 18 Jul 2026 · off-palette corrective (sweep viz3)
   ---------------------------------------------------------------------
   WHAT: consolidates the legacy pre-Instrument green family
   (#1C7A57 / #3E9B74 / #2A9E6E) onto the single Instrument green token
   --cnp-green #1D9E75, and lifts two pure-#fff card faces sitting on
   cream surfaces onto the Instrument card colour #FBF6EB.
   HOW: every override carries HIGHER SPECIFICITY than the rule it
   corrects (doubled class trick), so load order does not matter.
   NOT TOUCHED (deliberate, see sweep report):
   - #fff text on orange/ink buttons and all dark-band whites (correct);
   - form inputs #fff (Instrument decision, cnp-instrument-apply.css:958);
   - WhatsApp float #25D366 (third-party brand colour);
   - rgba(28,122,87,.05-.12) tints (5-12% alpha, visually identical to
     the token green at those opacities; left to avoid churn);
   - --green-deep #155C42 in cnp-ai-prompts.css (a darker step with no
     Instrument counterpart; flipping it would invent a colour);
   - --wp--preset--* values (inert, prior audit).
   Reversible: delete this file (and its enqueue line/mu-plugin).
   ===================================================================== */

/* ---- 1 · sitewide praxis token: one green (was #1C7A57 / #1D9E75) ----
   Feeds the live-pill, fieldnotes/svc badges, demo-strip accents. */
body.praxis, .praxis.praxis{
  --green: var(--cnp-green, #1D9E75);
  --green-bright: var(--cnp-green, #1D9E75);
}

/* ---- 2 · AI hub / prompt pages (cnp-ai-prompts.css:19) ---- */
.cnpnp.cnpnp.ai-hub, .cnpnp.cnpnp.ai-prompt{
  --green: var(--cnp-green, #1D9E75);
  --green-soft: var(--cnp-green, #1D9E75);
}
/* white result-card face on cream ground (cnp-ai-prompts.css:429) */
.cnpnp.cnpnp .worked .formula:has(strong){
  background: var(--cnp-card, #FBF6EB);
}

/* ---- 3 · calculators (cc-calc.css:10/88/89) ---- */
.cc-calc.cc-calc{
  --cc-green: var(--cnp-green, #1D9E75);
  --cc-green-soft: var(--cnp-green, #1D9E75);
}
.cc-calc .cc-range.green::-webkit-slider-thumb{ background: var(--cnp-green, #1D9E75); }
.cc-calc .cc-range.green::-moz-range-thumb{ background: var(--cnp-green, #1D9E75); }

/* ---- 4 · CostCtrl hero scenario instrument (cc-hero-scenario.css:20) ---- */
.cc-inst.cc-inst{
  --cc-g: var(--cnp-green, #1D9E75);
  --cc-gb: var(--cnp-green, #1D9E75);
}
/* white chips on the cream instrument face (cc-hero-scenario.css:80) */
.cc-inst.cc-inst .cc-chip{
  background: var(--cnp-card, #FBF6EB);
}

/* ---- 5 · blog GEO "in short" label (cnp-blog-praxis.css:28) ---- */
body.praxis .article-content .geo .g-label{
  color: var(--cnp-green, #1D9E75);
}

/* --- cnp-viewtransition-css  <-  /novo/wp-content/themes/coachfocus-child/cnp-viewtransition.css (582 B) --- */
/* cnp-viewtransition.css · Grand Tour #63 · cross-fade between pages
   Cross-document View Transitions: a calm 0.22s fade on same-origin navigation,
   like carriages sliding between stations. Progressive enhancement — browsers
   without support just navigate normally. Fully disabled under reduced-motion. */
@view-transition { navigation: auto; }
::view-transition-old(root),
::view-transition-new(root){
  animation-duration: .22s;
  animation-timing-function: cubic-bezier(.4,0,.2,1);
}
@media (prefers-reduced-motion: reduce){
  @view-transition { navigation: none; }
}

/* --- dc-svgtext-mobile-css  <-  /novo/wp-content/themes/coachfocus-child/dc_svgtext-mobile.css (2730 B) --- */
/* dc_svgtext-mobile.css  ·  v2  ·  19 Jul 2026
   -----------------------------------------------------------------------
   v1 forced injected diagrams to an oversized fixed width + horizontal
   "drag to pan" below 480px (an SVG-text legibility idea). On phones this
   cut diagrams off and read as broken. v2: diagrams FIT their column at
   every width -- the SVG viewBox scales down cleanly, exactly like the
   desktop behaviour. No forced width, no pan, no cut-off.
   Reversible: restore dc_svgtext-mobile.css.bak-19jul-panfix
   ----------------------------------------------------------------------- */
@media (max-width: 480px){
  figure.fig,
  figure.cnp-diagram-fig,
  figure.cnp-fig{
    overflow-x: visible;
    overscroll-behavior-x: auto;
  }
  figure.fig svg,
  figure.cnp-diagram-fig svg,
  figure.cnp-fig svg,
  figure.cnp-diagram-fig > svg.cnp-diagram,
  figure.cnp-fig > svg.cnp-diagram{
    min-width: 0 !important;
    width: 100% !important;
    max-width: 100% !important;
    height: auto !important;
  }
  figure.fig::before,
  figure.cnp-diagram-fig::before,
  figure.cnp-fig::before{
    content: none !important;
  }
  figure.fig figcaption,
  figure.cnp-diagram-fig figcaption,
  figure.cnp-fig figcaption{
    position: static;
    max-width: 100%;
  }
}

/* .diagram / .diagram-wrap SVGs (ai-costing-prompts + industry data-diagram charts):
   fit to full width on phones so the wide-viewBox charts render as large as
   possible (they were scaling to ~246px = micro text). 20 Jul 2026. */
@media (max-width: 540px){
  .diagram-wrap, .diagram{
    width: 100% !important;
    max-width: 100% !important;
    overflow-x: visible !important;
  }
  .diagram-wrap > svg, .diagram > svg, .diagram-wrap svg.cnp-diagram, .diagram svg{
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
    height: auto !important;
  }
}

/* full-bleed the ai-prompt .diagram-wrap out of the narrow column so wide
   charts use the whole viewport width on phones (full-bleed-diagram). 20 Jul */
@media (max-width: 540px){
  .cnpnp .diagram-wrap,
  .cnpnp .diagram{
    width: 100vw !important;
    max-width: 100vw !important;
    margin-left: calc(50% - 50vw) !important;
    margin-right: calc(50% - 50vw) !important;
    padding-left: 6px !important;
    padding-right: 6px !important;
    box-sizing: border-box !important;
    overflow: visible !important;
  }
  .cnpnp .diagram-wrap > svg,
  .cnpnp .diagram > svg,
  .cnpnp .diagram svg{
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
    height: auto !important;
    display: block !important;
  }
}

/* --- gt11-passport-css  <-  /novo/wp-content/themes/coachfocus-child/gt11_passport.css (9150 B) --- */
/* Grand Tour #11 - The Reader's Passport - FABLE redesign (20 Jul 2026)
 * "A small official document, issued by the house."
 * Drop-in replacement for LIVE_gt11_passport.css. Every original selector kept.
 * No new DOM required: the cover band, guilloche, document number, AWAITING
 * microtext and MRZ line are all built from existing elements + pseudo-elements.
 * Palette: Instrument tokens only. No external assets. Reversible.
 */
:root{
  --gt11-cream:#F5EEE1; --gt11-card:#FBF6EB; --gt11-ink:#2A211B;
  --gt11-dark:#1A1714;  --gt11-soft:#6E6253; --gt11-hair:#DED3BF;
  --gt11-orange:#C75B22; --gt11-otext:#A8481A; --gt11-green:#1D7A55;
}
/* Opt-in dark token set (bonus; site currently renders light).
 * Activate by adding class "gt11-dark" to <html> - nothing else changes. */
:root.gt11-dark{
  --gt11-cream:#1E1913; --gt11-card:#241E17; --gt11-ink:#F0E7D8;
  --gt11-dark:#141110;  --gt11-soft:#A79A87; --gt11-hair:#3A322A;
  --gt11-orange:#D96F35; --gt11-otext:#E08A4F;
}

/* ---- the nav chip: a small laminated booklet cover ---- */
.gt11-chip{
  display:inline-flex; align-items:center; gap:.45em;
  font-family:"IBM Plex Mono", ui-monospace, monospace;
  font-weight:500; letter-spacing:.08em; text-transform:uppercase;
  color:var(--gt11-ink); background:var(--gt11-card);
  border:1px solid var(--gt11-hair); border-radius:14px;
  box-shadow:inset 0 0 0 2px var(--gt11-card), inset 0 0 0 3px var(--gt11-hair); /* fine double rule, like a cover frame */
  padding:4px 11px; margin:0 3px; cursor:pointer;
  white-space:nowrap; -webkit-appearance:none; appearance:none;
  transition:border-color .18s ease, background .18s ease, box-shadow .18s ease;
}
.gt11-chip:hover{ border-color:var(--gt11-soft); }
/* the dot becomes a tiny empty stamp ring; season ticket fills it */
.gt11-chip .gt11-dot{
  width:7px; height:7px; border-radius:50%;
  background:transparent; border:1.5px solid var(--gt11-orange);
  opacity:.85; flex:0 0 auto; box-sizing:border-box;
}
/* two compact lines so the chip stays narrow and the nav has room to breathe */
.gt11-chip .gt11-txt{ display:flex; flex-direction:column; align-items:flex-start; line-height:1.06; }
.gt11-chip .gt11-l1{ font-size:9px; font-weight:600; letter-spacing:.1em; }
.gt11-chip .gt11-l2{ font-size:8px; letter-spacing:.12em; color:var(--gt11-soft); }
.gt11-chip.is-season .gt11-l2{ color:var(--gt11-orange); }
.gt11-chip.is-season{ border-color:var(--gt11-orange); border-width:1px; }
.gt11-chip.is-season .gt11-dot{ opacity:1; background:var(--gt11-orange); }
/* keep the nav from breaking on narrow widths: hide the inline chip once the
   nav collapses toward the hamburger layout. */
@media (max-width:980px){ .gt11-chip.gt11-in-nav{ display:none; } }

/* fixed fallback mini-chip (only used when no nav slot was found) */
.gt11-chip.gt11-fixed{ position:fixed; top:14px; right:14px; z-index:99998; box-shadow:0 2px 10px rgba(42,33,27,.14); }

/* ---- the panel: an open passport page under a dark cover band ---- */
.gt11-panel{
  position:fixed; top:70px; right:16px; z-index:99999;
  width:min(348px, calc(100vw - 32px));
  /* faint laid-paper texture: hairline horizontal lines on warm card stock */
  background:
    repeating-linear-gradient(0deg, rgba(42,33,27,.016) 0 1px, transparent 1px 5px),
    var(--gt11-card);
  border:1px solid var(--gt11-hair);
  border-radius:16px; box-shadow:0 18px 44px rgba(42,33,27,.20);
  padding:16px 16px 13px; color:var(--gt11-ink);
  font-family:"IBM Plex Mono", ui-monospace, monospace;
  overflow:hidden; /* the cover band bleeds to the edges */
}
.gt11-panel[hidden]{ display:none; }
@keyframes gt11-open{ from{ opacity:0; transform:translateY(-6px); } to{ opacity:1; transform:none; } }
.gt11-panel:not([hidden]){ animation:gt11-open .22s ease-out both; }

/* cover band: dark ink, engine-turned guilloche arcs, burnt-orange foot rule */
.gt11-head{
  display:flex; align-items:center; justify-content:space-between;
  margin:-16px -16px 0; padding:11px 14px 10px;
  background:
    repeating-radial-gradient(circle at -12% 50%, transparent 0 5px, rgba(245,238,225,.055) 5px 6px),
    repeating-radial-gradient(circle at 112% 50%, transparent 0 5px, rgba(245,238,225,.055) 5px 6px),
    var(--gt11-dark);
  border-bottom:2px solid var(--gt11-orange);
}
/* official document header: mono kicker over a single small serif line */
/* the theme has an h2 rule that inflates this to ~35px on the live site (the
   Fable harness had no theme, so it looked right there). Force the one-line,
   document-header size that Miguel asked for. */
.gt11-panel .gt11-title{
  font-family:"Newsreader", Georgia, serif; font-weight:500;
  font-size:13.5px !important; letter-spacing:.16em; text-transform:uppercase;
  white-space:nowrap !important; color:var(--gt11-cream); margin:0 !important; line-height:1.15 !important;
}
.gt11-title::before{
  content:"Cost & Profitability \00B7\00A0Grand Tour";
  display:block; font-family:"IBM Plex Mono", ui-monospace, monospace;
  font-size:7.5px; font-weight:500; letter-spacing:.3em; text-transform:uppercase;
  color:rgba(245,238,225,.55); margin-bottom:4px;
}
:root.gt11-dark .gt11-title{ color:var(--gt11-ink); }
.gt11-close{
  -webkit-appearance:none; appearance:none; background:none; border:0; cursor:pointer;
  color:rgba(245,238,225,.6); font-size:17px; line-height:1; padding:2px 4px; font-family:inherit;
}
.gt11-close:hover{ color:var(--gt11-cream); }
:root.gt11-dark .gt11-close:hover{ color:var(--gt11-ink); }

/* data line: territory register on the left, document number on the right */
.gt11-sub{
  display:flex; justify-content:space-between; align-items:baseline; gap:10px;
  font-size:8.5px; letter-spacing:.18em; text-transform:uppercase;
  color:var(--gt11-soft); margin:13px 0 12px;
  padding-bottom:8px; border-bottom:1px solid var(--gt11-hair);
}
.gt11-sub::after{
  content:"N\00BA\00A0GT-11"; flex:0 0 auto;
  letter-spacing:.14em; color:var(--gt11-otext);
}

/* ---- stamp grid ---- */
.gt11-grid{ display:grid; grid-template-columns:repeat(3,1fr); gap:13px 6px; }
.gt11-cell{ display:flex; flex-direction:column; align-items:center; text-align:center; padding:5px 2px 4px; border-radius:10px; }
.gt11-cell .gt11-lbl{ font-size:9px; letter-spacing:.06em; text-transform:uppercase; color:var(--gt11-soft); margin-top:6px; max-width:90px; }
.gt11-svg-wrap{ width:76px; height:76px; position:relative; }
.gt11-stamp{ width:100%; height:100%; display:block; transform:rotate(var(--gt11-rot,0deg)); }

/* empty slots: quiet "awaiting stamp" reservations */
.gt11-cell.is-empty{ opacity:.38; }
.gt11-cell.is-empty .gt11-svg-wrap{ filter:grayscale(1); }
.gt11-cell.is-empty svg circle{ stroke:var(--gt11-hair); }
.gt11-cell.is-empty .gt11-svg-wrap::after{
  content:"Awaiting"; position:absolute; inset:0;
  display:flex; align-items:center; justify-content:center;
  font-size:6.5px; letter-spacing:.26em; text-indent:.26em; text-transform:uppercase;
  color:var(--gt11-soft); pointer-events:none;
}
/* clickable territory cells: go to that territory's page (in the reader's language) */
a.gt11-cell.gt11-link{ text-decoration:none; color:inherit; cursor:pointer; transition:background .16s ease, opacity .16s ease; }
a.gt11-cell.gt11-link:hover{ background:var(--gt11-cream); }
a.gt11-cell.gt11-link:hover .gt11-lbl{ color:var(--gt11-orange); }
a.gt11-cell.is-empty.gt11-link{ opacity:.6; }                       /* clickable empties read brighter than dead ones */
a.gt11-cell.is-empty.gt11-link:hover{ opacity:1; }
a.gt11-cell.is-empty.gt11-link:hover .gt11-svg-wrap{ filter:none; }
a.gt11-cell.is-empty.gt11-link:hover svg circle{ stroke:var(--gt11-orange); }
a.gt11-cell.is-empty.gt11-link:hover .gt11-svg-wrap::after{ color:var(--gt11-otext); }
a.gt11-cell.gt11-link:focus-visible{ outline:2px solid var(--gt11-orange); outline-offset:2px; }

/* the "thunk" settle on a freshly earned stamp */
@keyframes gt11-thunk{ 0%{transform:rotate(var(--gt11-rot,0deg)) scale(1.15);} 100%{transform:rotate(var(--gt11-rot,0deg)) scale(1);} }
.gt11-stamp.is-fresh{ animation:gt11-thunk .28s cubic-bezier(.2,.8,.3,1) both; }
@media (prefers-reduced-motion:reduce){
  .gt11-stamp.is-fresh{ animation:none; }
  .gt11-panel:not([hidden]){ animation:none; }
}

/* ---- foot: machine-readable zone above the tally ---- */
.gt11-foot{
  display:flex; flex-wrap:wrap; justify-content:space-between; align-items:center;
  margin-top:14px; padding-top:8px; border-top:1px solid var(--gt11-hair);
}
.gt11-foot::before{
  content:"P<CNP<<READER<S<PASSPORT<<<<<<<<<<<<<<<<<<<<<<<<";
  flex:1 0 100%; overflow:hidden; white-space:nowrap;
  font-size:8px; letter-spacing:.14em; line-height:1;
  color:var(--gt11-soft); opacity:.4; margin-bottom:7px;
  pointer-events:none; user-select:none;
}
.gt11-foot .gt11-count{ font-size:10px; letter-spacing:.08em; text-transform:uppercase; color:var(--gt11-soft); }
.gt11-reset{
  background:none; border:0; cursor:pointer; font-family:inherit;
  font-size:10px; letter-spacing:.06em; text-transform:uppercase;
  color:var(--gt11-soft); padding:0;
  text-decoration:underline dotted; text-underline-offset:2px;
}
.gt11-reset:hover{ color:var(--gt11-orange); }

/* --- gt43-farestamp-css  <-  /novo/wp-content/themes/coachfocus-child/gt43_farestamp.css (633 B) --- */
/* gt43_farestamp.css · Grand Tour #43 · drop-cap as a fare stamp.
   The .dropcap initial (set by cnp-dropcap.php on /about/, blog, events) is
   framed like a punched fare stamp: hairline box on cream card, burnt-orange
   Newsreader initial, a soft lift. Reversible: delete this file + enqueue. */
.dropcap::first-letter{
  border: 1px solid #DED3BF;
  background: #FBF6EB;
  border-radius: 7px;
  padding: 8px 11px 4px;
  margin: 5px 14px 2px 0;
  line-height: .9;
  box-shadow: 0 3px 8px -6px rgba(42,33,27,.45);
}
@media (prefers-reduced-motion: no-preference){
  .dropcap::first-letter{ transition: box-shadow .2s ease; }
}

/* --- gt-crafts-css  <-  /novo/wp-content/themes/coachfocus-child/gt_crafts.css (3995 B) --- */
/* ============================================================
   Grand Tour - First-class craft bundle  (gt_crafts.css)
   Prepared 19 Jul 2026 - NOT deployed. Enqueued by gt_crafts.php.
   Deploy to theme root: /www/novo/wp-content/themes/coachfocus-child/
   Instrument tokens: cream #F5EEE1 · card #FBF6EB · ink #2A211B ·
   soft-ink #6E6253 · hairline #DED3BF · burnt-orange #C75B22.
   All static - nothing animates - so prefers-reduced-motion is honoured.
   ============================================================ */

/* ------------------------------------------------------------
   #96  Honest timestamps, manifesto style.
   Presentation only. gt_crafts.php re-wraps the EXISTING
   .cnp-updated text into: [.gt-svc-tag][.gt-svc-sep][.gt-svc-date]
   and adds .gt-svc. The date value is never touched. Falls back
   gracefully to the theme's own .cnp-updated styling if JS is off.
   ------------------------------------------------------------ */
.cnp-updated.gt-svc{
    display:flex;
    align-items:center;
    gap:9px;
    flex-wrap:wrap;
}
.cnp-updated.gt-svc .gt-svc-tag{
    font-family:'IBM Plex Mono',ui-monospace,SFMono-Regular,Consolas,monospace;
    font-size:10px;
    font-weight:500;
    letter-spacing:.14em;
    text-transform:uppercase;
    color:#C75B22;                 /* burnt-orange departure-board label */
    display:inline-flex;
    align-items:center;
    white-space:nowrap;
}
/* tiny leading tick - the timetable "field marker" */
.cnp-updated.gt-svc .gt-svc-tag::before{
    content:"";
    display:inline-block;
    width:8px;
    height:1px;
    margin-right:7px;
    background:#C75B22;
    opacity:.7;
}
/* hairline separator between the label and the honest date */
.cnp-updated.gt-svc .gt-svc-sep{
    width:16px;
    height:1px;
    background:#DED3BF;
    flex:0 0 auto;
}
.cnp-updated.gt-svc .gt-svc-date{
    font-family:'IBM Plex Mono',ui-monospace,SFMono-Regular,Consolas,monospace;
    font-size:11px;
    letter-spacing:.08em;
    text-transform:uppercase;
    color:#6E6253;                 /* soft-ink, the actual timestamp */
    font-variant-numeric:tabular-nums lining-nums slashed-zero;
}

/* ------------------------------------------------------------
   #39  Schedule ticks for table numbers.
   Give numeric cells a timetable feel: aligned lining figures,
   tabular width, slashed zero. Applied wherever digits appear in
   content tables (harmless on text - only glyph shapes change).
   NOTE: the .cc-wtable worked-example component is currently
   hidden site-wide by #cnp-tail-standard, so this is a safe
   no-op today and simply upgrades those tables when surfaced.
   ------------------------------------------------------------ */
td.num, th.num,
.cc-wtable td.num, .cc-wtable th.num,
.pf-narrow td, .pf-narrow th,
.cc-pf td, .cc-pf th,
.cc-cmp td, .cc-cmp th{
    font-variant-numeric:tabular-nums lining-nums slashed-zero;
    -moz-font-feature-settings:"tnum" 1,"lnum" 1,"zero" 1;
    font-feature-settings:"tnum" 1,"lnum" 1,"zero" 1;
}

/* Consistent mono right-alignment on the explicit numeric column only,
   so text columns are never re-aligned and layouts can't break. */
td.num, th.num,
.cc-wtable td.num, .cc-wtable th.num{
    text-align:right;
    font-family:'IBM Plex Mono',ui-monospace,SFMono-Regular,Consolas,monospace;
    white-space:nowrap;
}

/* The "schedule tick": a subtle hairline notch immediately before each
   number, evoking a timetable rule. Positioned absolutely so it adds no
   box width and cannot shift or overflow the cell. Desktop only, to keep
   narrow mobile numeric cells untouched. */
@media (min-width:700px){
    td.num, .cc-wtable td.num{
        position:relative;
    }
    td.num::before, .cc-wtable td.num::before{
        content:"";
        position:absolute;
        left:5px;
        top:50%;
        width:6px;
        height:1px;
        background:#DED3BF;
        transform:translateY(-50%);
        opacity:.7;
        pointer-events:none;
    }
}

/* --- gt-v2-css  <-  /novo/wp-content/themes/coachfocus-child/gt_v2.css (6901 B) --- */
/* ============================================================================
   gt_v2.css  —  Grand Tour "system / quick" moves  (PREPARE ONLY, not deployed)
   costandprofitability.com  ·  Instrument design language
   Loads AFTER cnp-instrument-apply.css + cnp-method-instrument.css.
   Reuses the live --cnp-* vars (verified against the FTP copy of
   cnp-method-instrument.css, md5 134f90ba…, :root block lines 47-62):
     --cnp-cream #F5EEE1 · --cnp-card #FBF6EB · --cnp-ink #2A211B
     --cnp-soft #7d7062 · --cnp-hair #DED3BF · --cnp-orange #C75B22
     --cnp-orange-text #A8481A · --cnp-mono (IBM Plex Mono)
   Every selector below was verified against a live rendered page — see
   gt_v2_plan.md. Narrow by design. Nothing touches nav / buttons / cards /
   hero. All motion is gated behind prefers-reduced-motion: no-preference.
   ============================================================================ */

/* Local, non-destructive fallbacks so the file is safe even if load order
   ever changes. If the instrument sheet is present these are simply ignored. */
:root{
  --gt-line:  var(--cnp-orange, #C75B22);
  --gt-hair:  var(--cnp-hair,   #DED3BF);
  --gt-ink:   var(--cnp-ink,    #2A211B);
  --gt-text:  var(--cnp-orange-text, #A8481A);
}

/* ---------------------------------------------------------------------------
   #34  ROUTE-LINE LINK UNDERLINES
   In-content prose links only. Verified: on pillar pages every prose <a>
   inside .pf-sec .pf-narrow is an UNCLASSED anchor (e.g. method: /tdabc-vs-abc/,
   pe/br: /br/metodo-tdabc/). Buttons (.btn/.btn-ghost-dark), neighbour cards
   (.neigh-*), reference chrome — all carry a class, so :not([class]) excludes
   them cleanly. Blog body prose lives in .article-content (unclassed <a>).
   Resting state: subtle hairline underline. Hover: burnt-orange line wipes
   left -> right, then a 3px round terminus dot lands at the end.
   --------------------------------------------------------------------------- */
.pf-sec .pf-narrow a:not([class]),
.article-content p a:not([class]),
.article-content li a:not([class]){
  color: inherit;
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-decoration-color: var(--gt-hair);   /* subtle resting underline */
  text-underline-offset: 3px;
}
/* Base hover (also the reduced-motion hover): instant, no animation. */
.pf-sec .pf-narrow a:not([class]):hover,
.pf-sec .pf-narrow a:not([class]):focus-visible,
.article-content p a:not([class]):hover,
.article-content p a:not([class]):focus-visible,
.article-content li a:not([class]):hover,
.article-content li a:not([class]):focus-visible{
  color: var(--gt-text);
  text-decoration-color: var(--gt-line);
}

/* Enhancement: the route-line wipe + terminus dot, motion only. */
@media (prefers-reduced-motion: no-preference){
  .pf-sec .pf-narrow a:not([class]),
  .article-content p a:not([class]),
  .article-content li a:not([class]){
    /* layer 1 = terminus dot (right end, hidden at rest)
       layer 2 = the route line (bottom, zero-width at rest) */
    background-image:
      radial-gradient(circle at center, var(--gt-line) 0 3px, transparent 3px),
      linear-gradient(var(--gt-line), var(--gt-line));
    background-repeat: no-repeat, no-repeat;
    background-position: right 0 bottom -1px, left bottom 1px;
    background-size: 0 0, 0% 2px;
    padding-bottom: 2px;
    transition: background-size .18s ease;   /* mouse-out retract */
  }
  .pf-sec .pf-narrow a:not([class]):hover,
  .pf-sec .pf-narrow a:not([class]):focus-visible,
  .article-content p a:not([class]):hover,
  .article-content p a:not([class]):focus-visible,
  .article-content li a:not([class]):hover,
  .article-content li a:not([class]):focus-visible{
    /* hide the static hairline so only the animated line shows */
    text-decoration-color: transparent;
    /* line wipes left->right; the terminus dot blooms at the right end as the
       line arrives (both share one timing — the dot sits flush at the end). */
    background-size: 6px 6px, 100% 2px;
    transition: background-size .42s cubic-bezier(.62,.02,.20,1);
  }
}

/* ---------------------------------------------------------------------------
   #47  SECTION DWELL  ("station dwell" between major pillar sections)
   Verified recurring wrapper: consecutive <section class="pf-sec"> on the
   pillar/method template (method = 7 pf-sec, /br/private-equity/ = 9 pf-sec,
   incl. .pf-sec.alt). Adds a centered hairline tick + extra breathing room at
   the seam. Subtle. Left whale (.sec) / cost-to-serve (.section) alone — their
   templates own a different rhythm (see plan).
   --------------------------------------------------------------------------- */
.pf-sec + .pf-sec{
  position: relative;
  margin-top: 8px;          /* a touch more dwell between stations */
}
.pf-sec + .pf-sec::before{
  content: "";
  position: absolute;
  top: 0;
  left: 50%;
  width: 28px;
  height: 1px;
  transform: translateX(-50%);
  background: var(--gt-hair);
  opacity: .9;
  pointer-events: none;
}

/* ---------------------------------------------------------------------------
   #41  TIMETABLE FIGURES  —  tabular, slashed zero on mono / data figures.
   Verified classes present site-wide: .mono (35× across the 5 pages),
   .mono-num (apply sheet), plus the instrument stat/figure numerals
   .cnp-inst-stat__fig and .cnp-inst-figure. font-variant-numeric only affects
   digit glyph rendering — a no-op on non-numeric mono labels, zero layout risk.
   lining-nums kept so .mono-num's existing figure style is preserved.
   --------------------------------------------------------------------------- */
.mono,
.mono-num,
.cnp-inst-stat__fig,
.cnp-inst-figure{
  font-variant-numeric: lining-nums tabular-nums slashed-zero;
}

/* ---------------------------------------------------------------------------
   #97  HAIRLINE DISCIPLINE  (narrow, additive — NOT a blanket border override)
   The apply sheet already normalises .rule to --cnp-hair, but only under
   .cc-pf / .sec / .sec-sm. cost-to-serve renders its sections as .section
   (no .cc-pf main), so .section .rule falls through. This one selector closes
   that gap using the same single hairline, and nothing else.
   --------------------------------------------------------------------------- */
.section .rule,
.section-tight .rule,
.section-paper-2 .rule{
  border-color: var(--gt-hair);
}

/* ---------------------------------------------------------------------------
   #93  Selection  — already shipped in the live instrument sheet. Not touched.
   #54  KPI milestone posts — SKIPPED (see plan): the only site-wide stat class
        is .cnp-inst-stat, which is bound to the hero .mh-ticket; off-limits.
   #98  Loading state — SKIPPED (see plan): no spinner/loader class exists.
   --------------------------------------------------------------------------- */

/* --- gt13-stopnumbers-css  <-  /novo/wp-content/themes/coachfocus-child/gt13_stopnumbers.css (6213 B) --- */
/* ============================================================================
   GT · GRAND TOUR move #13 — "Stop numbering in articles"  (CSS-ONLY)
        prepared 20 Jul 2026 · NOT deployed.

   Numbers the section H2s of a long-form article as journey stops, so a reader
   always knows which stop they are at. Pure CSS counters — NO markup change.

   ---- WHY (reconcile with GT#12) --------------------------------------------
   GT#12 (gt12_itinerary.js) is the fixed left-gutter rail that numbers the SAME
   stops, but it is DESKTOP-ONLY — it hides below 1000px (and when the gutter is
   too tight). So #13's real value is the MOBILE + mid-width win: it gives the
   same stop-wayfinding exactly where the rail is hidden. On wide desktop, where
   the rail already shows the number in the gutter, the inline number goes quiet
   (lighter ink, accent tick dropped) so the two read as ONE system, not a
   double-shout.

   ---- SCOPE (matches gt12's selector set EXACTLY) ---------------------------
   gt12 targets, inside main#content, the DIRECT-CHILD H2s of a prose column:
       .pf-narrow > h2   ·   .article-content > h2   ·   .entry-content > h2
   and only activates with >= 3 such H2s. This file reuses that selector set
   verbatim (via :is()) plus a >=3 gate, so numbers appear on precisely the
   pages the rail appears on and nowhere else. Home, about, hubs, listings, the
   whale-curve page and the SEO method pages (.seo-content, a DIFFERENT column
   the rail also ignores) all have zero qualifying H2s → no numbers.

   Nav modules — "Keep exploring" (.related) and "Next stop"
   (#cnp-continue-journey) — sit OUTSIDE main#content, and their H2s are not
   direct children of a prose column, so the child-combinator scoping already
   excludes them (verified against live HTML).

   ---- THE >=3 GATE ----------------------------------------------------------
   Verified live, the two long-form architectures are:
     • blog posts    — ONE .article-content column with N direct-child H2s.
     • method/pillar — N `section.pf-sec` sibling sections (direct children of
                       main#content), each -> div.pf-wrap > div.pf-narrow > h2
                       (one H2 per section; the .pf-narrow blocks are NOT
                       siblings, so the count must key on the .pf-sec siblings).
   So ">= 3 stops" is a forgiving :has() list matching EITHER:
     a) a prose column whose 3rd direct H2 exists   (blog / single column), OR
     b) a 3rd sibling section.pf-sec                 (method / multi-section).
   A hypothetical 1–2 stop article matches neither → no numbers (the rail would
   also stay hidden). Over-matching the gate is harmless: ::before only paints
   on a qualifying prose-column > h2, which non-article pages never have.

   ---- PALETTE (Instrument tokens) -------------------------------------------
     soft-ink #6E6253 · quieter ink #9A8F7C · one accent tick #C75B22 (burnt
     orange) · IBM Plex Mono. Nothing animates → prefers-reduced-motion safe.

   Reversible: delete this file + its enqueue. No markup, no JS, no PII.
   ========================================================================== */

/* The >=3 gate is repeated as the :has() prefix on each rule below. Kept literal
   (CSS has no selector variables) so the scope is auditable at every rule. */

/* -- 1. reading root: establish the stop counter, only when >= 3 stops exist -- */
main#content:has(
  .pf-narrow > h2:nth-of-type(3),
  .article-content > h2:nth-of-type(3),
  .entry-content > h2:nth-of-type(3),
  .pf-sec ~ .pf-sec ~ .pf-sec
){
  counter-reset: gt13-stop;
}

/* -- 2. count each qualifying stop (the EXACT gt12 selector set) -------------- */
main#content:has(
  .pf-narrow > h2:nth-of-type(3),
  .article-content > h2:nth-of-type(3),
  .entry-content > h2:nth-of-type(3),
  .pf-sec ~ .pf-sec ~ .pf-sec
) :is(.pf-narrow, .article-content, .entry-content) > h2{
  counter-increment: gt13-stop;
}

/* -- 3. the station-number tab: a calm mono label ABOVE the (serif) heading --- */
main#content:has(
  .pf-narrow > h2:nth-of-type(3),
  .article-content > h2:nth-of-type(3),
  .entry-content > h2:nth-of-type(3),
  .pf-sec ~ .pf-sec ~ .pf-sec
) :is(.pf-narrow, .article-content, .entry-content) > h2::before{
  content: counter(gt13-stop, decimal-leading-zero);  /* 01, 02, 03 … automatic */
  display: block;
  width: max-content;          /* tab only as wide as the number — never full row */
  max-width: 100%;             /* and never wider than the column → no overflow    */
  margin: 0 0 .5em;            /* breathing room above the heading                 */
  padding-left: 13px;          /* room for the accent tick                         */
  font-family: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, "Consolas", monospace;
  font-size: .72rem;
  font-weight: 500;
  line-height: 1;
  letter-spacing: .2em;
  color: #6E6253;              /* soft-ink                                         */
  /* one small accent (max): a 2.5px burnt-orange "you are here" tick before it */
  background: radial-gradient(circle 2.5px at 4px 50%, #C75B22 99%, transparent 100%) no-repeat;
}

/* -- 4. reconcile with GT#12 on wide desktop --------------------------------- */
/* The rail is visible >= 1000px and already numbers these stops in the gutter,
   so keep the inline number a whisper here (quieter ink matching the rail's
   passed-stop label, accent tick dropped) — one system, calm. */
@media (min-width: 1000px){
  main#content:has(
    .pf-narrow > h2:nth-of-type(3),
    .article-content > h2:nth-of-type(3),
    .entry-content > h2:nth-of-type(3),
    .pf-sec ~ .pf-sec ~ .pf-sec
  ) :is(.pf-narrow, .article-content, .entry-content) > h2::before{
    color: #9A8F7C;            /* quieter soft-ink (= rail's passed-stop ink)      */
    background: none;          /* the gutter rail carries the burnt-orange node    */
    padding-left: 0;
    font-size: .68rem;
    opacity: .8;
  }
}

/* -- 5. print: no stop tabs on paper (the rail is print-hidden too) ----------- */
@media print{
  main#content :is(.pf-narrow, .article-content, .entry-content) > h2::before{
    content: none;
  }
}

/* --- grandtour-v1-css  <-  /novo/wp-content/themes/coachfocus-child/grandtour_v1.css (1854 B) --- */
/* Grand Tour v1 (19 Jul 2026) — first design moves toward the journey/ticket experience.
   #93 selection livery · #23 real punched perforation on the boarding-pass tear. Reversible: delete the enqueue mu-plugin. */
::selection{ background:#C75B22; color:#FBF6EB; }
::-moz-selection{ background:#C75B22; color:#FBF6EB; }
:root[data-theme="dark"] ::selection{ background:#e0733a; color:#1b1712; }

/* #23 — the ticket tear becomes real perforation: holes punched through, page ground showing */
.cnp-inst-tear{
  border-top: none !important;
  height: 3px !important;
  background-image: radial-gradient(circle at 4.5px 1.5px, var(--cnp-notch-bg, #F5EEE1) 1.7px, transparent 1.8px) !important;
  background-size: 9px 3px !important;
  background-repeat: repeat-x !important;
  background-position: left center !important;
}

/* #91 — the maker's plate: a small engraved brass plate at the base of every carriage */
.cnp-makers-plate{ text-align:center; font-family:'IBM Plex Mono',ui-monospace,monospace; font-size:9.5px; letter-spacing:.16em; text-transform:uppercase; color:var(--cnp-soft,#6E6253); padding:16px 12px 22px; background:transparent; }
.cnp-makers-plate .rule{ display:inline-block; width:18px; height:1px; background:var(--cnp-hair,#DED3BF); vertical-align:middle; margin:0 10px; }

/* #1 — The Departure Line: framing each pf-hero as a leg of the journey */
.cnp-departure-line{ display:flex; flex-wrap:wrap; align-items:center; gap:5px 9px; font-family:'IBM Plex Mono',ui-monospace,monospace; font-size:10.5px; letter-spacing:.11em; text-transform:uppercase; color:var(--cnp-soft,#6E6253); margin:0 0 16px; }
.cnp-departure-line .dl-l{ opacity:.7; }
.cnp-departure-line .dl-t{ color:var(--cnp-ink,#2A211B); }
.cnp-departure-line .dl-arrow{ color:var(--cnp-orange,#C75B22); letter-spacing:-.06em; margin:0 1px; font-size:9px; }
