/* ============================================================================
   salient-elements.css — SALIENT ELEMENT CSS THAT vendor/ DOES NOT CARRY
   ----------------------------------------------------------------------------
   NOT OURS. Copied byte-for-byte from Salient's own output. Do not edit a rule
   in this file to change how the page looks — override it in the section's own
   stylesheet, which loads after this one, so the override is visible to the
   next reader instead of being buried in a lifted block.

   WHY THIS FILE EXISTS
   Salient emits per-element CSS into an inline <style> block on the demo page
   rather than into a linked stylesheet. The shell's vendor pass took only
   <link>ed sheets, so these rules never reached vendor/, and vendor/ is
   byte-locked (CONVENTIONS §1) so they cannot be added there.

   Three sections independently carried their own copy of the same block —
   sections/00-hero.css PART A.1, sections/01-who-why.css PART 1 and
   sections/09-recovery-42.css BLOCK A. Two of the three said in their own
   comments that it should be hoisted the moment a second consumer appeared.
   There were three. It is hoisted here; the copies are deleted.

   `line-reveal-by-space` is the page's dominant motion primitive — 298
   occurrences across the referenced demos (build/DECISION-framework.md §2) —
   so this is shared infrastructure, not a section detail.

   PROVENANCE
   `.nectar-split-heading` block: salient-truth/resort/assets/inline/
   inline-style-3.css, cross-checked against salient-truth/saas/
   inline-styles.css. The two agree rule-for-rule; where the saas copy carried
   a subset, the resort copy is the superset and is what is reproduced here.

   LOAD ORDER: after css/site.css, before sections/*.css. That is exactly the
   slot the earliest of the three copies occupied (00-hero.css is the first
   section stylesheet), so hoisting does not move any cascade boundary.
   ========================================================================== */


/* ----------------------------------------------------------------------------
   .nectar-split-heading — the line-reveal-by-space primitive
   ----------------------------------------------------------------------------
   delay-js rewrites the heading's markup into one masked <span> per word (and,
   under a letter-* text effect, one .inner per letter). These rules are the
   mask plus the start and end states it transitions between.
   -------------------------------------------------------------------------- */

