/* KULIC Advisory - Wave 137: Radius Normalization
   One scale across the entire surface. Before: ~30 different corner radii
   (0/2/3/4/6/7/8/9/10/12/13/14/16/18/20/22/30px) mixed within the same views.
   After: one rounded scale - 6px controls, 10px cards, 14px shells.
   True circles (50%) and decorative pills/dots/markers (999px) stay untouched. */

:root{
  /* Decision 2026-07-28: one language, and it is rounded.
     Before, ~30 different radii were mixed inside the same view. Now there is
     a single three-step scale: controls, cards, shells. Restrained enough to
     stay boardroom-grade, consistent enough that nothing reads as stitched
     together. Circles (50%) and decorative dots keep their own shape. */
  --ka-r-sm:6px;    /* buttons, chips, inputs, small links */
  --ka-r-md:10px;   /* cards, tiles, panels, figures, list surfaces */
  --ka-r-lg:14px;   /* large shells, consoles, frames, carousels, video */
}

/* ---------- Large shells, consoles, frames, carousels ---------- */
.ka-frame,
.signal-routing-board,
.diagnosis-hero-shell,.advisory-hero-shell,.proof-hero-shell,
.diagnosis-terrain-shell,.advisory-terrain-shell,.proof-terrain-shell,
.proof-trust-panel,
.diagnosis-console,.advisory-route-console,.proof-console,.faq-route-console,
.faq-hero-copy,.proof-evidence-boundary,.proof-trust-bridge,
.nostromo__console,.signal-filter-module,
.visual-proof-carousel-viewport,.usecase-recovered-carousel__viewport,
.visual-proof-slide,.capability-architecture-shell,
.final-panel,.hero-osbs-module__video-frame,.hero-tv-secondary__frame,
.money-path-strip,.contact-paid-banner,.routing-console-bridge,
.service-lane,.faq-route-console__readout,
.usecase-flagship-carousel .visual-proof-carousel-viewport{
  border-radius:var(--ka-r-lg)!important;
}

/* ---------- Cards, tiles, panels, figures, list surfaces ---------- */
.offer-tile,
.cta-microcopy-card,
.value-snapshot-price-card,
.value-investment-card,
.value-signal-stamp,
.value-founder-block figure,
.service-atlas__lane,
.service-lane__offers a,
.w25ab-depth-card,
.sigflow__node,
.ka-owners__grid li,
.ka-card,.routing-card,.insight-card,.faq-category,.terrain-console-card,
.diagnosis-entry-card,.diagnosis-output-grid article,.diagnosis-trust-panel,
.diagnosis-entry-assessment,
.advisory-path-card,.advisory-entry-card,
.proof-boundary-card,.proof-surface-card,.proof-final-cta,.proof-metric-tile,
.usecase-terrain-proof-card,.usecase-trust-bridge,
.trust-card,.command-panel,.signal-route-card,
.contact-senior-read,.contact-value-snapshot-card,.contact-intake-form,
.intake-card-form,.newsletter-form,.executive-intake-guidance,
.decision-pack-intake-context,.form-response,
.value-snapshot-inline-card,
.hero-recurring-signal,.hero-proof-marker,.hero-osbs-proof-badge--left,
.hero-rail-module,.mandate-fit-aside-clean,
.sh-orbit__out-card,.nostromo__card,.nostromo__log,.nostromo__help,
.nostromo__routecard,.nostromo__typing,.nostromo__pal,
.faq-details-grid details,.faq-route-grid a,
.profile-photo,.about-portrait,.archive-link-grid a,
.diagnosis-console__row,.advisory-route-console__row,.proof-console__row,
.diagnosis-console__rows li,
.oah-depth-panel li,.sg-roi__outs>div,
.hero5d-companion__panel{
  border-radius:var(--ka-r-md)!important;
}

/* ---------- Controls: buttons, chips, inputs, small links ---------- */
.button,
.header-cta,.cta-v1,
.explainable-chip,
.w25ab-checkout,.w25ab-route-review,
.service-lane__compare,.service-lane__console,
.advisory-entry-action,.home-cta,
.newsletter-form input,.newsletter-form select,.newsletter-form textarea,
.contact-intake-form input,.contact-intake-form textarea,.contact-intake-form select,
.money-path-strip a,.buyer-path-card a,.pricing-strip a,.story-cta-link,
.trust-link-row a,
.sg-msg--bot,.sg-msg--module,.sg-msg--scan,
.nostromo__pal-opt,
.proof23-meta span,.proof-strip span,
.sh-orbit__tip{
  border-radius:var(--ka-r-sm)!important;
}

