/* Sixty Seconds, the shared motion core (CSS half). Loaded by every page after its own stylesheets; the script half is js/site-motion.js.
   Contract and numbers: motion/MOTION-SPEC.md (from motion/MOTION-STUDY.md, Orizon measured).
   Rules: only transform, opacity and filter animate. Emerald stays on actions. Nothing is hidden until JS has run (html.js AND the core's own html.ssm),
   reduced motion gets none of it (the script never adds html.ssm), and html.ssm-off forces everything visible if the core ever fails.
   P7 [data-reveal]   P8 [data-reveal-cards] > *   P9 [data-count]   P10 .lift / .btn / .arrow-link   P18 .zoom   Lenis support. */

:root{
  --m-ease:cubic-bezier(.16,1,.3,1);            /* the house ease */
  --m-ease-nav:cubic-bezier(.23,1,.32,1);       /* nav hide / show */
  --m-ease-leave:cubic-bezier(.55,.085,.68,.53);/* things leaving */
  --m-ease-reveal:cubic-bezier(0,0,.58,1);      /* P7, measured: plain ease-out */
  --m-ease-card:cubic-bezier(.4,0,.2,1);        /* P8 cards and section heads */
  --m-ease-sheet:ease-in-out;                   /* P13 */
  --m-reveal:600ms; --m-card:700ms; --m-hover:320ms; --m-leave:300ms;
  --m-dist:30px; --m-dist-card:32px; --m-dist-head:16px;
}

/* ================= P7 fade-up, one shot ================= */
html.js.ssm [data-reveal]:not(.is-in){opacity:0;transform:translate3d(0,var(--m-dist),0)}
html.js.ssm [data-reveal="up"]:not(.is-in){transform:translate3d(0,var(--m-dist),0)}
html.js.ssm [data-reveal="left"]:not(.is-in){transform:translate3d(calc(var(--m-dist) * -1),0,0)}
html.js.ssm [data-reveal="right"]:not(.is-in){transform:translate3d(var(--m-dist),0,0)}
html.js.ssm [data-reveal="none"]:not(.is-in){transform:none}
html.js.ssm [data-reveal="head"]:not(.is-in){transform:translate3d(0,var(--m-dist-head),0)}
html.js.ssm [data-reveal].is-in:not(.is-done){
  transition:opacity var(--m-reveal) var(--m-ease-reveal) var(--m-delay,0ms),transform var(--m-reveal) var(--m-ease-reveal) var(--m-delay,0ms);will-change:opacity,transform}
html.js.ssm [data-reveal="head"].is-in:not(.is-done){
  transition:opacity var(--m-card) var(--m-ease-card) var(--m-delay,0ms),transform var(--m-card) var(--m-ease-card) var(--m-delay,0ms)}

/* ================= P8 card cascade (the container's direct children) ================= */
html.js.ssm [data-reveal-cards]>*:not(.is-in){opacity:0;transform:translate3d(0,var(--m-dist-card),0)}
html.js.ssm [data-reveal-cards]>.is-in:not(.is-done){
  transition:opacity var(--m-card) var(--m-ease-card) var(--m-delay,0ms),transform var(--m-card) var(--m-ease-card) var(--m-delay,0ms);will-change:opacity,transform}

/* ================= P9 counters: the width must not jump while digits change ================= */
[data-count]{font-variant-numeric:tabular-nums}

/* ================= P10 hover lift: only with a real hover ================= */
:where(.lift){position:relative}
.lift{transition:transform var(--m-hover) var(--m-ease)}
.lift::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;opacity:0;
  box-shadow:inset 0 0 0 1px rgb(var(--a3,88 145 218)/.6),0 14px 40px -8px rgb(0 0 0/.6),0 0 28px -4px rgb(var(--a3,88 145 218)/.32);
  transition:opacity .28s ease}
