/* ============================================================
   ALUZIE — Page-builder SECTION styles
   One block per Sanity section type. Class = .section--<type>
   ============================================================ */

/* ---- HERO (centered) :: heroCentered ---------------------- */
.hero-c { position: relative; margin-top: -64px; padding-block: calc(64px + clamp(88px,11vw,160px)) clamp(64px,8vw,120px); overflow: hidden; }
.hero-c .wrap { position: relative; z-index: 2; }
.hero-c__inner { max-width: 880px; margin-inline: auto; text-align: center; }
.hero-c .eyebrow { margin-bottom: 26px; }
.hero-c h1 { font-size: var(--t-display); line-height: 1.02; letter-spacing: -0.03em; margin-bottom: 24px; }
.hero-c .lede { max-width: 600px; margin: 0 auto 20px; }
.hero-c__art { position: absolute; inset: 0; z-index: 1; pointer-events: none; }
.hero-c__photo {
  position: absolute; inset: 0;
  background: url('../assets/hero-bg.jpg') center / cover no-repeat;
}
/* scrim: keep image airy up top, fade to page colour at the base so it blends + protects text */
.hero-c__photo::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(180deg,
    rgba(8,20,18,0.06) 0%,
    rgba(8,20,18,0.02) 42%,
    rgba(244,247,246,0.28) 86%,
    var(--canvas) 100%);
}
.hero-c__art .dotgrid { position: absolute; inset: 0; -webkit-mask-image: radial-gradient(ellipse 70% 60% at 50% 38%, #000 0%, transparent 75%); mask-image: radial-gradient(ellipse 70% 60% at 50% 38%, #000 0%, transparent 75%); }

/* trust strip under hero */
.trust { display: flex; align-items: center; justify-content: center; flex-wrap: wrap; gap: 10px 28px; margin-top: 44px; color: var(--fg-muted); font-size: var(--t-sm); }
.trust span { display: inline-flex; align-items: center; gap: 9px; }
.trust span::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: var(--mint); }

/* ---- HERO (split) :: heroSplit ---------------------------- */
.hero-s { padding-block: clamp(64px,8vw,120px); }
.hero-s__grid { display: grid; grid-template-columns: 1.05fr 1fr; gap: clamp(40px,6vw,88px); align-items: center; }
.hero-s h1 { margin-bottom: 22px; }
.hero-s .lede { margin-bottom: 32px; }
.hero-s__media { position: relative; }
@media (max-width: 880px) { .hero-s__grid { grid-template-columns: 1fr; } .hero-s__media { order: -1; } }

/* ---- RICH TEXT :: richText -------------------------------- */
.section--rich-text .sec-head,
.section--rich-text .richtext .prose {
  width: 100%;
  max-width: var(--narrow);
  margin-inline: 0;
  text-align: left;
}
.richtext .eyebrow { margin-bottom: 18px; }
.richtext h2 { margin-bottom: 22px; }
.richtext .prose p { font-size: var(--t-lg); line-height: 1.7; }
.richtext .prose p.lead-line { font-size: clamp(1.3rem, 1.1rem + 0.8vw, 1.7rem); line-height: 1.4; color: var(--fg); font-weight: 600; letter-spacing: -0.01em; }

/* ---- MEDIA + TEXT :: mediaText ---------------------------- */
.mediatext__grid { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(36px,5vw,80px); align-items: center; }
.mediatext--right .mediatext__media { order: 2; }
.section--media-text h2 { margin-bottom: 18px; }
.section--media-text .prose { margin-bottom: 24px; }
.section--media-text .checklist { display: grid; gap: 12px; margin-bottom: 28px; }
.section--media-text .checklist li { display: grid; grid-template-columns: 22px 1fr; gap: 12px; align-items: start; color: var(--fg-2); }
.section--media-text .checklist svg { width: 22px; height: 22px; color: var(--mint); margin-top: 2px; }
@media (max-width: 820px) { .mediatext__grid { grid-template-columns: 1fr; } .mediatext--right .mediatext__media, .mediatext__media { order: -1; } }

/* media frame (shared) */
.frame { position: relative; border: 0; border-radius: 0; background: transparent; overflow: visible; box-shadow: none; }
.frame__bar { display: none; }
.frame__body { padding: 0; }
.frame__body img { width: 100%; display: block; }
.media-plain { border-radius: var(--r-lg); overflow: hidden; border: 1px solid var(--hair); box-shadow: var(--shadow-card); background: var(--paper); }
.media-plain img { width: 100%; display: block; }

/* image slot placeholder */
.slot { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; background: var(--canvas-2); color: var(--fg-faint); border: 1px dashed var(--hair-strong); border-radius: var(--r-md); min-height: 200px; text-align: center; padding: 24px; }
.slot svg { width: 30px; height: 30px; opacity: 0.5; }
.slot span { font-size: var(--t-xs); letter-spacing: 0.04em; text-transform: uppercase; }

/* ---- FEATURE COLUMNS :: featureColumns -------------------- */
.feat-grid { display: grid; gap: 20px; }
.cols-2 { grid-template-columns: repeat(2, 1fr); }
.cols-3 { grid-template-columns: repeat(3, 1fr); }
.cols-4 { grid-template-columns: repeat(4, 1fr); }
.feat-card { background: var(--paper); border: 1px solid var(--hair); border-radius: var(--r-lg); padding: 30px; transition: border-color var(--dur), box-shadow var(--dur), transform var(--dur); }
.feat-card:hover { border-color: var(--mint-40); box-shadow: var(--shadow-hov); transform: translateY(-3px); }
.feat-card .ico { width: 46px; height: 46px; border-radius: 12px; background: var(--mint-08); color: var(--mint-700); display: flex; align-items: center; justify-content: center; margin-bottom: 20px; }
.feat-card .ico svg { width: 24px; height: 24px; }
.feat-card h3 { margin-bottom: 10px; }
.feat-card h4 { margin-bottom: 10px; }
.feat-card p { font-size: var(--t-sm); margin: 0; }
@media (max-width: 980px) { .cols-4 { grid-template-columns: repeat(2,1fr); } .cols-3 { grid-template-columns: repeat(2,1fr); } }
@media (max-width: 600px) { .cols-2, .cols-3, .cols-4 { grid-template-columns: 1fr; } }

/* ---- PROCESS STEPS :: processSteps ------------------------ */
.steps { display: grid; gap: 0; }
.step { display: grid; grid-template-columns: 96px 1fr; gap: 28px; padding: 30px 0; border-top: 1px solid var(--hair); align-items: start; transition: background var(--dur); }
.step:last-child { border-bottom: 1px solid var(--hair); }
.step__num { font: 500 clamp(2rem,3vw,2.6rem)/1 var(--mono); color: var(--mint); letter-spacing: -0.03em; }
.step h3 { margin-bottom: 8px; }
.step p { margin: 0; max-width: 62ch; }
@media (max-width: 600px) { .step { grid-template-columns: 1fr; gap: 8px; } }

/* steps as cards variant */
.steps-cards { display: grid; grid-template-columns: repeat(4,1fr); gap: 20px; counter-reset: s; }
.steps-cards .step-card { background: var(--paper); border: 1px solid var(--hair); border-radius: var(--r-lg); padding: 28px; position: relative; }
.steps-cards .step-card .n { font: 500 14px var(--mono); color: var(--mint); margin-bottom: 18px; display: block; }
.steps-cards .step-card h3 { font-size: var(--t-h3); margin-bottom: 8px; }
.steps-cards .step-card p { font-size: var(--t-sm); margin: 0; }
@media (max-width: 980px) { .steps-cards { grid-template-columns: repeat(2,1fr); } }
@media (max-width: 560px) { .steps-cards { grid-template-columns: 1fr; } }

/* ---- ICON BULLET GRID :: iconBulletGrid ------------------- */
.bullets { display: grid; grid-template-columns: 1fr 1fr; gap: 0 48px; }
.bullet { display: grid; grid-template-columns: 44px 1fr; gap: 16px; align-items: start; padding: 22px 0; border-top: 1px solid var(--hair); }
.bullet .ico { width: 44px; height: 44px; border-radius: 11px; background: var(--mint-08); color: var(--mint-700); display: flex; align-items: center; justify-content: center; }
.bullet .ico svg { width: 22px; height: 22px; }
.bullet p { margin: 0; color: var(--fg); font-weight: 500; align-self: center; }
@media (max-width: 760px) { .bullets { grid-template-columns: 1fr; gap: 0; } }

/* ---- STAT BAND :: statBand -------------------------------- */
.stats { display: grid; grid-template-columns: repeat(4,1fr); gap: 24px; }
.stat { padding: 6px 0; }
.stat .v { font-size: clamp(2.4rem,4vw,3.4rem); font-weight: 600; letter-spacing: -0.03em; line-height: 1; color: var(--fg); }
.stat .v .u { color: var(--mint); }
.stat .l { margin-top: 12px; color: var(--fg-2); font-size: var(--t-sm); max-width: 24ch; }
.stats--inv .stat .v { color: var(--fg-inv); }
.stats--inv .stat .l { color: var(--fg-inv-2); }
@media (max-width: 820px) { .stats { grid-template-columns: 1fr 1fr; gap: 36px 24px; } }

/* ---- STATEMENT BAND :: statementBand ---------------------- */
.statement { text-align: center; }
.statement.dark { background: var(--ink); color: var(--fg-inv); }
.statement__inner { max-width: 980px; margin-inline: auto; }
.statement h2 { font-size: clamp(1.9rem, 1.2rem + 2.6vw, 3.1rem); line-height: 1.1; letter-spacing: -0.025em; }
.statement.dark h2 { color: var(--fg-inv); }
.statement--light { background: var(--canvas-2); }
.statement--light h2 { color: var(--fg); font-size: clamp(2.6rem, 1.6rem + 3.6vw, 4.6rem); }
.statement .sub { margin-top: 22px; font-size: var(--t-lg); color: var(--fg-2); }
.statement.dark .sub { color: var(--fg-inv-2); }
.statement .keyword { color: var(--mint); }
.statement--two h2 + h2 { color: var(--mint-700); }

/* ---- CTA BAND :: ctaBand ---------------------------------- */
.cta { position: relative; overflow: hidden; background: var(--ink); color: var(--fg-inv); border-radius: clamp(20px,3vw,32px); padding: clamp(48px,7vw,84px) clamp(28px,5vw,72px); text-align: center; }
/* optional editor-supplied background image — sits beneath the triangle texture.
   Render component sets background-image + --cta-dim (0–1) from the schema's imageDim. */
.cta__bg { position: absolute; inset: 0; z-index: 0; background-size: cover; background-position: center; pointer-events: none; }
.cta__bg::after { content: ''; position: absolute; inset: 0; background: var(--ink); opacity: var(--cta-dim, 0.55); }
.cta__art { position: absolute; inset: 0; z-index: 1; opacity: 0.5; pointer-events: none; }
.cta__inner { position: relative; z-index: 2; max-width: 680px; margin-inline: auto; }
.cta h2 { color: var(--fg-inv); margin-bottom: 16px; }
.cta p { color: var(--fg-inv-2); font-size: var(--t-lg); margin-bottom: 32px; }
.cta .btn-row { justify-content: center; }

/* ---- ARTICLE GRID :: articleGrid ------------------------- */
.articles { display: grid; grid-template-columns: repeat(3,1fr); gap: 26px; }
.article-card { display: flex; flex-direction: column; background: var(--paper); border: 1px solid var(--hair); border-radius: var(--r-lg); overflow: hidden; transition: border-color var(--dur), box-shadow var(--dur), transform var(--dur); }
.article-card:hover { border-color: var(--mint-40); box-shadow: var(--shadow-hov); transform: translateY(-3px); }
.article-card__img { aspect-ratio: 16 / 10; overflow: hidden; background: var(--canvas-2); }
.article-card__img img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.5s var(--ease); }
.article-card:hover .article-card__img img { transform: scale(1.04); }
.article-card__body { padding: 26px; display: flex; flex-direction: column; gap: 12px; flex: 1; }
.article-card .meta { display: flex; gap: 10px; align-items: center; font-size: var(--t-xs); color: var(--fg-muted); }
.article-card .tagpill { color: var(--mint-700); font-weight: 600; letter-spacing: 0.04em; text-transform: uppercase; }
.article-card h3 { margin: 0; }
.article-card .txtlink { margin-top: auto; }
@media (max-width: 920px) { .articles { grid-template-columns: 1fr 1fr; } }
@media (max-width: 600px) { .articles { grid-template-columns: 1fr; } }

