/* Hub motion v1 · 7 Nov 2026 · 04 §4. Legible at rest: every rule is inside no-preference, so reduced motion paints the final state at once. Transform and opacity only. */
.u-tick path{stroke-dasharray:24;stroke-dashoffset:0}
@media (prefers-reduced-motion:no-preference){
@keyframes u-in{from{transform:translateY(var(--travel))}}
@keyframes u-rise{from{translate:0 var(--travel-s);opacity:.01}}
@keyframes u-pop{from{translate:0 24px;opacity:0}}
@keyframes u-out{to{translate:0 24px;opacity:0}}
@keyframes u-draw{from{stroke-dashoffset:24}}
@keyframes u-fade{from{opacity:0}}
@keyframes u-pls{0%{box-shadow:inset 0 0 0 999px rgba(245,200,66,.24)}100%{box-shadow:inset 0 0 0 999px rgba(245,200,66,0)}}
@keyframes u-sk{50%{opacity:.55}}
.u-cascade>*{animation:u-in var(--t-base) var(--ease-out) both;animation-delay:calc(var(--i,0)*var(--stg))}
.u-sheet:not([hidden]){animation:u-pop var(--t-sheet) var(--ease-nudge)}
.u-sheet.u-closing{animation:u-out var(--t-close) var(--ease-in) forwards}
.u-scrim:not([hidden]){animation:u-fade var(--t-base)}
.u-toast:not([hidden]){animation:u-pop var(--t-base) var(--ease-out)}
.u-tick path{animation:u-draw var(--t-draw) var(--ease-out) both}
.u-details[open] .u-body{animation:u-fade var(--t-fast)}
.u-pulse{animation:u-pls var(--t-pulse) ease-out 1}
.u-skel i{animation:u-sk 1.4s ease-in-out infinite}
.u-sh h2::before{animation:u-draw var(--t-draw) var(--ease-out) both;animation-name:u-tk}
@keyframes u-tk{from{transform:scaleY(0)}}
.u-btn,.u-chip,.u-row,.u-ftile{transition-property:background,border-color,transform;transition-duration:var(--t-press)}
@supports (animation-timeline:view()){.u-rise{animation:u-rise linear both;animation-timeline:view();animation-range:entry 0% entry 26%}}
::view-transition-old(root),::view-transition-new(root){animation-duration:var(--t-fast)}
}
