/* ============================================================
   WDA UI KIT — KIT STYLES
   Documentation chrome + reusable component library.
   ============================================================ */

/* Fonts are now loaded via <link rel="preconnect"> + a direct stylesheet <link>
   in each page <head> (see the font block injected before tokens.css). The old
   CSS @import was removed because it forces a render-blocking request chain
   (kit.css must download & parse before the font request is even discovered),
   which delays LCP. Same families/weights/display=swap — no visual change. */

*, *::before, *::after { box-sizing: border-box; }

/* ---------------- Skip link (accessibility) ----------------
   First focusable element on every page. Visually offscreen until
   focused, then slides into view. Targets the page's <main>. */
.skip-link {
  position: absolute; left: 16px; top: -60px; z-index: var(--z-toast);
  background: var(--color-ink); color: #fff; padding: 10px 18px;
  border-radius: var(--radius-md); font-weight: var(--fw-semibold);
  font-size: var(--fs-body-sm); text-decoration: none;
  transition: top var(--motion-duration-fast) var(--motion-easing-standard);
}
.skip-link:focus { top: 16px; outline: none; box-shadow: var(--shadow-focus); }
/* main receives focus when skipped to, without a persistent outline ring. */
main:focus { outline: none; }
@media (prefers-reduced-motion: reduce) { .skip-link { transition: none; } }
html { scroll-behavior: smooth; scroll-padding-top: 32px; }
body {
  margin: 0;
  font-family: var(--font-sans);
  font-size: var(--fs-body);
  line-height: var(--lh-body);
  color: var(--color-text-primary);
  background: var(--color-bg-surface);
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}
img { max-width: 100%; display: block; }
a { color: inherit; }

/* ---------------- Doc layout shell ---------------- */
.kit { display: grid; grid-template-columns: 232px 1fr; min-height: 100vh; }

