/* ==========================================================================
   HSI components — every prototype component (inventory §2) as classes.
   Values are the exact ones React emitted; see docs/COMPONENTS.md for usage.
   Layer order (declared in base.css): base < components < utilities.
   ========================================================================== */
@layer components {

/* ---- Button ---------------------------------------------------------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;font-family:var(--font-body);font-weight:600;font-size:.9375rem;line-height:1;padding:11px 22px;border-radius:var(--radius-sm);cursor:pointer;text-decoration:none;border:1px solid transparent;background:var(--cta-bg);color:var(--cta-text);transition:background 150ms ease-out,transform 100ms ease-out}
.btn:hover{background:var(--cta-bg-hover);color:var(--cta-text)}
.btn:active{transform:translateY(1px)}
.btn--sm{padding:8px 16px;font-size:.8125rem}
.btn--md{padding:11px 22px;font-size:.9375rem}
.btn--lg{padding:14px 28px;font-size:1rem}
.btn--primary{background:var(--cta-bg);color:var(--cta-text);border-color:transparent}
.btn--primary:hover{background:var(--cta-bg-hover);color:var(--cta-text)}
.btn--secondary{background:var(--compass-navy);color:#fff;border-color:transparent}
.btn--secondary:hover{background:var(--midnight-navy);color:#fff}
.btn--ghost{background:transparent;color:#fff;border-color:var(--on-dark-ghost-border)}
.btn--ghost:hover{background:var(--on-dark-ghost-hover);color:#fff}
.btn--outline{background:transparent;color:var(--compass-navy);border-color:var(--compass-navy)}
.btn--outline:hover{background:var(--sky-wash);color:var(--compass-navy)}
.btn-row{display:flex;gap:14px;flex-wrap:wrap;align-items:center}
.btn-row--center{justify-content:center}
.btn-row--gap-16{gap:16px}

/* ---- Eyebrow --------------------------------------------------------- */
.eyebrow{font-family:var(--font-data);font-weight:var(--eyebrow-weight);font-size:var(--eyebrow-size);letter-spacing:var(--eyebrow-tracking);text-transform:uppercase;color:var(--label-gold);margin:0}
.eyebrow--dark{color:var(--gold-tint)}
.eyebrow--steel{color:var(--label-steel)}
.eyebrow--xs{font-size:11px}
.eyebrow--xxs{font-size:.6875rem}
.sec--midnight .eyebrow,.sec--navy .eyebrow,.sec--band .eyebrow{color:var(--gold-tint)}

/* ---- Badge ----------------------------------------------------------- */
.badge{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-data);font-weight:500;font-size:.75rem;letter-spacing:.06em;text-transform:uppercase;padding:4px 10px;border-radius:var(--radius-sm);background:var(--sky-wash);color:var(--compass-navy);border:1px solid var(--badge-navy-border)}
.badge--navy{background:var(--sky-wash);color:var(--compass-navy);border-color:var(--badge-navy-border)}
.badge--gold{background:var(--warm-cream);color:var(--badge-gold-text);border-color:var(--bronze)}
.badge--verdant{background:var(--badge-verdant-bg);color:var(--verdant);border-color:var(--badge-verdant-border)}
.badge--crimson{background:var(--badge-crimson-bg);color:var(--heart-crimson);border-color:var(--badge-crimson-border)}
.badge--dark{background:var(--on-dark-badge);color:var(--gold-tint);border-color:var(--on-dark-badge-border)}
.badge-row{display:flex;gap:10px;flex-wrap:wrap}
.badge-row--tight{gap:8px}

