463 lines
10 KiB
CSS
463 lines
10 KiB
CSS
@tailwind base;
|
|
@tailwind components;
|
|
@tailwind utilities;
|
|
|
|
/* Local Standalone Self-Hosted Fonts (Zero 3rd-party dependencies) */
|
|
@font-face {
|
|
font-family: 'CinzelTitle';
|
|
src: url('/fonts/Cinzel.ttf') format('truetype');
|
|
font-weight: 700 900;
|
|
font-style: normal;
|
|
font-display: swap;
|
|
}
|
|
|
|
@font-face {
|
|
font-family: 'DojoFun';
|
|
src: url('/fonts/ZCOOLKuaiLe.ttf') format('truetype');
|
|
font-weight: 400;
|
|
font-style: normal;
|
|
font-display: swap;
|
|
}
|
|
|
|
.font-cinzel {
|
|
font-family: 'CinzelTitle', 'Georgia', serif;
|
|
}
|
|
|
|
.font-dojo {
|
|
font-family: 'DojoFun', 'PingFang SC', 'Microsoft YaHei', sans-serif;
|
|
}
|
|
|
|
/* Fantasy Game UI & Spooky UI Elements */
|
|
.game-panel {
|
|
background: linear-gradient(180deg, #1f1438 0%, #120a22 100%);
|
|
border: 2px solid #5b358a;
|
|
box-shadow:
|
|
inset 0 1px 0 rgba(255, 255, 255, 0.15),
|
|
inset 0 -2px 0 rgba(0, 0, 0, 0.6),
|
|
0 8px 24px rgba(0, 0, 0, 0.7),
|
|
0 0 15px rgba(168, 85, 247, 0.2);
|
|
border-radius: 16px;
|
|
position: relative;
|
|
}
|
|
|
|
.game-panel-amber {
|
|
background: linear-gradient(180deg, #241432 0%, #150920 100%);
|
|
border: 2px solid #9a531e;
|
|
box-shadow:
|
|
inset 0 1px 0 rgba(251, 191, 36, 0.25),
|
|
inset 0 -2px 0 rgba(0, 0, 0, 0.7),
|
|
0 8px 24px rgba(0, 0, 0, 0.8),
|
|
0 0 20px rgba(249, 115, 22, 0.25);
|
|
border-radius: 18px;
|
|
position: relative;
|
|
}
|
|
|
|
.game-btn-gold {
|
|
background: linear-gradient(180deg, #ff9d00 0%, #ea580c 45%, #c2410c 100%);
|
|
border-top: 2px solid #fef08a;
|
|
border-left: 2px solid #f59e0b;
|
|
border-right: 2px solid #f59e0b;
|
|
border-bottom: 3px solid #7c2d12;
|
|
box-shadow:
|
|
0 6px 0 #431407,
|
|
0 10px 25px rgba(234, 88, 12, 0.5),
|
|
inset 0 1px 0 rgba(255, 255, 255, 0.4);
|
|
color: #ffffff;
|
|
text-shadow: 0 2px 2px rgba(0, 0, 0, 0.8);
|
|
border-radius: 14px;
|
|
transition: all 0.15s ease;
|
|
}
|
|
|
|
.game-btn-gold:hover {
|
|
filter: brightness(1.1);
|
|
}
|
|
|
|
.game-btn-gold:active {
|
|
transform: translateY(4px);
|
|
box-shadow:
|
|
0 2px 0 #431407,
|
|
0 4px 10px rgba(234, 88, 12, 0.3),
|
|
inset 0 1px 0 rgba(255, 255, 255, 0.4);
|
|
}
|
|
|
|
.game-btn-dark {
|
|
background: linear-gradient(180deg, #2d1a4d 0%, #1b0e32 100%);
|
|
border-top: 1.5px solid #a855f7;
|
|
border-left: 1.5px solid #7e22ce;
|
|
border-right: 1.5px solid #7e22ce;
|
|
border-bottom: 2.5px solid #3b0764;
|
|
box-shadow:
|
|
0 4px 0 #090314,
|
|
inset 0 1px 0 rgba(255, 255, 255, 0.2);
|
|
color: #f3e8ff;
|
|
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.9);
|
|
border-radius: 14px;
|
|
transition: all 0.15s ease;
|
|
}
|
|
|
|
.game-btn-dark:active {
|
|
transform: translateY(2px);
|
|
box-shadow: 0 2px 0 #090314;
|
|
}
|
|
|
|
/* Ornate RPG Ribbon Banner Header */
|
|
.game-ribbon {
|
|
background: linear-gradient(180deg, #7c3aed 0%, #581c87 100%);
|
|
border: 1.5px solid #f59e0b;
|
|
box-shadow:
|
|
0 4px 12px rgba(0, 0, 0, 0.6),
|
|
0 0 12px rgba(245, 158, 11, 0.3),
|
|
inset 0 1px 0 rgba(255, 255, 255, 0.35);
|
|
position: relative;
|
|
}
|
|
|
|
:root {
|
|
--brand-primary: #ff6d00;
|
|
--brand-accent: #22c55e;
|
|
--brand-bg: #0f091f;
|
|
--brand-surface: #1e1136;
|
|
--brand-text: #ffffff;
|
|
--brand-muted: rgba(238, 230, 255, 0.75);
|
|
--sat: env(safe-area-inset-top, 0px);
|
|
--sab: env(safe-area-inset-bottom, 0px);
|
|
--sal: env(safe-area-inset-left, 0px);
|
|
--sar: env(safe-area-inset-right, 0px);
|
|
}
|
|
|
|
* {
|
|
box-sizing: border-box;
|
|
-webkit-tap-highlight-color: transparent;
|
|
user-select: none;
|
|
}
|
|
|
|
body {
|
|
margin: 0;
|
|
padding: 0;
|
|
background-color: var(--brand-bg);
|
|
color: var(--brand-text);
|
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
|
overflow: hidden;
|
|
height: 100vh;
|
|
height: 100dvh;
|
|
width: 100vw;
|
|
width: 100dvw;
|
|
overscroll-behavior: none;
|
|
touch-action: manipulation;
|
|
}
|
|
|
|
/* Kiosk and Responsive Container */
|
|
.kiosk-viewport {
|
|
width: 100%;
|
|
height: 100%;
|
|
height: 100dvh;
|
|
max-width: 540px; /* Optimal vertical kiosk aspect on desktop */
|
|
max-height: 960px;
|
|
position: relative;
|
|
overflow: hidden;
|
|
box-shadow: 0 25px 60px -10px rgba(0, 0, 0, 0.7), 0 0 40px rgba(168, 85, 247, 0.15);
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
|
|
@media (max-width: 640px) {
|
|
.kiosk-viewport {
|
|
width: 100vw;
|
|
width: 100dvw;
|
|
height: 100vh;
|
|
height: 100dvh;
|
|
max-width: 100vw;
|
|
max-height: 100dvh;
|
|
border-radius: 0 !important;
|
|
border-width: 0 !important;
|
|
box-shadow: none !important;
|
|
}
|
|
}
|
|
|
|
/* Fullscreen Mode URL parameter reset (?mode=fullscreen) */
|
|
body:has([data-fullscreen="true"]) {
|
|
padding: 0 !important;
|
|
background-color: var(--brand-bg);
|
|
}
|
|
|
|
/* Subtle border vignette */
|
|
.bg-radial-vignette {
|
|
background: radial-gradient(circle at center, transparent 60%, rgba(10, 4, 20, 0.6) 100%);
|
|
}
|
|
|
|
/* Spooky Halloween Animations */
|
|
@keyframes auroraWave {
|
|
0%, 100% {
|
|
transform: translateX(-5%) skewY(-2deg) scaleY(0.9);
|
|
opacity: 0.35;
|
|
}
|
|
50% {
|
|
transform: translateX(5%) skewY(2deg) scaleY(1.15);
|
|
opacity: 0.55;
|
|
}
|
|
}
|
|
|
|
@keyframes auroraPulse {
|
|
0%, 100% {
|
|
transform: scale(0.95);
|
|
opacity: 0.25;
|
|
}
|
|
50% {
|
|
transform: scale(1.05);
|
|
opacity: 0.45;
|
|
}
|
|
}
|
|
|
|
@keyframes cloudDrift {
|
|
0% {
|
|
transform: translateX(-15px);
|
|
opacity: 0.4;
|
|
}
|
|
50% {
|
|
transform: translateX(20px);
|
|
opacity: 0.7;
|
|
}
|
|
100% {
|
|
transform: translateX(-15px);
|
|
opacity: 0.4;
|
|
}
|
|
}
|
|
|
|
@keyframes batFlutter {
|
|
0%, 100% {
|
|
transform: translate(0, 0) rotate(0deg) scale(1);
|
|
}
|
|
25% {
|
|
transform: translate(6px, -8px) rotate(6deg) scale(1.05);
|
|
}
|
|
50% {
|
|
transform: translate(-4px, -12px) rotate(-4deg) scale(0.95);
|
|
}
|
|
75% {
|
|
transform: translate(8px, -4px) rotate(4deg) scale(1.02);
|
|
}
|
|
}
|
|
|
|
@keyframes ghostFloat {
|
|
0%, 100% {
|
|
transform: translateY(0) rotate(0deg);
|
|
}
|
|
50% {
|
|
transform: translateY(-12px) rotate(3deg);
|
|
}
|
|
}
|
|
|
|
@keyframes leafDrift {
|
|
0% {
|
|
transform: translateY(-20px) translateX(0) rotate(0deg);
|
|
opacity: 0;
|
|
}
|
|
15% {
|
|
opacity: 0.85;
|
|
}
|
|
50% {
|
|
transform: translateY(400px) translateX(30px) rotate(180deg);
|
|
opacity: 0.8;
|
|
}
|
|
85% {
|
|
opacity: 0.7;
|
|
}
|
|
100% {
|
|
transform: translateY(960px) translateX(-20px) rotate(360deg);
|
|
opacity: 0;
|
|
}
|
|
}
|
|
|
|
.animate-aurora-wave {
|
|
animation: auroraWave 12s ease-in-out infinite alternate;
|
|
}
|
|
|
|
.animate-aurora-pulse {
|
|
animation: auroraPulse 8s ease-in-out infinite alternate;
|
|
}
|
|
|
|
.animate-cloud-drift {
|
|
animation: cloudDrift 18s ease-in-out infinite;
|
|
}
|
|
|
|
.bat-1 {
|
|
animation: batFlutter 6s ease-in-out infinite;
|
|
}
|
|
.bat-2 {
|
|
animation: batFlutter 8s ease-in-out 1.5s infinite;
|
|
}
|
|
.bat-3 {
|
|
animation: batFlutter 7s ease-in-out 3s infinite;
|
|
}
|
|
|
|
.spooky-ghost {
|
|
animation: ghostFloat 4.5s ease-in-out infinite;
|
|
}
|
|
|
|
.leaf-1 {
|
|
animation: leafDrift 14s linear infinite;
|
|
}
|
|
.leaf-2 {
|
|
animation: leafDrift 18s linear 4s infinite;
|
|
}
|
|
.leaf-3 {
|
|
animation: leafDrift 16s linear 8s infinite;
|
|
}
|
|
|
|
/* Accessible Reduced Motion Settings */
|
|
@media (prefers-reduced-motion: reduce) {
|
|
.animate-aurora-wave,
|
|
.animate-aurora-pulse,
|
|
.animate-cloud-drift,
|
|
.bat-1,
|
|
.bat-2,
|
|
.bat-3,
|
|
.spooky-ghost,
|
|
.leaf-1,
|
|
.leaf-2,
|
|
.leaf-3 {
|
|
animation: none !important;
|
|
transform: none !important;
|
|
}
|
|
}
|
|
|
|
/* Pulsing loader dots */
|
|
@keyframes dotPulse {
|
|
0%, 100% {
|
|
transform: scale(0.8);
|
|
opacity: 0.4;
|
|
}
|
|
50% {
|
|
transform: scale(1.3);
|
|
opacity: 1;
|
|
}
|
|
}
|
|
|
|
.animate-dot-1 {
|
|
animation: dotPulse 1.4s ease-in-out infinite;
|
|
}
|
|
.animate-dot-2 {
|
|
animation: dotPulse 1.4s ease-in-out 0.2s infinite;
|
|
}
|
|
.animate-dot-3 {
|
|
animation: dotPulse 1.4s ease-in-out 0.4s infinite;
|
|
}
|
|
|
|
/* Cartoon UI Utilities (Tactile, chunky, playful) */
|
|
.btn-cartoon-orange {
|
|
background: linear-gradient(180deg, #ff9100 0%, #ff6d00 50%, #ea580c 100%);
|
|
border: 3px solid #1a0826;
|
|
box-shadow: 0 6px 0 #9a3412, 0 10px 15px rgba(0, 0, 0, 0.4);
|
|
transition: all 0.12s cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
}
|
|
.btn-cartoon-orange:hover {
|
|
filter: brightness(1.08);
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 8px 0 #9a3412, 0 14px 20px rgba(0, 0, 0, 0.5);
|
|
}
|
|
.btn-cartoon-orange:active {
|
|
transform: translateY(4px);
|
|
box-shadow: 0 2px 0 #9a3412, 0 4px 6px rgba(0, 0, 0, 0.4);
|
|
}
|
|
|
|
.btn-cartoon-purple {
|
|
background: linear-gradient(180deg, #a855f7 0%, #7e22ce 50%, #581c87 100%);
|
|
border: 3px solid #1a0826;
|
|
box-shadow: 0 6px 0 #3b0764, 0 10px 15px rgba(0, 0, 0, 0.4);
|
|
transition: all 0.12s cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
}
|
|
.btn-cartoon-purple:hover {
|
|
filter: brightness(1.08);
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 8px 0 #3b0764, 0 14px 20px rgba(0, 0, 0, 0.5);
|
|
}
|
|
.btn-cartoon-purple:active {
|
|
transform: translateY(4px);
|
|
box-shadow: 0 2px 0 #3b0764, 0 4px 6px rgba(0, 0, 0, 0.4);
|
|
}
|
|
|
|
.btn-cartoon-instagram {
|
|
background: linear-gradient(135deg, #833ab4 0%, #c13584 30%, #e1306c 60%, #fd1d1d 80%, #f77737 100%);
|
|
border: 3px solid #1a0826;
|
|
box-shadow: 0 6px 0 #4c0519, 0 10px 15px rgba(0, 0, 0, 0.4);
|
|
transition: all 0.12s cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
}
|
|
.btn-cartoon-instagram:hover {
|
|
filter: brightness(1.08);
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 8px 0 #4c0519, 0 14px 20px rgba(0, 0, 0, 0.5);
|
|
}
|
|
.btn-cartoon-instagram:active {
|
|
transform: translateY(4px);
|
|
box-shadow: 0 2px 0 #4c0519, 0 4px 6px rgba(0, 0, 0, 0.4);
|
|
}
|
|
|
|
.btn-cartoon-dark {
|
|
background: linear-gradient(180deg, #2e1065 0%, #1e0e38 100%);
|
|
border: 3px solid #090314;
|
|
box-shadow: 0 5px 0 #090314, 0 8px 12px rgba(0, 0, 0, 0.4);
|
|
transition: all 0.12s cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
}
|
|
.btn-cartoon-dark:hover {
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 7px 0 #090314, 0 12px 16px rgba(0, 0, 0, 0.5);
|
|
}
|
|
.btn-cartoon-dark:active {
|
|
transform: translateY(3px);
|
|
box-shadow: 0 2px 0 #090314, 0 4px 6px rgba(0, 0, 0, 0.4);
|
|
}
|
|
|
|
.card-cartoon {
|
|
border: 3px solid #1a0826;
|
|
box-shadow: 0 6px 0 rgba(10, 4, 20, 0.8), 0 12px 20px rgba(0, 0, 0, 0.5);
|
|
}
|
|
|
|
.card-cartoon-selected {
|
|
border: 3px solid #ff9100;
|
|
box-shadow: 0 6px 0 #9a3412, 0 0 24px rgba(255, 145, 0, 0.5);
|
|
}
|
|
|
|
@keyframes cartoonWobble {
|
|
0%, 100% {
|
|
transform: rotate(0deg) scale(1);
|
|
}
|
|
25% {
|
|
transform: rotate(-3deg) scale(1.03);
|
|
}
|
|
75% {
|
|
transform: rotate(3deg) scale(1.03);
|
|
}
|
|
}
|
|
|
|
.animate-cartoon-wobble {
|
|
animation: cartoonWobble 3s ease-in-out infinite;
|
|
}
|
|
|
|
/* Media Print Optimization */
|
|
@media print {
|
|
body {
|
|
background: #ffffff !important;
|
|
color: #000000 !important;
|
|
}
|
|
|
|
.no-print {
|
|
display: none !important;
|
|
}
|
|
|
|
.print-only-container {
|
|
display: flex !important;
|
|
justify-content: center;
|
|
align-items: center;
|
|
width: 100vw;
|
|
height: 100vh;
|
|
margin: 0;
|
|
padding: 0;
|
|
}
|
|
|
|
.print-photo {
|
|
max-width: 100%;
|
|
max-height: 100%;
|
|
object-fit: contain;
|
|
page-break-inside: avoid;
|
|
}
|
|
}
|