@import url('https://fonts.googleapis.com/css2?family=Cairo:wght@300;400;600;700&display=swap'); /* Mobile App Styles */ @keyframes fadeIn { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes slideUp { from { opacity: 0; transform: translateY(40px); } to { opacity: 1; transform: translateY(0); } } @keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.5; } } .animate-fade-in { animation: fadeIn 0.5s ease-out forwards; } .animate-slide-up { animation: slideUp 0.5s ease-out forwards; opacity: 0; } /* Mobile-first responsive design */ body { font-family: 'Cairo', sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; overflow-x: hidden; background-color: #f9fafb; } /* Touch-friendly buttons */ button { min-height: 44px; min-width: 44px; touch-action: manipulation; -webkit-tap-highlight-color: transparent; } button:active { transform: scale(0.98); } /* Active state for touch */ .touch-active { background-color: #f3e5f5 !important; transform: scale(0.98); } /* Mobile container */ .max-w-md { max-width: 428px; } /* Smooth scrolling */ .overflow-y-auto { -webkit-overflow-scrolling: touch; scrollbar-width: none; } .overflow-y-auto::-webkit-scrollbar { display: none; } /* Card styles */ .card { background: white; border-radius: 16px; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); transition: all 0.2s ease; } .card:active { transform: scale(0.98); box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); } /* Status bar safe area */ @supports (padding: max(0px)) { .safe-area-top { padding-top: max(44px, env(safe-area-inset-top)); } .safe-area-bottom { padding-bottom: max(34px, env(safe-area-inset-bottom)); } } /* Haptic feedback simulation */ .haptic-feedback { position: relative; } .haptic-feedback:active::after { content: ''; position: absolute; top: 50%; left: 50%; width: 20px; height: 20px; border-radius: 50%; background: rgba(156, 39, 176, 0.3); transform: translate(-50%, -50%); animation: hapticPulse 0.3s ease-out; } @keyframes hapticPulse { 0% { transform: translate(-50%, -50%) scale(0); opacity: 1; } 100% { transform: translate(-50%, -50%) scale(2); opacity: 0; } } /* Loading skeleton */ @keyframes skeleton-loading { 0% { background-position: -200px 0; } 100% { background-position: calc(200px + 100%) 0; } } .skeleton { background: linear-gradient(90deg, #f0f0f0 0px, #f8f8f8 40px, #f0f0f0 80px); background-size: 200px 100%; animation: skeleton-loading 1.2s ease-in-out infinite; } /* Pull to refresh indicator */ .pull-to-refresh { height: 60px; display: flex; align-items: center; justify-content: center; color: #9C27B0; font-weight: 600; transform: translateY(-100%); transition: transform 0.3s ease; } .pull-to-refresh.active { transform: translateY(0); } /* Notification badge */ .notification-badge { position: relative; } .notification-badge .badge { position: absolute; top: -4px; right: -4px; background: #ef4444; color: white; border-radius: 50%; width: 18px; height: 18px; display: flex; align-items: center; justify-content: center; font-size: 10px; font-weight: bold; border: 2px solid white; } /* Safe insets for iOS devices */ @supports (padding: max(0px)) { body { padding-left: env(safe-area-inset-left); padding-right: env(safe-area-inset-right); } } /* Focus states for accessibility */ button:focus-visible { outline: 2px solid #9C27B0; outline-offset: 2px; } /* Dark mode support */ @media (prefers-color-scheme: dark) { body { background-color: #1a1a1a; color: #ffffff; } .card { background: #2d2d2d; border-color: #404040; } } /* Reduced motion support */ @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } } /* Landscape orientation adjustments */ @media (orientation: landscape) and (max-height: 500px) { .max-w-md { max-width: 100%; height: 100vh; } } /* Custom scrollbar for desktop testing */ @media not (pointer: coarse) { ::-webkit-scrollbar { width: 6px; } ::-webkit-scrollbar-track { background: #f1f1f1; } ::-webkit-scrollbar-thumb { background: #9C27B0; border-radius: 3px; } }