/* Vibrozz 2 — motion (2.3), see motion.js. Loaded after every other stylesheet. */
:root{--e-spring:cubic-bezier(.2,.9,.3,1.2);--e-pop:cubic-bezier(.2,1.5,.4,1);--e-out:cubic-bezier(.2,.8,.2,1);--e-in:cubic-bezier(.4,0,1,1);--e-sheet:cubic-bezier(.2,.9,.25,1.06)}

/* 1. instant press: down in 90 ms, spring back in 260 ms; no tap delay, no grey tap flash */
.btn,.icon-btn,.chip,.seg button,.tabs button,.mi,.v-streak,.v-me,.v-nav a,.v-tabbar a,.toggle,.ct-send,.ac-sst,.v-brand{touch-action:manipulation;-webkit-tap-highlight-color:transparent}
.btn{transition:background .12s,color .12s,box-shadow .12s,transform .26s var(--e-pop)}
.icon-btn,.chip,.v-streak,.ct-send,.v-me,.ac-sst{transition:background .12s,color .12s,transform .26s var(--e-pop)}
.btn:active:not(:disabled){transform:none}
.btn.v-down:not(:disabled),.btn.v-down:active:not(:disabled){transform:scale(.95);transition:background .12s,transform .09s cubic-bezier(.3,0,.5,1)}
.btn.lg.v-down:not(:disabled),.btn.full.v-down:not(:disabled){transform:scale(.97)}
.icon-btn.v-down,.v-streak.v-down,.ct-send.v-down:not(:disabled){transform:scale(.9);transition:transform .09s cubic-bezier(.3,0,.5,1)}
.chip.v-down,.seg button.v-down,.tabs button.v-down,.v-me.v-down,.ac-sst.v-down{transform:scale(.96);transition:transform .09s cubic-bezier(.3,0,.5,1)}
.v-nav a,.v-tabbar a,.mi{transition:background .12s,color .12s,transform .26s var(--e-pop)}
.v-nav a.v-down,.v-tabbar a.v-down,.mi.v-down{transform:scale(.97);transition:transform .09s cubic-bezier(.3,0,.5,1)}

/* 2. ripple */
.v-rph{position:relative;overflow:hidden;isolation:isolate}
.v-rpl{position:absolute;border-radius:50%;background:color-mix(in srgb,var(--tx) 8%,transparent);pointer-events:none;z-index:-1}
.list .it.click,.tr-pos{transition:background .12s}

/* 3. toggle: a springy knob that stretches while pressed */
.toggle::after{transition:left .28s cubic-bezier(.3,1.45,.5,1),width .16s var(--e-out)}
.toggle{transition:background .2s}
.toggle.v-down::after{width:28px}
.toggle.on.v-down::after{left:15px}

/* 3b. segment highlight sliding to the new option (motion.js puts .v-seg-ind under the buttons for 260 ms) */
.seg{position:relative;isolation:isolate}
.seg button{position:relative;z-index:1;transition:color .15s}
.v-seg-ind{position:absolute;z-index:0;border-radius:9px;background:var(--card);box-shadow:0 1px 3px rgba(0,0,0,.1);pointer-events:none;transform-origin:left center}
:root[data-vz-theme=dark] .v-seg-ind{background:var(--soft-2);box-shadow:none}
.v-seg-ind.acc,:root[data-vz-theme=dark] .v-seg-ind.acc{background:var(--acc)}
.seg.v-seg-anim button.on,.seg.v-seg-anim button.on.real{background:transparent!important;box-shadow:none!important}
.chips .chip{transition:background .15s,color .15s,transform .26s var(--e-pop)}

/* 4. dialogs, menus, panels in (out is played by motion.js) */
@keyframes vdlg{from{opacity:0;transform:translateY(14px) scale(.95)}}
@keyframes vsheet{from{transform:translateY(100%)}}
@keyframes vscrim{from{opacity:0}}
.v-scrim{animation:vscrim .18s linear}
.v-dialog{animation:vdlg .26s var(--e-spring)}
.v-leaving{pointer-events:none!important}
.v-nf,.v-chatpop{animation:vdlg .24s var(--e-spring);transform-origin:calc(100% - 24px) -6px}
@media (max-width:760px){
  .v-scrim .v-dialog{animation:vsheet .34s var(--e-sheet)}
  .v-nf,.v-chatpop{animation:vsheet .34s var(--e-sheet)}
  .v-grab{display:grid;place-items:center;height:22px;margin:-14px 0 -8px;cursor:grab;touch-action:none}
  .v-grab i{width:38px;height:5px;border-radius:3px;background:var(--soft-2)}
  .v-flung{transition:none!important}
}
@media (min-width:761px){.v-grab{display:none}}

/* 5. toasts: progress until they close */
.v-toast{position:relative;overflow:hidden;animation:none}
.v-tp{position:absolute;left:0;right:0;bottom:0;height:3px;background:rgba(255,255,255,.3);transform-origin:left}

/* 8. top load bar */
.v-pbar{position:fixed;left:0;right:0;top:0;height:3px;z-index:120;background:var(--acc-2);transform-origin:left;transform:scaleX(0);pointer-events:none;box-shadow:0 0 8px color-mix(in srgb,var(--acc) 70%,transparent)}
:root[data-vz-theme=dark] .v-pbar{background:var(--acc)}

/* 9. pull to refresh (installed app) */
.v-ptr{position:fixed;top:env(safe-area-inset-top,0px);left:0;right:0;height:50px;display:grid;place-items:center;z-index:110;pointer-events:none;transform:translateY(-50px)}
.v-ptr-c{width:38px;height:38px;border-radius:50%;background:var(--card);box-shadow:0 2px 10px rgba(16,24,40,.18);display:grid;place-items:center;color:var(--tx-2);opacity:0;transition:background-color .15s,color .15s}
.v-ptr-c.ready{background:var(--acc);color:var(--on-acc)}
.v-ptr-c.busy svg{animation:vspin .7s linear infinite}

/* 10. rolling digits */
.v-od{display:inline-flex;height:1.15em;line-height:1.15em;vertical-align:top}
.v-od>span{display:inline-block;height:1.15em}
.v-od-c{overflow:hidden;-webkit-mask:linear-gradient(transparent,#000 14%,#000 86%,transparent);mask:linear-gradient(transparent,#000 14%,#000 86%,transparent)}
.v-od-s{display:flex;flex-direction:column;transition:transform .38s cubic-bezier(.2,.9,.3,1.1)}
.v-od-s>i{font-style:normal;display:block;height:1.15em;text-align:center}

/* 11. celebrations */
.v-confetti{position:fixed;inset:0;width:100vw;height:100vh;pointer-events:none;z-index:200}
.v-spk{position:absolute;left:50%;top:30%;width:5px;height:5px;margin:-2.5px;border-radius:50%;background:#FFB13B;pointer-events:none;z-index:2}
.v-streak{overflow:visible}
.v-streak .fl{position:relative}

/* optimistic close: the row leaves at once */
.tr-pos.v-gone{display:none!important}

@media (prefers-reduced-motion:reduce){
  .v-scrim,.v-dialog,.v-nf,.v-chatpop,.v-scrim .v-dialog{animation-duration:.12s;animation-timing-function:linear}
  .btn.v-down,.icon-btn.v-down,.chip.v-down,.seg button.v-down,.mi.v-down{transform:none!important}
  .v-od-s{transition:none}
}
