/* Shared motion layer, loaded after page styles. Readable even without JavaScript. */
.jade-motion{--gm-rise:12px;--gm-time:560ms;--gm-ease:cubic-bezier(.18,.65,.25,1)}
.jade-motion .reveal,.jade-motion.motion-ready .reveal{opacity:1;transform:none}
.jade-motion .gm-art{animation-play-state:paused!important}
.jade-motion .display-settings summary{min-height:44px;cursor:pointer}
.jade-motion .display-settings label{display:flex;align-items:center;gap:12px;min-height:44px;color:inherit}
.jade-motion .display-settings input{width:20px;height:20px}
.jade-motion .gm-settings-note{font-size:14px;max-width:48ch;opacity:.85}
@media(min-width:760px){.jade-motion{--gm-rise:20px;--gm-time:680ms}}
@media(prefers-reduced-motion:no-preference){
 .jade-motion[data-motion=playing] .gm-enter{animation:gm-arrive var(--gm-time) var(--gm-ease) var(--gm-delay,0ms) backwards}
 .jade-motion[data-motion=playing] .reveal.visible:not(.gm-enter){animation:none}
 .jade-motion[data-motion=playing] .gm-art[data-motion-inview=true]{animation-play-state:running!important}
 .jade-motion .hero-landscape.gm-art{animation:gm-landscape 14s ease-in-out infinite alternate}
 .jade-motion .folio-label.gm-art{animation:gm-folio 6s ease-in-out infinite alternate}
 .jade-motion .system-picture.gm-art{animation:gm-system 10s ease-in-out infinite alternate}
 .jade-motion .zeri-calendar-art.gm-art,.jade-motion .zeri-offer-visual .gm-art{animation:gm-calendar 7s ease-in-out infinite alternate}
 .jade-motion .journey-certificate .gm-art{animation:gm-certificate 9s ease-in-out infinite alternate}
 .jade-motion :is(.button,.btn,.workspace-nav a,.sidebar-nav a,.price-tabs button){transition:transform .18s ease,background-color .2s ease,box-shadow .2s ease,border-color .2s ease}
 .jade-motion :is(.button,.btn,.price-tabs button):active:not(:disabled){transform:translateY(1px) scale(.985)}
 .jade-motion :is(.price-card,.journey-gift,.workspace-card){transition:box-shadow .25s ease,border-color .25s ease}
 .jade-motion[data-motion=playing] dialog[open]{animation:gm-dialog .23s var(--gm-ease) backwards}
 .jade-motion[data-motion=playing] dialog[open]::backdrop{animation:gm-fade .2s ease backwards}
 .jade-motion[data-motion=playing] details[open]:not(.display-settings)>:not(summary){animation:gm-details .24s ease backwards}
 .jade-motion :is(.header nav a,.product-link,.method-detail-link){text-underline-offset:.25em;transition:text-decoration-color .2s ease,color .2s ease}
 @media(hover:hover) and (pointer:fine){
  .jade-motion :is(.button,.btn):hover:not(:disabled){transform:translateY(-3px);box-shadow:0 8px 20px #173c3426}
  .jade-motion :is(.price-card,.journey-gift,.workspace-card):hover{box-shadow:0 14px 32px #173c341c;border-color:#aa8552}
  .jade-motion :is(.header nav a,.product-link,.method-detail-link):hover{text-decoration:underline;text-decoration-thickness:2px}
  .jade-motion .workspace-nav a:hover{transform:translateY(-2px)}
 }
 @media(hover:none){.jade-motion :is(.button,.btn):hover:not(:active){transform:none}}
 @keyframes gm-arrive{from{opacity:.65;transform:translate3d(0,var(--gm-rise),0)}to{opacity:1;transform:none}}
 @keyframes gm-landscape{from{transform:scale(1.025) translate3d(-.35%,0,0)}to{transform:scale(1.07) translate3d(.35%,-.5%,0)}}
 @keyframes gm-folio{from{transform:rotate(4deg) translateY(0)}to{transform:rotate(5.5deg) translateY(-7px)}}
 @keyframes gm-system{from{transform:translate(-50%,-50%) scale(1.025)}to{transform:translate(-49%,-51%) scale(1.09)}}
 @keyframes gm-calendar{from{transform:scale(1)}to{transform:scale(1.035)}}
 @keyframes gm-certificate{from{transform:scale(1)}to{transform:scale(1.018)}}
 @keyframes gm-dialog{from{opacity:.5;transform:translateY(12px) scale(.99)}to{opacity:1;transform:none}}
 @keyframes gm-fade{from{opacity:0}to{opacity:1}}
 @keyframes gm-details{from{opacity:.5;transform:translateY(5px)}to{opacity:1;transform:none}}
}
/* Manual/OS preference affects old page-specific loops too. No content hidden on pause. */
.jade-motion[data-motion=paused] *,.jade-motion[data-motion=paused] *::before,.jade-motion[data-motion=paused] *::after{animation-play-state:paused!important;transition:none!important;scroll-behavior:auto!important}
.jade-motion[data-motion=paused] :is(.gm-enter,.gm-art,.ambient,.reveal,dialog[open],details[open]>:not(summary)){animation:none!important;transition:none!important}
.jade-motion[data-motion=paused] :is(.button,.btn,.workspace-nav a,.sidebar-nav a,.price-tabs button){transition:none!important;transform:none!important}
@media(prefers-reduced-motion:reduce){.jade-motion *,.jade-motion *::before,.jade-motion *::after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
