@import "./font.css"; @import "tailwindcss"; @import "tw-animate-css"; @import "shadcn/tailwind.css"; @import "@fontsource-variable/geist"; @import "@fontsource-variable/oxanium"; @custom-variant dark (&:is(.dark *)); @theme { --font-sans: "Inter", "SF Pro Display", "Segoe UI", "Helvetica Neue", sans-serif; --font-mono: "JetBrains Mono", "SFMono-Regular", "SF Mono", Consolas, monospace; --font-countdown: "Countdown", "Inter", "SF Pro Display", sans-serif; --font-jackpot-amount: "Oxanium Variable", "Countdown", "SF Pro Display", sans-serif; --color-game-bg: #07111f; --color-game-surface: #0d1b2d; --color-game-surface-strong: #12253d; --color-game-accent: #31d0ff; --color-game-accent-soft: #7ce8ff; --color-game-gold: #f5c86b; --color-game-gold-strong: #ffd66e; --color-game-danger: #ff5e7a; --color-game-success: #4fdc9b; --shadow-game-panel: 0 20px 60px rgba(2, 6, 23, 0.45), inset 0 1px 0 rgba(255, 255, 255, 0.06); } :root { --design-unit: calc(100vw / 1920); --background: oklch(1 0 0); --foreground: oklch(0.145 0 0); --card: oklch(1 0 0); --card-foreground: oklch(0.145 0 0); --popover: oklch(1 0 0); --popover-foreground: oklch(0.145 0 0); --primary: oklch(0.205 0 0); --primary-foreground: oklch(0.985 0 0); --secondary: oklch(0.97 0 0); --secondary-foreground: oklch(0.205 0 0); --muted: oklch(0.97 0 0); --muted-foreground: oklch(0.556 0 0); --accent: oklch(0.97 0 0); --accent-foreground: oklch(0.205 0 0); --destructive: oklch(0.577 0.245 27.325); --border: oklch(0.922 0 0); --input: oklch(0.922 0 0); --ring: oklch(0.708 0 0); --chart-1: oklch(0.87 0 0); --chart-2: oklch(0.556 0 0); --chart-3: oklch(0.439 0 0); --chart-4: oklch(0.371 0 0); --chart-5: oklch(0.269 0 0); --radius: 0.625rem; --sidebar: oklch(0.985 0 0); --sidebar-foreground: oklch(0.145 0 0); --sidebar-primary: oklch(0.205 0 0); --sidebar-primary-foreground: oklch(0.985 0 0); --sidebar-accent: oklch(0.97 0 0); --sidebar-accent-foreground: oklch(0.205 0 0); --sidebar-border: oklch(0.922 0 0); --sidebar-ring: oklch(0.708 0 0); } @media (max-width: 768px) { :root { --design-unit: calc(100vw / 375); } } @utility w-design-* { width: calc(var(--design-unit) * --value(integer)); } @utility h-design-* { height: calc(var(--design-unit) * --value(integer)); } @utility min-w-design-* { min-width: calc(var(--design-unit) * --value(integer)); } @utility text-design-* { font-size: calc(var(--design-unit) * --value(integer)); } @utility gap-design-* { gap: calc(var(--design-unit) * --value(integer)); } @utility pt-design-* { padding-top: calc(var(--design-unit) * --value(integer)); } @utility px-design-* { padding-left: calc(var(--design-unit) * --value(integer)); padding-right: calc(var(--design-unit) * --value(integer)); } @utility p-design-* { padding: calc(var(--design-unit) * --value(integer)); } @utility mt-design-* { margin-top: calc(var(--design-unit) * --value(integer)); } @utility mb-design-* { margin-bottom: calc(var(--design-unit) * --value(integer)); } @utility ml-design-* { margin-left: calc(var(--design-unit) * --value(integer)); } @utility mr-design-* { margin-right: calc(var(--design-unit) * --value(integer)); } @utility mx-design-* { margin-left: calc(var(--design-unit) * --value(integer)); margin-right: calc(var(--design-unit) * --value(integer)); } @utility py-design-* { padding-top: calc(var(--design-unit) * --value(integer)); padding-bottom: calc(var(--design-unit) * --value(integer)); } @utility pl-design-* { padding-left: calc(var(--design-unit) * --value(integer)); } @utility pb-design-* { padding-bottom: calc(var(--design-unit) * --value(integer)); } @utility pr-design-* { padding-right: calc(var(--design-unit) * --value(integer)); } @utility my-design-* { margin-top: calc(var(--design-unit) * --value(integer)); margin-bottom: calc(var(--design-unit) * --value(integer)); } @utility left-design-* { left: calc(var(--design-unit) * --value(integer)); } @utility top-design-* { top: calc(var(--design-unit) * --value(integer)); } @utility right-design-* { right: calc(var(--design-unit) * --value(integer)); } @layer base { html { @apply h-full w-full text-design-16 font-sans; } body { @apply m-0 h-full w-full bg-background text-foreground; } #root { @apply h-full w-full; } * { -ms-overflow-style: none; scrollbar-width: none; @apply border-border outline-ring/50; } *::-webkit-scrollbar { width: 0; height: 0; display: none; } body { background: radial-gradient(circle at top, rgba(49, 208, 255, 0.12), transparent 28%), radial-gradient( circle at bottom right, rgba(245, 200, 107, 0.1), transparent 24% ), linear-gradient(180deg, #07111f 0%, #040812 100%); color: #f8fafc; } } @layer utilities { .mobile-animal-touch-target, .mobile-animal-touch-target * { -webkit-touch-callout: none; -webkit-user-select: none; user-select: none; } .mobile-animal-touch-target img { -webkit-user-drag: none; } .auth-password-input::-ms-clear, .auth-password-input::-ms-reveal { display: none; } .auth-password-input::-webkit-caps-lock-indicator, .auth-password-input::-webkit-contacts-auto-fill-button, .auth-password-input::-webkit-credentials-auto-fill-button { display: none; pointer-events: none; visibility: hidden; } .common-neon-inset { border: 1px solid rgba(128, 223, 231, 0.65); border-radius: 5px; padding: calc(var(--design-unit) * 8) calc(var(--design-unit) * 10); box-shadow: inset 0 0 8px rgba(128, 223, 231, 0.65); color: #d5fbff; } .common-neon-inset-glow { border: 1px solid rgba(128, 223, 231, 0.65); border-radius: 5px; padding: calc(var(--design-unit) * 8) calc(var(--design-unit) * 10); background: linear-gradient(180deg, rgba(18, 44, 58, 0.92), rgba(8, 22, 34, 0.9)), radial-gradient(circle at top, rgba(128, 223, 231, 0.16), transparent 62%); box-shadow: inset 0 0 calc(var(--design-unit) * 8) rgba(128, 223, 231, 0.72), inset 0 0 calc(var(--design-unit) * 18) rgba(128, 223, 231, 0.18), 0 0 calc(var(--design-unit) * 6) rgba(128, 223, 231, 0.35), 0 0 calc(var(--design-unit) * 18) rgba(128, 223, 231, 0.24); position: relative; overflow: hidden; } .common-neon-inset-glow::before { content: ""; position: absolute; inset: 1px; border-radius: 4px; border-top: 1px solid rgba(214, 249, 252, 0.8); opacity: 0.85; pointer-events: none; } .game-setting-input-shell { border: 1px solid rgba(123, 235, 245, 0.38); border-radius: calc(var(--design-unit) * 8); background: rgba(17, 52, 67, 0.72); transition: border-color 180ms ease, box-shadow 180ms ease, background-color 180ms ease; } .game-setting-input-shell:focus-within { border-color: rgba(136, 245, 255, 0.68); box-shadow: 0 0 0 calc(var(--design-unit) * 1.2) rgba(108, 247, 255, 0.08), inset 0 0 calc(var(--design-unit) * 5) rgba(110, 255, 255, 0.06); background: rgba(19, 58, 74, 0.82); } .game-setting-input { border: none; background: transparent; padding: 0; color: #8ad6dd; box-shadow: none; outline: none; caret-color: #d9ffff; } .game-setting-input::placeholder { color: rgba(138, 214, 221, 0.58); } .boot-grid { background-image: linear-gradient(rgba(112, 255, 247, 0.12) 1px, transparent 1px), linear-gradient(90deg, rgba(112, 255, 247, 0.12) 1px, transparent 1px); background-size: calc(var(--design-unit) * 64) calc(var(--design-unit) * 64), calc(var(--design-unit) * 64) calc(var(--design-unit) * 64); mask-image: radial-gradient(circle at center, black 0%, transparent 72%); } .boot-scanline { background: linear-gradient( 180deg, transparent 0%, rgba(117, 255, 250, 0.08) 50%, transparent 100% ); animation: boot-scanline 2.6s ease-in-out infinite; } .boot-particle { animation: boot-particle-float 3.6s ease-in-out infinite; } .boot-ring { animation: boot-ring-spin 4.8s cubic-bezier(0.45, 0, 0.2, 1) infinite; box-shadow: 0 0 calc(var(--design-unit) * 24) rgba(113, 255, 247, 0.24), inset 0 0 calc(var(--design-unit) * 18) rgba(113, 255, 247, 0.12); } .boot-ring::before, .boot-ring::after { content: ""; position: absolute; left: 50%; height: calc(var(--design-unit) * 10); width: calc(var(--design-unit) * 10); border-radius: 9999px; background: #77fff8; box-shadow: 0 0 calc(var(--design-unit) * 18) rgba(119, 255, 248, 0.85); transform: translateX(-50%); } .boot-ring::before { top: calc(var(--design-unit) * -5); } .boot-ring::after { bottom: calc(var(--design-unit) * -5); } .boot-ring-delay { animation-direction: reverse; animation-duration: 6.4s; } @keyframes boot-particle-float { 0%, 100% { opacity: 0.18; transform: translate3d(0, 0, 0) scale(0.72); } 45% { opacity: 0.95; transform: translate3d( calc(var(--design-unit) * 26), calc(var(--design-unit) * -38), 0 ) scale(1.24); } } @keyframes boot-ring-spin { 0% { transform: rotate(0deg) scale(0.96); } 50% { transform: rotate(185deg) scale(1.04); } 100% { transform: rotate(360deg) scale(0.96); } } @keyframes boot-scanline { 0% { transform: translateY(-100%); } 100% { transform: translateY(100%); } } @media (prefers-reduced-motion: reduce) { .boot-particle, .boot-ring, .boot-scanline { animation: none; } } .data-loading-core::before, .data-loading-core::after { content: ""; position: absolute; border-radius: 9999px; background: #77fff8; box-shadow: 0 0 calc(var(--design-unit) * 12) rgba(119, 255, 248, 0.8); } .data-loading-core::before { top: 6%; height: calc(var(--design-unit) * 5); width: calc(var(--design-unit) * 5); } .data-loading-core::after { bottom: 10%; height: calc(var(--design-unit) * 4); width: calc(var(--design-unit) * 4); background: #fee889; box-shadow: 0 0 calc(var(--design-unit) * 12) rgba(254, 232, 137, 0.72); } .data-loading-orbit { animation: data-loading-orbit 1.25s cubic-bezier(0.45, 0, 0.2, 1) infinite; border-top-color: rgba(113, 255, 247, 0.96); border-right-color: rgba(113, 255, 247, 0.08); } .data-loading-orbit-delay { animation-duration: 1.7s; animation-direction: reverse; border-top-color: rgba(255, 232, 137, 0.86); border-left-color: rgba(255, 232, 137, 0.08); } @keyframes data-loading-orbit { 0% { transform: rotate(0deg) scale(0.98); } 50% { transform: rotate(185deg) scale(1.04); } 100% { transform: rotate(360deg) scale(0.98); } } @media (prefers-reduced-motion: reduce) { .data-loading-orbit { animation: none; } } .game-setting-input:focus, .game-setting-input:focus-visible { border: none; box-shadow: none; outline: none; } .game-panel { border: 1px solid rgba(124, 232, 255, 0.12); background: linear-gradient( 180deg, rgba(18, 37, 61, 0.88), rgba(7, 17, 31, 0.78) ); box-shadow: var(--shadow-game-panel); backdrop-filter: blur(18px); } .game-chip-glow { box-shadow: 0 0 0 1px rgba(49, 208, 255, 0.16), 0 16px 36px rgba(49, 208, 255, 0.16); } .game-gold-glow { box-shadow: 0 0 0 1px rgba(245, 200, 107, 0.2), 0 18px 40px rgba(245, 200, 107, 0.14); } .desktop-game-history-glow { filter: drop-shadow( 0 0 calc(var(--design-unit) * 4) rgba(49, 208, 255, 0.65) ) drop-shadow(0 0 calc(var(--design-unit) * 14) rgba(49, 208, 255, 0.28)); } .modal-close-glow { filter: drop-shadow( 0 0 calc(var(--design-unit) * 4) rgba(110, 255, 255, 0.95) ) drop-shadow(0 0 calc(var(--design-unit) * 12) rgba(48, 214, 255, 0.78)) drop-shadow(0 0 calc(var(--design-unit) * 24) rgba(18, 162, 255, 0.5)); } .modal-title-glow { text-shadow: 0 0 calc(var(--design-unit) * 2) rgba(224, 255, 255, 0.95), 0 0 calc(var(--design-unit) * 6) rgba(108, 247, 255, 0.82), 0 0 calc(var(--design-unit) * 14) rgba(48, 214, 255, 0.58); } .modal-title-gold-glow { text-shadow: 0 0 calc(var(--design-unit) * 2) rgba(255, 248, 235, 0.9), 0 0 calc(var(--design-unit) * 8) rgba(254, 238, 176, 0.64), 0 0 calc(var(--design-unit) * 16) rgba(254, 238, 176, 0.38); } .desktop-control-chip { margin-left: calc(var(--design-unit) * -4); margin-right: calc(var(--design-unit) * -18); } .desktop-control-total { margin-left: calc(var(--design-unit) * -26); margin-right: calc(var(--design-unit) * -26); } .desktop-control-actions { margin-left: calc(var(--design-unit) * -16); margin-right: 0; } .desktop-control-confirm { margin-left: calc(var(--design-unit) * -10); } .history-scroll-hidden { -ms-overflow-style: none; scrollbar-width: none; } .history-scroll-hidden::-webkit-scrollbar { width: 0; height: 0; display: none; } @property --gold-angle { syntax: ""; inherits: false; initial-value: 0deg; } @keyframes rotating-gold-border { to { --gold-angle: 360deg; } } @keyframes gold-border-pulse { 0%, 100% { opacity: 0.34; transform: scale(0.992); } 50% { opacity: 0.54; transform: scale(1.008); } } .gold-reveal-shell { --gold-angle: 0deg; position: absolute; inset: calc(var(--design-unit) * 2.6); border-radius: calc(var(--design-unit) * 16); overflow: hidden; clip-path: inset(0 round calc(var(--design-unit) * 16)); pointer-events: none; } .gold-reveal-shell::before { content: ""; position: absolute; inset: 0; border-radius: calc(var(--design-unit) * 16); padding: calc(var(--design-unit) * 5.6); background: conic-gradient( from var(--gold-angle), #534217 10%, #534217 20%, #ffe226 45%, #534217 60%, #534217 85%, #ffe226 95%, #534217 100% ); -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); -webkit-mask-composite: xor; mask-composite: exclude; animation: rotating-gold-border 8s linear infinite; } .gold-reveal-shell::after { content: ""; position: absolute; inset: calc(var(--design-unit) * 1); border-radius: calc(var(--design-unit) * 15); padding: calc(var(--design-unit) * 4); background: conic-gradient( from calc(var(--gold-angle) + 180deg), rgba(255, 247, 210, 0) 0%, rgba(255, 247, 210, 0) 66%, rgba(255, 252, 232, 0.14) 71%, rgba(255, 254, 244, 0.98) 75%, rgba(255, 230, 130, 0.96) 79%, rgba(255, 247, 210, 0.18) 84%, rgba(255, 247, 210, 0) 90%, rgba(255, 247, 210, 0) 100% ); -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); -webkit-mask-composite: xor; mask-composite: exclude; animation: rotating-gold-border 2.1s linear infinite; } .gold-reveal-static-border { position: absolute; inset: calc(var(--design-unit) * 2.8); border-radius: calc(var(--design-unit) * 16); border: calc(var(--design-unit) * 7.4) solid rgba(181, 138, 40, 0.98); box-shadow: inset 0 0 calc(var(--design-unit) * 14) rgba(255, 241, 181, 0.38), 0 0 calc(var(--design-unit) * 18) rgba(255, 210, 102, 0.32); pointer-events: none; } .gold-reveal-glow { position: absolute; inset: calc(var(--design-unit) * 1.4); border-radius: calc(var(--design-unit) * 18); background: radial-gradient( circle at center, rgba(255, 226, 92, 0.18) 0%, rgba(219, 161, 42, 0.14) 42%, rgba(127, 86, 13, 0.08) 62%, transparent 82% ); filter: blur(calc(var(--design-unit) * 2.8)); opacity: 0.36; pointer-events: none; animation: gold-border-pulse 1.9s ease-in-out infinite; } .mobile-gold-reveal-shell { --gold-angle: 0deg; position: absolute; inset: calc(var(--design-unit) * 2.2); border-radius: calc(var(--design-unit) * 7); overflow: hidden; clip-path: inset(0 round calc(var(--design-unit) * 7)); pointer-events: none; } .mobile-gold-reveal-shell::before { content: ""; position: absolute; inset: 0; border-radius: calc(var(--design-unit) * 7); padding: calc(var(--design-unit) * 2.5); background: conic-gradient( from var(--gold-angle), #534217 10%, #534217 20%, #ffe226 45%, #534217 60%, #534217 85%, #ffe226 95%, #534217 100% ); -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); -webkit-mask-composite: xor; mask-composite: exclude; animation: rotating-gold-border 8s linear infinite; } .mobile-gold-reveal-shell::after { content: ""; position: absolute; inset: calc(var(--design-unit) * 0.5); border-radius: calc(var(--design-unit) * 6.5); padding: calc(var(--design-unit) * 1.7); background: conic-gradient( from calc(var(--gold-angle) + 180deg), rgba(255, 247, 210, 0) 0%, rgba(255, 247, 210, 0) 66%, rgba(255, 247, 210, 0.14) 71%, rgba(255, 254, 244, 0.98) 75%, rgba(255, 230, 130, 0.96) 79%, rgba(255, 247, 210, 0.18) 84%, rgba(255, 247, 210, 0) 90%, rgba(255, 247, 210, 0) 100% ); -webkit-mask: linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0); -webkit-mask-composite: xor; mask-composite: exclude; animation: rotating-gold-border 2.1s linear infinite; } .mobile-gold-reveal-static-border { position: absolute; inset: calc(var(--design-unit) * 2.7); border-radius: calc(var(--design-unit) * 7); border: calc(var(--design-unit) * 2.8) solid rgba(181, 138, 40, 0.98); box-shadow: inset 0 0 calc(var(--design-unit) * 7) rgba(255, 241, 181, 0.38), 0 0 calc(var(--design-unit) * 9) rgba(255, 210, 102, 0.32); pointer-events: none; } .mobile-gold-reveal-glow { position: absolute; inset: calc(var(--design-unit) * 1.4); border-radius: calc(var(--design-unit) * 8); background: radial-gradient( circle at center, rgba(255, 226, 92, 0.2) 0%, rgba(219, 161, 42, 0.16) 42%, rgba(127, 86, 13, 0.08) 62%, transparent 82% ); filter: blur(calc(var(--design-unit) * 1.4)); opacity: 0.42; pointer-events: none; animation: gold-border-pulse 1.9s ease-in-out infinite; } } @theme inline { --font-heading: var(--font-sans); --font-sans: "Geist Variable", sans-serif; --color-sidebar-ring: var(--sidebar-ring); --color-sidebar-border: var(--sidebar-border); --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); --color-sidebar-accent: var(--sidebar-accent); --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); --color-sidebar-primary: var(--sidebar-primary); --color-sidebar-foreground: var(--sidebar-foreground); --color-sidebar: var(--sidebar); --color-chart-5: var(--chart-5); --color-chart-4: var(--chart-4); --color-chart-3: var(--chart-3); --color-chart-2: var(--chart-2); --color-chart-1: var(--chart-1); --color-ring: var(--ring); --color-input: var(--input); --color-border: var(--border); --color-destructive: var(--destructive); --color-accent-foreground: var(--accent-foreground); --color-accent: var(--accent); --color-muted-foreground: var(--muted-foreground); --color-muted: var(--muted); --color-secondary-foreground: var(--secondary-foreground); --color-secondary: var(--secondary); --color-primary-foreground: var(--primary-foreground); --color-primary: var(--primary); --color-popover-foreground: var(--popover-foreground); --color-popover: var(--popover); --color-card-foreground: var(--card-foreground); --color-card: var(--card); --color-foreground: var(--foreground); --color-background: var(--background); --radius-sm: calc(var(--radius) * 0.6); --radius-md: calc(var(--radius) * 0.8); --radius-lg: var(--radius); --radius-xl: calc(var(--radius) * 1.4); --radius-2xl: calc(var(--radius) * 1.8); --radius-3xl: calc(var(--radius) * 2.2); --radius-4xl: calc(var(--radius) * 2.6); } .dark { --background: oklch(0.145 0 0); --foreground: oklch(0.985 0 0); --card: oklch(0.205 0 0); --card-foreground: oklch(0.985 0 0); --popover: oklch(0.205 0 0); --popover-foreground: oklch(0.985 0 0); --primary: oklch(0.922 0 0); --primary-foreground: oklch(0.205 0 0); --secondary: oklch(0.269 0 0); --secondary-foreground: oklch(0.985 0 0); --muted: oklch(0.269 0 0); --muted-foreground: oklch(0.708 0 0); --accent: oklch(0.269 0 0); --accent-foreground: oklch(0.985 0 0); --destructive: oklch(0.704 0.191 22.216); --border: oklch(1 0 0 / 10%); --input: oklch(1 0 0 / 15%); --ring: oklch(0.556 0 0); --chart-1: oklch(0.87 0 0); --chart-2: oklch(0.556 0 0); --chart-3: oklch(0.439 0 0); --chart-4: oklch(0.371 0 0); --chart-5: oklch(0.269 0 0); --sidebar: oklch(0.205 0 0); --sidebar-foreground: oklch(0.985 0 0); --sidebar-primary: oklch(0.488 0.243 264.376); --sidebar-primary-foreground: oklch(0.985 0 0); --sidebar-accent: oklch(0.269 0 0); --sidebar-accent-foreground: oklch(0.985 0 0); --sidebar-border: oklch(1 0 0 / 10%); --sidebar-ring: oklch(0.556 0 0); }