.lift.lift-t::after{display:none}
.btn{transition:transform .3s var(--m-ease),opacity .25s var(--m-ease),filter .3s var(--m-ease)}
.btn .arr,.arrow-link .arr{display:inline-block;transition:transform .3s var(--m-ease)}
.arrow-link .arr{transition-duration:.2s}
@media (hover:hover) and (pointer:fine){
  .lift:hover{transform:translate3d(0,-4px,0)}
  .lift:hover::after{opacity:1}
  .btn:hover{transform:translate3d(0,-1px,0)}
  .btn:hover .arr{transform:translate3d(2px,-2px,0)}
  .btn.ghost:hover{transform:none;filter:brightness(1.14)}
  .arrow-link:hover .arr{transform:translate3d(2px,0,0)}
  /* P18: image zoom inside a clipped frame */
  .zoom{overflow:hidden}
  .zoom>img,.zoom>video,.zoom>picture img{transition:transform .5s var(--m-ease)}
  .zoom:hover>img,.zoom:hover>video,.zoom:hover>picture img{transform:scale(1.05)}
  .lift:hover .zoom>img,.lift:hover .zoom>video,.lift:hover .zoom>picture img{transform:scale(1.05)}
}
@media (hover:none),(pointer:coarse){.btn:hover{transform:none}.btn:active{transform:scale(.985)}}

/* ================= Lenis (smooth scroll, desktop only) ================= */
html.lenis,html.lenis body{height:auto}
.lenis.lenis-smooth{scroll-behavior:auto!important}
.lenis.lenis-smooth [data-lenis-prevent]{overscroll-behavior:contain}
.lenis.lenis-stopped{overflow:clip}
.lenis.lenis-scrolling iframe{pointer-events:none}

/* ================= Back to top (SSWEB-5352): built by site-motion.js on pages with [data-to-top] ================= */
.to-top{position:fixed;right:24px;bottom:24px;z-index:60;display:inline-flex;align-items:center;gap:8px;height:40px;padding:0 16px 0 13px;
  border-radius:999px;border:1px solid rgb(255 255 255/.14);background:rgb(14 16 24/.78);color:#fff;font:500 13.5px/1 inherit;font-family:inherit;
  -webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);box-shadow:0 10px 30px -10px rgb(0 0 0/.6);cursor:pointer;
  opacity:0;transform:translate3d(0,10px,0);pointer-events:none;visibility:hidden;
  transition:opacity .2s cubic-bezier(.23,1,.32,1),transform .2s cubic-bezier(.23,1,.32,1),visibility 0s linear .2s,background-color .16s ease-out,border-color .16s ease-out}
.to-top.on{opacity:1;transform:none;pointer-events:auto;visibility:visible;transition-delay:0s}
.to-top:active{transform:scale(.97);transition-duration:.16s}
.to-top:focus-visible{outline:2px solid rgb(var(--a3,88 145 218));outline-offset:3px}
@media (hover:hover) and (pointer:fine){.to-top:hover{background:rgb(24 28 40/.9);border-color:rgb(255 255 255/.26)}}
@media (max-width:640px){.to-top{right:16px;bottom:16px}[data-to-top]~footer .ft-legal{padding-bottom:56px}}  /* clears the pill at the very bottom */
@media (prefers-reduced-motion:reduce){.to-top,.to-top.on{transform:none!important}}

/* ================= safety nets ================= */
html.ssm-off [data-reveal],html.ssm-off [data-reveal-cards]>*{opacity:1!important;transform:none!important;transition:none!important;will-change:auto!important}
@media print{[data-reveal],[data-reveal-cards]>*{opacity:1!important;transform:none!important;transition:none!important}}
/* Reduced motion: the core adds nothing (no html.ssm), so every target is already visible. Kill any leftover movement from the core's own rules. */
@media (prefers-reduced-motion:reduce){
  [data-reveal],[data-reveal-cards]>*{opacity:1!important;transform:none!important;transition:none!important}
  .lift,.lift::after,.btn,.btn .arr,.arrow-link .arr,.zoom>img,.zoom>video,.zoom>picture img{transition:none!important}
  .lift:hover,.btn:hover,.btn:hover .arr,.arrow-link:hover .arr,.zoom:hover>img,.zoom:hover>video,.zoom:hover>picture img{transform:none!important}
}
