@layer motion {
/* Main.dc.html */
.zt-hero-in{animation:zt-rise .9s var(--ease-out) both;animation-delay:var(--d,0s)}
.zt-has-intro .zt-hero-in{animation-delay:calc(var(--d,0s) + 1.05s)}
.zt-mount{animation:zt-rise .5s var(--ease-out) both}
.zt-float{animation:zt-float 7s ease-in-out infinite}
.zt-ring{animation:zt-ring 4.8s cubic-bezier(.2,.6,.3,1) infinite}
.zt-dot-pulse{transform-box:fill-box;transform-origin:center;animation:zt-dot 2.4s ease-out infinite}
.zt-bar-run{transform-origin:var(--start) 50%;animation:zt-scalex 5.2s linear both}
.zt-count{display:inline-block;min-width:1ch;counter-reset:zn var(--n);animation:zt-count 1.6s var(--ease-out) .2s both}
.zt-has-intro .zt-count{animation-delay:1.25s}
.zt-count::after{content:counter(zn)}
.zt-progress{transform:scaleX(0);transform-origin:var(--start) 50%}
@keyframes zt-rise{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
@keyframes zt-out{from{opacity:1;transform:none}to{opacity:.35;transform:translateY(-12px)}}
@keyframes zt-drawlen{from{stroke-dashoffset:var(--len,160)}to{stroke-dashoffset:0}}
@keyframes zt-scalex{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes zt-scaley{from{transform:scaleY(0)}to{transform:scaleY(1)}}
@keyframes zt-count{from{--n:0}}
@keyframes zt-beat{0%{transform:scale(1)}28%{transform:scale(1.2)}55%{transform:scale(.95)}100%{transform:scale(1)}}
@keyframes zt-blink{0%{transform:scaleY(1)}45%{transform:scaleY(.1)}100%{transform:scaleY(1)}}
@keyframes zt-swing{0%{transform:rotate(0)}22%{transform:rotate(14deg)}50%{transform:rotate(-10deg)}76%{transform:rotate(5deg)}100%{transform:rotate(0)}}
@keyframes zt-wave{0%{opacity:1}35%{opacity:.2}100%{opacity:1}}
@keyframes zt-nudge{0%{transform:translate(0,0)}40%{transform:translate(0,-3px)}100%{transform:translate(0,0)}}
@keyframes zt-float{0%{transform:translateY(0)}50%{transform:translateY(-8px)}100%{transform:translateY(0)}}
@keyframes zt-ring{0%{opacity:0;transform:scale(.78)}18%{opacity:.55}100%{opacity:0;transform:scale(1.22)}}
@keyframes zt-dot{0%{transform:scale(1);opacity:.55}100%{transform:scale(2.8);opacity:0}}
@keyframes zt-intro-line{from{stroke-dashoffset:900}to{stroke-dashoffset:0}}
@keyframes zt-intro-letter{from{transform:translateY(110%)}to{transform:none}}
@keyframes zt-curtain{0%{opacity:1;visibility:visible}100%{opacity:0;visibility:hidden}}
@keyframes zt-check{from{stroke-dashoffset:40}to{stroke-dashoffset:0}}
@keyframes zt-pop{0%{transform:scale(.6);opacity:0}60%{transform:scale(1.08);opacity:1}100%{transform:scale(1);opacity:1}}
.zt-head-in{animation:zt-headin .8s var(--ease-out) .15s both}
.zt-has-intro .zt-head-in{animation-delay:1.15s}
.zt-wup{display:inline-block;margin-inline-end:.24em;animation:zt-wordup 1s var(--ease-out) both;animation-delay:var(--d,0s)}
.zt-v-wide .zt-wup:lang(en){--wup-y:110%}
.zt-has-intro .zt-wup{animation-delay:calc(var(--d,0s) + 1.1s)}
.zt-uline{position:absolute;inset-inline:0;bottom:.06em;height:.08em;border-radius:.05em;background:#137A7F;opacity:.28;transform-origin:var(--start) 50%;animation:zt-scalex .9s var(--ease-out) both;animation-delay:calc(var(--d,0s) + .55s)}
.zt-uline:lang(en){bottom:.04em}
.zt-has-intro .zt-uline{animation-delay:calc(var(--d,0s) + 1.65s)}
.zt-chipcycle{animation:zt-chipcycle 12s var(--ease-out) infinite both;animation-delay:calc(1.2s + var(--d,0s))}
.zt-live{animation:zt-live 1.8s ease-out infinite}
.zt-beat-loop{transform-box:fill-box;transform-origin:center;animation:zt-beatloop 1.4s ease-in-out infinite}
.zt-blink-loop{transform-box:fill-box;transform-origin:center;animation:zt-blinkloop 4.5s ease-in-out infinite}
.zt-cue-dot{animation:zt-cue 1.8s var(--ease-std) infinite}
.zt-tilt{transform:perspective(1400px) rotateY(calc(var(--mx,0) * 12deg)) rotateX(calc(var(--my,0) * -9deg));transition:transform .7s var(--ease-out)}
.zt-depth{transition:transform .7s var(--ease-out)}
.zt-seq-a{animation:zt-sA 12s var(--ease-std) 1.2s infinite both}
.zt-seq-b{animation:zt-sB 12s var(--ease-std) 1.2s infinite both}
.zt-seq-k1{animation:zt-k1 12s var(--ease-out) 1.2s infinite both}
.zt-seq-k2{animation:zt-k2 12s var(--ease-out) 1.2s infinite both}
.zt-seq-k3{animation:zt-k3 12s var(--ease-out) 1.2s infinite both}
.zt-seq-l1{transform-origin:50% 0;animation:zt-l1 12s var(--ease-std) 1.2s infinite both}
.zt-seq-l2{transform-origin:50% 0;animation:zt-l2 12s var(--ease-std) 1.2s infinite both}
.zt-seq-f1{animation:zt-f1 12s var(--ease-std) 1.2s infinite both}
.zt-seq-f2{animation:zt-f2 12s var(--ease-std) 1.2s infinite both}
.zt-seq-f3{animation:zt-f3 12s var(--ease-std) 1.2s infinite both}
.zt-seq-badge1{animation:zt-badge1 12s var(--ease-std) 1.2s infinite both}
.zt-seq-badge2{transform-origin:center;animation:zt-badge2 12s var(--ease-out) 1.2s infinite both}
.zt-seq-chip{transform-origin:center;animation:zt-bchip 12s var(--ease-out) 1.2s infinite both}
.zt-seq-burst{animation:zt-burst 12s ease-out 1.2s infinite both}
.zt-seq-curve{animation:zt-bcurve 12s var(--ease-std) 1.2s infinite both}
.zt-seq-next{animation:zt-bnext 12s var(--ease-out) 1.2s infinite both}
.zt-seq-notif{animation:zt-notif2 12s var(--ease-out) 1.2s infinite both}
@keyframes zt-iris{from{--r:0px}to{--r:1600px}}
@keyframes zt-apex{0%{opacity:0;transform:scale(0)}60%{opacity:1;transform:scale(1.8)}100%{opacity:1;transform:scale(1)}}
@keyframes zt-apex-ring{0%{opacity:0;transform:scale(1)}20%{opacity:.7}100%{opacity:0;transform:scale(4.5)}}
@keyframes zt-headin{from{opacity:0;transform:translateY(-100%)}to{opacity:1;transform:none}}
@keyframes zt-wordup{from{opacity:0;transform:translateY(var(--wup-y,125%)) rotate(calc(var(--dir,-1) * -2deg))}to{opacity:1;transform:none}}
@keyframes zt-chipcycle{0%{opacity:0;transform:translateY(14px) scale(.88)}11%{opacity:0;transform:translateY(14px) scale(.88)}15%{opacity:1;transform:none}91%{opacity:1;transform:none}95%{opacity:0;transform:translateY(-8px) scale(.96)}100%{opacity:0;transform:translateY(-8px) scale(.96)}}
@keyframes zt-live{0%{box-shadow:0 0 0 0 rgba(19,122,127,.5)}100%{box-shadow:0 0 0 8px rgba(19,122,127,0)}}
@keyframes zt-beatloop{0%{transform:scale(1)}12%{transform:scale(1.2)}24%{transform:scale(.95)}34%{transform:scale(1.08)}46%{transform:scale(1)}100%{transform:scale(1)}}
@keyframes zt-blinkloop{0%{transform:scaleY(1)}92%{transform:scaleY(1)}95%{transform:scaleY(.1)}98%{transform:scaleY(1)}100%{transform:scaleY(1)}}
@keyframes zt-cue{0%{opacity:0;transform:translateY(0)}20%{opacity:1}80%{opacity:0;transform:translateY(12px)}100%{opacity:0;transform:translateY(12px)}}
@keyframes zt-sA{0%{opacity:1;transform:none}50%{opacity:1;transform:none}55%{opacity:0;transform:translateY(-18px) scale(.98)}95%{opacity:0;transform:translateY(18px)}100%{opacity:1;transform:none}}
@keyframes zt-sB{0%{opacity:0;transform:translateY(18px)}52%{opacity:0;transform:translateY(18px)}58%{opacity:1;transform:none}91%{opacity:1;transform:none}96%{opacity:0;transform:translateY(-14px)}100%{opacity:0;transform:translateY(-14px)}}
@keyframes zt-k1{0%{opacity:0;transform:scale(.3)}10%{opacity:0;transform:scale(.3)}12%{opacity:1;transform:scale(1.18)}14%{opacity:1;transform:scale(1)}95%{opacity:1;transform:scale(1)}96%{opacity:0;transform:scale(.3)}100%{opacity:0;transform:scale(.3)}}
@keyframes zt-k2{0%{opacity:0;transform:scale(.3)}22%{opacity:0;transform:scale(.3)}24%{opacity:1;transform:scale(1.18)}26%{opacity:1;transform:scale(1)}95%{opacity:1;transform:scale(1)}96%{opacity:0;transform:scale(.3)}100%{opacity:0;transform:scale(.3)}}
@keyframes zt-k3{0%{opacity:0;transform:scale(.3)}34%{opacity:0;transform:scale(.3)}36%{opacity:1;transform:scale(1.18)}38%{opacity:1;transform:scale(1)}95%{opacity:1;transform:scale(1)}96%{opacity:0;transform:scale(.3)}100%{opacity:0;transform:scale(.3)}}
@keyframes zt-l1{0%{transform:scaleY(0)}12%{transform:scaleY(0)}22%{transform:scaleY(1)}95%{transform:scaleY(1)}96%{transform:scaleY(0)}100%{transform:scaleY(0)}}
@keyframes zt-l2{0%{transform:scaleY(0)}24%{transform:scaleY(0)}34%{transform:scaleY(1)}95%{transform:scaleY(1)}96%{transform:scaleY(0)}100%{transform:scaleY(0)}}
@keyframes zt-f1{0%{opacity:0}11%{opacity:0}15%{opacity:1}95%{opacity:1}96%{opacity:0}100%{opacity:0}}
@keyframes zt-f2{0%{opacity:0}23%{opacity:0}27%{opacity:1}95%{opacity:1}96%{opacity:0}100%{opacity:0}}
@keyframes zt-f3{0%{opacity:0}35%{opacity:0}39%{opacity:1}95%{opacity:1}96%{opacity:0}100%{opacity:0}}
@keyframes zt-badge1{0%{opacity:1}36%{opacity:1}39%{opacity:0}95%{opacity:0}96%{opacity:1}100%{opacity:1}}
@keyframes zt-badge2{0%{opacity:0;transform:scale(.8)}36%{opacity:0;transform:scale(.8)}39%{opacity:1;transform:scale(1.08)}41%{opacity:1;transform:scale(1)}95%{opacity:1;transform:scale(1)}96%{opacity:0;transform:scale(.8)}100%{opacity:0;transform:scale(.8)}}
@keyframes zt-bchip{0%{opacity:0;transform:scale(.6)}58%{opacity:0;transform:scale(.6)}62%{opacity:1;transform:scale(1.1)}65%{opacity:1;transform:scale(1)}100%{opacity:1;transform:scale(1)}}
@keyframes zt-burst{0%{opacity:0;transform:scale(1)}60%{opacity:0;transform:scale(1)}61%{opacity:.55;transform:scale(1)}72%{opacity:0;transform:scale(1.9)}100%{opacity:0;transform:scale(1.9)}}
@keyframes zt-bcurve{0%{stroke-dashoffset:700}63%{stroke-dashoffset:700}80%{stroke-dashoffset:0}100%{stroke-dashoffset:0}}
@keyframes zt-bnext{0%{opacity:0;transform:translateY(14px)}70%{opacity:0;transform:translateY(14px)}76%{opacity:1;transform:none}100%{opacity:1;transform:none}}
@keyframes zt-notif2{0%{opacity:0;transform:translateY(-18px) scale(.97)}40%{opacity:0;transform:translateY(-18px) scale(.97)}44%{opacity:1;transform:none}51%{opacity:1;transform:none}55%{opacity:0;transform:translateY(-14px) scale(.96)}100%{opacity:0;transform:translateY(-14px) scale(.96)}}
.zt-sw{opacity:clamp(.14, calc((var(--sp,1) - var(--t)) * 22 + 1), 1);transition:opacity .25s linear,color .8s var(--ease-std)}
.zt-bi{opacity:clamp(0, calc((var(--sp,1) - var(--t)) * 9 + 1), 1);transform:translateY(calc(clamp(0, (var(--t) - var(--sp,1)) * 320, 36) * 1px));transition:opacity .3s linear,transform .3s linear}
.zt-bx{opacity:clamp(0, calc((var(--sp,1) - var(--t)) * 9 + 1), 1);transform:translateX(calc(clamp(0, (var(--t) - var(--sp,1)) * 500, 60) * var(--dir) * -1px));transition:opacity .3s linear,transform .3s linear,background-color .8s var(--ease-std)}
.zt-bn{opacity:clamp(0, calc((var(--sp,1) - var(--t)) * 9 + 1), 1);transform:translateY(calc(clamp(0, (var(--t) - var(--sp,1)) * 500, 60) * -1px));transition:opacity .3s linear,transform .3s linear}
.zt-bk{opacity:clamp(0, calc((var(--sp,1) - var(--t)) * 12 + 1), 1);transform:scale(calc(.6 + clamp(0, (var(--sp,1) - var(--t)) * 12 + 1, 1) * .4));transition:opacity .25s linear,transform .25s linear}
.zt-bk-inv{opacity:calc(1 - clamp(0, (var(--sp,1) - var(--t)) * 12 + 1, 1));transition:opacity .25s linear}
.zt-bdraw{stroke-dashoffset:calc((1 - clamp(0, (var(--sp,1) - var(--t)) * var(--k,3), 1)) * var(--len,700) * 1px);transition:stroke-dashoffset .3s linear}
.zt-bbar{transform:scaleX(clamp(0, (var(--sp,1) - var(--t)) * var(--k,4), 1));transform-origin:var(--start) 50%;transition:transform .3s linear}
.zt-dim{opacity:calc(1 - clamp(0, (var(--sp,1) - var(--t)) * 8, 1) * .5);transition:opacity .3s linear}
.zt-loop-ping{animation:zt-r-ping 1.8s ease-out infinite}
.zt-loop-drop{animation:zt-r-drop 2.6s var(--ease-out) infinite both}
.zt-loop-badge{animation:zt-r-badge 2.6s cubic-bezier(.34,1.56,.64,1) infinite both}
/* Animated stat icons: each one acts out its number. */
.zt-ic *{transform-box:fill-box;transform-origin:center}
.zt-ic-heart{animation:zt-ic-beat 2.2s ease-in-out infinite}
.zt-ic-trace{animation:zt-ic-trace 2.2s linear infinite}
.zt-ic-scan{animation:zt-ic-scan 2.4s ease-in-out infinite alternate}
.zt-ic-o{animation:zt-ic-o 6s var(--ease-out) infinite both}
.zt-ic-o2{animation-delay:-4s}
.zt-ic-o3{animation-delay:-2s}
.zt-ic-d{animation:zt-ic-d 6s ease infinite both}
.zt-ic-d2{animation-delay:-4s}
.zt-ic-d3{animation-delay:-2s}
.zt-ic-grow{animation:zt-ic-grow 3.6s var(--ease-std) infinite}
.zt-ic-end{animation:zt-ic-end 3.6s var(--ease-out) infinite}
.zt-ic-bob{animation:zt-ic-bob 2s ease-in-out infinite}
@keyframes zt-ic-beat{0%{transform:scale(1)}40%{transform:scale(1)}48%{transform:scale(1.1)}56%{transform:scale(.97)}64%{transform:scale(1)}100%{transform:scale(1)}}
@keyframes zt-ic-trace{from{stroke-dashoffset:18}to{stroke-dashoffset:-60}}
@keyframes zt-ic-scan{from{transform:translateY(11px)}to{transform:translateY(37px)}}
@keyframes zt-ic-o{0%{opacity:0;transform:scale(.5)}5%{opacity:1;transform:scale(1.08)}9%{opacity:1;transform:none}29%{opacity:1;transform:none}33.3%{opacity:0;transform:scale(.6)}100%{opacity:0;transform:scale(.6)}}
@keyframes zt-ic-d{0%{opacity:.25}4%{opacity:1}30%{opacity:1}34%{opacity:.25}100%{opacity:.25}}
@keyframes zt-ic-grow{0%{stroke-dashoffset:var(--len,22);opacity:1}40%{stroke-dashoffset:0;opacity:1}86%{stroke-dashoffset:0;opacity:1}95%{stroke-dashoffset:0;opacity:0}96%{stroke-dashoffset:var(--len,22);opacity:0}100%{stroke-dashoffset:var(--len,22);opacity:1}}
@keyframes zt-ic-end{0%{transform:scale(0)}38%{transform:scale(0)}46%{transform:scale(1.45)}54%{transform:scale(1)}86%{transform:scale(1)}95%{transform:scale(0)}100%{transform:scale(0)}}
@keyframes zt-ic-bob{0%{transform:translateY(-2.5px)}50%{transform:translateY(2.5px)}100%{transform:translateY(-2.5px)}}

/* How it works: each role has its own icon, which comes alive while its step is open (desktop)
   or once the record reaches its station (phones). */
.zt-r *{transform-box:fill-box;transform-origin:center}
:is([aria-expanded="true"],[data-on]) .zt-r1 path{stroke-dasharray:8;animation:zt-r-line 2.6s var(--ease-std) infinite both}
:is([aria-expanded="true"],[data-on]) .zt-r1 path:nth-child(2){animation-delay:.25s}
:is([aria-expanded="true"],[data-on]) .zt-r1 path:nth-child(3){animation-delay:.5s}
:is([aria-expanded="true"],[data-on]) .zt-r2{animation:zt-r-ping 1.8s ease-out infinite}
:is([aria-expanded="true"],[data-on]) .zt-r3{animation:zt-r-drop 2.6s var(--ease-out) infinite both}
:is([aria-expanded="true"],[data-on]) .zt-r3b{animation:zt-r-badge 2.6s cubic-bezier(.34,1.56,.64,1) infinite both}
[data-on] .zt-r4{stroke-dasharray:12;animation:zt-r-grow 3s var(--ease-std) infinite both}
@keyframes zt-r-line{0%{stroke-dashoffset:8}25%{stroke-dashoffset:0}85%{stroke-dashoffset:0;opacity:1}95%{stroke-dashoffset:0;opacity:0}100%{stroke-dashoffset:8;opacity:0}}
@keyframes zt-r-ping{0%{opacity:.9;transform:scale(1)}100%{opacity:0;transform:scale(2.6)}}
@keyframes zt-r-drop{0%{opacity:0;transform:translateY(-3px)}18%{opacity:1;transform:none}80%{opacity:1;transform:none}100%{opacity:0;transform:none}}
@keyframes zt-r-badge{0%{transform:scale(0)}22%{transform:scale(0)}32%{transform:scale(1.3)}40%{transform:scale(1)}82%{transform:scale(1)}100%{transform:scale(0)}}
@keyframes zt-r-grow{0%{stroke-dashoffset:12}40%{stroke-dashoffset:0}85%{stroke-dashoffset:0;opacity:1}95%{opacity:0}100%{stroke-dashoffset:12;opacity:0}}

/* Phone relay: the record travels down the rail with scroll (--rp), and each station
   plays its screen once when the record reaches it. Base styles are the final state. */
.zt-rail-fill{transform-origin:50% 0;transform:scaleY(var(--rp,1));transition:transform .18s linear}
.zt-baton{top:calc(var(--rp,1) * 100%);opacity:clamp(0, calc((1 - var(--rp,1)) * 40), 1);transition:top .18s linear,opacity .2s linear}
@keyframes zt-ping{0%{opacity:1;box-shadow:0 0 0 0 rgba(19,122,127,.45)}100%{opacity:1;box-shadow:0 0 0 14px rgba(19,122,127,0)}}
@supports (animation-timeline: view()){
.zt-reveal{animation:zt-rise linear both,zt-out linear both;animation-timeline:view(),view();animation-range:entry 0% entry 90%,exit 50% exit 100%}
.zt-draw-view path,.zt-draw-view circle,.zt-draw-view rect{stroke-dasharray:var(--len,160);animation:zt-drawlen linear both;animation-timeline:view();animation-range:entry 10% cover 40%}
.zt-progress{animation:zt-scalex linear both;animation-timeline:scroll(root)}
.zt-grow-y{animation:zt-scaley linear both;animation-timeline:view();animation-range:entry 30% cover 65%}
.zt-grow-x{animation:zt-scalex linear both;animation-timeline:view();animation-range:entry 20% cover 50%}
}
@media (prefers-reduced-motion: reduce){
.zt *,.zt *::before,.zt *::after{animation:none !important;transition:none !important}
.zt-dialog::backdrop{animation:none !important}
.zt-intro{display:none !important}
}
/* The intro plays once per session: intro-gate.js sets zt-intro-on (BUILD_SPEC §6.1), like the boards' sc-if. */
html:not(.zt-intro-on) .zt-intro{display:none !important}
/* Mobile-Home.dc.html, scoped (BUILD_SPEC §3) */
.zt-m-home .zt-in{animation:zt-rise .85s var(--ease-out) both;animation-delay:var(--d,0s)}
.zt-has-intro .zt-m-home .zt-in{animation-delay:calc(var(--d,0s) + 1.1s)}
.zt-m-home .zt-head-in{animation:zt-headin .8s var(--ease-out) .1s both}
.zt-has-intro .zt-m-home .zt-head-in{animation-delay:1.15s}
.zt-m-home .zt-wup{display:inline-block;margin-inline-end:.24em;animation:zt-wordup 1s var(--ease-out) both;animation-delay:var(--d,0s)}
.zt-has-intro .zt-m-home .zt-wup{animation-delay:calc(var(--d,0s) + 1.1s)}
.zt-m-home .zt-uline{position:absolute;inset-inline:0;bottom:.06em;height:.09em;border-radius:.05em;background:#137A7F;opacity:.28;transform-origin:var(--start) 50%;animation:zt-scalex .9s var(--ease-out) both;animation-delay:calc(var(--d,0s) + .55s)}
.zt-has-intro .zt-m-home .zt-uline{animation-delay:calc(var(--d,0s) + 1.65s)}
.zt-m-home .zt-chipcycle{animation:zt-chipcycle 12s var(--ease-out) infinite both;animation-delay:calc(1.2s + var(--d,0s))}
.zt-m-home .zt-live{animation:zt-live 1.8s ease-out infinite}
.zt-m-home .zt-float{animation:zt-float-home 7s ease-in-out infinite}
.zt-m-home .zt-sway{animation:zt-sway 10s ease-in-out infinite}
.zt-m-home .zt-ring{animation:zt-ring 4.8s cubic-bezier(.2,.6,.3,1) infinite}
.zt-m-home .zt-beat-loop{transform-box:fill-box;transform-origin:center;animation:zt-beatloop 1.4s ease-in-out infinite}
.zt-m-home .zt-seq-a{animation:zt-sA 12s var(--ease-std) 1.2s infinite both}
.zt-m-home .zt-seq-b{animation:zt-sB 12s var(--ease-std) 1.2s infinite both}
.zt-m-home .zt-seq-k1{animation:zt-k1 12s var(--ease-out) 1.2s infinite both}
.zt-m-home .zt-seq-k2{animation:zt-k2 12s var(--ease-out) 1.2s infinite both}
.zt-m-home .zt-seq-k3{animation:zt-k3 12s var(--ease-out) 1.2s infinite both}
.zt-m-home .zt-seq-l1{transform-origin:50% 0;animation:zt-l1 12s var(--ease-std) 1.2s infinite both}
.zt-m-home .zt-seq-l2{transform-origin:50% 0;animation:zt-l2 12s var(--ease-std) 1.2s infinite both}
.zt-m-home .zt-seq-f1{animation:zt-f1 12s var(--ease-std) 1.2s infinite both}
.zt-m-home .zt-seq-f2{animation:zt-f2 12s var(--ease-std) 1.2s infinite both}
.zt-m-home .zt-seq-f3{animation:zt-f3 12s var(--ease-std) 1.2s infinite both}
.zt-m-home .zt-seq-badge1{animation:zt-badge1 12s var(--ease-std) 1.2s infinite both}
.zt-m-home .zt-seq-badge2{transform-origin:center;animation:zt-badge2 12s var(--ease-out) 1.2s infinite both}
.zt-m-home .zt-seq-chip{transform-origin:center;animation:zt-bchip 12s var(--ease-out) 1.2s infinite both}
.zt-m-home .zt-seq-burst{animation:zt-burst 12s ease-out 1.2s infinite both}
.zt-m-home .zt-seq-curve{animation:zt-bcurve 12s var(--ease-std) 1.2s infinite both}
.zt-m-home .zt-seq-next{animation:zt-bnext 12s var(--ease-out) 1.2s infinite both}
.zt-m-home .zt-seq-notif{animation:zt-notif2 12s var(--ease-out) 1.2s infinite both}
.zt-m-home .zt-ic-heart{animation:zt-ic-beat 2.2s ease-in-out infinite}
.zt-m-home .zt-ic-trace{animation:zt-ic-trace 2.2s linear infinite}
.zt-m-home .zt-ic-scan{animation:zt-ic-scan 2.4s ease-in-out infinite alternate}
.zt-m-home .zt-ic-o{animation:zt-ic-o 6s var(--ease-out) infinite both}
.zt-m-home .zt-ic-o2{animation-delay:-4s}
.zt-m-home .zt-ic-o3{animation-delay:-2s}
.zt-m-home .zt-ic-d{animation:zt-ic-d 6s ease infinite both}
.zt-m-home .zt-ic-d2{animation-delay:-4s}
.zt-m-home .zt-ic-d3{animation-delay:-2s}
.zt-m-home .zt-ic-grow{animation:zt-ic-grow 3.6s var(--ease-std) infinite}
.zt-m-home .zt-ic-end{animation:zt-ic-end 3.6s var(--ease-out) infinite}
.zt-m-home .zt-ic-bob{animation:zt-ic-bob 2s ease-in-out infinite}
.zt-m-home [data-on] .zt-a-rise{animation:zt-rise .6s var(--ease-out) var(--d,0s) both}
.zt-m-home [data-on] .zt-a-cnt{animation:zt-count 1.3s var(--ease-out) var(--d,.15s) both}
@keyframes zt-float-home{0%{transform:translateY(0)}50%{transform:translateY(-7px)}100%{transform:translateY(0)}}
@keyframes zt-sway{0%{transform:perspective(1000px) rotateY(-6deg) rotateX(3deg)}50%{transform:perspective(1000px) rotateY(6deg) rotateX(1deg)}100%{transform:perspective(1000px) rotateY(-6deg) rotateX(3deg)}}
@keyframes zt-iris-home{from{--r:0px}to{--r:1000px}}
/* Mobile-Menu.dc.html, scoped (BUILD_SPEC §3) */
/* The board root is the panel itself (#menu.zt-m-menu.zt-open). The reveal starts at the button that opened it (--ox, --oy, from menu.js); --rr grows the 900px circle on screens whose far corner is further away. */
.zt-m-menu.zt-open{animation:zt-open .42s cubic-bezier(.2,.8,.2,1) both}
/* Closing is not drawn in the mockup (BUILD_SPEC §6.3): the reveal reverses, items fade. */
.zt-m-menu.zt-closing{animation:zt-shut .28s cubic-bezier(.4,0,1,1) both}
.zt-m-menu.zt-closing .zt-item{animation:zt-item-out .15s linear both}
.zt-m-menu .zt-item{animation:zt-item .4s var(--ease-out) both;animation-delay:calc(var(--i) * 28ms + 50ms)}
.zt-m-menu .zt-x1{animation:zt-x1 .32s var(--spring) .06s both}
.zt-m-menu .zt-x2{animation:zt-x2 .32s var(--spring) .06s both}
.zt-m-menu .zt-sweep{stroke-dashoffset:80;animation:zt-sweep 4.5s linear 1.2s infinite}
.zt-m-menu .zt-live{animation:zt-live-menu 1.8s ease-out infinite}
@keyframes zt-open{from{clip-path:circle(22px at var(--ox,42px) var(--oy,30px))}to{clip-path:circle(var(--rr,900px) at var(--ox,42px) var(--oy,30px))}}
@keyframes zt-shut{from{clip-path:circle(var(--rr,900px) at var(--ox,42px) var(--oy,30px))}to{clip-path:circle(22px at var(--ox,42px) var(--oy,30px))}}
@keyframes zt-item-out{to{opacity:0}}
@keyframes zt-item{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
@keyframes zt-x1{from{transform:translateY(-3px) rotate(0)}to{transform:rotate(45deg)}}
@keyframes zt-x2{from{transform:translateY(3px) rotate(0)}to{transform:rotate(-45deg)}}
@keyframes zt-sweep{from{stroke-dashoffset:80}to{stroke-dashoffset:-560}}
@keyframes zt-live-menu{0%{box-shadow:0 0 0 0 rgba(19,122,127,.5)}100%{box-shadow:0 0 0 7px rgba(19,122,127,0)}}
/* Mobile-Benefits.dc.html, scoped (BUILD_SPEC §3) */
.zt-m-benefits .zt-sw{opacity:clamp(.14, calc((var(--sp,1) - var(--t)) * 26 + 1), 1);transition:opacity .25s linear,color .8s var(--ease-std)}
.zt-m-benefits .zt-bi{opacity:clamp(0, calc((var(--sp,1) - var(--t)) * 10 + 1), 1);transform:translateY(calc(clamp(0, (var(--t) - var(--sp,1)) * 360, 30) * 1px));transition:opacity .3s linear,transform .3s linear}
.zt-m-benefits .zt-bx{opacity:clamp(0, calc((var(--sp,1) - var(--t)) * 10 + 1), 1);transform:translateX(calc(clamp(0, (var(--t) - var(--sp,1)) * 500, 46) * var(--dir) * -1px));transition:opacity .3s linear,transform .3s linear,background-color .8s var(--ease-std)}
.zt-m-benefits .zt-bn{opacity:clamp(0, calc((var(--sp,1) - var(--t)) * 10 + 1), 1);transform:translateY(calc(clamp(0, (var(--t) - var(--sp,1)) * 500, 50) * -1px));transition:opacity .3s linear,transform .3s linear}
.zt-m-benefits .zt-bk{opacity:clamp(0, calc((var(--sp,1) - var(--t)) * 14 + 1), 1);transform:scale(calc(.6 + clamp(0, (var(--sp,1) - var(--t)) * 14 + 1, 1) * .4));transition:opacity .25s linear,transform .25s linear}
.zt-m-benefits .zt-bk-inv{opacity:calc(1 - clamp(0, (var(--sp,1) - var(--t)) * 14 + 1, 1));transition:opacity .25s linear}
.zt-m-benefits .zt-bdraw{stroke-dashoffset:calc((1 - clamp(0, (var(--sp,1) - var(--t)) * var(--k,3), 1)) * var(--len,700) * 1px);transition:stroke-dashoffset .3s linear}
.zt-m-benefits .zt-bbar{transform:scaleX(clamp(0, (var(--sp,1) - var(--t)) * var(--k,4), 1));transform-origin:var(--start) 50%;transition:transform .3s linear}
.zt-m-benefits .zt-cue{animation:zt-cue-benefits 1.8s var(--ease-std) infinite}
.zt-m-benefits .zt-dim{opacity:calc(1 - clamp(0, (var(--sp,1) - var(--t)) * 8, 1) * .5);transition:opacity .3s linear}
.zt-m-benefits .zt-ic-grow{animation:zt-ic-grow 3.6s var(--ease-std) infinite}
.zt-m-benefits .zt-ic-end{animation:zt-ic-end 3.6s var(--ease-out) infinite}
.zt-m-benefits .zt-loop-ping{animation:zt-r-ping 1.8s ease-out infinite}
.zt-m-benefits .zt-loop-drop{animation:zt-r-drop 2.6s var(--ease-out) infinite both}
.zt-m-benefits .zt-loop-badge{animation:zt-r-badge 2.6s cubic-bezier(.34,1.56,.64,1) infinite both}
@keyframes zt-cue-benefits{0%{opacity:0;transform:translateY(-4px)}30%{opacity:1}100%{opacity:0;transform:translateY(8px)}}
/* Mobile-Story.dc.html, scoped (BUILD_SPEC §3) */
.zt-m-story .zt-in{animation:zt-rise .7s var(--ease-out) both;animation-delay:var(--d,0s)}
.zt-m-story .zt-head-in{animation:zt-headin .7s var(--ease-out) both}
.zt-m-story .zt-wup{display:inline-block;margin-inline-end:.24em;animation:zt-wordup .9s var(--ease-out) both;animation-delay:var(--d,0s)}
.zt-m-story .zt-live{animation:zt-live-relay 1.8s ease-out infinite}
.zt-m-story .zt-rail-fill{transform-origin:50% 0;transform:scaleY(var(--rp,1));transition:transform .18s linear}
.zt-m-story .zt-baton{top:calc(var(--rp,1) * 100%);opacity:clamp(0, calc((1 - var(--rp,1)) * 40), 1);transition:top .18s linear,opacity .2s linear}
.zt-m-story [data-on] .zt-node::after{animation:zt-ping 1.1s ease-out .05s both}
.zt-m-story [data-on] .zt-r1 path{stroke-dasharray:8;animation:zt-r-line 2.6s var(--ease-std) infinite both}
.zt-m-story [data-on] .zt-r1 path:nth-child(2){animation-delay:.25s}
.zt-m-story [data-on] .zt-r1 path:nth-child(3){animation-delay:.5s}
.zt-m-story [data-on] .zt-r2{animation:zt-r-ping 1.8s ease-out infinite}
.zt-m-story [data-on] .zt-r3{animation:zt-r-drop 2.6s var(--ease-out) infinite both}
.zt-m-story [data-on] .zt-r3b{animation:zt-r-badge 2.6s var(--spring) infinite both}
.zt-m-story [data-on] .zt-r4{stroke-dasharray:12;animation:zt-r-grow 3s var(--ease-std) infinite both}
@keyframes zt-live-relay{0%{box-shadow:0 0 0 0 rgba(19,122,127,.5)}100%{box-shadow:0 0 0 7px rgba(19,122,127,0)}}
/* Mobile-Outcomes.dc.html, scoped (BUILD_SPEC §3) */
.zt-m-outcomes .zt-in{animation:zt-rise .7s var(--ease-out) both;animation-delay:var(--d,0s)}
.zt-m-outcomes .zt-head-in{animation:zt-headin .7s var(--ease-out) both}
.zt-m-outcomes .zt-wup{display:inline-block;margin-inline-end:.24em;animation:zt-wordup .9s var(--ease-out) both;animation-delay:var(--d,0s)}
@keyframes zt-fill-a{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes zt-fill-b{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes zt-burst-a{0%{opacity:.55;box-shadow:0 0 0 0 currentColor}100%{opacity:0;box-shadow:0 0 0 22px currentColor}}
@keyframes zt-burst-b{0%{opacity:.55;box-shadow:0 0 0 0 currentColor}100%{opacity:0;box-shadow:0 0 0 22px currentColor}}
@keyframes zt-cpop-a{0%{transform:scale(.9)}55%{transform:scale(1.05)}100%{transform:none}}
@keyframes zt-cpop-b{0%{transform:scale(.9)}55%{transform:scale(1.05)}100%{transform:none}}
/* Mobile-Contact.dc.html, scoped (BUILD_SPEC §3) */
.zt-m-contact .zt-in{animation:zt-rise .7s var(--ease-out) both;animation-delay:var(--d,0s)}
.zt-m-contact .zt-mount{animation:zt-rise .45s var(--ease-out) both;animation-delay:var(--d,0s)}
.zt-m-contact .zt-head-in{animation:zt-headin .7s var(--ease-out) both}
.zt-m-contact .zt-wup{display:inline-block;margin-inline-end:.24em;animation:zt-wordup .9s var(--ease-out) both;animation-delay:var(--d,0s)}
.zt-m-contact .zt-fl-ok-ic{position:absolute;inset-inline-end:14px;top:50%;margin-top:-11px;width:22px;height:22px;border-radius:50%;background:#E7F3EC;color:#1F6B4B;display:flex;align-items:center;justify-content:center;animation:zt-pop-contact .45s var(--spring) both}
.zt-m-contact .zt-spin{animation:zt-spin .8s linear infinite}
@keyframes zt-shake-a{0%{transform:translateX(0)}20%{transform:translateX(-6px)}40%{transform:translateX(5px)}60%{transform:translateX(-3px)}80%{transform:translateX(2px)}100%{transform:translateX(0)}}
@keyframes zt-shake-b{0%{transform:translateX(0)}20%{transform:translateX(-6px)}40%{transform:translateX(5px)}60%{transform:translateX(-3px)}80%{transform:translateX(2px)}100%{transform:translateX(0)}}
@keyframes zt-pop-contact{0%{transform:scale(.5);opacity:0}65%{transform:scale(1.12);opacity:1}100%{transform:scale(1);opacity:1}}
@keyframes zt-spin{to{transform:rotate(360deg)}}
@keyframes zt-ring-contact{0%{opacity:.6;transform:scale(1)}100%{opacity:0;transform:scale(1.6)}}
/* Privacy dialog: .3s in, .2s out (the mockup has no dialog; the menu's easings). */
.zt-dialog[open]{animation:zt-dialog-in .3s var(--ease-out) both}
.zt-dialog[open]::backdrop{animation:zt-fade-in .3s var(--ease-std) both}
.zt-dialog.zt-closing{animation:zt-dialog-out .2s cubic-bezier(.4,0,1,1) both}
.zt-dialog.zt-closing::backdrop{animation:zt-fade-out .2s var(--ease-std) both}
@keyframes zt-dialog-in{from{opacity:0;transform:translateY(16px) scale(.98)}to{opacity:1;transform:none}}
@keyframes zt-dialog-out{from{opacity:1;transform:none}to{opacity:0;transform:translateY(8px) scale(.98)}}
@keyframes zt-fade-in{from{opacity:0}to{opacity:1}}
@keyframes zt-fade-out{from{opacity:1}to{opacity:0}}
}
