/* A continuous passage: space gathers into a reading position, then releases.
   CSS view timelines follow the user's scroll; no pinned section or extra RAF. */
:root{--passage-ease:cubic-bezier(.22,1,.36,1)}
.story-atmosphere{display:none}
.passages-enabled .luminous-home{isolation:isolate}
.passages-enabled .story-atmosphere{display:block;position:fixed;inset:0;z-index:-1;pointer-events:none;overflow:hidden;background:var(--paper)}
.story-light{position:absolute;inset:-15%;opacity:0;transform:translate3d(-14%,12%,0) scale(1.15);background:radial-gradient(ellipse at 50% 50%,color-mix(in srgb,var(--teal) 15%,transparent),transparent 58%),linear-gradient(112deg,transparent 31%,color-mix(in srgb,var(--ink) 3%,transparent) 50%,transparent 68%);transition:transform 1.25s var(--passage-ease),opacity .8s ease}
.story-grain{position:absolute;inset:0;background:url('arte/grain.svg') repeat;opacity:.035}
[data-story-phase=product] .story-light{opacity:.5;transform:translate3d(-16%,-16%,0) scale(1.3)}
[data-story-phase=problem] .story-light{opacity:.55;transform:translate3d(23%,-4%,0) scale(1.2)}
[data-story-phase=brain] .story-light{opacity:1;transform:translate3d(0,3%,0) scale(1)}
[data-story-phase=verdict] .story-light{opacity:.55;transform:translate3d(22%,10%,0) scale(1.12)}
[data-story-phase=platform] .story-light{opacity:.85;transform:translate3d(-22%,-3%,0) scale(1.16)}
[data-story-phase=inside] .story-light{opacity:.6;transform:translate3d(0,12%,0) scale(1.35)}
.passages-enabled .luminous-home .chapter{content-visibility:visible;contain-intrinsic-block-size:none}
.passages-enabled .luminous-home .routing-panel,.passages-enabled .luminous-home .platform-section,.passages-enabled .luminous-home .evidence-panel{background:transparent;border-color:transparent}
.passages-enabled .luminous-home .routing-panel>.light-field,.passages-enabled .luminous-home .platform-section>.light-field{display:none}
.passages-enabled .luminous-home .routing-panel::after,.passages-enabled .luminous-home .platform-section::after{display:none}
.passages-enabled .luminous-home .problem-summary{border-top:0}
.passages-enabled .luminous-home .chapter-nav{box-shadow:0 7px 28px -15px var(--shade),inset 0 1px 0 var(--frost-edge)}
/* The same motion language applies to each handoff. Text never becomes hidden. */
@keyframes passage-arrive{from{transform:translate3d(0,48px,0) scale(.965)}to{transform:translate3d(0,0,0) scale(1)}}
@keyframes passage-left{from{transform:translate3d(-45px,28px,0)}to{transform:translate3d(0,0,0)}}
@keyframes passage-right{from{transform:translate3d(45px,28px,0)}to{transform:translate3d(0,0,0)}}
@keyframes passage-center{from{transform:translate3d(0,48px,0) scale(.92)}to{transform:translate3d(0,0,0) scale(1)}}
@keyframes passage-hero{from{transform:scale(1)}to{transform:scale(.94)}}
@keyframes passage-landscape{from{transform:scale(1.16) translate3d(0,-3%,0)}to{transform:scale(1.02) translate3d(0,0,0)}}
@keyframes passage-card{from{transform:translate3d(0,44px,0)}to{transform:translate3d(0,0,0)}}
@keyframes passage-opening{from{transform:translate3d(0,38px,0) scale(.93)}to{transform:translate3d(0,0,0) scale(1)}}
@media(prefers-reduced-motion:no-preference){
 @supports (animation-timeline:view()) and (animation-range:entry 0% entry 100%){
  .passages-native:not(.experience-paused) .hero-reel{view-timeline-name:--hero-passage;view-timeline-axis:block}
  .passages-native:not(.experience-paused) .luminous-home .hero-reel .hero{animation:passage-hero linear both;animation-timeline:--hero-passage;animation-range:exit 0% exit 85%;transform-origin:center 75%}
  .passages-native:not(.experience-paused) .product-intro,
  .passages-native:not(.experience-paused) .problem-heading,
  .passages-native:not(.experience-paused) .evidence-comparison,
  .passages-native:not(.experience-paused) .platform-intro,
  .passages-native:not(.experience-paused) .agent-register{
   animation:passage-arrive linear both;animation-timeline:view();animation-range:entry 0% entry 95%;transform-origin:center top
  }
  .passages-native:not(.experience-paused) .routing-system{view-timeline-name:--routing-passage;view-timeline-axis:block}
  .passages-native:not(.experience-paused) .dsp-bank{animation:passage-left linear both;animation-timeline:--routing-passage;animation-range:entry 0% entry 76%}
  .passages-native:not(.experience-paused) .supply-bank{animation:passage-right linear both;animation-timeline:--routing-passage;animation-range:entry 8% entry 86%}
  .passages-native:not(.experience-paused) .brain-core{animation:passage-center linear both;animation-timeline:--routing-passage;animation-range:entry 10% entry 86%}
  .passages-native:not(.experience-paused) .routing-wires{animation:passage-arrive linear both;animation-timeline:--routing-passage;animation-range:entry 0% entry 86%}
  .passages-native:not(.experience-paused) .capability-list article{animation:passage-card linear both;animation-timeline:view();animation-range:entry 0% entry 100%}
  .passages-native:not(.experience-paused) .capability-list article:nth-child(even){animation-range:entry 5% entry 115%}
  .passages-native:not(.experience-paused) .closing-panel{view-timeline-name:--closing-passage;view-timeline-axis:block;animation:passage-opening linear both;animation-timeline:view();animation-range:entry 0% entry 95%;transform-origin:center top}
  .passages-native:not(.experience-paused) .closing-scene{animation:passage-landscape linear both;animation-timeline:--closing-passage;animation-range:entry 0% exit 100%}
 }
 /* Older browsers use a single timed arrival; the document stays in normal flow. */
 .passages-fallback:not(.experience-paused) .passage-arrived .product-intro,
 .passages-fallback:not(.experience-paused) .passage-arrived .problem-heading,
 .passages-fallback:not(.experience-paused) .passage-arrived .routing-system,
 .passages-fallback:not(.experience-paused) .passage-arrived .evidence-comparison,
 .passages-fallback:not(.experience-paused) .passage-arrived .capability-list,
 .passages-fallback:not(.experience-paused) .passage-arrived .agent-register{animation:passage-arrive .8s var(--passage-ease) both}
}
/* Touch screens get shorter travel, and independent rows stay readable. */
@media(max-width:760px){
 @keyframes passage-left{from{transform:translate3d(-18px,16px,0)}to{transform:translate3d(0,0,0)}}
 @keyframes passage-right{from{transform:translate3d(18px,16px,0)}to{transform:translate3d(0,0,0)}}
 @keyframes passage-arrive{from{transform:translate3d(0,28px,0) scale(.98)}to{transform:translate3d(0,0,0) scale(1)}}
 @keyframes passage-center{from{transform:translate3d(0,28px,0) scale(.96)}to{transform:translate3d(0,0,0) scale(1)}}
 @supports (animation-timeline:view()) and (animation-range:entry 0% entry 100%){
  .passages-native:not(.experience-paused) .dsp-bank,.passages-native:not(.experience-paused) .supply-bank,.passages-native:not(.experience-paused) .brain-core{animation-timeline:view();animation-range:entry 0% entry 95%}
 }
}
.experience-paused .story-light{transition:none}
@media(prefers-reduced-motion:reduce){.story-light{transition:none;transform:none!important}.passages-enabled .story-atmosphere{display:none}}
@media print{.story-atmosphere{display:none!important}}
/* Keep touch targets >=44px even at the hero's smallest visual scale. */
.passages-enabled .hero-tools button,.passages-enabled .hero-tools a{min-height:48px}
