Spaces:
Running
Running
| @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 ; | |
| 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 ; | |
| animation-iteration-count: 1 ; | |
| transition-duration: 0.01ms ; | |
| } | |
| } | |
| /* 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; | |
| } | |
| } | |