/* Finite, composition-aware motion. No scroll handler or continuous animation loop. */
@keyframes cinematic-settle{from{transform:scale(var(--image-scale)) translateY(-.6%)}to{transform:scale(1) translateY(0)}}
@keyframes heading-uncover{from{clip-path:inset(0 0 100% 0);transform:translateY(var(--reveal-distance))}to{clip-path:inset(0);transform:translateY(0)}}
@keyframes copy-settle{from{transform:translateY(var(--reveal-distance));opacity:.55}to{transform:translateY(0);opacity:1}}
@keyframes rule-draw{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes marker-enter{from{transform:translateX(-36px) scale(.88)}to{transform:translateX(0) scale(1)}}
@keyframes marker-steady{from{transform:translateY(9px)}to{transform:translateY(0)}}
@keyframes book-settle{from{transform:perspective(1500px) rotateY(-2deg) rotate(-1deg) translateY(35px)}to{transform:perspective(1500px) rotateY(0) rotate(0) translateY(0)}}
@keyframes editorial-crop{from{clip-path:inset(0 28% 0 0);transform:translateX(25px) scale(1.04)}to{clip-path:inset(0);transform:translateX(0) scale(1)}}
@keyframes portrait-uncover{from{clip-path:inset(0 100% 0 0)}to{clip-path:inset(0)}}
@keyframes gentle-frame{from{transform:translateY(12px) scale(.985);opacity:.8}to{transform:translateY(0) scale(1);opacity:1}}
@keyframes panel-open{from{transform:translateY(-10px);opacity:.75}to{transform:translateY(0);opacity:1}}
@keyframes view-out{to{opacity:0}}
@keyframes view-in{from{opacity:0}}

@media(prefers-reduced-motion:no-preference){
 :root[data-motion=full]:not([data-entered]) .journey-image img{animation:cinematic-settle var(--hero-time) var(--ease-out) both}
 :root[data-motion=full]:not([data-entered]) :is(.journey-heading h1,.page-intro h1,.about-hero h1,.book-hero h1,.article-header h1,.review-heading h1){animation:heading-uncover var(--reveal-time) var(--ease-out) 90ms both}
 :root[data-motion=full]:not([data-entered]) .journey-heading>.eyebrow{animation:copy-settle 700ms var(--ease-out) both}
 :root[data-motion=full]:not([data-entered]) .journey-message>.journey-lead{animation:copy-settle var(--reveal-time) var(--ease-out) 200ms both}
 :root[data-motion=full]:not([data-entered]) .journey-message>.journey-lead+p{animation:copy-settle var(--reveal-time) var(--ease-out) 320ms both}
 :root[data-motion=full]:not([data-entered]) .journey-actions{animation:copy-settle var(--reveal-time) var(--ease-out) 440ms both}
 :root[data-motion=full] [data-reveal=heading].is-revealed{animation:heading-uncover var(--reveal-time) var(--ease-out) both}
 :root[data-motion=full] [data-reveal=copy].is-revealed{animation:copy-settle var(--reveal-time) var(--ease-out) 120ms both}
 :root[data-motion=full] [data-reveal=rule].is-revealed{animation:rule-draw 1150ms var(--ease-out) both}
 :root[data-motion=full] [data-reveal=book].is-revealed{animation:book-settle 1300ms var(--ease-out) both}
 :root[data-motion=full] [data-reveal=editorial].is-revealed{animation:editorial-crop 1200ms var(--ease-out) both}
 :root[data-motion=full] [data-reveal=portrait].is-revealed{animation:portrait-uncover 1100ms var(--ease-in-out) both}
 :root[data-motion=full] [data-reveal=path].is-revealed .path-number{animation:marker-enter 900ms var(--ease-out) both;transform-origin:left center}
 :root[data-motion=full] details[open] .path-content{animation:panel-open 450ms var(--ease-out) both}
 :root[data-motion=full][data-presentation=restorative] :is([data-reveal=portrait],[data-reveal=editorial],[data-reveal=book]).is-revealed{animation:gentle-frame 1500ms var(--ease-out) both}
 :root[data-motion=full][data-presentation=restorative] [data-reveal=path].is-revealed .path-number{animation:marker-steady 1150ms var(--ease-out) both}
 :root[data-motion=full] :is(.button,.text-link,.header-cta,.round-link,.path-sign,.theme-toggle,.motion-toggle,.presentation-control button,.header-shell){transition:background-color 240ms,color 240ms,border-color 240ms,box-shadow 300ms,transform 300ms var(--ease-out)}
 :root[data-motion=full] :is(.button span,.text-link span,.header-cta span,.site-header nav a::after){transition:transform 280ms var(--ease-out)}
 :root[data-motion=full] .view-indicator{transition:left var(--switch-time) var(--ease-in-out),width var(--switch-time) var(--ease-in-out)}
 :root[data-motion=full] .article-visual img{transition:transform 850ms var(--ease-out)}
 :root[data-motion=full] .article-feature:has(a:is(:hover,:focus-visible)) .article-visual img{transform:scale(1.035)}
 :root[data-switching] :is(main h1,.journey-heading>*,.journey-message>*,.journey-image img,[data-reveal]){animation:none!important}
 /* Only visible named scenes are captured. Geometry, framing, type and colour move together. */
 ::view-transition{pointer-events:none}
 ::view-transition-group(*){animation-duration:var(--switch-time);animation-timing-function:var(--ease-in-out)}
 ::view-transition-image-pair(*){isolation:isolate}
 ::view-transition-old(*),::view-transition-new(*){mix-blend-mode:normal;animation-duration:var(--switch-time);animation-timing-function:var(--ease-in-out)}
 ::view-transition-old(*){animation-name:view-out}
 ::view-transition-new(*){animation-name:view-in}
 ::view-transition-old(journey-image),::view-transition-new(journey-image),::view-transition-old(featured-image),::view-transition-new(featured-image){height:100%;width:100%;object-fit:cover}
 :root[data-surface-transition] :is(body,.header-shell,.page-intro,.course-intro,.article-intro,.about-intro,.book-intro,.wide-band,.path-section,.story-section,.process-section,.parenting-focus,.parenting-invitation,.site-footer,.book-stage,.article-next,.no-dates){transition:background-color var(--switch-time) var(--ease-out),color var(--switch-time) var(--ease-out),border-color var(--switch-time) var(--ease-out)}
}
:root[data-motion=reduced]{scroll-behavior:auto}
:root[data-motion=reduced] *, :root[data-motion=reduced] *::before, :root[data-motion=reduced] *::after{animation:none!important;transition:none!important}
:root[data-motion=reduced]::view-transition-group(*),:root[data-motion=reduced]::view-transition-old(*),:root[data-motion=reduced]::view-transition-new(*){animation:none!important}
@media(prefers-reduced-motion:reduce){
 html{scroll-behavior:auto}
 *,*::before,*::after{animation:none!important;transition:none!important}
 ::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}
}
@media(max-width:680px){
 :root[data-motion=full] [data-reveal=book].is-revealed{animation-name:gentle-frame}
 :root[data-motion=full] [data-reveal=editorial].is-revealed{animation-duration:1000ms}
}
[data-reveal][data-motion-complete],[data-reveal][data-motion-complete] .path-number{animation:none!important}