/* ---- Display text (heading styles usable on any element) ------------ */
.display{font-family:var(--font-display);font-weight:var(--display-weight);line-height:var(--display-line);color:var(--text-heading)}
.display-xl{font-family:var(--font-display);font-weight:var(--display-weight);line-height:var(--display-line);color:var(--text-heading);font-size:var(--display-xl)}
.display-lg{font-family:var(--font-display);font-weight:var(--display-weight);line-height:var(--display-line);color:var(--text-heading);font-size:var(--display-lg)}
.display-md{font-family:var(--font-display);font-weight:var(--display-weight);line-height:var(--display-line);color:var(--text-heading);font-size:var(--display-md)}
.display-sm{font-family:var(--font-display);font-weight:var(--display-weight);line-height:var(--display-line);color:var(--text-heading);font-size:var(--display-sm)}
.display--federal{font-family:var(--font-display-federal);font-weight:var(--display-federal-weight);letter-spacing:var(--display-federal-tracking)}
.display--dark{color:#fff}
.sec--midnight .display-xl,.sec--midnight .display-lg,.sec--midnight .display-md,.sec--midnight .display-sm,
.sec--navy .display-xl,.sec--navy .display-lg,.sec--navy .display-md,.sec--navy .display-sm,
.sec--band .display-xl,.sec--band .display-lg,.sec--band .display-md,.sec--band .display-sm{color:#fff}
.gold-rule,.rule{width:var(--rule-w);height:var(--rule-h);background:var(--compass-gold);margin:18px 0 0}
.rule--center{margin-left:auto;margin-right:auto}

/* ---- SectionHeading -------------------------------------------------- */
.sh{text-align:left}
.sh--center{text-align:center}
.sh .eyebrow{margin-bottom:12px}
.sh__title{font-family:var(--font-display);font-weight:var(--display-weight);font-size:var(--display-lg);line-height:var(--display-line);color:var(--text-heading);margin:0}
.sh__title--xl{font-size:var(--display-xl)}
.sh__title--md{font-size:var(--display-md)}
.sh__title--sm{font-size:var(--display-sm)}
.sh--federal .sh__title{font-family:var(--font-display-federal);font-weight:var(--display-federal-weight);letter-spacing:var(--display-federal-tracking)}
.sh--dark .sh__title{color:#fff}
.sh--dark .eyebrow{color:var(--gold-tint)}
.sh .rule{margin-top:16px}
.sh--center .rule{margin-left:auto;margin-right:auto}
.sh__lede{font-family:var(--font-body);font-size:var(--text-lg);line-height:1.55;color:var(--text-muted);max-width:620px;margin:16px 0 0}
.sh--center .sh__lede{margin-left:auto;margin-right:auto}
.sh--dark .sh__lede{color:var(--text-on-dark-muted)}

/* ---- StatTile -------------------------------------------------------- */
.stat{background:#fff;border-top:var(--stat-bar-h) solid var(--compass-gold);border-radius:var(--radius-md);box-shadow:var(--shadow-card);padding:20px 22px;min-width:150px}
.stat__value{font-family:var(--font-data);font-weight:var(--stat-weight);font-size:var(--stat-size);line-height:1;color:var(--compass-navy)}
.stat__label{font-family:var(--font-body);font-size:var(--text-sm);line-height:1.45;color:var(--slate);margin-top:8px}
.stat--verdant .stat__value{color:var(--verdant)}
.stat--dark{background:var(--on-dark-tile);box-shadow:none}
.stat--dark .stat__value{color:var(--gold-tint)}
.stat--dark .stat__label{color:var(--text-on-dark-muted)}

/* ---- QuoteBlock ------------------------------------------------------ */
.quote{margin:0;background:var(--warm-cream);border:1px solid var(--cream-border);border-left:var(--case-rule-w) solid var(--compass-gold);border-radius:var(--radius-md);padding:24px 28px}
.quote__mark{font-family:var(--font-display);font-size:3rem;line-height:.5;color:var(--heart-crimson);height:20px}
.quote blockquote{margin:0;font-family:var(--font-display);font-style:italic;font-weight:500;font-size:1.125rem;line-height:1.5;color:var(--ink)}
.quote figcaption{margin-top:14px}
.quote__name{font-family:var(--font-body);font-weight:600;font-size:var(--text-sm);color:var(--compass-navy)}
.quote__role{font-family:var(--font-data);font-size:.75rem;letter-spacing:.04em;color:var(--slate)}
.quote__role::before{content:"\00a0\00a0|\00a0\00a0"}
.quote--dark{background:var(--on-dark-tile);border-color:var(--on-dark-rule);border-left-color:var(--compass-gold)}
.quote--dark blockquote{color:#fff}
.quote--dark .quote__name{color:var(--gold-tint)}
.quote--dark .quote__role{color:var(--text-on-dark-muted)}

/* ---- CaseStudyCard --------------------------------------------------- */
.case{background:#fff;border:1px solid var(--border-card);border-left:var(--case-rule-w) solid var(--compass-gold);border-radius:var(--radius-md);box-shadow:var(--shadow-card);padding:26px 28px}
.case__sector{font-family:var(--font-data);font-weight:var(--eyebrow-weight);font-size:.6875rem;letter-spacing:var(--eyebrow-tracking);text-transform:uppercase;color:var(--label-steel);margin:0 0 10px}
.case__title{font-family:var(--font-display);font-weight:600;font-size:1.375rem;line-height:1.25;color:var(--compass-navy);margin:0}
.case__meta{display:flex;gap:24px;margin-top:16px;flex-wrap:wrap}
.case__field{flex:1 1 200px}
.case__label{font-family:var(--font-data);font-size:.6875rem;letter-spacing:.12em;color:var(--label-gold);font-weight:600;margin:0 0 6px}
.case__field p{font-size:var(--text-sm);line-height:1.55;color:var(--ink);margin:0}
.case__stats{display:flex;gap:28px;margin-top:18px;padding-top:16px;border-top:1px solid var(--border-card)}
.case__num{font-family:var(--font-data);font-weight:700;font-size:1.75rem;line-height:1;color:var(--compass-navy)}
.case__stat--verdant .case__num{color:var(--verdant)}
.case__lbl{font-size:var(--text-xs);color:var(--slate);margin-top:5px}
.case__quote{margin-top:18px;padding-top:16px;border-top:1px solid var(--border-card)}
.case__quote p{font-family:var(--font-display);font-style:italic;font-size:.9375rem;line-height:1.5;color:var(--ink);margin:0}
.case__quote .q{color:var(--heart-crimson)}
.case__attr{font-family:var(--font-data);font-size:.75rem;letter-spacing:.04em;color:var(--slate);margin-top:8px}

/* ---- Form fields (Input / Textarea / Select) ------------------------- */
.field{display:block}
.field__label{display:block;font-family:var(--font-body);font-weight:600;font-size:var(--text-sm);color:var(--ink);margin-bottom:6px}
.field__control{width:100%;box-sizing:border-box;font-family:var(--font-body);font-size:var(--text-md);line-height:normal;color:var(--ink);background:#fff;border:1px solid var(--input-border);border-radius:var(--radius-sm);padding:11px 14px;outline:none;box-shadow:none;transition:box-shadow 150ms ease-out,border-color 150ms ease-out}
.field__control:focus{border-color:var(--horizon-blue);box-shadow:0 0 0 2px var(--focus-glow)}
.field__control:focus-visible{outline:none}
textarea.field__control{resize:vertical}
select.field__control{appearance:auto}
.field__hint{display:block;font-size:var(--text-xs);color:var(--slate);margin-top:5px}
.form-grid{display:grid;gap:16px}
.form-foot{display:flex;align-items:center;gap:18px;flex-wrap:wrap}
.form-note{font-size:var(--text-xs);color:var(--slate);max-width:280px;line-height:1.5}
/* Required-field marker (John, Sept 13, 2026): a gold asterisk after the label of any required control, generated
   from the attribute itself so marker and markup cannot drift (:has() is universal in evergreen browsers; older
   ones simply show no marker). Every form opens with <p class="form-legend">* Required</p> to explain it. */
.field:has([required]) .field__label::after{content:" *";color:var(--label-gold);font-weight:700}
.form-legend{font-size:var(--text-xs);color:var(--slate);margin:0 0 -4px}
.form-card{background:#fff;border:1px solid var(--border-card);border-top:4px solid var(--compass-gold);border-radius:var(--radius-md);box-shadow:var(--shadow-card);padding:36px 38px}
.form-card--raised{box-shadow:var(--shadow-raised);border-left:0;border-right:0;border-bottom:0;padding:34px 36px}
.form-card__title{font-family:var(--font-display);font-weight:600;font-size:24px;line-height:var(--body-line);color:var(--compass-navy);margin:0 0 22px}
.form-success{text-align:center;padding:56px 0}
.form-success p{color:var(--slate);font-size:14px;margin-top:10px}
/* title is a <p> too — keep it above `.form-success p` in specificity so it stays Fraunces 26px navy */
.form-success .form-success__title{font-family:var(--font-display);font-weight:600;font-size:26px;color:var(--compass-navy);margin:0}

/* ---- Photo (a real photograph in a Design C photo slot) --------------
   <figure class="photo ratio-4-5"><img … width height srcset sizes></figure>. Same frame as the
   placeholder tile (1px bronze keyline, radius-md, navy behind while loading); the figure's aspect-ratio
   sizes the box, the image covers it, so nothing shifts when it loads. */
.photo{position:relative;display:block;margin:0;overflow:hidden;aspect-ratio:4/5;background:var(--compass-navy);border:1px solid var(--bronze);border-radius:var(--radius-md)}
.photo img{display:block;width:100%;height:100%;object-fit:cover}
.photo--flush-bottom{border-radius:6px 6px 0 0;border-bottom:none}
/* ---- PhotoTile (placeholder for a slot with no photo yet) ------------ */
.photo-tile{position:relative;overflow:hidden;background-image:var(--hatch-on-navy),linear-gradient(160deg,var(--compass-navy),var(--midnight-navy));border:1px solid var(--bronze);border-radius:var(--radius-md);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:12px;aspect-ratio:4/5}
.photo-tile img{opacity:.9;flex:none;width:58px;height:auto}
.photo-tile span{font-family:var(--font-data);font-size:10.5px;font-weight:500;letter-spacing:.15em;text-transform:uppercase;color:var(--text-on-dark-muted);text-align:center;padding:0 18px;line-height:1.7}
.photo-tile--flush-bottom{border-radius:6px 6px 0 0;border-bottom:none}
.ratio-4-5{aspect-ratio:4/5}
.ratio-4-4p7{aspect-ratio:4/4.7}
.ratio-4-4p4{aspect-ratio:4/4.4}
.ratio-16-8p5{aspect-ratio:16/8.5}
.ratio-21-8{aspect-ratio:21/8}
.frame-offset{position:relative}
.frame-offset::before{content:"";position:absolute;top:14px;left:-14px;width:100%;height:100%;border:2px solid var(--bronze);border-radius:var(--radius-md);opacity:.55}
.frame-offset>*{position:relative}

/* ---- TickRule (CSS-only version of the 15-span rule) ---------------- */
.tick-rule{box-sizing:content-box;max-width:var(--container);margin:0 auto;padding:0 32px}
.tick-rule::before{content:"";display:block;height:10px;border-top:1px solid var(--border-card);background-image:repeating-linear-gradient(90deg,rgba(204,152,40,.7) 0 1px,transparent 1px 228px),repeating-linear-gradient(90deg,rgba(100,140,200,.7) 0 1px,transparent 1px 57px);background-size:799px 8px,799px 5px;background-position:2px 0,2px 0;background-repeat:no-repeat}

/* ---- CapsRun --------------------------------------------------------- */
.caps-run{list-style:none;margin:0;padding:0;font-family:var(--font-data);font-weight:500;font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-tint);display:flex;flex-wrap:wrap;align-items:center;row-gap:8px}
.caps-run li{display:inline-flex;align-items:center}
.caps-run li+li::before{content:"|";margin:0 16px;opacity:.4}
.caps-run--center{justify-content:center}
.caps-run--slate{color:var(--slate)}
.caps-run--steel{color:var(--label-steel)}
.caps-run--sm{font-size:11.5px}
.caps-run--md{font-size:12.5px}
.caps-run__dot{width:7px;height:7px;border-radius:50%;background:var(--compass-gold);flex:none;margin-right:9px}

/* ---- BearingRing (decorative compass ring; spins slowly) --------------
   Prototype bug fixed: the wrapper positions/centers, the svg only rotates. */
.bearing-wrap{position:absolute;inset:0;pointer-events:none;color:var(--steel-blue);opacity:.3}
.bearing{position:absolute;top:50%;left:50%;width:620px;height:620px;max-width:none;translate:-50% -50%;animation:spin 150s linear infinite;transform-origin:center}
@keyframes spin{to{transform:rotate(360deg)}}

/* ---- CTABand (partial: partials/cta-band.njk) ------------------------ */
.cta__in{text-align:center;max-width:840px;margin:0 auto}
.cta__title{font-family:var(--font-display);font-weight:600;font-size:var(--display-lg);line-height:var(--display-line);color:#fff;text-wrap:balance;margin:0}
.cta__lede{color:var(--text-on-dark-muted);font-size:var(--text-md);line-height:1.65;margin:18px auto 0;max-width:580px}

/* ---- Cards ----------------------------------------------------------- */
.card{display:block;height:100%;background:#fff;border:1px solid var(--border-card);border-radius:var(--radius-md);box-shadow:var(--shadow-card);padding:28px 26px;color:inherit;text-decoration:none}
a.card:hover{color:inherit}
.card.g{display:grid}
.card--pad-sm{padding:20px 24px}
.card--pad-md{padding:26px 24px}
.card--pad-lg{padding:30px 28px}
.card--pad-30{padding:30px}
.card--pad-xl{padding:34px 36px}
.card--pad-32-34{padding:32px 34px}
.card--pad-26-30{padding:26px 30px}
.card--pad-22-26{padding:22px 26px}
.card--pad-24-28{padding:24px 28px}
.card--pad-26-22{padding:26px 22px}
.card--top-gold{border-top:4px solid var(--compass-gold)}
.card--top-navy{border-top:4px solid var(--compass-navy)}
.card--top-bronze{border-top:4px solid var(--bronze)}
.card--left-gold{border-left:var(--case-rule-w) solid var(--compass-gold)}
.card--sky{background:var(--sky-wash);box-shadow:none}
.card--cream{background:var(--warm-cream);box-shadow:none;border-color:var(--cream-border)}
.card--flat{box-shadow:none}
.card--raised{box-shadow:var(--shadow-raised)}
.card--dark{background:var(--on-dark-panel);border-color:var(--on-dark-panel-border);box-shadow:none;color:#fff}
.card--flex{display:flex;gap:22px;align-items:flex-start}
.card--auto{height:auto}
.card__title{font-family:var(--font-display);font-weight:600;font-size:19px;line-height:1.28;color:var(--compass-navy);margin:0}
.card__title--lg{font-size:22px;line-height:1.25}
.card__title--21{font-size:21px;line-height:var(--body-line)} /* prototype contact-route title inherited the body line-height */
.card__title--20{font-size:20px;line-height:1.5;font-weight:500}
.card__title--body{font-family:var(--font-body);font-weight:600;font-size:16px;line-height:1.6}
.card__title--sm{font-family:var(--font-body);font-weight:600;font-size:15.5px;line-height:1.6}
.card__title--federal{font-family:var(--font-display-federal);font-weight:700;letter-spacing:-.01em;font-size:19px;line-height:1.3}
.card--dark .card__title{color:#fff}
.card__text{font-size:var(--text-sm);line-height:1.6;color:var(--slate);margin:10px 0 0}
.card--dark .card__text{color:var(--text-on-dark-muted)}
.card__more{font-family:var(--font-data);font-weight:600;font-size:11.5px;letter-spacing:.12em;color:var(--label-gold);margin-top:16px}
.card__num{font-family:var(--font-data);font-weight:700;font-size:13px;letter-spacing:.2em;color:var(--label-gold)}
.card__letter{font-family:var(--font-data);font-weight:700;font-size:30px;line-height:1;color:var(--compass-navy)}
.card__bar{width:26px;height:3px;background:var(--compass-gold);margin:12px 0 0}

/* ---- Icon item (centered icon + title + text, e.g. home "Who HSI serves") */
.icon-item{text-align:center;padding:8px 12px}
.icon-item__title{font-family:var(--font-body);font-weight:600;font-size:16px;line-height:1.6;color:var(--compass-navy);margin:16px 0 0}
.icon-item__text{font-size:var(--text-sm);line-height:1.55;color:var(--slate);margin:7px auto 0;max-width:220px}

/* ---- Icon boxes ------------------------------------------------------ */
.icon-box{width:44px;height:44px;border-radius:var(--radius-sm);background:var(--sky-wash);display:flex;align-items:center;justify-content:center;color:var(--compass-navy);flex:none;margin-bottom:18px}
.icon-box--46{width:46px;height:46px;margin-bottom:0}
.icon-round{width:44px;height:44px;border-radius:50%;background:var(--sky-wash);display:flex;align-items:center;justify-content:center;color:var(--compass-navy);flex:none;margin:0}
.icon-round--52{width:52px;height:52px;border:1px solid var(--border-card)}
.icon-item .icon-round{margin:0 auto}
.icon-check{width:24px;height:24px;flex:none;border-radius:50%;background:var(--compass-gold);color:var(--midnight-navy);display:flex;align-items:center;justify-content:center}
.icon{display:inline-block;vertical-align:middle;flex:none}

/* ---- Block (services): left gold rule + data label ------------------- */
.kv{border-left:3px solid var(--compass-gold);padding-left:22px}
.kv__label{font-family:var(--font-data);font-weight:600;font-size:11.5px;letter-spacing:.14em;color:var(--label-gold);margin:0 0 9px;text-transform:uppercase}
.kv__body{font-size:var(--text-sm);line-height:1.65;color:var(--ink)}
.kv__body ul{margin:10px 0 0;padding-left:20px;display:grid;gap:6px;color:var(--slate)}
.kv--dark{border-left-color:var(--compass-gold);padding-left:20px}
.kv--dark .kv__label{font-family:var(--font-body);font-weight:600;font-size:16.5px;line-height:var(--body-line);letter-spacing:0;text-transform:none;color:#fff;margin:0}
.kv--dark .kv__body{color:var(--text-on-dark-muted);line-height:1.62;margin-top:8px}

/* ---- Data rows (federal DarkRow) — dl.data-rows ---------------------- */
.data-rows{margin:0}
.data-rows > div{display:flex;gap:24px;padding:14px 0;border-bottom:1px solid var(--on-dark-rule)}
.data-rows dt{font-family:var(--font-data);font-weight:600;font-size:11px;letter-spacing:.14em;color:var(--gold-tint);width:170px;flex:none;padding-top:3px;text-transform:uppercase}
.data-rows dd{margin:0;font-family:var(--font-body);font-size:var(--text-sm);line-height:1.6;color:#fff}
.data-rows dd.mono{font-family:var(--font-data);letter-spacing:.04em}
.data-rows a{color:var(--gold-tint)}
.data-rows--light > div{border-bottom-color:var(--border-card);gap:22px;padding:13px 0}
.data-rows--light dt{color:var(--label-gold);font-size:11px;letter-spacing:.12em}
.data-rows--light dd{color:var(--ink)}
.data-rows--light dd.mono{letter-spacing:.02em}

/* ---- InfoCard (contact) --------------------------------------------- */
.info-card{background:var(--sky-wash);border-radius:var(--radius-md);padding:22px 26px}
.info-card--warm{background:var(--warm-cream)}
.info-card .eyebrow{font-size:11px;margin-bottom:9px}
.info-card__body{font-size:var(--text-sm);line-height:1.65;color:var(--ink)}
.info-card__body a{font-weight:600;font-size:15px}
.info-card__body .mono{font-family:var(--font-data);letter-spacing:.04em}

/* ---- Panel on navy (federal teaming note, contact routes) ------------ */
.panel-dark{background:var(--on-dark-panel);border:1px solid var(--on-dark-panel-border);border-radius:var(--radius-md);padding:28px 32px}
/* A .badge--dark inside .panel-dark stacks two translucent white layers, lifting the backdrop
   to rgb(61,92,146); --gold-tint then measures 4.16:1 and fails WCAG 1.4.3 at the badge's 12px.
   Dropping the badge's own overlay keeps the panel backdrop (rgb(44,77,137)) and the ratio at
   5.1:1. The gold keyline still carries the chip shape. See docs/REVIEW-TASKS.md T-183. */
.panel-dark .badge--dark{background:transparent}

/* ---- Step list (services approach) ---------------------------------- */
.steps{border-top:1px solid var(--on-dark-rule-strong)}
.step{position:relative;padding:30px 22px 0 0}
.step::before{content:"";position:absolute;top:-6px;left:0;width:11px;height:11px;background:var(--compass-gold);transform:rotate(45deg)}
.step__num{font-family:var(--font-data);font-weight:700;font-size:14px;letter-spacing:.18em;color:var(--gold-tint)}
.step__title{font-family:var(--font-display);font-weight:600;font-size:22px;color:#fff;margin-top:10px;line-height:1.2}
.step__text{font-size:var(--text-xs);line-height:1.65;color:var(--text-on-dark-muted);margin-top:10px}

/* ---- Format rows (speaking) ---------------------------------------- */
.format-row{display:flex;gap:20px;background:var(--warm-cream);border:1px solid var(--cream-border);border-radius:var(--radius-md);padding:18px 22px;align-items:baseline}
.format-row__label{font-family:var(--font-data);font-weight:600;font-size:13px;letter-spacing:.1em;text-transform:uppercase;color:var(--compass-navy);flex:none;width:104px}
.format-row__text{font-size:var(--text-sm);line-height:1.55;color:var(--ink)}

/* ---- Check list (capability statement) ----------------------------- */
.check-list{list-style:none;margin:0;padding:0;display:grid;gap:14px}
.check-list li{display:flex;gap:14px;align-items:flex-start;font-size:var(--text-md);line-height:1.55;color:var(--ink)}
.check-list li>span:last-child{padding-top:1px}

/* ---- Chip row ------------------------------------------------------ */
.chip-row{display:flex;flex-wrap:wrap;gap:12px}
.chip-row--center{justify-content:center}
.chip-row--gap-10{gap:10px}

/* ---- Link row (arrow links side by side) --------------------------- */
.link-row{display:flex;gap:28px;flex-wrap:wrap}
.link-list{display:grid;gap:9px}

/* ---- Band row (flex space-between: text left, button right) -------- */
.band-row{display:flex;align-items:center;justify-content:space-between;gap:44px;flex-wrap:wrap}
.band-row--gap-28{gap:28px}

/* ---- Prose (blog post bodies / long-form Markdown) ----------------- */
.prose{font-size:var(--text-md);line-height:1.7;color:var(--ink);max-width:720px}
.prose p,.prose ul,.prose ol,.prose blockquote,.prose pre,.prose table{margin:0 0 1.15em}
.prose h2{font-size:var(--display-md);margin:1.6em 0 .5em}
.prose h3{font-size:1.375rem;margin:1.4em 0 .4em}
.prose h4{font-family:var(--font-body);font-weight:600;font-size:1.0625rem;color:var(--compass-navy);margin:1.2em 0 .3em}
.prose img{border-radius:var(--radius-md)}
.prose blockquote{border-left:var(--case-rule-w) solid var(--compass-gold);background:var(--warm-cream);padding:16px 22px;font-family:var(--font-display);font-style:italic;font-weight:500;font-size:1.125rem}
.prose hr{border:0;border-top:1px solid var(--border-card);margin:2em 0}
.prose code{font-family:var(--font-data);font-size:.9em;background:var(--sky-wash);padding:.1em .35em;border-radius:var(--radius-sm)}
.prose figcaption{font-size:var(--text-xs);color:var(--slate);margin-top:6px}

/* ---- Post header / list (blog scaffold) ----------------------------- */
.post-meta{font-family:var(--font-data);font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--text-on-dark-muted);margin-top:18px}
.post-list{list-style:none;margin:0;padding:0;display:grid;gap:20px}

/* ==========================================================================
   Sept 5, 2026 components (Final Implementation Direction). Documented in
   docs/COMPONENTS.md §6: video-link, book-strip/book-cover, outcomes table,
   keynote-card, field--check, caps-run links, foot-ext.
   ========================================================================== */

/* ---- Video link (CSP-safe YouTube tile — a link, never an iframe) ------
   <a class="video-link" href="https://www.youtube.com/watch?v=ID" target="_blank" rel="noopener">
     <img class="video-link__img" src="/img/video/ID-640.jpg" srcset="… 640w, … 1280w" sizes="…" width="640" height="360" alt="…" loading="lazy" decoding="async">
     <span class="video-link__play" aria-hidden="true"></span>
     <span class="video-link__label">Watch: <title> (YouTube)</span>
   </a>
   Grid stacking centres the gold play badge over the 16:9 image only; the label sits below. */
.video-link{display:grid;grid-template-columns:100%;color:inherit;text-decoration:none}
.video-link__img{grid-area:1/1;display:block;width:100%;height:auto;aspect-ratio:16/9;object-fit:cover;background:var(--compass-navy);border:1px solid var(--bronze);border-radius:var(--radius-md)}
.video-link__play{grid-area:1/1;place-self:center;z-index:1;width:64px;height:64px;border-radius:50%;background:var(--compass-gold);box-shadow:0 6px 24px rgba(12,20,31,.35);display:flex;align-items:center;justify-content:center;transition:transform .18s ease-out,background .15s ease-out}
.video-link__play::before{content:"";display:block;width:0;height:0;border-style:solid;border-width:12px 0 12px 20px;border-color:transparent transparent transparent var(--midnight-navy);margin-left:5px}
.video-link:hover .video-link__play,.video-link:focus-visible .video-link__play{transform:scale(1.06);background:var(--gold-tint)}
.video-link__label{grid-row:2;margin-top:12px;font-family:var(--font-body);font-weight:600;font-size:var(--text-sm);line-height:1.5;color:var(--compass-navy)}
.video-link:hover .video-link__label{text-decoration:underline;text-underline-offset:3px}
.sec--midnight .video-link__label,.sec--navy .video-link__label,.sec--band .video-link__label{color:#fff}

/* ---- Book strip / book cover (proof element: selected covers, never a bookshelf)
   <ul class="book-strip"><li class="book-cover"><img src="/img/books/<slug>-200.jpg" srcset="… 200w, … 400w" sizes="100px" width="200" height="300" alt="Book cover: <title>" loading="lazy" decoding="async"></li>…</ul>
   Fixed cover height (150px desktop / 110px phones), 2:3 covers keep their width, row wraps.
   Modifiers: .book-strip--center (centred row), .book-strip--sm (120px / 96px).
   One cover inside a card: <div class="book-cover book-cover--single"><img …></div>. */
.book-strip{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:14px 16px;align-items:flex-end}
.book-strip--center{justify-content:center}
.book-cover{margin:0;flex:none;height:150px}
.book-cover img{display:block;height:100%;width:auto;border-radius:2px;box-shadow:0 2px 6px rgba(12,20,31,.18),0 10px 24px rgba(12,20,31,.16)}
.book-strip--sm .book-cover{height:120px}
.book-cover--single{display:block;height:150px}
/* ---- Book shelf (/books/ hero only: the fanned all-18 composite, 1200×207 / 2400×414)
   <figure class="book-shelf"><img src="/img/books/all-18-fanned-1200.jpg" srcset="… 1200w, … 2400w" sizes="…" width="1200" height="207" alt="…"></figure>
   base.css only caps img at max-width:100%, so height:auto is needed to keep the 5.8:1 ratio as the
   figure narrows; top corners only, because it sits flush on the hero's bottom edge (sec--pb-0). */
.book-shelf{margin:0}
.book-shelf img{display:block;width:100%;height:auto;border-radius:var(--radius-md) var(--radius-md) 0 0}

/* ---- Outcomes table (documented education outcomes, one engagement per row)
   <div class="table-wrap"><table class="outcomes">
     <thead><tr><th scope="col">Documented change</th><th scope="col">Measure</th><th scope="col">Context</th></tr></thead>
     <tbody><tr><td data-label="Documented change">91.5% reduction</td><td data-label="Measure">…</td><td data-label="Context">…</td></tr>…</tbody>
   </table></div>
   First column = Space Grotesk navy bold. ≤760px the rows stack into label/value pairs (td::before reads data-label). */
.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
.outcomes{width:100%;border-collapse:separate;border-spacing:0;background:#fff;border:1px solid var(--border-card);border-radius:var(--radius-md);box-shadow:var(--shadow-card);overflow:hidden;font-size:var(--text-sm);line-height:1.55;color:var(--ink)}
.outcomes th,.outcomes td{text-align:left;vertical-align:top;padding:14px 18px;border-bottom:1px solid var(--border-card)}
.outcomes thead th{font-family:var(--font-data);font-weight:600;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--label-gold);background:var(--sky-wash);border-bottom:2px solid var(--compass-gold)}
.outcomes tbody tr:last-child td{border-bottom:0}
.outcomes td:first-child{font-family:var(--font-data);font-weight:700;font-size:1.125rem;line-height:1.3;color:var(--compass-navy);white-space:nowrap}
.outcomes td:last-child{color:var(--slate)}
.outcomes td::before{display:none}

/* ---- Keynote card (native <details>, no JS) ------------------------------
   <div class="keynote-card">
     <p class="keynote-card__num">01</p>                       (optional)
     <h3 class="keynote-card__title">Title</h3>
     <p class="keynote-card__teaser">First sentence.</p>
     <details class="keynote-card__details">
       <summary class="keynote-card__more">View Keynote Details</summary>
       <div class="keynote-card__body"><p>…full description…</p>
         <div class="book-cover book-cover--single"><img …></div>          (optional)
         <a class="btn btn--md btn--primary" href="/keynotes/#booking">Check Availability</a></div>
     </details>
   </div>
   Sits in .g.g-2 (one column ≤760px); the chevron rotates on [open]. */
.keynote-card{display:flex;flex-direction:column;height:100%;background:#fff;border:1px solid var(--border-card);border-top:4px solid var(--compass-gold);border-radius:var(--radius-md);box-shadow:var(--shadow-card);padding:28px 26px 22px}
.keynote-card__num{font-family:var(--font-data);font-weight:700;font-size:13px;letter-spacing:.2em;color:var(--label-gold);margin:0 0 12px}
.keynote-card__title{font-family:var(--font-display);font-weight:600;font-size:21px;line-height:1.28;color:var(--compass-navy);margin:0}
.keynote-card__teaser{font-size:var(--text-sm);line-height:1.6;color:var(--slate);margin:12px 0 0}
.keynote-card__details{margin-top:auto;padding-top:16px}
.keynote-card__more{list-style:none;display:inline-flex;align-items:center;gap:9px;cursor:pointer;font-family:var(--font-data);font-weight:600;font-size:11.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--label-gold);padding:6px 0;user-select:none;transition:color .15s ease-out}
.keynote-card__more::-webkit-details-marker{display:none}
.keynote-card__more::after{content:"";width:8px;height:8px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:translateY(-2px) rotate(45deg);transition:transform .2s ease-out}
.keynote-card__details[open] .keynote-card__more::after{transform:translateY(2px) rotate(225deg)}
.keynote-card__more:hover{color:var(--compass-navy)}
.keynote-card__body{margin-top:12px;font-size:var(--text-sm);line-height:1.65;color:var(--ink)}
.keynote-card__body p+p{margin-top:10px}
.keynote-card__body .book-cover--single{margin-top:18px}
.keynote-card__body .btn{margin-top:18px}

/* ---- Checkbox field (Resources consent line) -----------------------------
   <label class="field field--check"><input type="checkbox" name="consent" required><span class="field__label">Yes, send me…</span></label> */
.field--check{display:flex;align-items:flex-start;gap:10px;cursor:pointer}
.field--check input{width:18px;height:18px;margin:2px 0 0;flex:none;accent-color:var(--compass-navy)}
.field--check .field__label{margin:0;font-weight:500;font-size:var(--text-sm);line-height:1.5}

/* ---- Links inside caps runs (federal verification strip) ----------------
   Inherit the run's colour; underline on hover/focus. Utility colours (.c-navy) still win. */
.caps-run a{color:inherit;text-decoration:none;transition:color .15s ease-out}
.caps-run a:hover,.caps-run a:focus-visible{text-decoration:underline;text-underline-offset:3px}

/* ---- External-link marker + muted note (footer, partials/footer.njk) ----
   <a … target="_blank" rel="noopener">Label<span class="foot-ext" aria-hidden="true">↗</span></a><span class="foot-ext__note">related venture, co-owned</span> */
.foot-ext{display:inline-block;margin-left:5px;font-size:.85em;color:var(--gold-tint);transform:translateY(-1px)}
.foot-ext__note{display:block;font-family:var(--font-data);font-size:11px;letter-spacing:.06em;color:var(--text-on-dark-muted);margin-top:3px}

/* ---- Responsive tweaks for components ------------------------------ */
@media (max-width:1024px){
  .bearing{width:520px;height:520px}
  /* .steps: once .g-5 collapses (2 col ≤1024px, 1 col ≤760px) the shared top border only spans the
     first row and rows butt together (gap 0), so each step draws its own rule and rows get room. */
  .steps{border-top:0;gap:28px 24px}
  .steps .step{border-top:1px solid var(--on-dark-rule-strong)}
}
@media (max-width:760px){
  .band-row{gap:28px}
  .case__stats{flex-wrap:wrap}
  .data-rows > div{flex-direction:column;gap:6px}
  .data-rows dt{width:auto}
  .form-card,.form-card--raised{padding:26px 22px}
  .bearing{width:440px;height:440px}
  .frame-offset::before{left:-8px;top:8px}
  .ratio-21-8{aspect-ratio:16/9} /* the 21/8 stage-photo strip is only ~127px tall at 375px wide */
  .book-cover{height:110px}
  .book-strip--sm .book-cover{height:96px}
  .book-cover--single{height:120px}
  /* .outcomes stacks into label/value pairs; the header row is hidden visually but kept for screen readers */
  .outcomes thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}
  .outcomes tr{display:block;padding:14px 18px;border-bottom:1px solid var(--border-card)}
  .outcomes tbody tr:last-child{border-bottom:0}
  .outcomes td{display:block;padding:4px 0;border:0}
  .outcomes td::before{content:attr(data-label);display:block;font-family:var(--font-data);font-weight:600;font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--label-gold);margin-bottom:2px}
  .outcomes td:first-child{white-space:normal;font-size:1.375rem;padding-top:0}
  .video-link__play{width:54px;height:54px}
  .video-link__play::before{border-width:10px 0 10px 17px;margin-left:4px}
}
@media (max-width:480px){
  .caps-run li+li::before{margin:0 10px}
  .card,.card--pad-lg,.card--pad-xl,.card--pad-30,.card--pad-32-34{padding:22px 20px}
  .quote{padding:20px 22px}
  .case{padding:22px 20px}
}
@media (prefers-reduced-motion:reduce){
  .bearing{animation:none}
}

} /* @layer components */

/* ==========================================================================
   Utilities — always win over base and components (highest layer).
   Margins reproduce the prototype's inline margin values; colors and type sizes
   reproduce its recurring inline paragraph styles.
   ========================================================================== */
@layer utilities {
[hidden]{display:none}
.mt-0{margin-top:0}.mt-4{margin-top:4px}.mt-6{margin-top:6px}.mt-7{margin-top:7px}.mt-8{margin-top:8px}.mt-9{margin-top:9px}.mt-10{margin-top:10px}
.mt-11{margin-top:11px}.mt-12{margin-top:12px}.mt-14{margin-top:14px}.mt-16{margin-top:16px}.mt-18{margin-top:18px}.mt-20{margin-top:20px}
.mt-22{margin-top:22px}.mt-24{margin-top:24px}.mt-26{margin-top:26px}.mt-28{margin-top:28px}.mt-30{margin-top:30px}.mt-32{margin-top:32px}
.mt-34{margin-top:34px}.mt-36{margin-top:36px}.mt-38{margin-top:38px}.mt-40{margin-top:40px}.mt-44{margin-top:44px}.mt-48{margin-top:48px}
.mt-52{margin-top:52px}.mt-56{margin-top:56px}.mt-64{margin-top:64px}
.mb-0{margin-bottom:0}.mb-6{margin-bottom:6px}.mb-8{margin-bottom:8px}.mb-9{margin-bottom:9px}.mb-10{margin-bottom:10px}.mb-12{margin-bottom:12px}
.mb-16{margin-bottom:16px}.mb-18{margin-bottom:18px}.mb-22{margin-bottom:22px}
.pt-6{padding-top:6px}.pt-26{padding-top:26px}
.pad-8-12{padding:8px 12px}
.bt-card{border-top:1px solid var(--border-card)}
/* type sizes (prototype paragraph styles) */
.p-lg{font-size:var(--text-lg);line-height:1.65}
.p-md{font-size:var(--text-md);line-height:1.7}
.p-md-tight{font-size:var(--text-md);line-height:1.6}
.p-sm{font-size:var(--text-sm);line-height:1.6}
.p-xs{font-size:var(--text-xs);line-height:1.6}
.t-14{font-size:14px}
.t-16-600{font-family:var(--font-body);font-weight:600;font-size:16px}
.t-155-600{font-family:var(--font-body);font-weight:600;font-size:15.5px}
.data{font-family:var(--font-data)}
.data-label{font-family:var(--font-data);font-weight:600;font-size:11px;letter-spacing:.14em;text-transform:uppercase}
.data-caps{font-family:var(--font-data);font-weight:500;font-size:11.5px;letter-spacing:.1em;text-transform:uppercase;line-height:1.8}
.data-line{font-family:var(--font-data);font-size:12px;letter-spacing:.12em;text-transform:uppercase;line-height:2}
.data-ids{font-family:var(--font-data);font-size:13.5px;line-height:1.9;letter-spacing:.04em}
.italic{font-style:italic}
.w-600{font-weight:600}
.w-500{font-weight:500}
.role-line{font-family:var(--font-data);font-weight:500;font-size:13px;letter-spacing:.12em;text-transform:uppercase}
/* colors */
.c-ink{color:var(--ink)}
.c-slate{color:var(--slate)}
.c-navy{color:var(--compass-navy)}
.c-white{color:#fff}
.c-muted{color:var(--text-on-dark-muted)}
.c-gold{color:var(--gold-tint)}
.c-bronze{color:var(--label-gold)}  /* historical name; renders the accessible label gold */
.c-verdant{color:var(--verdant)}
.c-steel{color:var(--label-steel)}
.c-crimson{color:var(--heart-crimson)}
} /* @layer utilities */
