@import './tokens.css'; *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; } html { direction: ltr; font-size: 16px; font-family: Vazirmatn, sans-serif; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; scrollbar-gutter: stable; overflow-y: auto; scrollbar-width: thin; scrollbar-color: rgba(174, 185, 210, 0.28) #040817; } body { margin: 0; min-height: 100vh; min-height: 100dvh; direction: rtl; background: #040817; color: var(--text-main); overflow-x: hidden; overflow-y: auto; } ::-webkit-scrollbar { width: 8px; } ::-webkit-scrollbar-track { background: #040817; } ::-webkit-scrollbar-thumb { background: rgba(174, 185, 210, 0.28); border-radius: 999px; } ::-webkit-scrollbar-thumb:hover { background: rgba(174, 185, 210, 0.42); } #app { min-height: 100vh; min-height: 100dvh; display: flex; justify-content: center; position: relative; z-index: 1; background: #040817; } .app-shell { width: 100%; max-width: var(--app-max-width); min-height: 100dvh; background: #040817; position: relative; overflow-x: hidden; overflow-y: visible; box-shadow: none; } .page-content { padding: var(--page-padding); padding-bottom: calc(var(--nav-height) + var(--nav-bottom-offset) + env(safe-area-inset-bottom, 0px) + 20px); min-height: 100dvh; } .page-content--no-nav { padding-bottom: calc(env(safe-area-inset-bottom, 0px) + 20px); } .page-content--flush-top { padding-top: 0; } /* Page transitions — opacity only to prevent scroll overflow flash */ .page-enter-active, .page-leave-active { transition: opacity var(--transition-normal); } .page-enter-from, .page-leave-to { opacity: 0; } @media (prefers-reduced-motion: reduce) { .page-enter-active, .page-leave-active { transition: opacity 0.15s ease; } .page-enter-from, .page-leave-to { transform: none; } *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } } button { font-family: inherit; cursor: pointer; border: none; background: none; } a { color: inherit; text-decoration: none; } img, svg { display: block; max-width: 100%; } .sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; border: 0; } :focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; } /* Shared game card base */ .game-card-base { background: var(--card-bg); border: var(--card-border); border-radius: var(--radius-lg); box-shadow: var(--shadow-card); } /* Typography utilities */ .text-number-lg { font-size: clamp(1.5rem, 6vw, 2rem); font-weight: 800; line-height: 1.2; } .text-number-md { font-size: clamp(1.125rem, 4.5vw, 1.375rem); font-weight: 800; line-height: 1.2; } .text-label { font-size: 0.75rem; color: var(--text-muted); font-weight: 600; } .text-page-title { font-size: 1.1875rem; font-weight: 800; } /* Animations */ .card-enter { animation: cardEnter 0.4s ease backwards; } @keyframes cardEnter { from { opacity: 0; } to { opacity: 1; } } @keyframes pulseGlow { 0%, 100% { box-shadow: 0 0 14px rgba(244, 174, 33, 0.35), 0 0 28px rgba(118, 55, 201, 0.2); } 50% { box-shadow: 0 0 22px rgba(244, 174, 33, 0.6), 0 0 40px rgba(118, 55, 201, 0.35); } } @keyframes floatSparkle { 0%, 100% { opacity: 0.4; transform: translateY(0) scale(1); } 50% { opacity: 1; transform: translateY(-4px) scale(1.1); } } @keyframes coinPop { 0% { transform: scale(1); } 50% { transform: scale(1.12); } 100% { transform: scale(1); } } .coin-animate { animation: coinPop 0.4s ease; } .sparkle { animation: floatSparkle 2.5s ease-in-out infinite; }