/* ==========================================================================
   V5-02 / V4-02 - the consent layer covered 22 controls in the first viewport
   It floated as a 680x153 block above the lower right corner, exactly where
   the paid diagnostic chips and several primary CTAs sit (mobile: 374x223 =
   26% of the viewport). It is now a flush full-width strip at the very bottom
   edge: same content, same buttons, but it only occupies a thin band instead
   of a block over the conversion area.
   ========================================================================== */
.cookie-consent{
  right:0!important;
  left:0!important;
  bottom:0!important;
  width:auto!important;
  max-width:none!important;
  align-items:center;
  gap:clamp(12px,2vw,28px)!important;
  padding:.6rem clamp(16px,3vw,34px)!important;
  border-left:0!important;
  border-right:0!important;
  border-bottom:0!important;
}

/* copy reads as one line on wide screens so the strip stays under ~96px */
.cookie-consent__copy{
  display:flex;
  flex-wrap:wrap;
  align-items:baseline;
  gap:.15rem .65rem;
}
.cookie-consent__copy p{margin:0}

@media (max-width:760px){
  .cookie-consent{
    grid-template-columns:1fr!important;
    gap:.5rem!important;
    padding:.6rem 1rem!important;
  }
  .cookie-consent__copy{gap:.1rem .5rem}
  .cookie-consent__actions{display:flex;gap:.5rem}
  .cookie-consent__actions .button{flex:1 1 0;min-width:0}
}

/* mobile: keep the full consent wording (no truncation of a legal notice)
   but tighten the type so the strip stays well under a fifth of the screen */
@media (max-width:760px){
  .cookie-consent__copy strong{font-size:.76rem;line-height:1.3}
  .cookie-consent__copy p{font-size:.7rem;line-height:1.34}
  .cookie-consent__copy a{font-size:.72rem}
  .cookie-consent__actions .button{padding:.5rem .6rem;font-size:.7rem}
}

/* ==========================================================================
   Wave 137 - one page rail for the whole site
   The base container is .section-inner{width:min(1540px,100%)} with no gutter,
   but at least ten families override it with their own width and their own
   margin: 1240px, 1180px, 1110px, 940px, 880px, 860px, and gutters of 2rem,
   32px or 3rem. Two sections on the same page therefore start their text at
   different x positions, which reads as a mistake rather than as rhythm.
   One rail, one gutter, applied to the container itself. Inner text keeps its
   own reading measure - it simply starts at the same left edge everywhere.
   ========================================================================== */
:root{
  --ka-rail:1540px;
  --ka-gutter:clamp(20px,4vw,56px);
}

.section-inner,
.w25ab-shell{
  width:min(var(--ka-rail), 100% - (var(--ka-gutter) * 2))!important;
  max-width:none!important;
  margin-inline:auto!important;
}

/* Centred cards keep their narrow, symmetric measure: they are deliberate
   objects, not a shifted page edge. */
body.ka-page .final-cta:not(.contact-intake-section) .section-inner,
.diagnosis-final-cta .section-inner,
.proof-evidence-boundary > .section-inner{
  width:min(var(--ka-rail), 100% - (var(--ka-gutter) * 2))!important;
}

/* Reverted 2026-07-29: cyan on "System over Ego." was tried and rejected.
   The primary tagline stays white, "Signal over Noise." keeps the gold. */
.official-wordmark .official-tagline-primary,
body.ka-page .official-wordmark em .official-tagline-primary,
.site-footer .official-tagline-primary{
  color:#ffffff!important;
}

/* ==========================================================================
   Empty dark placeholder boxes
   .trust-signal-card was stretched to the full height of the taller hero
   column with its content pinned to the bottom (align-content:end), which
   left a tall void above the text. The card now hugs its own content.
   ========================================================================== */
.trust-signal-card{
  align-self:start!important;
  align-content:start!important;
}

/* Deep dives were a single run-on paragraph with middots between three links.
   They are routes, so they get the shape of routes. */
.ka-deepdives{
  list-style:none;
  margin:1.1rem 0 0;
  padding:0;
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(260px,1fr));
  gap:.9rem;
}
.ka-deepdives li{margin:0}
.ka-deepdives a{
  display:flex;
  align-items:center;
  min-height:64px;
  height:100%;
  padding:.95rem 1.1rem;
  border:1px solid rgba(120,150,180,.22);
  border-radius:var(--ka-r-md,10px);
  background:linear-gradient(180deg,rgba(10,18,30,.72),rgba(6,12,22,.72));
  color:#f2f7ff;
  font-style:normal;
  font-size:.94rem;
  line-height:1.35;
  text-decoration:none;
  transition:border-color 160ms ease,color 160ms ease;
}
.ka-deepdives a:hover,
.ka-deepdives a:focus-visible{
  border-color:rgba(230,184,79,.55);
  color:#ffffff;
}

