body { font-family: 'Inter', sans-serif; background-color: #eef2f6; -webkit-tap-highlight-color: transparent; overscroll-behavior-y: contain; }

html, body {
    overflow: hidden !important;
    height: 100% !important;
    width: 100% !important;
    margin: 0 !important;
    padding: 0 !important;
}

.pwa-viewport-frame {
    width: 100%;
    height: 100%;
    overflow: hidden;
    position: relative;
}

.pwa-scroll-canvas {
    overflow-y: scroll;
    overflow-x: hidden;
    height: 100%;
    width: calc(100% + 20px);
    padding-right: 20px;
    -ms-overflow-style: none !important;
    scrollbar-width: none !important;
}

.pwa-scroll-canvas::-webkit-scrollbar {
    display: none !important;
    width: 0 !important;
    height: 0 !important;
    -webkit-appearance: none !important;
}


.loader { border: 3px solid #f3f3f3; border-top: 3px solid #2563eb; border-radius: 50%; width: 40px; height: 40px; animation: spin 1s linear infinite; }
@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }

.fade-in { animation: slideUp 0.4s cubic-bezier(0.16, 1, 0.3, 1); }
@keyframes slideUp { from { opacity: 0; transform: translateY(20px) scale(0.98); } to { opacity: 1; transform: translateY(0) scale(1); } }

.pulse-soft { animation: pulseSoft 2s infinite ease-in-out; }
@keyframes pulseSoft { 0%, 100% { transform: scale(1); opacity: 1; } 50% { transform: scale(0.95); opacity: 0.8; } }

.slide-in-right { animation: slideInRight 0.3s cubic-bezier(0.16, 1, 0.3, 1); }
@keyframes slideInRight { from { opacity: 0; transform: translateX(20px); } to { opacity: 1; transform: translateX(0); } }

@keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }

.page-transition-forward {
    animation: pageSlideInRight 0.35s cubic-bezier(0.22, 1, 0.36, 1);
}
@keyframes pageSlideInRight {
    from { opacity: 0; transform: translateX(60px); }
    to   { opacity: 1; transform: translateX(0); }
}

.page-transition-back {
    animation: pageSlideInLeft 0.35s cubic-bezier(0.22, 1, 0.36, 1);
}
@keyframes pageSlideInLeft {
    from { opacity: 0; transform: translateX(-60px); }
    to   { opacity: 1; transform: translateX(0); }
}

.page-transition-fade {
    animation: pageFadeScale 0.3s cubic-bezier(0.22, 1, 0.36, 1);
}
@keyframes pageFadeScale {
    from { opacity: 0; transform: scale(0.96); }
    to   { opacity: 1; transform: scale(1); }
}

@keyframes shimmer { 
    0% { background-position: -200% 0; } 
    100% { background-position: 200% 0; } 
}
.skeleton { 
    background: linear-gradient(90deg, #e2e8f0 20%, #eff6ff 50%, #e2e8f0 80%); 
    background-size: 200% 100%; 
    animation: shimmer 1.4s ease-in-out infinite; 
    border-radius: 14px; 
}
