@keyframes fadeUp{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.animate-page{animation:fadeUp .3s ease-out both;will-change:opacity,transform}@keyframes slideDown{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.animate-slide-down{animation:slideDown .2s ease-out}@keyframes cardIn{0%{opacity:0;transform:translateY(16px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.animate-card{animation:cardIn .35s cubic-bezier(.16,1,.3,1) both}@keyframes overlayIn{0%{opacity:0}to{opacity:1}}@keyframes modalIn{0%{opacity:0;transform:scale(.95) translateY(10px)}to{opacity:1;transform:scale(1) translateY(0)}}.animate-overlay{animation:overlayIn .2s ease-out}.animate-modal{animation:modalIn .3s cubic-bezier(.16,1,.3,1)}@keyframes pulseDot{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.6);opacity:.5}}.animate-pulse-dot{animation:pulseDot 1.5s ease-in-out infinite}@keyframes shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.skeleton{background:linear-gradient(90deg,#f1f5f9 25%,#e2e8f0,#f1f5f9 75%);background-size:200% 100%;animation:shimmer 1.5s ease-in-out infinite;border-radius:8px}#reader>div:not(video):not(:has(video)){display:none!important}#reader video~video{display:none!important}button,a,[role=button]{-webkit-tap-highlight-color:transparent;touch-action:manipulation}.scroll-smooth{scroll-behavior:smooth;-webkit-overflow-scrolling:touch}