/* featured article (first, wide) */
.article-feat { display: grid; grid-template-columns: 1.1fr 1fr; gap: 0; border: 1px solid var(--hair); border-radius: var(--r-lg); overflow: hidden; background: var(--paper); margin-bottom: 26px; }
.article-feat__img { background: var(--canvas-2); min-height: 320px; }
.article-feat__img img { width: 100%; height: 100%; object-fit: cover; }
.article-feat__body { padding: clamp(28px,4vw,48px); display: flex; flex-direction: column; gap: 16px; justify-content: center; }
.article-feat__body h2 { margin: 0; }
@media (max-width: 820px) { .article-feat { grid-template-columns: 1fr; } .article-feat__img { min-height: 220px; } }

/* ---- CONTACT FORM :: contactForm ------------------------- */
.contact-grid { display: grid; grid-template-columns: 1fr 1.1fr; gap: clamp(40px,6vw,80px); align-items: start; }
.contact-aside h2 { margin-bottom: 18px; }
.contact-aside .prose { margin-bottom: 28px; }
.contact-points { display: grid; gap: 18px; }
.contact-point { display: grid; grid-template-columns: 42px 1fr; gap: 14px; align-items: start; }
.contact-point .ico { width: 42px; height: 42px; border-radius: 11px; background: var(--mint-08); color: var(--mint-700); display: flex; align-items: center; justify-content: center; }
.contact-point .ico svg { width: 20px; height: 20px; }
.contact-point b { display: block; color: var(--fg); font-weight: 600; }
.contact-point span { font-size: var(--t-sm); color: var(--fg-muted); }
.form-card { background: var(--paper); border: 1px solid var(--hair); border-radius: var(--r-xl); padding: clamp(28px,4vw,44px); box-shadow: var(--shadow-card); }
.field { margin-bottom: 18px; }
.field label { display: block; font-size: var(--t-sm); font-weight: 600; color: var(--fg); margin-bottom: 8px; }
.field input, .field textarea, .field select {
  width: 100%; font: inherit; color: var(--fg); background: var(--canvas-2);
  border: 1px solid var(--hair-strong); border-radius: var(--r-md); padding: 13px 15px;
  transition: border-color var(--dur), box-shadow var(--dur), background var(--dur);
}
.field input:focus, .field textarea:focus, .field select:focus { outline: none; border-color: var(--mint); background: var(--paper); box-shadow: 0 0 0 4px var(--mint-14); }
.field textarea { resize: vertical; min-height: 130px; }
.field-row { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
.form-card .btn { width: 100%; margin-top: 6px; }
.form-note { margin-top: 14px; font-size: var(--t-xs); color: var(--fg-muted); text-align: center; }
@media (max-width: 820px) { .contact-grid { grid-template-columns: 1fr; } .field-row { grid-template-columns: 1fr; } }

/* ---- FAQ ACCORDION :: faqAccordion ----------------------- */
.faq { max-width: 820px; margin-inline: auto; }
.faq-item { border-top: 1px solid var(--hair); }
.faq-item:last-child { border-bottom: 1px solid var(--hair); }
.faq-q { display: flex; align-items: center; justify-content: space-between; gap: 20px; width: 100%; background: none; border: none; text-align: left; padding: 26px 4px; font-size: var(--t-h3); font-weight: 600; color: var(--fg); letter-spacing: -0.01em; }
.faq-q .pm { flex: none; width: 30px; height: 30px; border-radius: 50%; border: 1px solid var(--hair-strong); position: relative; transition: background var(--dur), border-color var(--dur); }
.faq-q .pm::before, .faq-q .pm::after { content: ""; position: absolute; background: var(--fg); top: 50%; left: 50%; transform: translate(-50%,-50%); transition: transform var(--dur), background var(--dur); }
.faq-q .pm::before { width: 12px; height: 1.5px; }
.faq-q .pm::after { width: 1.5px; height: 12px; }
.faq-item.open .faq-q .pm { background: var(--mint); border-color: var(--mint); }
.faq-item.open .faq-q .pm::before, .faq-item.open .faq-q .pm::after { background: #fff; }
.faq-item.open .faq-q .pm::after { transform: translate(-50%,-50%) scaleY(0); }
.faq-a { overflow: hidden; max-height: 0; transition: max-height var(--dur) var(--ease); }
.faq-a__inner { padding: 0 4px 28px; max-width: 64ch; }
.faq-a__inner p { margin: 0; }

/* ---- logo / client strip :: logoStrip -------------------- */
.logostrip { text-align: center; }
.logostrip .cap { font-size: var(--t-sm); color: var(--fg-muted); margin-bottom: 28px; }
.logostrip__row { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: clamp(28px,5vw,60px); opacity: 0.62; }
.logostrip__row span { font-size: 1.3rem; font-weight: 600; letter-spacing: -0.01em; color: var(--fg-2); }

/* ---- breadcrumb / article header ------------------------- */
.crumb { display: flex; gap: 8px; align-items: center; font-size: var(--t-sm); color: var(--fg-muted); margin-bottom: 24px; }
.crumb a:hover { color: var(--mint-700); }
.post-hero { max-width: 800px; margin-inline: auto; text-align: center; }
.post-hero .meta { display: flex; justify-content: center; gap: 14px; align-items: center; margin-top: 22px; color: var(--fg-muted); font-size: var(--t-sm); }
.post-hero .tagpill { color: var(--mint-700); font-weight: 600; text-transform: uppercase; letter-spacing: 0.06em; font-size: var(--t-xs); }
.post-body { max-width: 720px; margin-inline: auto; }
.post-body h2 { margin: 1.6em 0 0.6em; }
.post-body h3 { margin: 1.4em 0 0.5em; }
.post-body p { font-size: var(--t-lg); line-height: 1.75; margin-bottom: 1.1em; }
.post-body blockquote { margin: 1.6em 0; padding: 4px 0 4px 28px; border-left: 3px solid var(--mint); font-size: 1.4rem; line-height: 1.4; font-weight: 600; color: var(--fg); letter-spacing: -0.01em; }
.post-body figure { margin: 2em 0; }
.post-body figcaption { margin-top: 12px; font-size: var(--t-sm); color: var(--fg-muted); text-align: center; }

/* ---- 404 ------------------------------------------------- */
.nf { min-height: 64vh; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; }
.nf .code { font: 500 clamp(5rem,14vw,11rem)/1 var(--mono); color: var(--mint); letter-spacing: -0.04em; }
.nf h1 { margin: 8px 0 16px; }
.nf p { max-width: 44ch; margin: 0 auto 32px; }

/* role chips (platform end-users) */
.role-chip { display: flex; align-items: center; gap: 11px; padding: 18px 20px; background: var(--paper); border: 1px solid var(--hair); border-radius: var(--r-md); font-weight: 600; font-size: var(--t-sm); color: var(--fg); transition: border-color var(--dur), box-shadow var(--dur); }
.role-chip::before { content: ""; width: 8px; height: 8px; border-radius: 2px; background: var(--mint); transform: rotate(45deg); flex: none; }
.role-chip:hover { border-color: var(--mint-40); box-shadow: var(--shadow-card); }

/* ---- utility ---------------------------------------------- */
.divider { height: 1px; background: var(--hair); border: none; }
.center { text-align: center; }

/* ============================================================
   DATA-VIZ — categorical accents on repeating component sets.
   Lead with Aqua, then Indigo, Coral, Amber, Violet, Pink.
   Applied automatically so every page picks up the palette.
   ============================================================ */
.feat-grid .feat-card:nth-child(6n+1) .ico,
.bullets .bullet:nth-child(6n+1) .ico { background: color-mix(in srgb, var(--dv-aqua) 13%, #fff);   color: color-mix(in srgb, var(--dv-aqua) 80%, #000); }
.feat-grid .feat-card:nth-child(6n+2) .ico,
.bullets .bullet:nth-child(6n+2) .ico { background: color-mix(in srgb, var(--dv-indigo) 13%, #fff); color: color-mix(in srgb, var(--dv-indigo) 82%, #000); }
.feat-grid .feat-card:nth-child(6n+3) .ico,
.bullets .bullet:nth-child(6n+3) .ico { background: color-mix(in srgb, var(--dv-coral) 14%, #fff);  color: color-mix(in srgb, var(--dv-coral) 78%, #000); }
.feat-grid .feat-card:nth-child(6n+4) .ico,
.bullets .bullet:nth-child(6n+4) .ico { background: color-mix(in srgb, var(--dv-amber) 16%, #fff);  color: color-mix(in srgb, var(--dv-amber) 70%, #000); }
.feat-grid .feat-card:nth-child(6n+5) .ico,
.bullets .bullet:nth-child(6n+5) .ico { background: color-mix(in srgb, var(--dv-violet) 13%, #fff); color: color-mix(in srgb, var(--dv-violet) 80%, #000); }
.feat-grid .feat-card:nth-child(6n+6) .ico,
.bullets .bullet:nth-child(6n+6) .ico { background: color-mix(in srgb, var(--dv-pink) 14%, #fff);   color: color-mix(in srgb, var(--dv-pink) 80%, #000); }

/* role chips — diamond marker cycles the categorical series */
.role-chip:nth-child(6n+1)::before { background: var(--dv-aqua); }
.role-chip:nth-child(6n+2)::before { background: var(--dv-indigo); }
.role-chip:nth-child(6n+3)::before { background: var(--dv-coral); }
.role-chip:nth-child(6n+4)::before { background: var(--dv-amber); }
.role-chip:nth-child(6n+5)::before { background: var(--dv-violet); }
.role-chip:nth-child(6n+6)::before { background: var(--dv-pink); }

/* ---- DASHBOARD CHART (dashboard chrome) ------------------- */
.dash { background: var(--paper); }
.dash__kpis { display: flex; gap: 0; border-bottom: 1px solid var(--hair); }
.dash__kpi { flex: 1; padding: 16px 20px; }
.dash__kpi + .dash__kpi { border-left: 1px solid var(--hair); }
.dash__kpi .v { font-size: 1.5rem; font-weight: 600; letter-spacing: -0.02em; color: var(--n-charcoal); line-height: 1; }
.dash__kpi .v .u { color: var(--dv-aqua); }
.dash__kpi .k { margin-top: 7px; font-size: var(--t-xs); color: var(--fg-muted); letter-spacing: 0.02em; }
.dash__body { padding: 20px; }
.dash__cap { display: flex; align-items: baseline; justify-content: space-between; margin-bottom: 16px; }
.dash__cap b { font-size: var(--t-sm); font-weight: 600; color: var(--n-charcoal); }
.dash__cap span { font: 500 11px var(--mono); color: var(--fg-muted); }
.bars { display: grid; gap: 13px; }
.bar { display: grid; grid-template-columns: 120px 1fr 44px; align-items: center; gap: 14px; }
.bar .lbl { font-size: var(--t-xs); color: var(--fg-2); text-align: right; white-space: nowrap; }
.bar .track { height: 10px; border-radius: var(--r-pill); background: var(--canvas-2); overflow: hidden; }
.bar .fill { height: 100%; border-radius: var(--r-pill); transform-origin: left; }
.bar .pct { font: 500 12px var(--mono); color: var(--n-slate); text-align: right; }
.bar:nth-child(1) .fill { background: var(--dv-aqua); }
.bar:nth-child(2) .fill { background: var(--dv-indigo); }
.bar:nth-child(3) .fill { background: var(--dv-coral); }
.bar:nth-child(4) .fill { background: var(--dv-amber); }
.bar:nth-child(5) .fill { background: var(--dv-violet); }
.bar:nth-child(6) .fill { background: var(--dv-pink); }
@media (prefers-reduced-motion: no-preference) {
  .reveal.in .bar .fill { animation: barGrow 0.8s var(--ease) both; }
  .bar:nth-child(2) .fill { animation-delay: 0.08s; }
  .bar:nth-child(3) .fill { animation-delay: 0.16s; }
  .bar:nth-child(4) .fill { animation-delay: 0.24s; }
  .bar:nth-child(5) .fill { animation-delay: 0.32s; }
  .bar:nth-child(6) .fill { animation-delay: 0.40s; }
  @keyframes barGrow { from { transform: scaleX(0); } to { transform: scaleX(1); } }
}
@media (max-width: 420px) { .bar { grid-template-columns: 96px 1fr 38px; gap: 10px; } }

/* ---- intro coalescence diagram ---------------------------- */
.intro-diagram { text-align: center; }
.intro-diagram img { width: 100%; max-width: 560px; height: auto; }
.intro-diagram__cap { margin: 14px auto 0; font-size: var(--t-xs); color: var(--fg-muted); letter-spacing: 0.01em; max-width: 440px; }
.section--rich-text.section--media-text .intro-diagram img { max-width: 100%; }
.twin-fig { max-width: 720px; margin: 0 auto; padding: 0 clamp(16px, 3vw, 32px) clamp(20px, 3vw, 32px); font-family: var(--font); }
.twin-fig__svg { display: block; width: 100%; height: auto; aspect-ratio: 6 / 4; margin-bottom: .75rem; }
.twin-fig__captions { display: flex; justify-content: space-between; gap: 16px; font-size: 13px; color: var(--fg-muted); }
.twin-fig__dot { display: inline-block; width: 7px; height: 7px; background: #aeb4bd; border-radius: 50%; vertical-align: 1px; margin-right: 6px; }
.twin-fig__sq { display: inline-block; width: 7px; height: 7px; background: #11AB9E; border-radius: 2px; vertical-align: 1px; margin-left: 6px; }