.kit-nav {
  position: sticky; top: 0; align-self: start;
  height: 100vh; overflow-y: auto;
  background: var(--color-ink);
  color: var(--color-text-inverse);
  padding: 28px 20px 40px;
  z-index: var(--z-header);
}
.kit-nav__brand { display: flex; align-items: center; gap: 10px; margin-bottom: 6px; }
.kit-nav__brand svg { height: 30px; width: auto; }
.kit-nav__tag {
  font-size: 11px; letter-spacing: .14em; text-transform: uppercase;
  color: var(--color-text-on-dark-muted); margin: 0 0 26px 2px;
}
.kit-nav ol { list-style: none; margin: 0; padding: 0; counter-reset: nav; }
.kit-nav li { margin: 1px 0; }
.kit-nav a {
  display: flex; gap: 12px; align-items: baseline;
  padding: 9px 12px; border-radius: var(--radius-sm);
  font-size: 14px; font-weight: var(--fw-medium); text-decoration: none;
  color: #C7CDDA; transition: background var(--dur) var(--ease), color var(--dur) var(--ease);
}
.kit-nav a .num {
  font-family: var(--font-display); font-size: 11px; font-weight: 600;
  color: var(--color-brand-primary); min-width: 20px;
}
.kit-nav a:hover { background: rgba(255,255,255,.06); color: #fff; }
.kit-nav a.is-active { background: var(--color-brand-primary); color: var(--color-text-on-brand); }
.kit-nav a.is-active .num { color: var(--color-text-on-brand); }

.kit-main { min-width: 0; background: var(--color-bg-page); }

/* ---------------- Section scaffolding ---------------- */
.section { padding: 88px var(--page-margin-tablet); border-bottom: 1px solid var(--color-border-default); scroll-margin-top: 24px; }
.section--tint { background: var(--color-bg-surface); }
.section--ink  { background: var(--color-ink); color: #fff; }
.section__inner { max-width: 1080px; margin: 0 auto; }
.section__index {
  font-family: var(--font-display); font-weight: 600; font-size: 13px;
  letter-spacing: .1em; color: var(--color-brand-primary); margin: 0 0 10px;
}
.section__title { font-size: 38px; line-height: 1.1; font-weight: var(--fw-extra); margin: 0 0 14px; letter-spacing: -.02em; }
.section--ink .section__title { color: #fff; }
.section__lead { font-size: var(--fs-lead); line-height: var(--lh-lead); color: var(--color-text-secondary); max-width: 760px; margin: 0 0 40px; }
.section--ink .section__lead { color: var(--color-text-on-dark-muted); }

.block-label {
  display: inline-flex; align-items: center; gap: 8px;
  font-size: 12px; font-weight: var(--fw-bold); letter-spacing: .12em; text-transform: uppercase;
  color: var(--color-text-muted); margin: 44px 0 18px;
}
.block-label::before { content:''; width: 18px; height: 2px; background: var(--color-brand-primary); }
.section--ink .block-label { color: var(--color-text-on-dark-muted); }

.muted { color: var(--color-text-muted); }
.mono { font-family: var(--font-display); }

/* ---------------- Spec / demo wrappers ---------------- */
.specgrid { display: grid; gap: 16px; }
.cols-2 { grid-template-columns: repeat(2,1fr); }
.cols-3 { grid-template-columns: repeat(3,1fr); }
.cols-4 { grid-template-columns: repeat(4,1fr); }

.demo {
  background: var(--color-bg-page); border: 1px solid var(--color-border-default);
  border-radius: var(--radius-lg); padding: 28px;
}
.demo--pad-lg { padding: 40px; }
.demo--surface { background: var(--color-bg-surface); }
.demo--ink { background: var(--color-ink); border-color: var(--color-ink-border); }
.demo__row { display: flex; flex-wrap: wrap; gap: 16px; align-items: center; }
.demo__cap { font-size: 12px; font-weight: 600; letter-spacing: .04em; text-transform: uppercase; color: var(--color-text-muted); margin: 0 0 14px; }
.demo__col { display:flex; flex-direction:column; gap:10px; align-items:flex-start; }

/* spec card (token rows) */
.spec { background: var(--color-bg-page); border: 1px solid var(--color-border-default); border-radius: var(--radius-md); overflow: hidden; }
.spec__row { display: grid; grid-template-columns: 1.1fr 1fr auto; gap: 16px; align-items: center; padding: 13px 18px; border-top: 1px solid var(--color-border-default); }
.spec__row:first-child { border-top: 0; }
.spec__name { font-family: var(--font-display); font-size: 13px; font-weight: 600; }
.spec__val { font-size: 13px; color: var(--color-text-muted); font-family: var(--font-display); }

/* ============================================================
   WDA BUTTON & CTA SYSTEM  (v1.2 — unified)
   THE single button system for the whole site. The earlier simple
   `.btn` base was folded into this richer family — there is now one
   `.btn` only. `@keyframes btnspin` lives further down with the
   loading state. Compatibility helpers (`.btn--block`, `.btn--icon`,
   bare-svg sizing) are defined AFTER the base so the cascade resolves
   correctly. WhatsApp uses the `.btn--wa` variant (no separate class).

   Architecture
     base ........ .btn
     size ........ --sm  --md(default)  --lg
     width ....... --auto(default)  --full  --full-mobile
     variant ..... --primary --secondary --dark --light
                   --outline --ghost --glass  (+ --wa channel)
     interaction . --fill-sweep --icon-slide --icon-expand
                   --shine --lift --magnetic-lite
   Composition rule of thumb: one variant + at most two
   interaction modifiers. Markup:
     <a class="btn btn--primary btn--fill-sweep btn--icon-expand">
       <span class="btn__label">Получить аудит</span>
       <span class="btn__icon" aria-hidden="true"><svg>…arrow…</svg></span>
     </a>
   ============================================================ */

.btn {
  --bt-h:   var(--control-md);
  --bt-pad: var(--btn-pad-md);
  --bt-ic:  var(--btn-icon-md);
  --bt-sweep: var(--color-ink);            /* overlay colour for --fill-sweep */
  position: relative; isolation: isolate; overflow: hidden;
  display: inline-flex; align-items: center; justify-content: center; gap: 12px;
  height: var(--bt-h); padding: 0 var(--bt-pad);
  border-radius: var(--btn-radius);
  font-family: var(--font-sans); font-size: var(--fs-body); font-weight: var(--fw-semibold);
  line-height: 1; letter-spacing: -.01em; white-space: nowrap;
  border: 1.5px solid transparent; cursor: pointer; text-decoration: none;
  color: var(--color-text-primary); background: transparent;
  -webkit-tap-highlight-color: transparent;
  transition: background var(--motion-base) var(--ease-standard),
              color var(--motion-base) var(--ease-standard),
              border-color var(--motion-base) var(--ease-standard),
              box-shadow var(--motion-base) var(--ease-standard),
              transform var(--motion-fast) var(--ease-standard);
}
.btn__label { position: relative; z-index: 2; }
.btn__icon {
  position: relative; z-index: 2; flex: none;
  display: inline-grid; place-items: center;
  width: var(--bt-ic); height: var(--bt-ic); border-radius: 50%;
  transition: background var(--motion-base) var(--ease-standard),
              color var(--motion-base) var(--ease-standard),
              transform var(--motion-fast) var(--ease-standard);
}
.btn__icon svg { width: 52%; height: 52%; display: block;
  transition: transform var(--motion-fast) var(--ease-standard); }
/* a trailing icon-circle gets a touch less right padding for optical balance */
.btn:has(.btn__icon:last-child) { padding-right: calc(var(--bt-pad) - 10px); }
.btn:focus-visible { outline: none; box-shadow: var(--shadow-focus); }

/* ---- sizes ---- */
.btn--sm { --bt-h: var(--control-sm); --bt-pad: var(--btn-pad-sm); --bt-ic: var(--btn-icon-sm); font-size: var(--fs-body-sm); gap: 9px; }
.btn--md { /* default */ }
.btn--lg { --bt-h: var(--control-lg); --bt-pad: var(--btn-pad-lg); --bt-ic: var(--btn-icon-lg); font-size: var(--fs-body-lg); gap: 14px; }
.btn--xl, .btn--hero {  /* hero CTA tier */
  --bt-h: var(--btn-height-xl); --bt-pad: var(--btn-pad-xl); --bt-ic: var(--btn-icon-xl);
  min-height: var(--btn-height-xl);
  font-size: var(--btn-font-size-xl); gap: var(--btn-gap-xl); line-height: var(--btn-lh-xl);
}
/* hero keeps generous trailing space next to the icon-circle (only -4px optical trim) */
.btn--xl:has(.btn__icon:last-child), .btn--hero:has(.btn__icon:last-child) { padding-right: calc(var(--bt-pad) - 4px); }

/* ---- width ---- */
.btn--auto { width: auto; }
.btn--full { display: flex; width: 100%; }
@media (max-width: 576px) { .btn--full-mobile { display: flex; width: 100%; } }

/* ---- variants ---- */
.btn--primary { background: var(--color-brand-primary); color: var(--color-text-on-brand); }
.btn--primary .btn__icon { background: var(--color-ink); color: var(--color-text-on-brand); }
.btn--primary:hover { background: var(--color-brand-primary-hover); }
.btn--primary:active { background: var(--color-brand-primary-press); }

.btn--secondary, .btn--dark { background: var(--color-ink); color: #fff; }
.btn--secondary .btn__icon, .btn--dark .btn__icon { background: var(--color-brand-primary); color: var(--color-text-on-brand); }
.btn--secondary:hover, .btn--dark:hover { background: var(--color-ink-elevated); }
.btn--secondary:active, .btn--dark:active { background: #000; }

.btn--light { background: #fff; color: var(--color-ink); border-color: transparent; }
.btn--light .btn__icon { background: var(--color-ink); color: #fff; }
.btn--light:hover { background: #fff; }

.btn--outline { background: transparent; color: var(--color-text-primary); border-color: var(--color-border-strong); }
.btn--outline .btn__icon { background: transparent; color: currentColor; box-shadow: inset 0 0 0 1.5px var(--color-border-strong); }
.btn--outline:hover { border-color: var(--color-ink); background: var(--color-bg-surface); }
.btn--outline:hover .btn__icon { box-shadow: inset 0 0 0 1.5px var(--color-ink); }
.btn--outline:active { background: var(--color-bg-surface-2); }
/* outline on dark surfaces (ink heroes / sections) — mirror of the .btn rule */
.section--ink .btn--outline, .demo--ink .btn--outline, .chero--ink .btn--outline,
.cta-final .btn--outline { color: #fff; border-color: var(--color-ink-border-strong); }
.section--ink .btn--outline .btn__icon, .demo--ink .btn--outline .btn__icon,
.chero--ink .btn--outline .btn__icon, .cta-final .btn--outline .btn__icon { box-shadow: inset 0 0 0 1.5px var(--color-ink-border-strong); }
.section--ink .btn--outline:hover, .demo--ink .btn--outline:hover, .chero--ink .btn--outline:hover,
.cta-final .btn--outline:hover { background: rgba(255,255,255,.08); border-color: #fff; }
.section--ink .btn--outline:hover .btn__icon, .chero--ink .btn--outline:hover .btn__icon { box-shadow: inset 0 0 0 1.5px #fff; }

/* ---- HERO CTA NORMALIZATION ----
   Every conversion hero CTA group lands on the xl (hero) tier, whichever button
   system the markup uses, so heroes read consistently across the whole site.
   Legal “jump to document” heroes (.xhero--legal) intentionally stay at lg. */
.thero__cta .btn, .chero__cta .btn, .ahero__cta .btn, .cs-hero__cta .btn,
.xhero--cases .xhero__cta .btn {
  --bt-h: var(--btn-height-xl); --bt-pad: var(--btn-pad-xl); --bt-ic: var(--btn-icon-xl);
  min-height: var(--btn-height-xl);
  font-size: var(--btn-font-size-xl); gap: var(--btn-gap-xl); line-height: var(--btn-lh-xl);
}
.thero__cta .btn:has(.btn__icon:last-child), .chero__cta .btn:has(.btn__icon:last-child),
.ahero__cta .btn:has(.btn__icon:last-child), .cs-hero__cta .btn:has(.btn__icon:last-child),
.xhero--cases .xhero__cta .btn:has(.btn__icon:last-child) { padding-right: calc(var(--bt-pad) - 4px); }
.thero__cta .btn, .chero__cta .btn, .ahero__cta .btn, .cs-hero__cta .btn,
.xhero--cases .xhero__cta .btn {
  --bh: var(--btn-height-xl); min-height: var(--btn-height-xl); padding: 0 var(--btn-pad-xl); font-size: var(--btn-font-size-xl);
}

.btn--ghost { background: transparent; color: var(--color-text-primary); }
.btn--ghost .btn__icon { background: var(--color-bg-surface); color: currentColor; }
.btn--ghost:hover { background: var(--color-bg-surface); }
.btn--ghost:active { background: var(--color-bg-surface-2); }

.btn--glass {
  background: var(--btn-glass-bg); color: #fff; border-color: var(--btn-glass-border);
  -webkit-backdrop-filter: blur(11px) saturate(150%); backdrop-filter: blur(11px) saturate(150%);
}
.btn--glass .btn__icon { background: rgba(255,255,255,.16); color: #fff; }
.btn--glass:hover { background: var(--btn-glass-bg-strong); border-color: var(--btn-glass-border-hov); }
@supports not ((-webkit-backdrop-filter: blur(2px)) or (backdrop-filter: blur(2px))) {
  .btn--glass { background: var(--btn-glass-fallback); border-color: rgba(255,255,255,.22); }
  .btn--glass:hover { background: rgba(18,24,43,.84); }
}

/* WhatsApp channel — shares family geometry / motion */
.btn--wa { background: #25D366; color: #fff; --bt-sweep: #128C45; }
.btn--wa .btn__icon { background: rgba(255,255,255,.22); color: #fff; }
.btn--wa:hover { background: #1EBE5A; }

/* ---- interaction · FILL-SWEEP (overlay wipes across, label stays readable) ---- */
.btn--fill-sweep::before {
  content: ""; position: absolute; inset: 0; z-index: 1;
  background: var(--bt-sweep); transform: translateX(-101%);
  transition: transform var(--motion-slow) var(--ease-emphasized);
}
.btn--fill-sweep:hover::before, .btn--fill-sweep:focus-visible::before { transform: translateX(0); }
/* contrast flips as the overlay lands */
.btn--primary.btn--fill-sweep:hover, .btn--primary.btn--fill-sweep:focus-visible { color: #fff; }
.btn--primary.btn--fill-sweep:hover .btn__icon { background: var(--color-brand-primary); color: var(--color-text-on-brand); }
.btn--secondary.btn--fill-sweep, .btn--dark.btn--fill-sweep { --bt-sweep: var(--color-brand-primary); }
.btn--secondary.btn--fill-sweep:hover, .btn--dark.btn--fill-sweep:hover { color: var(--color-text-on-brand); }
.btn--secondary.btn--fill-sweep:hover .btn__icon, .btn--dark.btn--fill-sweep:hover .btn__icon { background: var(--color-ink); color: var(--color-brand-primary); }
.btn--light.btn--fill-sweep { --bt-sweep: var(--color-ink); }
.btn--light.btn--fill-sweep:hover, .btn--light.btn--fill-sweep:focus-visible { color: #fff; }
.btn--light.btn--fill-sweep:hover .btn__icon { background: var(--color-brand-primary); color: var(--color-text-on-brand); }
.btn--outline.btn--fill-sweep { --bt-sweep: var(--color-ink); }
.btn--outline.btn--fill-sweep:hover, .btn--outline.btn--fill-sweep:focus-visible { color: #fff; border-color: var(--color-ink); }
.btn--outline.btn--fill-sweep:hover .btn__icon { color: #fff; box-shadow: inset 0 0 0 1.5px rgba(255,255,255,.5); }
.btn--wa.btn--fill-sweep:hover .btn__icon { background: rgba(255,255,255,.28); }

/* ---- interaction · ICON-SLIDE (arrow eases forward) ---- */
.btn--icon-slide:hover .btn__icon, .btn--icon-slide:focus-visible .btn__icon { transform: translateX(var(--btn-icon-shift)); }
.btn--icon-slide:hover > svg:last-child, .btn--icon-slide:focus-visible > svg:last-child { transform: translateX(var(--btn-icon-shift)); }

/* ---- interaction · ICON-EXPAND (circle grows + arrow nudges) ---- */
.btn--icon-expand:hover .btn__icon, .btn--icon-expand:focus-visible .btn__icon { transform: scale(var(--btn-overlay-scale)); }
.btn--icon-expand:hover .btn__icon svg, .btn--icon-expand:focus-visible .btn__icon svg { transform: translateX(2px); }

/* ---- interaction · SHINE (gloss passes once — glass / hero) ---- */
.btn--shine::after {
  content: ""; position: absolute; top: 0; bottom: 0; left: -65%; width: 42%; z-index: 1;
  background: linear-gradient(100deg, transparent, rgba(255,255,255,.38), transparent);
  transform: skewX(-18deg); opacity: 0; pointer-events: none;
}
.btn--shine:hover::after, .btn--shine:focus-visible::after { animation: btnt2Shine var(--motion-slow) var(--ease-out-soft); }
@keyframes btnt2Shine { 0% { left: -65%; opacity: 0; } 18% { opacity: 1; } 100% { left: 120%; opacity: 0; } }

/* ---- interaction · LIFT (≤2px rise + shadow, no layout shift) ---- */
.btn--lift:hover { transform: translateY(var(--btn-hover-lift)); box-shadow: var(--shadow-lg); }
.btn--lift:active { transform: translateY(0); }

/* ---- interaction · MAGNETIC-LITE (JS-driven, desktop only) ---- */
.btn--magnetic-lite { transition: background var(--motion-base) var(--ease-standard), color var(--motion-base) var(--ease-standard), border-color var(--motion-base) var(--ease-standard), box-shadow var(--motion-base) var(--ease-standard), transform var(--motion-base) var(--ease-out-soft); will-change: transform; }

/* ---- states ---- */
.btn:disabled, .btn.is-disabled {
  background: var(--color-disabled-bg); color: var(--color-disabled-text);
  border-color: transparent; cursor: not-allowed; box-shadow: none; transform: none;
}
.btn:disabled::before, .btn.is-disabled::before,
.btn:disabled::after,  .btn.is-disabled::after { display: none; }
.btn:disabled .btn__icon, .btn.is-disabled .btn__icon { background: transparent; color: var(--color-disabled-text); box-shadow: inset 0 0 0 1.5px var(--color-border-default); }
.btn--outline:disabled, .btn--outline.is-disabled { background: transparent; border-color: var(--color-border-default); }

.btn.is-loading { color: transparent; pointer-events: none; }
.btn.is-loading .btn__label, .btn.is-loading .btn__icon { opacity: 0; }
.btn.is-loading::after {
  content: ""; position: absolute; z-index: 3; width: 18px; height: 18px; border-radius: 50%;
  border: 2px solid currentColor; border-top-color: transparent; opacity: .9;
  animation: btnspin .7s linear infinite;
}
.btn--primary.is-loading::after { border-color: rgba(255,255,255,.55); border-top-color: transparent; }
.btn--light.is-loading::after { border-color: rgba(11,16,32,.45); border-top-color: transparent; }
.btn--secondary.is-loading::after, .btn--dark.is-loading::after, .btn--glass.is-loading::after, .btn--wa.is-loading::after { border-color: rgba(255,255,255,.55); border-top-color: transparent; }
@keyframes btnspin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .btn.is-loading::after { animation: none; } }

/* ---- compatibility helpers (defined after the base so they win the cascade) ---- */
/* Bare <svg> placed directly in a button (no .btn__icon wrapper) gets a default size. */
.btn > svg { width: 18px; height: 18px; flex: none; }
/* Full-width button. Historic alias for --full; kept because it is widely used. */
.btn--block { display: flex; width: 100%; }
/* Icon-only square button (used in the kit docs / compact toolbars). */
.btn--icon { width: var(--bt-h); padding: 0; gap: 0; }

/* ---- touch ---- */
@media (hover: none) {
  .btn:active { transform: scale(.985); }
  .btn--lift:active { transform: scale(.985); box-shadow: var(--shadow-md); }
}

/* ---- on dark sections: outline / ghost adapt automatically ---- */
.section--ink .btn--outline, .sec--ink .btn--outline, .demo--ink .btn--outline { color: #fff; border-color: var(--color-ink-border-strong); }
.section--ink .btn--outline:hover, .sec--ink .btn--outline:hover, .demo--ink .btn--outline:hover { background: rgba(255,255,255,.08); border-color: #fff; }
.section--ink .btn--outline .btn__icon, .sec--ink .btn--outline .btn__icon, .demo--ink .btn--outline .btn__icon { box-shadow: inset 0 0 0 1.5px var(--color-ink-border-strong); }
.section--ink .btn--ghost, .sec--ink .btn--ghost, .demo--ink .btn--ghost { color: #fff; }
.section--ink .btn--ghost:hover, .sec--ink .btn--ghost:hover, .demo--ink .btn--ghost:hover { background: rgba(255,255,255,.08); }
.section--ink .btn--ghost .btn__icon, .sec--ink .btn--ghost .btn__icon, .demo--ink .btn--ghost .btn__icon { background: rgba(255,255,255,.10); }

/* ============================================================
   CTA LINK  — text + arrow, no button container
   ============================================================ */
.cta-link {
  position: relative; display: inline-flex; align-items: center; gap: 8px;
  font-family: var(--font-sans); font-weight: var(--fw-semibold); font-size: var(--fs-body);
  line-height: 1.3; color: var(--color-text-brand); text-decoration: none;
  -webkit-tap-highlight-color: transparent;
}
.cta-link svg { width: 16px; height: 16px; flex: none; transition: transform var(--motion-fast) var(--ease-standard); }
.cta-link:focus-visible { outline: none; box-shadow: var(--shadow-focus); border-radius: var(--radius-sm); }
.cta-link--arrow:hover svg, .cta-link--arrow:focus-visible svg { transform: translateX(var(--btn-icon-shift)); }
.cta-link--underline { padding-bottom: 3px; }
.cta-link--underline::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 1.5px;
  background: currentColor; transform: scaleX(0); transform-origin: left center;
  transition: transform var(--motion-base) var(--ease-standard);
}
.cta-link--underline:hover::after, .cta-link--underline:focus-visible::after { transform: scaleX(1); }
.cta-link--inverse { color: #fff; }
.section--ink .cta-link:not(.cta-link--inverse), .sec--ink .cta-link:not(.cta-link--inverse), .demo--ink .cta-link:not(.cta-link--inverse) { color: var(--color-brand-primary); }

/* ============================================================
   ICON-ACTION  — standalone circular arrow control
   ============================================================ */
.icon-action {
  --ia-size: 48px;
  position: relative; isolation: isolate; overflow: hidden; flex: none;
  display: inline-grid; place-items: center;
  width: var(--ia-size); height: var(--ia-size); border-radius: 50%;
  border: 1.5px solid transparent; background: transparent; color: var(--color-text-primary);
  cursor: pointer; text-decoration: none; -webkit-tap-highlight-color: transparent;
  transition: background var(--motion-base) var(--ease-standard), color var(--motion-base) var(--ease-standard),
              border-color var(--motion-base) var(--ease-standard), box-shadow var(--motion-base) var(--ease-standard),
              transform var(--motion-fast) var(--ease-standard);
}
.icon-action svg { position: relative; z-index: 2; width: 40%; height: 40%;
  transition: transform var(--motion-fast) var(--ease-standard); }
.icon-action:focus-visible { outline: none; box-shadow: var(--shadow-focus); }
.icon-action--sm { --ia-size: 40px; }
.icon-action--md { --ia-size: 48px; }
.icon-action--lg { --ia-size: 60px; }

.icon-action--outline { border-color: var(--color-border-strong); }
.icon-action--outline::before { content: ""; position: absolute; inset: -1px; z-index: 1; border-radius: 50%;
  background: var(--color-brand-primary); transform: scale(0); transition: transform var(--motion-base) var(--ease-out-soft); }
.icon-action--outline:hover, .icon-action--outline:focus-visible { color: var(--color-text-on-brand); border-color: var(--color-brand-primary); }
.icon-action--outline:hover::before, .icon-action--outline:focus-visible::before { transform: scale(1); }
.icon-action--outline:hover svg, .icon-action--outline:focus-visible svg { transform: translateX(var(--btn-icon-shift)); }

.icon-action--solid { background: var(--color-brand-primary); color: var(--color-text-on-brand); }
.icon-action--solid:hover, .icon-action--solid:focus-visible { background: var(--color-brand-primary-hover); }
.icon-action--solid:hover svg, .icon-action--solid:focus-visible svg { transform: translateX(var(--btn-icon-shift)); }

.icon-action--glass { background: var(--btn-glass-bg); border-color: var(--btn-glass-border); color: #fff;
  -webkit-backdrop-filter: blur(9px) saturate(150%); backdrop-filter: blur(9px) saturate(150%); }
.icon-action--glass:hover, .icon-action--glass:focus-visible { background: var(--btn-glass-bg-strong); border-color: var(--btn-glass-border-hov); }
.icon-action--glass:hover svg, .icon-action--glass:focus-visible svg { transform: translateX(var(--btn-icon-shift)); }
@supports not ((-webkit-backdrop-filter: blur(2px)) or (backdrop-filter: blur(2px))) {
  .icon-action--glass { background: var(--btn-glass-fallback); }
}
/* diagonal arrows (up-right) travel on the diagonal */
.icon-action--diag:hover svg, .icon-action--diag:focus-visible svg { transform: translate(2px, -2px); }

/* on dark: outline icon-action lightens its ring */
.section--ink .icon-action--outline, .sec--ink .icon-action--outline, .demo--ink .icon-action--outline { border-color: var(--color-ink-border-strong); color: #fff; }
.section--ink .icon-action--outline:hover, .sec--ink .icon-action--outline:hover, .demo--ink .icon-action--outline:hover { color: var(--color-text-on-brand); }

/* ---- reduced motion · button system ---- */
@media (prefers-reduced-motion: reduce) {
  .btn--shine::after { display: none; }
  .btn--fill-sweep::before { transition-duration: 120ms; }
  .btn--lift:hover { transform: none; box-shadow: var(--shadow-md); }
  .btn--magnetic-lite { transition: background var(--motion-base), color var(--motion-base), border-color var(--motion-base); }
}


/* ---------------- LINKS ---------------- */
.lnk { color: var(--color-text-brand); text-decoration: none; font-weight: var(--fw-semibold); border-bottom: 1.5px solid transparent; transition: border-color var(--dur); }
.lnk:hover { border-bottom-color: currentColor; }
.lnk--arrow { display: inline-flex; align-items: center; gap: 7px; }
.lnk--arrow svg { width: 16px; height: 16px; transition: transform var(--dur) var(--ease); }
.lnk--arrow:hover svg { transform: translateX(4px); }

/* ---------------- EYEBROW / BADGES / TAGS / CHIPS ---------------- */
.eyebrow { display: inline-block; font-size: var(--fs-eyebrow); font-weight: var(--fw-bold); letter-spacing: .12em; text-transform: uppercase; color: var(--color-text-brand); }
.section--ink .eyebrow { color: var(--color-brand-primary); }

.badge { display: inline-flex; align-items: center; gap: 6px; height: 26px; padding: 0 11px; border-radius: var(--radius-pill); font-size: 12px; font-weight: var(--fw-bold); letter-spacing: .02em; }
.badge--brand { background: var(--color-brand-tint); color: var(--color-text-brand); }
.badge--neutral { background: var(--color-bg-surface-2); color: var(--color-text-secondary); }
.badge--success { background: var(--color-state-success-tint); color: var(--color-state-success); }
.badge--warning { background: var(--color-state-warning-tint); color: var(--color-state-warning); }
.badge--error { background: var(--color-state-error-tint); color: var(--color-state-error); }
.badge--solid { background: var(--color-brand-primary); color: var(--color-text-on-brand); }
.badge__dot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; }

.tag { display:inline-flex; align-items:center; height: 30px; padding: 0 13px; border-radius: var(--radius-pill); font-size: 13px; font-weight: var(--fw-semibold); background: var(--color-bg-surface); border: 1px solid var(--color-border-default); color: var(--color-text-secondary); }
.section--ink .tag { background: rgba(255,255,255,.06); border-color: var(--color-ink-border); color: #D7DBE6; }

.chip { display:inline-flex; align-items:center; gap:8px; height: 36px; padding: 0 16px; border-radius: var(--radius-pill); font-size: 14px; font-weight: var(--fw-semibold); background: var(--color-brand-tint); color: var(--color-text-brand); cursor: pointer; border: 1.5px solid transparent; transition: all var(--dur); }
.chip:hover { background: var(--color-brand-tint-strong); }
.chip.is-selected { background: var(--color-brand-primary); color: var(--color-text-on-brand); }
.chip__x { font-size: 16px; opacity: .6; }

/* ---------------- DIVIDER / LISTS ---------------- */
.divider { height: 1px; background: var(--color-border-default); border: 0; margin: 24px 0; }
.section--ink .divider { background: var(--color-ink-border); }

.list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 12px; }
.list--bullet li, .list--check li, .list--num li { display: flex; gap: 12px; align-items: flex-start; line-height: 1.5; }
.list--check li .ic { flex: none; width: 22px; height: 22px; border-radius: 50%; background: var(--color-brand-tint); color: var(--color-text-brand); display: grid; place-items: center; margin-top: 1px; }
.list--check li .ic svg { width: 13px; height: 13px; }
.list--bullet li::before { content:''; flex:none; width: 7px; height: 7px; border-radius: 50%; background: var(--color-brand-primary); margin-top: 9px; }
.list--num { counter-reset: li; }
.list--num li { counter-increment: li; }
.list--num li .ic { flex:none; width: 26px; height: 26px; border-radius: 8px; background: var(--color-ink); color: #fff; font-family: var(--font-display); font-size: 12px; font-weight: 600; display: grid; place-items: center; }
.list--num li .ic::before { content: counter(li,decimal-leading-zero); }

/* ---------------- BREADCRUMB / PAGINATION ---------------- */
.crumbs { display: flex; gap: 8px; align-items: center; font-size: 14px; color: var(--color-text-muted); flex-wrap: wrap; }
.crumbs a { text-decoration: none; color: var(--color-text-muted); }
.crumbs a:hover { color: var(--color-text-brand); }
.crumbs .sep { opacity: .5; }
.crumbs .current { color: var(--color-text-primary); font-weight: var(--fw-semibold); }

.pager { display: flex; gap: 8px; align-items: center; }
.pager a, .pager span { min-width: 40px; height: 40px; padding: 0 8px; border-radius: var(--radius-sm); display: grid; place-items: center; font-weight: var(--fw-semibold); font-size: 14px; text-decoration: none; color: var(--color-text-secondary); border: 1px solid var(--color-border-default); background: var(--color-bg-page); transition: all var(--dur); }
.pager a:hover { border-color: var(--color-ink); }
.pager .is-current { background: var(--color-brand-primary); border-color: var(--color-brand-primary); color: var(--color-text-on-brand); }
.pager .is-dots { border: 0; }

/* ---------------- FORMS ---------------- */
.field { display: flex; flex-direction: column; gap: 7px; margin-bottom: 18px; }
.field__label { font-size: var(--fs-body-sm); font-weight: var(--fw-semibold); color: var(--color-text-primary); }
.field__label .req { color: var(--color-state-error); }
.field__help { font-size: var(--fs-caption); color: var(--color-text-muted); }
.field__msg { font-size: var(--fs-caption); font-weight: var(--fw-medium); display: flex; gap: 6px; align-items: center; }
.field__msg svg { width: 14px; height: 14px; flex: none; }
.field__msg.is-error { color: var(--color-state-error); }
.field__msg.is-success { color: var(--color-state-success); }

.input, .textarea, .select {
  width: 100%; height: var(--control-md); padding: 0 16px;
  font-family: var(--font-sans); font-size: var(--fs-body); color: var(--color-text-primary);
  background: var(--color-bg-page); border: 1.5px solid var(--color-border-strong);
  border-radius: var(--radius-md); transition: border-color var(--dur), box-shadow var(--dur);
}
.input::placeholder, .textarea::placeholder { color: var(--color-text-muted); }
.input:hover, .textarea:hover, .select:hover { border-color: var(--color-text-muted); }
.input:focus, .textarea:focus, .select:focus { outline: none; border-color: var(--color-brand-primary); box-shadow: var(--shadow-focus); }
.textarea { height: auto; min-height: 120px; padding: 13px 16px; resize: vertical; line-height: 1.5; }
.select { appearance: none; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='14' viewBox='0 0 24 24' fill='none' stroke='%2379827C' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 16px center; padding-right: 42px; cursor: pointer; }
.input.is-error, .textarea.is-error, .select.is-error { border-color: var(--color-state-error); }
.input.is-error:focus { box-shadow: 0 0 0 4px var(--color-state-error-tint); }
.input.is-success { border-color: var(--color-state-success); }
.input:disabled, .textarea:disabled, .select:disabled { background: var(--color-disabled-bg); color: var(--color-disabled-text); cursor: not-allowed; border-color: var(--color-border-default); }
.input--icon { padding-left: 44px; }
.field__wrap { position: relative; }
.field__wrap > svg { position: absolute; left: 15px; top: 50%; transform: translateY(-50%); width: 18px; height: 18px; color: var(--color-text-muted); pointer-events: none; }

/* checkbox / radio */
.check, .radio { display: flex; gap: 11px; align-items: flex-start; cursor: pointer; font-size: var(--fs-body-sm); line-height: 1.45; user-select: none; }
.check input, .radio input { position: absolute; opacity: 0; }
.check .box, .radio .box { flex: none; width: 22px; height: 22px; border: 1.5px solid var(--color-border-strong); background: var(--color-bg-page); display: grid; place-items: center; transition: all var(--dur); margin-top: 1px; }
.check .box { border-radius: 6px; }
.radio .box { border-radius: 50%; }
.check .box svg { width: 13px; height: 13px; color: #fff; opacity: 0; transition: opacity var(--dur); }
.radio .box::after { content:''; width: 10px; height: 10px; border-radius: 50%; background: #fff; opacity: 0; transition: opacity var(--dur); }
.check input:checked + .box { background: var(--color-brand-primary); border-color: var(--color-brand-primary); }
.check input:checked + .box svg { opacity: 1; }
.radio input:checked + .box { background: var(--color-brand-primary); border-color: var(--color-brand-primary); }
.radio input:checked + .box::after { opacity: 1; }
.check input:focus-visible + .box, .radio input:focus-visible + .box { box-shadow: var(--shadow-focus); }
.check input:disabled ~ *, .radio input:disabled ~ * { opacity: .5; }

/* ---------------- CARDS (composite) ---------------- */
.card { background: var(--color-bg-page); border: 1px solid var(--color-border-default); border-radius: var(--radius-lg); padding: 28px; transition: box-shadow var(--dur) var(--ease), transform var(--dur) var(--ease), border-color var(--dur); }
.card--hover:hover { box-shadow: var(--shadow-lg); transform: translateY(-4px); border-color: transparent; }

/* service card */
.svc-card { display: flex; flex-direction: column; gap: 16px; }
.svc-card__ic { width: 52px; height: 52px; border-radius: var(--radius-md); background: var(--color-brand-tint); color: var(--color-text-brand); display: grid; place-items: center; }
.svc-card__ic svg { width: 26px; height: 26px; }
.svc-card h4 { font-size: var(--fs-h4); margin: 0; font-weight: var(--fw-bold); }
.svc-card p { margin: 0; color: var(--color-text-secondary); font-size: var(--fs-body); }
.svc-card .tags { display: flex; flex-wrap: wrap; gap: 8px; }

/* numbered step / process */
.step { display: flex; flex-direction: column; gap: 14px; }
.step__num { font-family: var(--font-display); font-size: 40px; font-weight: 700; color: var(--color-brand-primary); line-height: 1; }
.step__time { display:inline-flex; align-items:center; gap:6px; font-size: 13px; font-weight: 600; color: var(--color-text-muted); }
.step h4 { margin: 0; font-size: var(--fs-h5); font-weight: var(--fw-bold); }
.step p { margin: 0; color: var(--color-text-secondary); font-size: var(--fs-body-sm); }

/* stat */
.stat { text-align: left; }
.stat__num { font-family: var(--font-display); font-size: var(--fs-stat); font-weight: 700; line-height: 1; color: var(--color-text-primary); letter-spacing: -.02em; }
.section--ink .stat__num { color: #fff; }
.stat__num .accent { color: var(--color-brand-primary); }
.stat__label { margin-top: 10px; font-size: var(--fs-body-sm); color: var(--color-text-muted); }
.section--ink .stat__label { color: var(--color-text-on-dark-muted); }

/* portfolio card */
.pf-card { border-radius: var(--radius-lg); overflow: hidden; background: var(--color-bg-page); border: 1px solid var(--color-border-default); transition: box-shadow var(--dur), transform var(--dur); }
.pf-card--hover:hover { box-shadow: var(--shadow-lg); transform: translateY(-4px); }
.pf-card__media { aspect-ratio: 16/9; background: linear-gradient(135deg, var(--color-ink-elevated), var(--color-ink)); position: relative; overflow: hidden; }
.pf-card__media .ph { position:absolute; inset:0; display:grid; place-items:center; color: var(--color-text-on-dark-muted); font-size: 13px; letter-spacing: .08em; text-transform: uppercase; }
.pf-card__body { padding: 20px 22px 24px; }
.pf-card__body h4 { margin: 0 0 12px; font-size: var(--fs-h5); font-weight: var(--fw-bold); }

/* FAQ accordion */
.faq { border: 1px solid var(--color-border-default); border-radius: var(--radius-md); background: var(--color-bg-page); overflow: hidden; }
.faq__item { border-top: 1px solid var(--color-border-default); }
.faq__item:first-child { border-top: 0; }
.faq__q { width: 100%; text-align: left; background: none; border: 0; cursor: pointer; padding: 20px 22px; display: flex; justify-content: space-between; gap: 16px; align-items: center; font-family: var(--font-sans); font-size: var(--fs-body-lg); font-weight: var(--fw-semibold); color: var(--color-text-primary); }
.faq__q .pm { flex: none; width: 28px; height: 28px; border-radius: 50%; background: var(--color-bg-surface); display: grid; place-items: center; transition: background var(--dur), transform var(--dur); }
.faq__q .pm svg { width: 16px; height: 16px; transition: transform var(--dur); }
.faq__item.is-open .pm { background: var(--color-brand-primary); color: var(--color-text-on-brand); }
.faq__item.is-open .pm svg { transform: rotate(45deg); }
.faq__a { max-height: 0; overflow: hidden; transition: max-height .3s var(--ease); }
.faq__a-inner { padding: 0 22px 22px; color: var(--color-text-secondary); font-size: var(--fs-body); }
.faq__item.is-open .faq__a { max-height: 320px; }

/* pricing */
.price-card { border: 1.5px solid var(--color-border-default); border-radius: var(--radius-lg); padding: 32px; background: var(--color-bg-page); display: flex; flex-direction: column; gap: 18px; }
.price-card--featured { border: 1.5px solid transparent; background: linear-gradient(var(--color-bg-page), var(--color-bg-page)) padding-box, var(--brand-gradient-border) border-box; box-shadow: var(--shadow-lg); position: relative; }
.price-card__price { font-family: var(--font-display); font-size: var(--fs-price); font-weight: 700; letter-spacing: -.02em; }
.price-card__price small { font-family: var(--font-sans); font-size: 15px; font-weight: 500; color: var(--color-text-muted); }

/* integration tile */
.intg { display: grid; grid-template-columns: repeat(auto-fill,minmax(120px,1fr)); gap: 14px; }
.intg__tile { aspect-ratio: 16/10; border: 1px solid var(--color-border-default); border-radius: var(--radius-md); display: grid; place-items: center; background: var(--color-bg-page); font-weight: var(--fw-bold); font-size: 15px; color: var(--color-text-secondary); transition: border-color var(--dur), box-shadow var(--dur); }
.intg__tile:hover { border-color: var(--color-brand-primary); box-shadow: var(--shadow-sm); }

/* CTA banner */
.cta-banner { background: var(--color-ink); color: #fff; border-radius: var(--radius-xl); padding: 56px; display: flex; gap: 32px; align-items: center; justify-content: space-between; flex-wrap: wrap; position: relative; overflow: hidden; }
.cta-banner__glow { position: absolute; right: -80px; top: -80px; width: 320px; height: 320px; background: radial-gradient(circle, rgba(var(--color-brand-primary-rgb),.38), transparent 70%); pointer-events: none; }
.cta-banner__glow--cyan { right: auto; left: -90px; top: auto; bottom: -90px; background: radial-gradient(circle, rgba(var(--color-brand-secondary-rgb),.18), transparent 70%); }
.cta-banner h3 { font-size: 32px; margin: 0 0 10px; font-weight: var(--fw-extra); max-width: 560px; }
.cta-banner p { margin: 0; color: var(--color-text-on-dark-muted); max-width: 520px; }

/* contact card */
.contact-card { display: flex; gap: 16px; align-items: flex-start; padding: 22px; border: 1px solid var(--color-border-default); border-radius: var(--radius-md); background: var(--color-bg-page); }
.contact-card .ic { flex: none; width: 46px; height: 46px; border-radius: var(--radius-md); background: var(--color-brand-tint); color: var(--color-text-brand); display: grid; place-items: center; }
.contact-card .ic svg { width: 22px; height: 22px; }
.contact-card .lbl { font-size: 13px; color: var(--color-text-muted); margin: 0 0 3px; }
.contact-card .val { font-size: var(--fs-body-lg); font-weight: var(--fw-bold); margin: 0; }

/* ---------------- HEADER (composite) ---------------- */
.wheader { display: flex; align-items: center; justify-content: space-between; gap: 24px; padding: 16px 28px; background: var(--color-ink); color: #fff; border-radius: var(--radius-lg); }
.wheader__nav { display: flex; gap: 6px; }
.wheader__nav a { padding: 8px 14px; border-radius: var(--radius-sm); text-decoration: none; color: #C7CDDA; font-weight: var(--fw-medium); font-size: 15px; transition: background var(--dur), color var(--dur); }
.wheader__nav a:hover { background: rgba(255,255,255,.07); color: #fff; }
.wheader__nav a.is-active { color: var(--color-brand-primary); }

/* mobile header bar */
.mheader { display: flex; align-items: center; justify-content: space-between; padding: 14px 18px; background: var(--color-ink); color: #fff; }
.burger { width: 42px; height: 42px; border-radius: 10px; border: 1px solid var(--color-ink-border); background: rgba(255,255,255,.05); display: grid; place-items: center; color: #fff; }

/* ---------------- FOOTER (composite) ---------------- */
.wfooter { background: var(--color-ink); color: #fff; border-radius: var(--radius-xl); padding: 56px; }
.wfooter__grid { display: grid; grid-template-columns: 1.6fr 1fr 1fr 1.4fr; gap: 40px; }
.wfooter h5 { font-size: 13px; letter-spacing: .1em; text-transform: uppercase; color: var(--color-text-on-dark-muted); margin: 0 0 18px; font-weight: var(--fw-bold); }
.wfooter ul { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 12px; }
.wfooter a { color: #C7CDDA; text-decoration: none; font-size: 15px; transition: color var(--dur); }
.wfooter a:hover { color: var(--color-brand-primary); }
.wfooter__bottom { margin-top: 40px; padding-top: 24px; border-top: 1px solid var(--color-ink-border); display: flex; justify-content: space-between; gap: 16px; flex-wrap: wrap; font-size: 13px; color: var(--color-text-on-dark-muted); }

/* whatsapp float */
.wa-float { width: 60px; height: 60px; border-radius: 50%; background: #25D366; display: grid; place-items: center; box-shadow: var(--shadow-lg); color: #fff; border: 0; cursor: pointer; }
.wa-float svg { width: 32px; height: 32px; }

/* ---------------- audit / do-dont ---------------- */
.audit-card { border: 1px solid var(--color-border-default); border-radius: var(--radius-md); overflow: hidden; background: var(--color-bg-page); }
.audit-card__head { padding: 14px 18px; font-weight: var(--fw-bold); display: flex; gap: 10px; align-items: center; font-size: 15px; }
.audit-card__head .pill { font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; padding: 3px 9px; border-radius: var(--radius-pill); }
.audit-row { display: grid; grid-template-columns: 1fr 1fr 1fr; }
.audit-row > div { padding: 16px 18px; border-top: 1px solid var(--color-border-default); border-left: 1px solid var(--color-border-default); font-size: var(--fs-body-sm); }
.audit-row > div:first-child { border-left: 0; }
.audit-row .k { font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--color-text-muted); margin: 0 0 6px; }

.dd { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.dd__card { border: 1px solid var(--color-border-default); border-radius: var(--radius-md); padding: 20px; }
.dd__tag { display: inline-flex; align-items: center; gap: 7px; font-size: 13px; font-weight: 700; margin-bottom: 14px; }
.dd__do .dd__tag { color: var(--color-state-success); }
.dd__dont .dd__tag { color: var(--color-state-error); }
.dd__do { border-color: #BFE7CC; background: linear-gradient(0deg, var(--color-state-success-tint), var(--color-bg-page)); }
.dd__dont { border-color: #F0C9CB; background: linear-gradient(0deg, var(--color-state-error-tint), var(--color-bg-page)); }

/* checklist */
.checklist { display: grid; grid-template-columns: 1fr 1fr; gap: 12px 28px; }
.checklist label { display: flex; gap: 12px; align-items: flex-start; padding: 14px 16px; border: 1px solid var(--color-border-default); border-radius: var(--radius-md); background: var(--color-bg-page); cursor: pointer; font-size: var(--fs-body-sm); transition: border-color var(--dur), background var(--dur); }
.checklist label:hover { border-color: var(--color-brand-primary); }
.checklist input { accent-color: var(--color-brand-primary); width: 19px; height: 19px; margin-top: 1px; flex: none; }
.checklist input:checked + span { color: var(--color-text-muted); text-decoration: line-through; }

/* color swatches */
.swatches { display: grid; grid-template-columns: repeat(auto-fill,minmax(150px,1fr)); gap: 14px; }
.swatch { border: 1px solid var(--color-border-default); border-radius: var(--radius-md); overflow: hidden; background: var(--color-bg-page); }
.swatch__chip { height: 76px; }
.swatch__meta { padding: 11px 13px; }
.swatch__name { font-size: 13px; font-weight: var(--fw-bold); margin: 0 0 2px; }
.swatch__hex { font-family: var(--font-display); font-size: 11px; color: var(--color-text-muted); text-transform: uppercase; }
.swatch__token { font-family: var(--font-display); font-size: 10.5px; color: var(--color-text-muted); margin-top: 4px; word-break: break-all; }

/* type specimen */
.type-row { display: grid; grid-template-columns: 200px 1fr; gap: 28px; padding: 22px 0; border-top: 1px solid var(--color-border-default); align-items: baseline; }
.type-row:first-child { border-top: 0; }
.type-row .meta { font-size: 12px; color: var(--color-text-muted); font-family: var(--font-display); line-height: 1.7; }
.type-row .meta b { color: var(--color-text-primary); font-weight: 700; display: block; font-size: 13px; margin-bottom: 4px; }
.type-row .sample { color: var(--color-text-primary); }

/* grid demo */
.gridviz { display: grid; grid-template-columns: repeat(12,1fr); gap: 12px; }
.gridviz span { background: var(--color-brand-tint); border: 1px solid var(--color-brand-tint-strong); border-radius: 6px; height: 64px; display: grid; place-items: center; font-size: 11px; color: var(--color-text-brand); font-family: var(--font-display); }

/* spacing viz */
.space-row { display: flex; align-items: center; gap: 18px; padding: 8px 0; }
.space-row .bar { background: var(--color-brand-primary); height: 18px; border-radius: 4px; }
.space-row .lbl { font-family: var(--font-display); font-size: 12px; color: var(--color-text-muted); min-width: 130px; }

/* device frames for responsive */
.devices { display: flex; gap: 28px; align-items: flex-start; flex-wrap: wrap; }
.device { border: 1px solid var(--color-border-strong); border-radius: var(--radius-lg); overflow: hidden; background: var(--color-bg-page); box-shadow: var(--shadow-md); }
.device__bar { padding: 8px 14px; background: var(--color-bg-surface); border-bottom: 1px solid var(--color-border-default); font-size: 11px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--color-text-muted); display: flex; justify-content: space-between; }
.device__screen { overflow: hidden; }

/* icon grid */
.icongrid { display: grid; grid-template-columns: repeat(auto-fill,minmax(96px,1fr)); gap: 12px; }
.icontile { border: 1px solid var(--color-border-default); border-radius: var(--radius-md); padding: 16px 8px; display: flex; flex-direction: column; align-items: center; gap: 10px; text-align: center; }
.icontile svg { width: 26px; height: 26px; color: var(--color-text-primary); }
.icontile span { font-size: 11px; color: var(--color-text-muted); }

/* page-map schematics (§11) */
.pmaps { display: grid; grid-template-columns: repeat(2,1fr); gap: 20px; }
.pmap { border: 1px solid var(--color-border-default); border-radius: var(--radius-lg); overflow: hidden; background: var(--color-bg-page); }
.pmap__bar { display: flex; align-items: center; gap: 8px; padding: 12px 16px; border-bottom: 1px solid var(--color-border-default); background: var(--color-bg-surface); }
.pmap__bar .dots { display: flex; gap: 5px; }
.pmap__bar .dots i { width: 9px; height: 9px; border-radius: 50%; background: var(--color-border-strong); }
.pmap__bar h4 { margin: 0; font-size: 14px; font-weight: 700; }
.pmap__bar .tag { height: 24px; font-size: 11px; margin-left: auto; }
.pmap__body { padding: 14px; display: flex; flex-direction: column; gap: 8px; }
.blk { border-radius: var(--radius-sm); padding: 12px 14px; font-size: 12.5px; font-weight: 600; color: var(--color-text-secondary); background: var(--color-bg-surface); border: 1px solid var(--color-border-default); display: flex; align-items: center; gap: 8px; }
.blk .t { font-family: var(--font-display); font-size: 10px; color: var(--color-text-muted); margin-left: auto; font-weight: 600; letter-spacing: .03em; }
.blk--ink { background: var(--color-ink); color: #fff; border-color: transparent; }
.blk--ink .t { color: var(--color-text-on-dark-muted); }
.blk--brand { background: var(--color-brand-tint); border-color: var(--color-brand-tint-strong); color: var(--color-text-brand); }
.blk--row { display: flex; gap: 8px; }
.blk--row .blk { flex: 1; background: var(--color-bg-page); }
.blk--tall { padding-top: 22px; padding-bottom: 22px; }
@media (max-width: 768px) { .pmaps { grid-template-columns: 1fr; } }
.stack-16 > * + * { margin-top: 16px; }
.stack-24 > * + * { margin-top: 24px; }
.fl-wrap { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; }

/* button-preset showcase cells (doc) */
.btnpreset { display: grid; grid-template-columns: 1fr 1fr; gap: 28px; align-items: center; }
.btnpreset__cell { display: flex; flex-direction: column; gap: 16px; align-items: flex-start; }
.btnpreset__meta { font-size: 13px; color: var(--color-text-secondary); margin: 0; line-height: 1.6; }
.btnpreset__meta b { font-size: 13.5px; color: var(--color-text-primary); }
.btnpreset__meta code, .demo code, .block-label code { font-family: var(--font-display); font-size: 12px; color: var(--color-text-muted); background: var(--color-bg-surface-2); padding: 1px 6px; border-radius: 5px; }
@media (max-width: 576px) { .btnpreset { grid-template-columns: 1fr; gap: 22px; } }

/* ---------------- responsive (doc) ---------------- */
@media (max-width: 768px) {
  .kit { grid-template-columns: 1fr; }
  .kit-nav { position: static; height: auto; display: none; }
  .section { padding: 56px 24px; }
  .cols-3, .cols-4 { grid-template-columns: repeat(2,1fr); }
  .wfooter__grid { grid-template-columns: 1fr 1fr; }
  .audit-row, .dd, .checklist, .type-row { grid-template-columns: 1fr; }
  .type-row { gap: 8px; }
}
@media (max-width: 576px) {
  .cols-2, .cols-3, .cols-4 { grid-template-columns: 1fr; }
  .cta-banner, .wfooter, .demo--pad-lg { padding: 28px; }
  .section__title { font-size: 30px; }
}

/* ============================================================
   BRAND GRADIENT UTILITIES  (v1.0)
   Reusable accents built on the canonical --brand-gradient* tokens
   (defined once in tokens.css). Apply sparingly — one strong gradient
   accent per visible section is usually enough.
   ============================================================ */

/* ---- gradient TEXT (headline highlight) ---- */
.text-brand-gradient {
  display: inline;
  color: inherit;
  background: var(--brand-gradient);
  background-size: 100% 100%;
  background-repeat: no-repeat;
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
}

.text-brand-gradient--animated {
  display: inline;
  color: inherit;
  background: linear-gradient(
    90deg,
    #29cdf2 0%,
    #29b9f2 22%,
    #598cf0 50%,
    #694ad9 72%,
    #29cdf2 100%
  );
  background-size: 220% 100%;
  background-repeat: no-repeat;
  -webkit-background-clip: text;
  background-clip: text;
  -webkit-text-fill-color: transparent;
  animation: brand-gradient-shift 7s ease-in-out infinite;
}

@keyframes brand-gradient-shift {
  0%   { background-position: 0% 50%; }
  50%  { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}

/* Solid fallback for engines without background-clip:text — text stays
   readable instead of disappearing behind a transparent fill. */
@supports not ((-webkit-background-clip: text) or (background-clip: text)) {
  .text-brand-gradient,
  .text-brand-gradient--animated {
    background: none;
    -webkit-text-fill-color: currentColor;
    color: var(--brand-blue);
  }
}

/* ---- decorative accent line (under a heading) ---- */
.gradient-accent-line {
  width: 72px;
  height: 3px;
  border-radius: 999px;
  background: var(--brand-gradient);
}

.gradient-accent-line--wide { width: 112px; }

/* ---- gradient ring around a key icon container ---- */
.gradient-icon-accent { position: relative; }

.gradient-icon-accent::before {
  content: "";
  position: absolute;
  inset: -1px;
  border-radius: inherit;
  padding: 1px;
  background: var(--brand-gradient-border);
  -webkit-mask:
    linear-gradient(#fff 0 0) content-box,
    linear-gradient(#fff 0 0);
  -webkit-mask-composite: xor;
          mask-composite: exclude;
  pointer-events: none;
}

/* ---- 1px gradient border (one featured card / panel) ---- */
.gradient-border { position: relative; isolation: isolate; }

.gradient-border::before {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  padding: 1px;
  background: var(--brand-gradient-border);
  -webkit-mask:
    linear-gradient(#fff 0 0) content-box,
    linear-gradient(#fff 0 0);
  -webkit-mask-composite: xor;
          mask-composite: exclude;
  pointer-events: none;
  opacity: 0.78;
}

/* ---- soft gradient glow behind a CTA / panel ---- */
.gradient-glow { position: relative; }

.gradient-glow::after {
  content: "";
  position: absolute;
  z-index: -1;
  inset: -14px;
  border-radius: inherit;
  background: var(--brand-gradient-glow);
  filter: blur(24px);
  opacity: 0.5;
  pointer-events: none;
}

/* ---- pill chip with gradient hairline border ---- */
.gradient-chip {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 0.45rem;
  border-radius: 999px;
  background:
    linear-gradient(var(--chip-background, rgba(255, 255, 255, 0.92)), var(--chip-background, rgba(255, 255, 255, 0.92))) padding-box,
    var(--brand-gradient-border) border-box;
  border: 1px solid transparent;
}

/* ---- small gradient status / eyebrow dot ---- */
.gradient-dot {
  width: 8px;
  height: 8px;
  flex: 0 0 auto;
  border-radius: 999px;
  background: var(--brand-gradient);
  box-shadow: 0 0 12px rgba(88, 89, 252, 0.36);
}

/* ---- optional dominant gradient CTA (use at most once per area) ---- */
.btn-brand-gradient {
  position: relative;
  color: #ffffff;
  background: var(--brand-gradient);
  border: 0;
  box-shadow:
    0 10px 24px rgba(88, 89, 252, 0.18),
    0 4px 12px rgba(158, 55, 251, 0.12);
  transition:
    transform 220ms ease,
    box-shadow 220ms ease,
    filter 220ms ease;
}

.btn-brand-gradient:hover {
  color: #ffffff;
  transform: translateY(-2px);
  filter: saturate(1.05) brightness(1.04);
  box-shadow:
    0 14px 30px rgba(88, 89, 252, 0.24),
    0 6px 16px rgba(158, 55, 251, 0.16);
}

.btn-brand-gradient:active { transform: translateY(0); }

/* ---- accessibility: stop the animated headline sweep on request ---- */
@media (prefers-reduced-motion: reduce) {
  .text-brand-gradient--animated {
    animation: none;
    background-size: 100% 100%;
  }
}
