/* ============================================================
   AVX BUILD ORDER LAYER — ALTAVEX_FINAL_WEBSITE_BUILD_ORDER.md
   Loaded after avx-directive.css. Spacing fix (§11), centering
   rules (§10), calculator (§4), journey (§5), Nova sequence (§6),
   blueprint drawer (§7), Why Altavex components (§8).
   ============================================================ */

/* ---------- MISSING TOKEN DEFINITIONS (bug fix, Aug 2026) ----------
   This sheet was authored against --revenue-green (10 usages) and --line
   (4 usages), neither of which was ever defined anywhere in the codebase.
   Because the sheet loads on all 40 pages, every rule depending on them was
   silently falling back to inherited colour: the Nova sequence's active step and
   its green confirmation dot never rendered, the homepage journey's active/done
   states never rendered, and the calculator's "YOUR RECOMMENDATION" badge would
   have drawn with no background. Defined as aliases of the real palette so all
   usages resolve at once without rewriting the sheet's authored intent. */
:root{
  --revenue-green:var(--altavex-green,#28E884);
  --line:var(--carbon-border,#263033);
}

/* ---------- §11 SPACING FIX ---------- */
section{padding-block:clamp(56px,6vw,88px)}
section+section{margin-top:0}
.section-head{margin-bottom:30px}
.grid,.cards,.grid-3,.grid-4{gap:20px}
.avx-scene{min-height:0}
.section-ghost-word{position:absolute;inset:auto 0 0;overflow:hidden;pointer-events:none}
details.avx-drawer:not([open]){padding-bottom:0}
details.avx-drawer>summary{cursor:pointer;list-style:none;display:inline-flex;align-items:center;gap:8px;font-family:'IBM Plex Mono',monospace;font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--signal-green,#31c96e);padding:10px 0}
details.avx-drawer>summary::-webkit-details-marker{display:none}
details.avx-drawer>summary::after{content:'+';font-size:14px;color:var(--titanium,#7a848c)}
details.avx-drawer[open]>summary::after{content:'\2212'}

/* ---------- §4 CALCULATOR CENTERING ---------- */
#capacity-estimator .container{max-width:980px}
#capacity-estimator .section-head{max-width:760px;margin:0 auto 32px;text-align:center}
.est-wrap{max-width:820px;margin:0 auto}
.est-form{max-width:700px;margin:0 auto;text-align:left}
.est-form label{text-align:left}
.est-calc{display:flex;justify-content:center;width:min(100%,360px);margin:24px auto 0}
.est-result{max-width:700px;margin:24px auto 0;text-align:left}
.est-result[hidden]{display:none}
.est-result .avx-reco{border:1px solid rgba(49,201,110,.4);background:rgba(16,23,25,.9);padding:26px 28px}
.est-result .avx-reco h3{margin:0 0 6px;font-size:22px;color:var(--warm-bone,#e8e4da)}
.est-result .avx-reco .reco-plan{color:var(--signal-green,#31c96e)}
.est-result .avx-reco p{margin:8px 0;color:var(--titanium,#a7b0b6);font-size:14px;line-height:1.6}
.est-result .avx-reco .reco-row{display:flex;gap:10px;align-items:flex-start;margin:10px 0;font-size:14px;color:var(--titanium,#a7b0b6)}
.est-result .avx-reco .reco-row b{color:var(--warm-bone,#e8e4da);min-width:190px;font-weight:600}
.est-result .reco-ctas{display:flex;gap:14px;flex-wrap:wrap;margin-top:18px}
.est-result .reco-flag{border:1px solid rgba(176,141,87,.5);margin-top:14px;padding:10px 14px;margin-top:14px;font-family:'IBM Plex Mono',monospace;font-size:11px;letter-spacing:.1em;color:#c9a870}

/* ---------- §5 INTERACTIVE JOURNEY ---------- */
.avx-journey{max-width:1080px;margin:0 auto}
.avx-journey-head{max-width:720px;margin:0 auto 26px;text-align:center}
.avx-journey-select{display:flex;justify-content:center;margin:0 auto 34px}
.avx-journey-select select{background:#101719;border:1px solid #2a3438;color:var(--warm-bone,#e8e4da);font-family:'IBM Plex Mono',monospace;font-size:13px;letter-spacing:.06em;padding:12px 44px 12px 16px;min-width:280px;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M0 0l5 6 5-6z' fill='%2331c96e'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 16px center;cursor:pointer}
.avx-journey-grid{display:grid;grid-template-columns:1fr 320px;gap:24px;align-items:start}
.avx-journey-steps{border:1px solid #232b2e;background:rgba(13,18,20,.85)}
.avx-jstep{display:grid;grid-template-columns:34px 170px 1fr;gap:14px;align-items:start;padding:16px 20px;border-bottom:1px solid rgba(122,132,140,.12);position:relative}
.avx-jstep:last-child{border-bottom:none}
.avx-jstep .jnum{font-family:'IBM Plex Mono',monospace;font-size:11px;color:var(--titanium,#7a848c);padding-top:2px}
.avx-jstep .jlabel{font-family:'IBM Plex Mono',monospace;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--warm-bone,#e8e4da);padding-top:2px}
.avx-jstep .jtext{font-size:14px;line-height:1.55;color:var(--titanium,#a7b0b6);margin:0}
.avx-jstep::before{content:'';position:absolute;left:0;top:0;bottom:0;width:2px;background:transparent}
.avx-jstep.active::before{background:var(--signal-green,#31c96e)}
.avx-jstep.active .jlabel{color:var(--signal-green,#31c96e)}
.avx-jstep.done .jnum::after{content:'\25A0';color:var(--signal-green,#31c96e);font-size:7px;margin-left:6px;vertical-align:2px}
.avx-journey-summary{border:1px solid #263033;background:rgba(16,23,25,.9);padding:22px 24px;position:sticky;top:90px}
.avx-journey-summary h4{margin:0 0 4px;font-family:'IBM Plex Mono',monospace;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--titanium,#7a848c)}
.avx-journey-summary .jsum-title{font-size:17px;color:var(--warm-bone,#e8e4da);margin:0 0 12px;font-weight:600}
.avx-journey-summary .jsum-row{display:flex;justify-content:space-between;gap:10px;font-size:12.5px;padding:7px 0;border-bottom:1px solid rgba(122,132,140,.12)}
.avx-journey-summary .jsum-row span:first-child{color:var(--titanium,#7a848c)}
.avx-journey-summary .jsum-row span:last-child{color:var(--warm-bone,#e8e4da);text-align:right}
.avx-journey-summary .jsum-outcome{margin-top:12px;font-family:'IBM Plex Mono',monospace;font-size:11px;letter-spacing:.1em;color:var(--signal-green,#31c96e)}
@media(max-width:900px){.avx-journey-grid{grid-template-columns:1fr}.avx-journey-summary{position:static}.avx-jstep{grid-template-columns:28px 1fr}.avx-jstep .jtext{grid-column:2}}

/* ---------- §6 MEET NOVA SEQUENCE ---------- */
.avx-novaseq-wrap{max-width:760px;margin:0 auto;text-align:center}
.avx-novaseq{border:1px solid #232b2e;background:rgba(13,18,20,.9);text-align:left;margin:0 auto}
.avx-nstep{display:grid;grid-template-columns:26px 210px 1fr;gap:14px;align-items:center;padding:15px 22px;border-left:2px solid transparent;border-bottom:1px solid rgba(122,132,140,.12);transition:border-color .25s,background .25s}
.avx-nstep:last-child{border-bottom:none}
.avx-nstep .nsq{width:9px;height:9px;border:1.5px solid var(--titanium,#7a848c);display:inline-block}
.avx-nstep .nlabel{font-family:'IBM Plex Mono',monospace;font-size:11px;letter-spacing:.13em;text-transform:uppercase;color:var(--warm-bone,#e8e4da)}
.avx-nstep .nvalue{font-size:14px;color:var(--titanium,#a7b0b6);font-style:normal}
.avx-nstep.active{border-left-color:var(--signal-green,#31c96e)}
.avx-nstep.active .nlabel{color:var(--signal-green,#31c96e)}
.avx-nstep.done .nsq{background:var(--signal-green,#31c96e);border-color:var(--signal-green,#31c96e)}
.avx-nstep.final-done{background:rgba(49,201,110,.08)}
.avx-nreplay{margin-top:16px;background:none;border:1px solid #2a3438;color:var(--titanium,#a7b0b6);font-family:'IBM Plex Mono',monospace;font-size:11px;letter-spacing:.12em;text-transform:uppercase;padding:9px 18px;cursor:pointer}
.avx-nreplay:hover{border-color:var(--signal-green,#31c96e);color:var(--signal-green,#31c96e)}
@media(max-width:640px){.avx-nstep{grid-template-columns:22px 1fr}.avx-nstep .nvalue{grid-column:2}}
@media(prefers-reduced-motion:reduce){.avx-nstep{transition:none}}

/* ---------- §7 BLUEPRINT ---------- */
.avx-bp-steps{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin:34px 0 26px}
.avx-bp-step{border:1px solid #232b2e;background:rgba(13,18,20,.85);padding:24px 24px 26px}
.avx-bp-step .bpnum{font-family:'IBM Plex Mono',monospace;font-size:11px;letter-spacing:.14em;color:var(--signal-green,#31c96e)}
.avx-bp-step h3{margin:10px 0 8px;font-size:18px;color:var(--warm-bone,#e8e4da)}
.avx-bp-step p{margin:0;font-size:14px;line-height:1.6;color:var(--titanium,#a7b0b6)}
.avx-bp-drawer-cols{display:grid;grid-template-columns:1fr 1fr;gap:28px;padding:18px 0 6px}
.avx-bp-drawer-cols h4{font-family:'IBM Plex Mono',monospace;font-size:11px;letter-spacing:.13em;text-transform:uppercase;color:var(--warm-bone,#e8e4da);margin:0 0 10px}
.avx-bp-drawer-cols ul{margin:0;padding:0;list-style:none}
.avx-bp-drawer-cols li{font-size:13.5px;color:var(--titanium,#a7b0b6);padding:5px 0 5px 16px;position:relative}
.avx-bp-drawer-cols li::before{content:'';position:absolute;left:0;top:12px;width:6px;height:6px;border:1px solid var(--signal-green,#31c96e)}
@media(max-width:820px){.avx-bp-steps{grid-template-columns:1fr}.avx-bp-drawer-cols{grid-template-columns:1fr}}

/* ---------- §8 WHY ALTAVEX ---------- */
.avx-buy-panel{display:grid;grid-template-columns:1.15fr 1fr;gap:0;border:1px solid #232b2e;background:rgba(13,18,20,.85)}
.avx-buy-lead{padding:34px 36px;border-right:1px solid #232b2e;display:flex;flex-direction:column;justify-content:center}
.avx-buy-lead p{font-size:16px;line-height:1.7;color:var(--titanium,#a7b0b6);margin:0}
.avx-buy-points{display:grid;grid-template-rows:repeat(4,auto)}
.avx-buy-point{padding:20px 26px;border-bottom:1px solid rgba(122,132,140,.12)}
.avx-buy-point:last-child{border-bottom:none}
.avx-buy-point b{display:block;font-size:15px;color:var(--warm-bone,#e8e4da);margin-bottom:4px}
.avx-buy-point span{font-size:13.5px;line-height:1.55;color:var(--titanium,#a7b0b6)}
@media(max-width:820px){.avx-buy-panel{grid-template-columns:1fr}.avx-buy-lead{border-right:none;border-bottom:1px solid #232b2e}}

.avx-hpath{display:flex;align-items:stretch;gap:0;margin:34px 0 22px;flex-wrap:nowrap}
.avx-hpath-node{flex:1;border:1px solid rgba(232,228,218,.35);padding:16px 14px;text-align:center;position:relative;background:rgba(13,18,20,.85)}
.avx-hpath-node b{display:block;font-family:'IBM Plex Mono',monospace;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--warm-bone,#e8e4da)}
.avx-hpath-link{width:26px;align-self:center;height:1px;background:rgba(122,132,140,.5);flex:none}
@media(max-width:820px){.avx-hpath{flex-direction:column}.avx-hpath-link{width:1px;height:18px;margin:0 auto}}

.avx-ledger{width:100%;border-collapse:collapse;border:1px solid #232b2e;background:rgba(13,18,20,.85)}
.avx-ledger th{font-family:'IBM Plex Mono',monospace;font-size:10.5px;letter-spacing:.13em;text-transform:uppercase;color:var(--titanium,#7a848c);text-align:left;padding:12px 18px;border-bottom:1px solid #263033}
.avx-ledger td{font-size:13.5px;color:var(--titanium,#a7b0b6);padding:12px 18px;border-bottom:1px solid rgba(122,132,140,.1)}
.avx-ledger tr:last-child td{border-bottom:none}
.avx-ledger td:first-child{color:var(--warm-bone,#e8e4da)}
.avx-ledger .st-ok{color:var(--signal-green,#31c96e)}
.avx-ledger .st-human{color:#e8e4da}
.avx-ledger .st-warn{color:#c9a870}
@media(max-width:720px){.avx-ledger{display:block;overflow-x:auto}}

.avx-advisory{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin:30px 0}
.avx-adv-panel{border:1px solid rgba(176,141,87,.45);background:linear-gradient(180deg,rgba(30,24,16,.5),rgba(13,18,20,.9));padding:28px 30px}
.avx-adv-panel .adv-plan{font-family:'IBM Plex Mono',monospace;font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:#c9a870}
.avx-adv-panel h3{margin:8px 0 14px;font-size:19px;color:var(--warm-bone,#e8e4da)}
.avx-adv-panel ul{margin:0;padding:0;list-style:none}
.avx-adv-panel li{font-size:13.5px;color:var(--titanium,#a7b0b6);padding:6px 0 6px 16px;position:relative}
.avx-adv-panel li::before{content:'';position:absolute;left:0;top:13px;width:6px;height:6px;background:#c9a870}
@media(max-width:820px){.avx-advisory{grid-template-columns:1fr}}

/* ---------- §9 PRICING PARTNERSHIP LINES ---------- */
.avx-partnership{margin:14px 0 4px;padding:12px 14px;border:1px solid rgba(176,141,87,.4);background:rgba(30,24,16,.35)}
.avx-partnership b{display:block;font-family:'IBM Plex Mono',monospace;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:#c9a870;margin-bottom:4px}
.avx-partnership span{font-size:13px;line-height:1.5;color:var(--titanium,#a7b0b6)}

/* ---------- §10 CENTERING UTILITIES ---------- */
.avx-center-head{max-width:760px;margin-left:auto;margin-right:auto;text-align:center}
.avx-center-head h1,.avx-center-head h2,.avx-center-head p.support{text-align:center}

/* Journey interactive */
.avx-jselect{font-size:1rem;padding:10px 18px;border:1px solid var(--line);border-radius:6px;background:var(--deep-carbon);color:var(--warm-bone);cursor:pointer;min-width:220px}
.avx-jsteps{list-style:none;padding:0;margin:0;display:grid;gap:0}
/* CONNECTOR HIERARCHY (doc 11): idle rail is muted titanium, the step currently
   moving is green at the restrained opacity/glow, and completed steps step back to
   titanium so green never accumulates down the whole rail. */
.avx-jstep{display:grid;grid-template-columns:160px 1fr;gap:12px;padding:14px 18px;border-left:3px solid var(--avx-conn-idle,#667174);transition:border-color .3s,background .3s}
.avx-jstep.is-active{border-left-color:var(--avx-conn-active,#28E884);background:rgba(0,200,120,.04);box-shadow:var(--avx-glow-active)}
.avx-jstep.is-done{border-left-color:var(--titanium,#939B9D)}
.avx-jstep.is-done .avx-jlab::after{content:'';display:inline-block;width:6px;height:6px;border-radius:50%;background:var(--avx-conn-active,#28E884);margin-left:8px;vertical-align:middle}
.avx-jlab{font-weight:600;font-size:.85rem;text-transform:uppercase;letter-spacing:.04em;color:var(--titanium)}
.avx-jval{color:var(--warm-bone);font-size:.95rem;line-height:1.5}
.avx-jsummary{margin-top:20px;padding:16px 20px;border-radius:8px;background:rgba(0,200,120,.04);border:1px solid rgba(0,200,120,.15);color:var(--warm-bone);font-size:.92rem;line-height:1.55;text-align:center}
@media(max-width:640px){
  .avx-jstep{grid-template-columns:1fr;gap:4px}
  .avx-jlab{font-size:.78rem}
}

/* Blueprint */
.avx-bp-steps .card{text-align:left}
.avx-list{list-style:none;padding:0;margin:8px 0 0}
.avx-list li{padding:5px 0 5px 18px;position:relative;font-size:.9rem;color:var(--warm-bone);line-height:1.5}
.avx-list li::before{content:'';position:absolute;left:0;top:12px;width:6px;height:6px;border-radius:50%;background:var(--titanium)}

/* Utility */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}
.section-sub{color:var(--titanium-l);font-size:1rem;line-height:1.6}
@media(prefers-reduced-motion:reduce){.avx-jstep{transition:none}}

/* Calculator recommendation highlight */
.price.is-recommended{border-color:var(--revenue-green)!important;box-shadow:0 0 0 1px var(--revenue-green),0 8px 32px rgba(0,200,120,.08);position:relative}
.price.is-recommended::before{content:"YOUR RECOMMENDATION";position:absolute;top:-11px;left:50%;transform:translateX(-50%);background:var(--revenue-green);color:#0a0f0c;font-family:'IBM Plex Mono',monospace;font-size:10px;letter-spacing:.14em;padding:3px 12px;white-space:nowrap}

/* Nova sequence animation */
.nova-seq{display:flex;flex-direction:column;gap:0}
/* CONNECTOR HIERARCHY (doc 11): the idle rail is muted titanium; the step Nova is
   currently working reads green with the restrained glow; completed steps fall back
   to titanium with a small green confirmation dot, so green travels down the
   sequence instead of accumulating on it. The final .is-filled step is the single
   confirmed endpoint and is the only one allowed full-strength green. */
.nseq-step{display:flex;align-items:flex-start;gap:14px;padding:14px 18px;border-left:3px solid var(--avx-conn-idle,#667174);opacity:.5;transition:opacity .3s,border-color .3s,background .3s}
.nseq-step.is-active{border-left-color:var(--avx-conn-active,#28E884);opacity:1;box-shadow:var(--avx-glow-active)}
.nseq-step.is-done{border-left-color:var(--titanium,#939B9D);opacity:1;box-shadow:none}
.nseq-step.is-done .nseq-marker::after{content:'';display:block;width:8px;height:8px;border-radius:50%;background:var(--avx-conn-active,#28E884)}
.nseq-step.is-filled{background:rgba(0,200,120,.04);border-left-color:var(--avx-conn-active,#28E884)}
.nseq-marker{flex-shrink:0;width:18px;height:18px;display:flex;align-items:center;justify-content:center;margin-top:3px}
.nseq-label{font-weight:600;color:var(--warm-bone);margin:0 0 2px;font-size:15px}
.nseq-detail{color:var(--titanium-l);margin:0;font-size:13.5px}
.nseq-replay{display:inline-block;margin:18px auto 0;background:transparent;border:1px solid var(--line);color:var(--titanium-l);font-size:12px;padding:6px 16px;cursor:pointer;font-family:'IBM Plex Mono',monospace;letter-spacing:.08em}
.nseq-replay:hover{border-color:var(--revenue-green);color:var(--revenue-green)}
@media(prefers-reduced-motion:reduce){.nseq-step{opacity:1!important;border-left-color:var(--titanium)!important}.nseq-step:last-child{background:rgba(0,200,120,.04);border-left-color:var(--revenue-green)!important}.nseq-step.is-done .nseq-marker::after,.nseq-step:last-child .nseq-marker::after{content:'';display:block;width:8px;height:8px;border-radius:50%;background:var(--revenue-green)}}

/* Why Altavex human-involvement path */
.why-node{display:inline-block;padding:8px 14px;border:1px solid var(--warm-bone);border-radius:4px;color:var(--warm-bone);font-family:'IBM Plex Mono',monospace;font-size:11.5px;letter-spacing:.06em;margin:6px 0}
.why-arrow{color:var(--titanium);margin:0 8px}
@media(max-width:640px){.why-path{flex-direction:column}.why-arrow{transform:rotate(90deg);margin:2px 0}}

/* ============================================================================
   HERO WORDMARK — approved 2026-08-05
   H1 source copy stays SENTENCE CASE in index.html; the caps are presentation
   only. Scoped to .avx-hero-wordmark so the sitewide sentence-case decision
   (styles.css V41.3/V41.4 set h1{text-transform:none!important}) is preserved
   on every other page and heading.
   Contrast verified (~/sitework/qa/contrast_hero.py):
     bone  #E8E3D8 on obsidian #05080A = 15.70:1  (AA large needs 3.0)
     soft  #CFC9BD on obsidian #05080A = 12.19:1  (AA normal needs 4.5)
     green #28E884 on obsidian #05080A = 12.40:1  (AA normal needs 4.5)
   ========================================================================= */
/* The wordmark's parent is an UNCLASSED div (verified from the DOM, not
   guessed). container-type goes on the PARENT only — never on the H1 being
   sized, which would be circular: the H1 is inline-block so its width
   depends on its content, and cqw would then depend on its own width. */
.hero .hero-grid > div:first-child{container-type:inline-size}
.hero h1.avx-hero-wordmark{
  /* two-line lockup: shrink-wrap to the widest line, then centre every line
     inside that box. Line 1 is the wider line, so line 2 centres under it. */
  display:inline-block!important;
  text-align:center!important;
  text-transform:uppercase!important;
  letter-spacing:.02em!important;
  font-weight:800!important;
  line-height:1.02!important;
  /* sized from the CONTAINER, not the viewport: line 2 renders ~11.35px
     wide per 1px of font-size, so it fits a container of W at W/11.35.
     8.2cqw ~= W/12.2 leaves ~7% headroom for font-rendering variance.
     The vw value is the fallback where container queries are absent. */
  font-size:clamp(21px,7.4vw,60px)!important;
  font-size:clamp(21px,8.2cqw,60px)!important;
  max-width:none!important;
  margin:0 0 20px;
}
.hero h1.avx-hero-wordmark .avx-wm-l1,
.hero h1.avx-hero-wordmark .avx-wm-l2{
  display:block;
  /* EXACTLY two lines: each span is one unbreakable line. Without this the
     H1 renders THREE lines ("ACCIDENT." wraps) at most viewport widths. */
  white-space:nowrap;
}

/* --- FALLBACK FIRST -----------------------------------------------------
   Solid logo-green fill. This is what renders anywhere -webkit-text-stroke
   is unsupported. It MUST come before the @supports block: without a solid
   base, a browser that ignores text-stroke but honours `color:transparent`
   would render an INVISIBLE headline. */
.hero h1.avx-hero-wordmark .avx-wm-l1,
.hero h1.avx-hero-wordmark .avx-wm-l2{
  color:#A8E8B6;
  text-shadow:0 2px 20px rgba(0,0,0,.78),0 0 40px rgba(40,232,132,.20);
}

/* --- OUTLINE TREATMENT (progressive enhancement) ----------------------- */
@supports ((-webkit-text-stroke:1px #000) or (text-stroke:1px #000)){
  .hero h1.avx-hero-wordmark .avx-wm-l1,
  .hero h1.avx-hero-wordmark .avx-wm-l2{
    color:transparent;
    -webkit-text-stroke:1.7px #A8E8B6;
    text-stroke:1.7px #A8E8B6;
    text-shadow:0 0 32px rgba(40,232,132,.20);
  }
  .hero h1.avx-hero-wordmark .avx-wm-l2{
    -webkit-text-stroke-color:#C9F2D2;
    text-shadow:0 0 36px rgba(40,232,132,.24);
  }
}

.hero p.punch.avx-hero-sub{
  font-family:var(--body,Inter,system-ui,sans-serif)!important;
  /* SAME reference frame as the H1 (cqw on the same container) with
     PROPORTIONAL floor/ceiling, so the 40-50% ratio is structural rather
     than coincidental. H1 is clamp(21px,8.2cqw,60px); 44% of each term
     gives clamp(9.24px,3.61cqw,26.4px) — floor raised to 15px for
     readability, which is why the very narrowest widths sit above band. */
  font-size:clamp(14.5px,1.85vw,26px)!important;
  font-size:clamp(14.5px,3.5cqw,26.4px)!important;
  font-weight:400!important;
  line-height:1.55!important;
  letter-spacing:0!important;
  color:var(--soft,#CFC9BD)!important;
  max-width:min(48ch,100%);
  margin:0 0 26px;
  text-shadow:0 1px 12px rgba(0,0,0,.6);
}
.hero p.punch.avx-hero-sub .avx-word-revenue{
  font-weight:600;
  letter-spacing:.005em;
}
@media(max-width:860px){
  /* tracking stays a uniform .02em at every viewport: a wordmark has ONE
     specified tracking value, not a per-breakpoint taper. */
  .hero h1.avx-hero-wordmark{max-width:none}
  .hero p.punch.avx-hero-sub{max-width:100%}
}

/* ====================================================================
   WARM-BONE LIGHT RESET — approved 2026-08-05 (Debbie)
   --------------------------------------------------------------------
   Two bone plates on the homepage only: #journey and #blueprint.
   Everything else stays dark. The hero stays dark permanently — the
   hollow-outlined wordmark depends on darkness and would vanish at
   1.27:1 on bone.

   BRAND INTEGRITY RULES, ENFORCED BY CONSTRUCTION:
   1. NOT ONE existing token is redefined here. Every declaration below is
      additive. --green / --altavex-green / --titanium / --bronze-hi /
      --warm-bone / --line keep their current values everywhere. Signal
      green #28E884 remains the brand green on every dark surface.
   2. Every selector is prefixed .avx-plate-light, so nothing can leak.
      .carbon is NEVER targeted — it is on 22 pages / 60+ instances
      including all 11 industry pages.
   3. The light tokens are DARKENED VARIANTS OF THE SAME BRAND HUES.
      #0F4A22 is the brand green at print weight; #634E2C is the brand
      bronze at print weight. Same hue family, ink adjusted for the paper.

   WHY THIS LAYER EXISTS: the accent palette is ILLEGAL on bone.
      #28E884 on #E8E3D8 = 1.27:1  (needs 4.5:1) — effectively invisible
      #B08D57 on #E8E3D8 = 2.42:1  FAIL
      #9AA7AB on #E8E3D8 = 1.93:1  FAIL
   A light plate CANNOT be the dark section with its background flipped.
   Measured by ~/sitework/qa/plate_palette_check.py; enforced at build
   time by the contrast gate in verify_p1.mjs, which fails the build on
   any text node inside a plate below 4.5:1.
   ==================================================================== */

.avx-plate-light{
  /* Additive tokens, scoped to this class. Worst ratio in the set is
     6.18:1 against a 4.5:1 requirement. */
  --avx-plate-bg:#E8E3D8;        /* warm bone */
  --avx-plate-card:#F2EEE6;      /* card surface, 1.11:1 vs plate */
  --avx-plate-edge:#CFC7B6;      /* hairline, 1.31:1 vs plate */
  --avx-plate-rule:#D6CEBE;      /* step divider, quieter than the edge */
  --avx-ink-900:#0B1012;         /* headings  14.96:1 on plate */
  --avx-ink-700:#4A555C;         /* labels     6.61:1 on card  */
  --avx-ink-600:#39434A;         /* body      7.91:1 on plate */
  --avx-green-on-light:#0F4A22;  /* brand green, print weight  8.11:1 */
  --avx-bronze-on-light:#634E2C; /* brand bronze, print weight 6.18:1 */

  background:var(--avx-plate-bg);
  /* Kill the inherited dark texture: section.carbon paints two green/bronze
     radial washes plus an SVG node lattice. On bone those read as smudges. */
  background-image:none;
  border-top:1px solid var(--avx-plate-edge);
  border-bottom:1px solid var(--avx-plate-edge);
  color:var(--avx-ink-600);
}

/* --- Headings. .avx-statement ships a dark-surface text-shadow
       (0 2px 18px rgba(0,0,0,.72)); on bone that is a grey halo around
       black type. Removed, not softened. ---------------------------- */
.avx-plate-light h2,
.avx-plate-light h3,
.avx-plate-light .avx-statement,
.avx-plate-light .avx-title{color:var(--avx-ink-900);text-shadow:none}

/* --- Body copy ---------------------------------------------------- */
.avx-plate-light p,
.avx-plate-light .section-sub,
.avx-plate-light .avx-jval,
.avx-plate-light .avx-list li,
.avx-plate-light li{color:var(--avx-ink-600)}

/* --- Kickers. GREEN STAYS RATIONED: an .eyebrow is an accent, so it
       stays green — at print weight. No new green anywhere. --------- */
.avx-plate-light .eyebrow{color:var(--avx-green-on-light)}
.avx-plate-light .eyebrow.bronze{color:var(--avx-bronze-on-light)}
.avx-plate-light .avx-word-authority{
  color:var(--avx-bronze-on-light);
  text-shadow:none;   /* was a bronze glow; glows do not work on paper */
}

/* --- Cards -------------------------------------------------------- */
.avx-plate-light .card{
  background:var(--avx-plate-card);
  border:1px solid var(--avx-plate-edge);
  border-top:1px solid var(--avx-bronze-on-light);
  box-shadow:0 1px 2px rgba(11,16,18,.04);
}
.avx-plate-light .card p{color:var(--avx-ink-600)}
.avx-plate-light .card h3{color:var(--avx-ink-900)}

/* --- Journey: select, steps, summary ------------------------------ */
.avx-plate-light .avx-jselect{
  background:var(--avx-plate-card);
  border:1px solid var(--avx-plate-edge);
  color:var(--avx-ink-900);
}
.avx-plate-light .avx-jsteps{
  background:var(--avx-plate-card);
  border:1px solid var(--avx-plate-edge);
  border-radius:10px;
}
.avx-plate-light .avx-jstep{border-bottom:1px solid var(--avx-plate-rule)}
.avx-plate-light .avx-jstep:last-child{border-bottom:none}
.avx-plate-light .avx-jstep{border-left-color:var(--avx-plate-rule)}
.avx-plate-light .avx-jstep.is-active{
  border-left-color:var(--avx-green-on-light);
  background:rgba(15,74,34,.05);
  box-shadow:none;
}
.avx-plate-light .avx-jstep.is-done{border-left-color:var(--avx-bronze-on-light)}
.avx-plate-light .avx-jlab{color:var(--avx-ink-700)}
.avx-plate-light .avx-jval{color:var(--avx-ink-600)}
/* The status dot is the one place a saturated pixel is correct: it is a
   NON-TEXT indicator, not type. Ringed so it reads on bone without being
   enlarged into decoration. */
.avx-plate-light .avx-jstep.is-done .avx-jlab::after{
  background:var(--avx-green-on-light);
  box-shadow:0 0 0 2px rgba(15,74,34,.14);
}
.avx-plate-light .avx-jsummary{
  background:rgba(15,74,34,.05);
  border:1px solid rgba(15,74,34,.20);
  color:var(--avx-ink-600);
}

/* --- Blueprint drawer -------------------------------------------- */
.avx-plate-light .avx-drawer>summary,
.avx-plate-light details.avx-drawer>summary{color:var(--avx-green-on-light)}
.avx-plate-light .avx-drawer>summary::after,
.avx-plate-light details.avx-drawer>summary::after{color:var(--avx-ink-700)}
.avx-plate-light .avx-list li::before{background:var(--avx-bronze-on-light)}

/* --- CTA: DELIBERATELY UNTOUCHED. .btn-primary keeps the brand green
       gradient and its #04110a label (11.90:1). A primary CTA must look
       identical on every surface. Only the outer bloom is tightened,
       because a glow designed for black reads as a smudge on bone. --- */
.avx-plate-light .btn-primary{
  box-shadow:0 6px 18px rgba(15,74,34,.20),inset 0 0 0 1px rgba(4,17,10,.10);
}
.avx-plate-light .btn-secondary{
  color:var(--avx-green-on-light);
  border-color:var(--avx-bronze-on-light);
  background:transparent;
}

/* --- Section 5 deepened to obsidian. Scoped to a homepage-unique
       class added in the markup. NOT .carbon. ---------------------- */
.avx-plate-dark-deep{
  background:var(--deep-carbon,#0A0F11);
  background-image:none;
}

/* --- Blueprint drawer surface. CAUGHT BY THE CONTRAST GATE, NOT BY EYE:
       avx-directive.css paints `.avx-drawer{background:rgba(10,15,17,.6)}` —
       a 60%-opaque near-black. Composited over bone that resolves to #636461,
       a mid-grey, and every one of the 12 list items inside measured 1.69:1
       against a 4.5:1 requirement. The drawer LOOKED plausible in a
       screenshot: dark panel, light text, obviously "designed". It was
       unreadable. This is exactly the failure the gate exists to catch, and
       the reason the gate composites alpha over ancestors instead of reading
       backgroundColor directly. ---------------------------------------- */
.avx-plate-light .avx-drawer,
.avx-plate-light details.avx-drawer{
  background:var(--avx-plate-card);
  border:1px solid var(--avx-plate-edge);
}
.avx-plate-light .avx-drawer summary{color:var(--avx-green-on-light)}
.avx-plate-light .avx-drawer summary::after{color:var(--avx-ink-700)}
.avx-plate-light .avx-drawer-body p,
.avx-plate-light .avx-drawer-body li,
.avx-plate-light .avx-drawer-body .eyebrow{color:var(--avx-ink-600)}
.avx-plate-light .avx-drawer-body .eyebrow{color:var(--avx-green-on-light)}

/* --- Two geometry corrections the CONTRAST gate could not see, found by
       looking at the render. Both scoped to the plates, because both only
       became visible once the surface went light.

       (a) The status dot is `.avx-jlab::after`, an inline mark after the label
           text. When a label wraps ("NOVA CONVERSATION" at the 160px column)
           the dot falls to the second line and reads as a stray speck. Pinned
           to the label's first line instead of flowing with it.
       (b) The idle left rail was --avx-plate-rule (#D6CEBE) on a #F2EEE6 card
           = a 1.10:1 edge, i.e. invisible. The section's whole job is to show
           one controlled path, so the rail has to be perceptible. Taken to the
           bone edge tone, which reads without competing with the bronze
           done-state. ------------------------------------------------------ */
.avx-plate-light .avx-jlab{position:relative;display:block;padding-left:15px}
.avx-plate-light .avx-jstep.is-done .avx-jlab::after{
  /* MEASURED, not guessed. The label cell is a fixed 160px grid column at
     x=282; the value column starts at x=454. Two earlier placements were wrong:
     inline flow dropped the dot onto the second line of the one wrapped label
     ("Nova conversation"), and right:0 put it in the 12px gutter where it read
     as a bullet belonging to the sentence opposite. Moved to the LEFT of the
     label, inside the label's own padding, so all seven dots sit on one
     vertical line at the start of the rail — which is what a status rail is
     supposed to look like. */
  position:absolute;
  top:.36em;
  left:0;
  right:auto;
  margin-left:0;
  vertical-align:baseline;
}
.avx-plate-light .avx-jstep{border-left-color:#BFB6A2}

/* ============================================================================
   DRAWER TOGGLE GLYPH — remove the stray trailing dash            2026-08-05
   ============================================================================
   SYMPTOM: the open drawer rendered "SEE WHAT WE MAP —" with the minus pushed
   away from the label, reading as stray punctuation in the sentence rather than
   as a toggle affordance.

   CAUSE — a cross-stylesheet split, not a duplicate to delete:
     avx-directive.css:90  .avx-drawer summary::after            (0,1,2)
                           content:"+"; float:right; color:#8A9593
     avx-build-order.css:32 details.avx-drawer>summary::after    (0,1,2)
                           content:'+'  (no float)
     avx-directive.css:91  .avx-drawer[open] summary::after      (0,2,2) content:"–" U+2013
     avx-build-order.css:33 details.avx-drawer[open]>summary::after (0,2,2) content:'\2212'

   Each pair is EQUAL specificity, so the later sheet (this one) wins — verified
   in the browser: the resolved glyph is U+2212, this file's minus sign, not the
   directive file's en dash. But `float:right` is declared ONLY in the directive
   rule and no later rule contradicts it, so the float SURVIVES from the rule
   that lost the content war. Floating a ::after inside `display:inline-flex`
   (build-order line 30) takes it out of flex flow, so `gap:8px` stops applying
   and the glyph drifts to the trailing edge.

   WHY NOT JUST DELETE THE DIRECTIVE RULE: avx-directive.css is loaded by every
   page on the site. `.avx-drawer summary::after` is its only source of the "+"
   affordance for any drawer that is NOT `details.avx-drawer` — a bare
   `.avx-drawer` would silently lose its toggle marker entirely. Only index.html
   uses a drawer today, but editing a sitewide sheet to fix one homepage element
   is how the `.carbon` class nearly got restyled across 22 pages. Correcting the
   inherited property from the sheet that already owns this element is the scoped
   change; the shared sheet stays untouched.
   ========================================================================== */
details.avx-drawer>summary::after{
  float:none;              /* undo the inherited float from avx-directive.css:90 */
  margin-left:auto;        /* park the glyph at the trailing edge INSIDE flex flow */
  line-height:1;           /* the floated box was also nudging baseline alignment */
}

/* SECOND HALF OF THE SAME DEFECT — the glyph itself.
   Removing the float moved the mark 20px closer to the label, but the OPEN state
   still rendered a bare minus sign after a line of uppercase mono text, which
   still reads as trailing punctuation. Screenshot check:
       closed  SEE WHAT WE MAP +     -> reads as an expander
       open    SEE WHAT WE MAP -     -> reads as a dangling dash
   The +/- pair only works when both glyphs sit in a shared frame (a boxed
   button, or a fixed icon slot). Free-standing in flowing text, "+" reads as an
   affordance by luck and "-" reads as punctuation by luck. Repositioning cannot
   fix a glyph-semantics problem.

   A ROTATING CHEVRON communicates state by DIRECTION rather than by glyph
   meaning, so neither state can be misread as punctuation. This is also already
   the site's own accordion pattern — avx-pricing-r4.css:348 uses content
   "\2304" with transform:rotate(180deg) on open — so this converges the two
   disclosure controls instead of inventing a third. */
/* Drawn, not typed. U+2304 renders tiny and sits high in its em box (measured:
   13px glyph whose ink centres ~4px above the label's optical centre), and it is
   inconsistently available across fonts — a missing glyph would show a tofu box
   in production while looking fine here. A two-sided border caret is drawn by
   the layout engine, so it is exactly the size and position we specify on every
   platform, and it cannot fall back to punctuation or tofu. */
details.avx-drawer>summary::after{
  content:'';
  width:7px; height:7px;
  border-right:1.5px solid currentColor;
  border-bottom:1.5px solid currentColor;
  transform:translateY(-2px) rotate(45deg);   /* point DOWN = expand */
  transition:transform .2s ease;
  opacity:.75;
}
details.avx-drawer[open]>summary::after{
  /* MUST restate content:''. Line 33 of this same file sets content:'\2212' for
     the open state at identical specificity, and it appears EARLIER, so omitting
     content here leaves the minus sign painted inside the caret box — which is
     exactly the dash the founder reported, now with a caret drawn around it. The
     gate caught this: it read content="\u2212" while the closed state read "". */
  content:'';
  transform:translateY(1px) rotate(225deg);   /* point UP = collapse */
}
@media(prefers-reduced-motion:reduce){
  details.avx-drawer>summary::after{transition:none}
}