/* ==========================================================================
   Body copy was wearing the lead style
   .section-lead is gold italic - right for a short opener, wrong for a full
   paragraph, where it reads like a title crawl. 25 paragraphs across 17 pages
   were doing exactly that. They are now body copy, and a section whose entire
   content is one such paragraph no longer claims full section padding.
   ========================================================================== */
.ka-note{
  margin:0;
  max-width:78ch;
  color:rgba(233,240,250,.82);
  font-style:normal;
  font-weight:400;
  font-size:clamp(.95rem,1.1vw,1.06rem);
  line-height:1.6;
}
.ka-note strong{color:#fff7e8;font-weight:700}
.ka-note a{color:#e6b84f}

.section:has(> .section-inner > .ka-note:only-child){
  padding-block:clamp(1.2rem,2.6vw,2rem)!important;
}

/* ==========================================================================
   WAVE 138 - commerce guard (audit V5-03)
   The companion steps back whenever a paid checkout surface shares the
   screen. Measured before: on /value-snapshot/ at 1440x900 the bubble opened
   at x982-1283 / y691-788, flush against the bottom edge of the EUR 149
   checkout button (x1002-1284 / y647-691), and the dock cleared the price
   card by 3px. Nothing may sit on the shortest revenue path.
   ========================================================================== */
.wave23d-companion__dock {
  transition: transform .42s cubic-bezier(.22,.61,.36,1), opacity .42s ease;
}

/* parked state: a discreet marker, no speech */
.wave23d-companion[data-ka-yield="1"] .wave23d-companion__bubble {
  opacity: 0 !important;
  visibility: hidden !important;
  pointer-events: none !important;
  transform: translateX(14px) scale(.96) !important;
  animation: none !important;
}
.wave23d-companion[data-ka-yield="1"] .wave23d-companion__dock {
  transform: scale(.6);
  opacity: .48;
}

/* deliberate hover brings it back in full - nothing is lost, only deferred */
.wave23d-companion[data-ka-yield="1"]:hover .wave23d-companion__dock,
.wave23d-companion[data-ka-yield="1"]:focus-within .wave23d-companion__dock {
  transform: none;
  opacity: 1;
}
.wave23d-companion[data-ka-yield="1"]:hover .wave23d-companion__bubble,
.wave23d-companion[data-ka-yield="1"]:focus-within .wave23d-companion__bubble {
  opacity: 1 !important;
  visibility: visible !important;
  pointer-events: auto !important;
  transform: none !important;
}

@media (prefers-reduced-motion: reduce) {
  .wave23d-companion__dock { transition: none; }
}

/* ==========================================================================
   WAVE 138 - the legal document standard
   Thirteen legal routes were each carrying whatever type scale their original
   template happened to have: hero-sized display headings over 1.370px measure
   for numbered contract clauses. A contract is a document, not a landing page.
   One reading standard now applies to all of them: narrower measure, calm
   heading scale, generous leading. Same header, same rail, same radii.
   ========================================================================== */
[data-ka-doc="legal"] {
  --ka-doc-measure: 74ch;
}
[data-ka-doc="legal"] main .section-inner,
[data-ka-doc="legal"] main .w25ab-shell {
  max-width: min(760px, calc(100% - var(--ka-gutter, 40px) * 2)) !important;
  margin-inline: auto !important;
}
/* the column is the measure - nothing inside it gets its own narrower cap,
   otherwise headings wrap after four words in a half-empty field */
[data-ka-doc="legal"] main .section-inner > *,
[data-ka-doc="legal"] main h1,
[data-ka-doc="legal"] main h2,
[data-ka-doc="legal"] main h3,
[data-ka-doc="legal"] main p,
[data-ka-doc="legal"] main li,
[data-ka-doc="legal"] main ul,
[data-ka-doc="legal"] main ol {
  max-width: none !important;
}
[data-ka-doc="legal"] main h1 {
  font-size: clamp(1.9rem, 3.4vw, 2.9rem) !important;
  line-height: 1.08 !important;
  letter-spacing: -0.02em;
  margin-bottom: 0.9rem;
}
[data-ka-doc="legal"] main h2 {
  font-size: clamp(1.12rem, 1.55vw, 1.42rem) !important;
  line-height: 1.24 !important;
  letter-spacing: -0.005em;
  margin-block: 2.1rem 0.65rem !important;
  padding-top: 1.1rem;
  border-top: 1px solid rgba(226, 237, 252, .10);
}
[data-ka-doc="legal"] main h2:first-of-type { border-top: 0; padding-top: 0; }
[data-ka-doc="legal"] main h3 {
  font-size: clamp(1rem, 1.2vw, 1.1rem) !important;
  line-height: 1.3 !important;
  margin-block: 1.4rem 0.5rem !important;
}
[data-ka-doc="legal"] main p,
[data-ka-doc="legal"] main li {
  font-size: 0.95rem;
  line-height: 1.74;
}
[data-ka-doc="legal"] main .eyebrow { margin-bottom: 0.5rem; }
[data-ka-doc="legal"] main section + section { padding-block-start: 0 !important; }

/* ==========================================================================
   WAVE 138b - consent safe area (audit V6-02 / V6-08)
   The slim consent bar (1440x64 desktop, 390x139 mobile) still covered twelve
   controls: four diagnostic chips on /executive-diagnosis/ and
   /de/executive-diagnosis/, and four mobile primary CTAs on
   /de/executive-diagnosis/, /de/services/, /insights/ and /de/insights/.
   The bar height is published by header-command-rail.js as --ka-consent-h.
   The reserve sits after all content, so it can never shift anything above it.
   ========================================================================== */
:root { --ka-consent-h: 0px; }

html { scroll-padding-bottom: calc(var(--ka-consent-h) + 20px); }

body { padding-block-end: calc(var(--ka-consent-h) + 14px); }

/* the bar itself must not inherit the reserve it creates */
.cookie-consent, #cookie-consent, [data-cookie-consent] { padding-block-end: 0; }

/* ==========================================================================
   WAVE 138b - V6-07: the only serious WCAG finding in the whole estate.
   The link to the Terms sits inside the purchase note, directly at the buy
   action, and was distinguishable from the surrounding text by colour alone
   (WCAG 1.4.1). Four nodes on /executive-advisory/ and /de/executive-advisory/.
   ========================================================================== */
.ea-purchase-note a,
.ka-note a,
.service-lane__boundary a {
  text-decoration: underline;
  text-underline-offset: 0.18em;
  text-decoration-thickness: from-font;
}

/* ==========================================================================
   WAVE 138b - V6-05: target sizes.
   WCAG 2.2 asks for 24x24 CSS pixels; the Trust Center commits the estate to
   38px for download actions. Raises the named offenders without a rebuild.
   ========================================================================== */
.ka-deepdives a,
.ka-404__routes a,
.site-nav__primary a,
.site-footer a,
footer a {
  min-height: 24px;
  display: inline-flex;
  align-items: center;
}
.site-footer a, footer a { padding-block: 2px; }

a[download],
a[href$=".pdf"],
a[href$=".xlsx"],
a[href$=".docx"],
.template-card a,
.templates-grid a {
  min-height: 38px;
  display: inline-flex;
  align-items: center;
}

/* ==========================================================================
   WAVE 138b - the consent strip on small screens (audit V6-02 / V6-08)
   Desktop already sits at 64px / 7% of the viewport. Mobile was still 139px
   = 16%, because the copy wrapped to four lines above a full-width button
   row. Mobile is the strongest variant the site has - 460ms LCP, 696 KiB,
   CLS 0,0000 on every measured route - and it was the variant most covered.
   The strip now reads as one compact block: tighter leading, the secondary
   line demoted, and the two choices on the same row as the text on anything
   above 380px. Nothing is truncated, no wording is lost.
   ========================================================================== */
@media (max-width: 760px) {
  .cookie-consent {
    padding: .5rem .85rem !important;
    gap: .4rem !important;
    align-items: center;
  }
  .cookie-consent__copy { gap: .05rem .4rem; line-height: 1.32; }
  .cookie-consent__copy p { font-size: .74rem; line-height: 1.32; }
  .cookie-consent__copy strong,
  .cookie-consent__copy b { font-size: .74rem; }
  .cookie-consent__actions { gap: .4rem; }
  .cookie-consent__actions .button {
    min-height: 38px;
    padding-block: .4rem;
    font-size: .74rem;
  }
}
@media (max-width: 760px) and (min-width: 381px) {
  .cookie-consent {
    display: grid !important;
    grid-template-columns: minmax(0, 1fr) auto !important;
    align-items: center;
    column-gap: .7rem !important;
  }
  .cookie-consent__actions { display: flex; flex-wrap: nowrap; }
  .cookie-consent__actions .button { flex: 0 0 auto; min-width: 84px; }
}

/* ==========================================================================
   WAVE 138b - the B2B commerce note, everywhere it appears
   V5-01 removed the 38px reflow for the note as a direct child of body.
   /about/ carries it nested one level deeper, so it still contributed a
   52px shift at t=106ms (CLS 0,0315 - second highest route in the estate).
   The note stays in the accessibility tree; it just stops occupying layout.
   ========================================================================== */
.b2b-commerce-note {
  position: absolute !important;
  width: 1px !important;
  height: 1px !important;
  margin: -1px !important;
  padding: 0 !important;
  overflow: hidden !important;
  clip: rect(0 0 0 0) !important;
  clip-path: inset(50%) !important;
  white-space: nowrap !important;
  border: 0 !important;
}

/* ==========================================================================
   WAVE 145 - the diagnostic radar shows one read at a time (Audit v7, U-01)
   All four reads used to be open at once: twelve chips plus two checkouts,
   sixteen decisions in the first viewport against a peer median of five. The
   reads, the weights and the scoring are untouched. Only one is open now.
   An answered read collapses to the chip that was chosen; clicking that chip
   reopens it, because a decision you cannot revise is a trap, not a step.
   ========================================================================== */
.di-q[data-di-step="pending"] { display: none; }

.di-q[data-di-step="done"] { opacity: .82; }
.di-q[data-di-step="done"] .di-q-desc { display: none; }
.di-q[data-di-step="done"] .di-chip[aria-pressed="false"] { display: none; }
.di-q[data-di-step="done"] .di-chip[aria-pressed="true"] { cursor: pointer; }
.di-q[data-di-step="done"] .di-chip[aria-pressed="true"]::after {
  content: "\00a0\00a0\00d7";
  opacity: .55;
  font-weight: 400;
}
.di-q[data-di-step="done"]:hover { opacity: 1; }

.di-q[data-di-step="active"] { animation: kaStepIn .32s cubic-bezier(.22,.61,.36,1) both; }
@keyframes kaStepIn { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
@media (prefers-reduced-motion: reduce) {
  .di-q[data-di-step="active"] { animation: none; }
}

/* ==========================================================================
   WAVE 146 - a contract does not wear a marketing hero
   /terms/ carries body class "executive-diagnosis-page", so it inherited that
   page's hero: a 660-860px photographic band plus the decorative ::before and
   ::after layers that draw the large ghost lettering. With the legal type scale
   the H1 grew into that lettering and the two collided on screen. Legal routes
   now get a plain opening band: no photo, no ghost layer, no 78svh.
   ========================================================================== */
[data-ka-doc="legal"] .offer-page-hero::before,
[data-ka-doc="legal"] .offer-page-hero::after,
[data-ka-doc="legal"] .service-page-hero::before,
[data-ka-doc="legal"] .service-page-hero::after {
  content: none !important;
  display: none !important;
  background: none !important;
}
[data-ka-doc="legal"] .offer-page-hero,
[data-ka-doc="legal"] .service-page-hero {
  min-height: 0 !important;
  display: block !important;
  background: linear-gradient(180deg, #070c16, #04070d) !important;
  border-bottom: 1px solid rgba(226, 237, 252, .10) !important;
  padding-top: calc(var(--header-height, 72px) + 26px) !important;
  padding-bottom: clamp(26px, 4vw, 44px) !important;
}
[data-ka-doc="legal"] .offer-hero-copy { max-width: min(760px, 100%); margin-inline: auto; }

/* ==========================================================================
   Wave 148 - a contract does not open in a marketing voice.
   The section lead on legal documents was rendering as a 28px gold italic
   pull quote, which reads as persuasion on a page whose job is obligation.
   ========================================================================== */
[data-ka-doc="legal"] .section-lead,
[data-ka-doc="legal"] .offer-hero-copy > .section-lead {
  font-family: inherit !important;
  font-style: normal !important;
  font-size: clamp(1.02rem, 1.3vw, 1.16rem) !important;
  line-height: 1.68 !important;
  letter-spacing: 0 !important;
  color: rgba(246, 241, 231, .80) !important;
  max-width: 66ch;
  margin-block: 1.1rem 1.3rem;
}