.nectar-split-heading .heading-line{display:block;overflow:hidden;position:relative}
.nectar-split-heading .heading-line >div{display:block;transform:translateY(200%);-webkit-transform:translateY(200%)}
.nectar-split-heading h1{margin-bottom:0}
.nectar-split-heading > * > *{text-indent:0;}
@media only screen and (min-width:1000px){.nectar-split-heading[data-custom-font-size="true"] h1,.nectar-split-heading[data-custom-font-size="true"] h2,.row .nectar-split-heading[data-custom-font-size="true"] h3,.row .nectar-split-heading[data-custom-font-size="true"] h4,.row .nectar-split-heading[data-custom-font-size="true"] h5,.row .nectar-split-heading[data-custom-font-size="true"] h6,.row .nectar-split-heading[data-custom-font-size="true"] i{font-size:inherit;line-height:inherit;}}
.centered-text .nectar-split-heading[data-animation-type="line-reveal-by-space"] h1,.centered-text .nectar-split-heading[data-animation-type="line-reveal-by-space"] h2,.centered-text .nectar-split-heading[data-animation-type="line-reveal-by-space"] h3,.centered-text .nectar-split-heading[data-animation-type="line-reveal-by-space"] h4{margin:0 auto;}
.nectar-split-heading[data-animation-type="line-reveal-by-space"]:not(.markup-generated){opacity:0;}
.nectar-split-heading[data-animation-type="line-reveal-by-space"]:not(.markup-generated).animated-in{opacity:1;}
.nectar-split-heading[data-animation-type="line-reveal-by-space"] > * > span{position:relative;display:inline-block;overflow:hidden;}
.nectar-split-heading[data-animation-type="line-reveal-by-space"] span{vertical-align:bottom;}
.nectar-split-heading[data-animation-type="line-reveal-by-space"] span{line-height:1.2;}
@media only screen and (min-width:1000px){.nectar-split-heading[data-animation-type="line-reveal-by-space"]:not(.markup-generated):not([data-text-effect="none"]) > *{line-height:1.2;}}
@media only screen and (max-width:999px){.nectar-split-heading[data-animation-type="line-reveal-by-space"]:not([data-m-rm-animation="true"]):not(.markup-generated):not([data-text-effect="none"]) > *{line-height:1.2;}}
.nectar-split-heading[data-animation-type="line-reveal-by-space"][data-stagger="true"]:not([data-text-effect*="letter-reveal"]) span .inner{transition:transform 1.2s cubic-bezier(0.25,1,0.5,1),opacity 1.2s cubic-bezier(0.25,1,0.5,1),filter 1.2s cubic-bezier(0.25,1,0.5,1);}
.nectar-split-heading[data-animation-type="line-reveal-by-space"] span .inner{position:relative;display:inline-block;-webkit-transform:translateY(1.3em);transform:translateY(1.3em);}
.nectar-split-heading[data-animation-type="line-reveal-by-space"] span .inner.animated{-webkit-transform:none;transform:none;opacity:1;}
.nectar-split-heading[data-animation-type="line-reveal-by-space"][data-text-effect="letter-reveal-bottom"] > * > span{padding:0 .05em;margin:0 -0.05em;}
@media only screen and ( max-width:999px ){.nectar-split-heading[data-animation-type="line-reveal-by-space"][data-m-rm-animation="true"] span .inner{-webkit-transform:none;transform:none!important;opacity:1;}}
.nectar-split-heading[data-animation-type="line-reveal-by-space"][data-align="left"]{display:flex;justify-content:flex-start;}
.nectar-split-heading[data-animation-type="line-reveal-by-space"][data-align="center"]{display:flex;justify-content:center;}
.nectar-split-heading[data-animation-type="line-reveal-by-space"][data-align="right"]{display:flex;justify-content:flex-end;}
@media only screen and (max-width:999px){.nectar-split-heading[data-animation-type="line-reveal-by-space"][data-m-align="left"]{display:flex;justify-content:flex-start;}.nectar-split-heading[data-animation-type="line-reveal-by-space"][data-m-align="center"]{display:flex;justify-content:center;}.nectar-split-heading[data-animation-type="line-reveal-by-space"][data-m-align="right"]{display:flex;justify-content:flex-end;}}

/* >>> THE MEDIA WRAPPER ON THE NEXT RULE IS LOAD-BEARING. <<<
   `[data-m-rm-animation="true"]` means "remove this animation on mobile", so
   Salient lifts the heading's opacity unconditionally — but ONLY inside
   `max-width:999px`, because above that the animation is still running and the
   `:not(.markup-generated){opacity:0}` rule three lines up is the FOUC guard
   that hides the heading until delay-js has rewritten it.

   sections/09-recovery-42.css shipped this rule with the wrapper stripped. Un-
   media'd and `!important`, it defeated that FOUC guard for EVERY split heading
   at EVERY width — one section's copy of a shared block silently disabling a
   page-wide guard. Nine of the page's headings carry `data-m-rm-animation`, so
   this was not a section-09 bug. Restored to Salient's own form. */
@media only screen and (max-width:999px){.nectar-split-heading[data-m-rm-animation="true"]{opacity:1!important;}}

/* Looks wrong, is not: delay-js's final act is
   `setAttribute("data-text-effect","none")` (stashing the original in
   `data-stored-text-effect`). That flip is what makes the
   `[data-stagger="true"]:not([data-text-effect*="letter-reveal"])` transition
   above start matching, and it is the belt-and-braces that lifts the heading's
   opacity once the rewrite is done — portfolio-layered.lift.md §2.2. */
.nectar-split-heading[data-text-effect="none"]{opacity:1!important;}
