Spaces:
Sleeping
Sleeping
| @import url('https://fonts.googleapis.com/css2?family=Press+Start+2P&display=swap'); | |
| /* ======================================== | |
| SKEUOMORPHIC ARCADE CABINET UI | |
| ======================================== */ | |
| :root { | |
| /* Black Metal Cabinet Colors - Deep, Rich Textures */ | |
| --metal-black: #0a0a0a; | |
| --metal-deep: #0d0d0d; | |
| --metal-dark: #151515; | |
| --metal-mid: #1e1e1e; | |
| --metal-light: #2a2a2a; | |
| --metal-highlight: #353535; | |
| --metal-chrome: #4a4a4a; | |
| --metal-shine: rgba(255, 255, 255, 0.08); | |
| --metal-shadow: rgba(0, 0, 0, 0.6); | |
| /* Brushed Metal Texture */ | |
| --brushed-light: rgba(255, 255, 255, 0.04); | |
| --brushed-dark: rgba(0, 0, 0, 0.15); | |
| /* Accent Colors - Retro Arcade Neon */ | |
| --neon-cyan: #00fff7; | |
| --neon-pink: #ff00ff; | |
| --neon-yellow: #ffff00; | |
| --neon-green: #00ff00; | |
| --neon-orange: #ff6600; | |
| --neon-red: #ff0033; | |
| /* LED Display - Realistic 7-Segment Style */ | |
| --led-off: #1a1515; | |
| --led-red: #ff3333; | |
| --led-red-dark: #cc2222; | |
| --led-glow: rgba(255, 51, 51, 0.8); | |
| --led-glow-strong: rgba(255, 51, 51, 1); | |
| --led-segment: #1a0a0a; | |
| /* CRT Screen - Enhanced Effects */ | |
| --crt-bg: #050508; | |
| --crt-inner: #080810; | |
| --crt-glow: rgba(0, 255, 247, 0.03); | |
| --scanline: rgba(0, 0, 0, 0.12); | |
| --vignette: rgba(0, 0, 0, 0.4); | |
| /* Button Colors - Realistic Arcade Buttons */ | |
| --btn-red: #cc2222; | |
| --btn-red-light: #ff4444; | |
| --btn-red-dark: #771111; | |
| --btn-red-shadow: #440000; | |
| --btn-yellow: #ccaa22; | |
| --btn-yellow-light: #ffdd44; | |
| --btn-yellow-dark: #886611; | |
| --btn-yellow-shadow: #554400; | |
| --btn-green: #22cc22; | |
| --btn-green-light: #44ee44; | |
| --btn-green-dark: #118811; | |
| --btn-green-shadow: #005500; | |
| --btn-blue: #2222cc; | |
| --btn-blue-light: #4444ee; | |
| --btn-blue-dark: #111188; | |
| --btn-blue-shadow: #000066; | |
| /* Speaker Grille */ | |
| --grille-bg: #0a0a0a; | |
| --grille-hole: #000000; | |
| --grille-shadow: rgba(0, 0, 0, 0.8); | |
| /* Cabinet Vents */ | |
| --vent-color: #080808; | |
| --vent-shadow: #050505; | |
| /* Wood/Plastic Cabinet Base */ | |
| --cabinet-wood: #2a1a0a; | |
| --cabinet-plastic: #1a1a1a; | |
| } | |
| * { | |
| box-sizing: border-box; | |
| margin: 0; | |
| padding: 0; | |
| } | |
| body { | |
| min-height: 100vh; | |
| padding: 20px; | |
| display: flex; | |
| justify-content: center; | |
| align-items: center; | |
| font-family: 'Press Start 2P', cursive; | |
| color: #fff; | |
| background: | |
| radial-gradient(ellipse at 50% 0%, rgba(60, 60, 80, 0.15) 0%, transparent 50%), | |
| radial-gradient(ellipse at 50% 50%, rgba(0, 255, 247, 0.02) 0%, transparent 60%), | |
| linear-gradient(180deg, #080808 0%, #0f0f0f 50%, #080808 100%); | |
| position: relative; | |
| overflow-x: hidden; | |
| } | |
| #root { | |
| width: min(600px, 100%); | |
| } | |
| /* ======================================== | |
| ARCADE CABINET CONTAINER | |
| ======================================== */ | |
| .arcade-cabinet { | |
| width: 100%; | |
| background: | |
| linear-gradient( | |
| 180deg, | |
| var(--metal-dark) 0%, | |
| var(--metal-black) 30%, | |
| var(--metal-deep) 70%, | |
| var(--metal-dark) 100% | |
| ); | |
| border-radius: 20px; | |
| padding: 5px; | |
| box-shadow: | |
| 0 25px 80px rgba(0, 0, 0, 0.9), | |
| 0 35px 120px rgba(0, 0, 0, 0.7), | |
| 0 0 0 3px var(--metal-mid), | |
| 0 0 0 5px var(--metal-dark), | |
| inset 0 2px 0 rgba(255, 255, 255, 0.04), | |
| inset 0 -2px 8px rgba(0, 0, 0, 0.5); | |
| position: relative; | |
| transform-style: preserve-3d; | |
| } | |
| /* Cabinet edge highlight */ | |
| .arcade-cabinet::before { | |
| content: ''; | |
| position: absolute; | |
| inset: 0; | |
| border-radius: 20px; | |
| background: linear-gradient( | |
| 135deg, | |
| rgba(255, 255, 255, 0.06) 0%, | |
| transparent 40%, | |
| transparent 60%, | |
| rgba(0, 0, 0, 0.3) 100% | |
| ); | |
| pointer-events: none; | |
| z-index: 0; | |
| } | |
| .cabinet-inner { | |
| background: | |
| linear-gradient( | |
| 180deg, | |
| var(--metal-deep) 0%, | |
| var(--metal-black) 50%, | |
| var(--metal-deep) 100% | |
| ); | |
| border-radius: 16px; | |
| overflow: hidden; | |
| position: relative; | |
| display: flex; | |
| flex-direction: column; | |
| min-height: calc(100vh - 40px); | |
| z-index: 1; | |
| } | |
| /* Brushed metal texture overlay */ | |
| .cabinet-inner::before { | |
| content: ''; | |
| position: absolute; | |
| inset: 0; | |
| background: | |
| repeating-linear-gradient( | |
| 90deg, | |
| transparent, | |
| transparent 3px, | |
| var(--brushed-light) 3px, | |
| var(--brushed-light) 4px | |
| ), | |
| repeating-linear-gradient( | |
| 0deg, | |
| transparent, | |
| transparent 3px, | |
| var(--brushed-dark) 3px, | |
| var(--brushed-dark) 4px | |
| ); | |
| pointer-events: none; | |
| z-index: 1; | |
| opacity: 0.7; | |
| } | |
| /* ======================================== | |
| MARQUEE AREA | |
| ======================================== */ | |
| .marquee { | |
| background: | |
| linear-gradient( | |
| 180deg, | |
| var(--metal-mid) 0%, | |
| var(--metal-dark) 50%, | |
| var(--metal-black) 100% | |
| ); | |
| padding: 24px 28px; | |
| text-align: center; | |
| position: relative; | |
| border-bottom: 4px solid var(--metal-black); | |
| box-shadow: | |
| inset 0 3px 6px rgba(255, 255, 255, 0.06), | |
| inset 0 -3px 8px rgba(0, 0, 0, 0.5), | |
| 0 4px 12px rgba(0, 0, 0, 0.6); | |
| } | |
| /* Top neon accent line */ | |
| .marquee::before { | |
| content: ''; | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| right: 0; | |
| height: 3px; | |
| background: linear-gradient( | |
| 90deg, | |
| transparent, | |
| var(--neon-cyan) 20%, | |
| var(--neon-cyan) 80%, | |
| transparent | |
| ); | |
| box-shadow: | |
| 0 0 10px var(--neon-cyan), | |
| 0 0 20px rgba(0, 255, 247, 0.5); | |
| opacity: 0.8; | |
| } | |
| /* Marquee inner glow */ | |
| .marquee::after { | |
| content: ''; | |
| position: absolute; | |
| inset: 0; | |
| background: radial-gradient( | |
| ellipse at 50% 0%, | |
| rgba(0, 255, 247, 0.03) 0%, | |
| transparent 70% | |
| ); | |
| pointer-events: none; | |
| } | |
| .marquee-title { | |
| font-size: 26px; | |
| font-weight: 400; | |
| letter-spacing: 5px; | |
| text-transform: uppercase; | |
| color: var(--neon-cyan); | |
| text-shadow: | |
| 0 0 8px var(--neon-cyan), | |
| 0 0 16px var(--neon-cyan), | |
| 0 0 32px rgba(0, 255, 247, 0.4), | |
| 0 2px 4px rgba(0, 0, 0, 0.8); | |
| animation: neonFlicker 5s infinite; | |
| position: relative; | |
| z-index: 2; | |
| } | |
| .marquee-subtitle { | |
| font-size: 9px; | |
| color: var(--metal-chrome); | |
| margin-top: 10px; | |
| letter-spacing: 3px; | |
| text-transform: uppercase; | |
| text-shadow: 0 1px 2px rgba(0, 0, 0, 0.8); | |
| position: relative; | |
| z-index: 2; | |
| } | |
| @keyframes neonFlicker { | |
| 0%, 100% { opacity: 1; } | |
| 91% { opacity: 1; } | |
| 92% { opacity: 0.85; } | |
| 93% { opacity: 1; } | |
| 95% { opacity: 0.92; } | |
| 96% { opacity: 1; } | |
| } | |
| /* ======================================== | |
| LED SCORE DISPLAY | |
| ======================================== */ | |
| .led-display-panel { | |
| background: | |
| linear-gradient( | |
| 180deg, | |
| #0a0a0a 0%, | |
| #121212 30%, | |
| #0a0a0a 70%, | |
| #050505 100% | |
| ); | |
| padding: 18px 24px; | |
| display: flex; | |
| justify-content: space-between; | |
| align-items: center; | |
| border-bottom: 4px solid var(--metal-black); | |
| box-shadow: | |
| inset 0 3px 10px rgba(0, 0, 0, 0.9), | |
| 0 4px 8px rgba(0, 0, 0, 0.5); | |
| position: relative; | |
| } | |
| /* LED panel inner bezel effect */ | |
| .led-display-panel::before { | |
| content: ''; | |
| position: absolute; | |
| inset: 0; | |
| background: linear-gradient( | |
| 180deg, | |
| rgba(255, 255, 255, 0.02) 0%, | |
| transparent 30%, | |
| transparent 70%, | |
| rgba(0, 0, 0, 0.3) 100% | |
| ); | |
| pointer-events: none; | |
| } | |
| .led-display { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| gap: 6px; | |
| } | |
| .led-label { | |
| font-size: 7px; | |
| color: var(--metal-chrome); | |
| letter-spacing: 2px; | |
| text-transform: uppercase; | |
| text-shadow: 0 1px 2px rgba(0, 0, 0, 0.8); | |
| } | |
| .led-value { | |
| font-size: 22px; | |
| color: var(--led-red); | |
| text-shadow: | |
| 0 0 4px var(--led-glow), | |
| 0 0 8px var(--led-glow-strong), | |
| 0 0 12px rgba(255, 51, 51, 0.4), | |
| 0 0 20px rgba(255, 51, 51, 0.2); | |
| font-family: 'Press Start 2P', monospace; | |
| min-width: 85px; | |
| text-align: right; | |
| position: relative; | |
| letter-spacing: 2px; | |
| filter: drop-shadow(0 0 2px var(--led-red)); | |
| } | |
| /* LED segment effect overlay */ | |
| .led-value::before { | |
| content: ''; | |
| position: absolute; | |
| inset: 0; | |
| background: linear-gradient( | |
| 180deg, | |
| rgba(255, 255, 255, 0.1) 0%, | |
| transparent 50%, | |
| rgba(0, 0, 0, 0.2) 100% | |
| ); | |
| pointer-events: none; | |
| } | |
| .led-value.highlight { | |
| color: var(--neon-green); | |
| text-shadow: | |
| 0 0 4px rgba(0, 255, 0, 0.8), | |
| 0 0 8px rgba(0, 255, 0, 0.6), | |
| 0 0 12px rgba(0, 255, 0, 0.3), | |
| 0 0 20px rgba(0, 255, 0, 0.2); | |
| filter: drop-shadow(0 0 2px var(--neon-green)); | |
| } | |
| /* ======================================== | |
| CRT SCREEN AREA | |
| ======================================== */ | |
| .screen-bezel { | |
| background: | |
| linear-gradient( | |
| 180deg, | |
| var(--metal-mid) 0%, | |
| var(--metal-dark) 50%, | |
| var(--metal-black) 100% | |
| ); | |
| padding: 18px; | |
| margin: 0 14px; | |
| border-radius: 12px; | |
| box-shadow: | |
| inset 0 3px 6px rgba(255, 255, 255, 0.04), | |
| inset 0 -3px 8px rgba(0, 0, 0, 0.5), | |
| 0 6px 16px rgba(0, 0, 0, 0.7), | |
| 0 12px 24px rgba(0, 0, 0, 0.5), | |
| 0 0 0 2px var(--metal-light), | |
| 0 0 0 4px var(--metal-dark); | |
| flex: 1; | |
| display: flex; | |
| flex-direction: column; | |
| position: relative; | |
| transform-style: preserve-3d; | |
| } | |
| /* Bezel inner highlight */ | |
| .screen-bezel::before { | |
| content: ''; | |
| position: absolute; | |
| inset: 4px; | |
| border-radius: 8px; | |
| background: linear-gradient( | |
| 135deg, | |
| rgba(255, 255, 255, 0.03) 0%, | |
| transparent 40%, | |
| transparent 60%, | |
| rgba(0, 0, 0, 0.2) 100% | |
| ); | |
| pointer-events: none; | |
| } | |
| .crt-screen { | |
| position: relative; | |
| border-radius: 10px; | |
| background: var(--crt-bg); | |
| box-shadow: | |
| inset 0 0 80px rgba(0, 0, 0, 0.8), | |
| inset 0 0 20px rgba(0, 0, 0, 0.5), | |
| 0 0 15px rgba(0, 255, 247, 0.08), | |
| 0 0 0 4px var(--metal-deep), | |
| 0 0 0 6px var(--metal-black); | |
| overflow: hidden; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| flex: 1; | |
| width: 100%; | |
| min-height: 300px; | |
| } | |
| /* Glass reflection overlay */ | |
| .crt-screen::after { | |
| content: ''; | |
| position: absolute; | |
| inset: 0; | |
| background: | |
| linear-gradient( | |
| 135deg, | |
| rgba(255, 255, 255, 0.08) 0%, | |
| transparent 20%, | |
| transparent 80%, | |
| rgba(255, 255, 255, 0.03) 100% | |
| ), | |
| repeating-linear-gradient( | |
| 0deg, | |
| transparent, | |
| transparent 2px, | |
| var(--scanline) 2px, | |
| var(--scanline) 3px | |
| ), | |
| radial-gradient( | |
| ellipse at center, | |
| transparent 0%, | |
| var(--vignette) 100% | |
| ); | |
| opacity: 0.6; | |
| pointer-events: none; | |
| z-index: 10; | |
| border-radius: 10px; | |
| } | |
| /* CRT screen inner shadow/depression effect - using a wrapper approach */ | |
| .crt-screen > * { | |
| position: relative; | |
| z-index: 6; | |
| } | |
| .crt-screen canvas { | |
| display: block; | |
| border-radius: 6px; | |
| position: relative; | |
| z-index: 6; | |
| box-shadow: | |
| 0 0 40px rgba(0, 0, 0, 0.5), | |
| inset 0 0 100px rgba(0, 0, 0, 0.3); | |
| } | |
| /* ======================================== | |
| START/GAME OVER SCREEN | |
| ======================================== */ | |
| .game-overlay { | |
| position: absolute; | |
| inset: 0; | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| gap: 24px; | |
| background: | |
| radial-gradient( | |
| ellipse at center, | |
| rgba(20, 20, 30, 0.98) 0%, | |
| rgba(10, 10, 18, 0.99) 100% | |
| ); | |
| border-radius: 10px; | |
| z-index: 20; | |
| padding: 24px; | |
| box-shadow: inset 0 0 60px rgba(0, 0, 0, 0.8); | |
| } | |
| .game-overlay h2 { | |
| font-size: 22px; | |
| font-weight: 400; | |
| text-transform: uppercase; | |
| letter-spacing: 5px; | |
| text-shadow: 0 2px 4px rgba(0, 0, 0, 0.8); | |
| } | |
| .game-overlay h2.game-over { | |
| color: var(--neon-red); | |
| text-shadow: | |
| 0 0 12px var(--neon-red), | |
| 0 0 24px var(--neon-red), | |
| 0 2px 4px rgba(0, 0, 0, 0.8); | |
| animation: glitch 0.4s ease-in-out; | |
| } | |
| @keyframes glitch { | |
| 0%, 100% { transform: translate(0); } | |
| 15% { transform: translate(-3px, 2px); } | |
| 30% { transform: translate(3px, -2px); } | |
| 45% { transform: translate(-2px, -1px); } | |
| 60% { transform: translate(2px, 1px); } | |
| 75% { transform: translate(-1px, 2px); } | |
| 90% { transform: translate(1px, -1px); } | |
| } | |
| .final-score-box { | |
| text-align: center; | |
| } | |
| .final-score { | |
| font-size: 14px; | |
| color: var(--metal-chrome); | |
| text-shadow: 0 1px 2px rgba(0, 0, 0, 0.8); | |
| } | |
| .new-high-score { | |
| font-size: 11px; | |
| color: var(--neon-green); | |
| margin-top: 14px; | |
| text-shadow: | |
| 0 0 12px rgba(0, 255, 0, 0.6), | |
| 0 0 24px rgba(0, 255, 0, 0.3); | |
| animation: pulse 1.2s infinite; | |
| } | |
| @keyframes pulse { | |
| 0%, 100% { opacity: 1; } | |
| 50% { opacity: 0.7; } | |
| } | |
| .game-overlay label { | |
| font-size: 9px; | |
| color: var(--metal-chrome); | |
| letter-spacing: 2px; | |
| text-shadow: 0 1px 2px rgba(0, 0, 0, 0.8); | |
| } | |
| /* Level Select Dropdown */ | |
| .level-select { | |
| width: 200px; | |
| padding: 14px 18px; | |
| font-size: 10px; | |
| font-family: 'Press Start 2P', cursive; | |
| background: | |
| linear-gradient( | |
| 180deg, | |
| var(--metal-dark) 0%, | |
| var(--metal-black) 100% | |
| ); | |
| color: var(--neon-cyan); | |
| border: 3px solid var(--metal-mid); | |
| border-radius: 6px; | |
| cursor: pointer; | |
| appearance: none; | |
| background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%2300fff7' d='M6 8L2 4h8z'/%3E%3C/svg%3E"); | |
| background-repeat: no-repeat; | |
| background-position: right 14px center; | |
| box-shadow: | |
| inset 0 2px 6px rgba(0, 0, 0, 0.5), | |
| 0 2px 4px rgba(0, 0, 0, 0.3); | |
| } | |
| .level-select:focus { | |
| outline: none; | |
| border-color: var(--neon-cyan); | |
| box-shadow: | |
| inset 0 2px 6px rgba(0, 0, 0, 0.5), | |
| 0 0 12px rgba(0, 255, 247, 0.4), | |
| 0 0 20px rgba(0, 255, 247, 0.2); | |
| } | |
| .level-select option { | |
| background: var(--metal-black); | |
| color: var(--neon-cyan); | |
| padding: 10px; | |
| } | |
| /* ======================================== | |
| ARCADE BUTTONS | |
| ======================================== */ | |
| .control-panel { | |
| background: | |
| linear-gradient( | |
| 180deg, | |
| var(--metal-mid) 0%, | |
| var(--metal-dark) 50%, | |
| var(--metal-black) 100% | |
| ); | |
| padding: 24px; | |
| margin-top: 14px; | |
| position: relative; | |
| border-top: 4px solid var(--metal-black); | |
| box-shadow: | |
| inset 0 4px 12px rgba(0, 0, 0, 0.6), | |
| 0 -4px 12px rgba(0, 0, 0, 0.3); | |
| } | |
| .control-panel::before { | |
| content: ''; | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| right: 0; | |
| height: 2px; | |
| background: linear-gradient( | |
| 90deg, | |
| transparent, | |
| rgba(255, 255, 255, 0.08), | |
| transparent | |
| ); | |
| } | |
| /* Start Button - Large Arcade Style */ | |
| .start-btn { | |
| width: 190px; | |
| padding: 18px 28px; | |
| font-size: 12px; | |
| font-family: 'Press Start 2P', cursive; | |
| text-transform: uppercase; | |
| letter-spacing: 2px; | |
| border: none; | |
| border-radius: 10px; | |
| cursor: pointer; | |
| background: | |
| radial-gradient( | |
| ellipse at 30% 30%, | |
| var(--btn-green-light) 0%, | |
| var(--btn-green) 40%, | |
| var(--btn-green-dark) 100% | |
| ); | |
| color: #fff; | |
| text-shadow: | |
| 0 1px 2px rgba(0, 0, 0, 0.6), | |
| 0 0 8px rgba(0, 255, 0, 0.3); | |
| box-shadow: | |
| 0 8px 0 var(--btn-green-shadow), | |
| 0 10px 16px rgba(0, 0, 0, 0.6), | |
| 0 14px 24px rgba(0, 0, 0, 0.4), | |
| inset 0 -3px 6px rgba(0, 0, 0, 0.4), | |
| inset 0 3px 6px rgba(255, 255, 255, 0.25), | |
| inset 0 0 0 1px rgba(255, 255, 255, 0.1); | |
| transform: translateY(0); | |
| transition: all 0.08s ease; | |
| position: relative; | |
| } | |
| /* Button top highlight */ | |
| .start-btn::before { | |
| content: ''; | |
| position: absolute; | |
| top: 4px; | |
| left: 12px; | |
| right: 12px; | |
| height: 1px; | |
| background: rgba(255, 255, 255, 0.3); | |
| border-radius: 50%; | |
| } | |
| .start-btn:hover { | |
| filter: brightness(1.15); | |
| transform: translateY(-1px); | |
| box-shadow: | |
| 0 9px 0 var(--btn-green-shadow), | |
| 0 12px 20px rgba(0, 0, 0, 0.7), | |
| 0 16px 28px rgba(0, 0, 0, 0.4), | |
| inset 0 -3px 6px rgba(0, 0, 0, 0.4), | |
| inset 0 3px 6px rgba(255, 255, 255, 0.25), | |
| inset 0 0 0 1px rgba(255, 255, 255, 0.1); | |
| } | |
| .start-btn:active { | |
| transform: translateY(5px); | |
| box-shadow: | |
| 0 3px 0 var(--btn-green-shadow), | |
| 0 5px 10px rgba(0, 0, 0, 0.6), | |
| 0 8px 16px rgba(0, 0, 0, 0.4), | |
| inset 0 -3px 6px rgba(0, 0, 0, 0.4), | |
| inset 0 3px 6px rgba(255, 255, 255, 0.25), | |
| inset 0 0 0 1px rgba(255, 255, 255, 0.1); | |
| } | |
| /* Pause Button Container */ | |
| .pause-btn-container { | |
| display: flex; | |
| justify-content: center; | |
| margin-bottom: 18px; | |
| } | |
| /* Direction Controls */ | |
| .direction-controls { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| gap: 10px; | |
| margin-top: 24px; | |
| } | |
| .control-row { | |
| display: flex; | |
| gap: 10px; | |
| } | |
| .arcade-btn { | |
| width: 60px; | |
| height: 60px; | |
| border-radius: 50%; | |
| border: none; | |
| cursor: pointer; | |
| font-size: 10px; | |
| font-family: 'Press Start 2P', cursive; | |
| color: #fff; | |
| text-shadow: | |
| 0 1px 2px rgba(0, 0, 0, 0.6), | |
| 0 0 6px rgba(255, 255, 255, 0.2); | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| transform: translateY(0); | |
| transition: all 0.08s ease; | |
| -webkit-tap-highlight-color: transparent; | |
| touch-action: manipulation; | |
| position: relative; | |
| } | |
| /* Button top highlight */ | |
| .arcade-btn::before { | |
| content: ''; | |
| position: absolute; | |
| top: 6px; | |
| left: 14px; | |
| right: 14px; | |
| height: 1px; | |
| background: rgba(255, 255, 255, 0.35); | |
| border-radius: 50%; | |
| } | |
| /* Red direction buttons */ | |
| .arcade-btn.red { | |
| background: | |
| radial-gradient( | |
| ellipse at 30% 30%, | |
| var(--btn-red-light) 0%, | |
| var(--btn-red) 40%, | |
| var(--btn-red-dark) 100% | |
| ); | |
| box-shadow: | |
| 0 7px 0 var(--btn-red-shadow), | |
| 0 9px 14px rgba(0, 0, 0, 0.6), | |
| 0 12px 20px rgba(0, 0, 0, 0.4), | |
| inset 0 -3px 6px rgba(0, 0, 0, 0.4), | |
| inset 0 3px 6px rgba(255, 255, 255, 0.25), | |
| inset 0 0 0 1px rgba(255, 255, 255, 0.1); | |
| } | |
| .arcade-btn.red:hover { | |
| filter: brightness(1.15); | |
| transform: translateY(-1px); | |
| box-shadow: | |
| 0 8px 0 var(--btn-red-shadow), | |
| 0 10px 16px rgba(0, 0, 0, 0.6), | |
| 0 14px 24px rgba(0, 0, 0, 0.4), | |
| inset 0 -3px 6px rgba(0, 0, 0, 0.4), | |
| inset 0 3px 6px rgba(255, 255, 255, 0.25), | |
| inset 0 0 0 1px rgba(255, 255, 255, 0.1); | |
| } | |
| .arcade-btn.red:active { | |
| transform: translateY(5px); | |
| box-shadow: | |
| 0 2px 0 var(--btn-red-shadow), | |
| 0 4px 8px rgba(0, 0, 0, 0.6), | |
| 0 6px 12px rgba(0, 0, 0, 0.4), | |
| inset 0 -3px 6px rgba(0, 0, 0, 0.4), | |
| inset 0 3px 6px rgba(255, 255, 255, 0.25), | |
| inset 0 0 0 1px rgba(255, 255, 255, 0.1); | |
| } | |
| /* Yellow direction buttons */ | |
| .arcade-btn.yellow { | |
| background: | |
| radial-gradient( | |
| ellipse at 30% 30%, | |
| var(--btn-yellow-light) 0%, | |
| var(--btn-yellow) 40%, | |
| var(--btn-yellow-dark) 100% | |
| ); | |
| box-shadow: | |
| 0 7px 0 var(--btn-yellow-shadow), | |
| 0 9px 14px rgba(0, 0, 0, 0.6), | |
| 0 12px 20px rgba(0, 0, 0, 0.4), | |
| inset 0 -3px 6px rgba(0, 0, 0, 0.4), | |
| inset 0 3px 6px rgba(255, 255, 255, 0.25), | |
| inset 0 0 0 1px rgba(255, 255, 255, 0.1); | |
| } | |
| .arcade-btn.yellow:hover { | |
| filter: brightness(1.15); | |
| transform: translateY(-1px); | |
| box-shadow: | |
| 0 8px 0 var(--btn-yellow-shadow), | |
| 0 10px 16px rgba(0, 0, 0, 0.6), | |
| 0 14px 24px rgba(0, 0, 0, 0.4), | |
| inset 0 -3px 6px rgba(0, 0, 0, 0.4), | |
| inset 0 3px 6px rgba(255, 255, 255, 0.25), | |
| inset 0 0 0 1px rgba(255, 255, 255, 0.1); | |
| } | |
| .arcade-btn.yellow:active { | |
| transform: translateY(5px); | |
| box-shadow: | |
| 0 2px 0 var(--btn-yellow-shadow), | |
| 0 4px 8px rgba(0, 0, 0, 0.6), | |
| 0 6px 12px rgba(0, 0, 0, 0.4), | |
| inset 0 -3px 6px rgba(0, 0, 0, 0.4), | |
| inset 0 3px 6px rgba(255, 255, 255, 0.25), | |
| inset 0 0 0 1px rgba(255, 255, 255, 0.1); | |
| } | |
| /* Placeholder button for layout */ | |
| .arcade-btn.placeholder { | |
| visibility: hidden; | |
| } | |
| /* ======================================== | |
| COIN SLOT | |
| ======================================== */ | |
| .coin-slot-area { | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| gap: 20px; | |
| margin-bottom: 20px; | |
| } | |
| .coin-slot { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| gap: 6px; | |
| } | |
| .coin-slot-label { | |
| font-size: 8px; | |
| color: var(--metal-chrome); | |
| letter-spacing: 2px; | |
| text-transform: uppercase; | |
| text-shadow: 0 1px 2px rgba(0, 0, 0, 0.8); | |
| } | |
| .coin-slot-opening { | |
| width: 48px; | |
| height: 8px; | |
| background: | |
| linear-gradient( | |
| 180deg, | |
| #020202 0%, | |
| #080808 50%, | |
| #050505 100% | |
| ); | |
| border: 3px solid var(--metal-mid); | |
| border-radius: 3px; | |
| box-shadow: | |
| inset 0 3px 8px rgba(0, 0, 0, 1), | |
| inset 0 -2px 4px rgba(0, 0, 0, 0.8), | |
| 0 2px 4px rgba(0, 0, 0, 0.6), | |
| 0 4px 8px rgba(0, 0, 0, 0.4), | |
| 0 0 0 1px var(--metal-dark); | |
| position: relative; | |
| overflow: hidden; | |
| cursor: pointer; | |
| transition: all 0.2s ease; | |
| } | |
| /* Metal bezel around coin slot */ | |
| .coin-slot-opening::before { | |
| content: ''; | |
| position: absolute; | |
| inset: 0; | |
| border-radius: 2px; | |
| background: linear-gradient( | |
| 180deg, | |
| rgba(255, 255, 255, 0.05) 0%, | |
| transparent 50%, | |
| rgba(0, 0, 0, 0.3) 100% | |
| ); | |
| pointer-events: none; | |
| } | |
| .coin-slot-opening:hover { | |
| border-color: var(--neon-yellow); | |
| box-shadow: | |
| inset 0 3px 8px rgba(0, 0, 0, 1), | |
| inset 0 -2px 4px rgba(0, 0, 0, 0.8), | |
| 0 2px 4px rgba(0, 0, 0, 0.6), | |
| 0 0 0 1px var(--metal-dark), | |
| 0 0 15px rgba(255, 255, 0, 0.4), | |
| 0 0 30px rgba(255, 255, 0, 0.2); | |
| } | |
| /* Animated coin */ | |
| .coin { | |
| position: absolute; | |
| width: 18px; | |
| height: 18px; | |
| background: | |
| radial-gradient( | |
| ellipse at 25% 25%, | |
| #ffe44d 0%, | |
| #ffd700 30%, | |
| #daa520 60%, | |
| #b8860b 100% | |
| ); | |
| border-radius: 50%; | |
| top: -24px; | |
| left: 50%; | |
| transform: translateX(-50%); | |
| opacity: 0; | |
| box-shadow: | |
| 0 3px 6px rgba(0, 0, 0, 0.5), | |
| inset 0 2px 4px rgba(255, 255, 255, 0.4), | |
| inset 0 -1px 2px rgba(0, 0, 0, 0.3); | |
| } | |
| /* Coin shine */ | |
| .coin::before { | |
| content: ''; | |
| position: absolute; | |
| top: 3px; | |
| left: 4px; | |
| right: 4px; | |
| height: 1px; | |
| background: rgba(255, 255, 255, 0.6); | |
| border-radius: 50%; | |
| } | |
| .coin-slot-opening.dropping .coin { | |
| animation: coinDrop 0.7s ease-in forwards; | |
| } | |
| @keyframes coinDrop { | |
| 0% { | |
| top: -24px; | |
| opacity: 1; | |
| transform: translateX(-50%) rotate(0deg); | |
| } | |
| 60% { | |
| top: 2px; | |
| opacity: 1; | |
| transform: translateX(-50%) rotate(180deg); | |
| } | |
| 80% { | |
| top: 4px; | |
| opacity: 0.8; | |
| } | |
| 100% { | |
| top: 24px; | |
| opacity: 0; | |
| transform: translateX(-50%) rotate(360deg); | |
| } | |
| } | |
| /* ======================================== | |
| CABINET SIDE PANELS | |
| ======================================== */ | |
| .cabinet-side { | |
| position: absolute; | |
| top: 0; | |
| bottom: 0; | |
| width: 8px; | |
| background: | |
| linear-gradient( | |
| 90deg, | |
| var(--metal-black) 0%, | |
| var(--metal-dark) 30%, | |
| var(--metal-mid) 70%, | |
| var(--metal-dark) 100% | |
| ); | |
| z-index: 0; | |
| } | |
| .cabinet-side.left { | |
| left: 0; | |
| background: linear-gradient( | |
| 90deg, | |
| var(--metal-dark) 0%, | |
| var(--metal-mid) 50%, | |
| var(--metal-dark) 100% | |
| ); | |
| box-shadow: | |
| inset 2px 0 6px rgba(0, 0, 0, 0.8), | |
| inset -1px 0 2px rgba(255, 255, 255, 0.03); | |
| } | |
| .cabinet-side.right { | |
| right: 0; | |
| background: linear-gradient( | |
| 90deg, | |
| var(--metal-dark) 0%, | |
| var(--metal-mid) 50%, | |
| var(--metal-dark) 100% | |
| ); | |
| box-shadow: | |
| inset -2px 0 6px rgba(0, 0, 0, 0.8), | |
| inset 1px 0 2px rgba(255, 255, 255, 0.03); | |
| } | |
| /* ======================================== | |
| CABINET DECORATIONS | |
| ======================================== */ | |
| .cabinet-screws { | |
| display: flex; | |
| justify-content: space-between; | |
| padding: 10px 20px; | |
| } | |
| .screw { | |
| width: 14px; | |
| height: 14px; | |
| background: | |
| radial-gradient( | |
| circle at 35% 35%, | |
| var(--metal-chrome) 0%, | |
| var(--metal-light) 40%, | |
| var(--metal-mid) 70%, | |
| var(--metal-dark) 100% | |
| ); | |
| border-radius: 50%; | |
| box-shadow: | |
| inset 0 2px 4px rgba(255, 255, 255, 0.3), | |
| inset 0 -1px 2px rgba(0, 0, 0, 0.4), | |
| 0 2px 4px rgba(0, 0, 0, 0.6), | |
| 0 3px 6px rgba(0, 0, 0, 0.3); | |
| position: relative; | |
| } | |
| /* Screw head slot */ | |
| .screw::before { | |
| content: ''; | |
| position: absolute; | |
| top: 50%; | |
| left: 50%; | |
| transform: translate(-50%, -50%); | |
| width: 10px; | |
| height: 2px; | |
| background: var(--metal-dark); | |
| box-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); | |
| } | |
| /* Screw head cross slot */ | |
| .screw::after { | |
| content: ''; | |
| position: absolute; | |
| top: 50%; | |
| left: 50%; | |
| transform: translate(-50%, -50%); | |
| width: 2px; | |
| height: 10px; | |
| background: var(--metal-dark); | |
| box-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); | |
| } | |
| /* ======================================== | |
| BRAND PLAQUE | |
| ======================================== */ | |
| .brand-plaque { | |
| background: | |
| linear-gradient( | |
| 180deg, | |
| #d4af37 0%, | |
| #b8960c 20%, | |
| #9a7b0a 50%, | |
| #7a6108 80%, | |
| #5c4a06 100% | |
| ); | |
| border: 3px solid #3d3104; | |
| border-radius: 6px; | |
| padding: 10px 20px; | |
| margin: 10px 24px; | |
| text-align: center; | |
| box-shadow: | |
| inset 0 3px 6px rgba(255, 255, 255, 0.4), | |
| inset 0 -3px 6px rgba(0, 0, 0, 0.5), | |
| 0 3px 8px rgba(0, 0, 0, 0.6), | |
| 0 6px 12px rgba(0, 0, 0, 0.4), | |
| 0 0 0 2px #3d3104, | |
| 0 0 15px rgba(212, 175, 55, 0.2); | |
| position: relative; | |
| transform-style: preserve-3d; | |
| } | |
| /* Brushed brass effect */ | |
| .brand-plaque::before { | |
| content: ''; | |
| position: absolute; | |
| inset: 0; | |
| background: repeating-linear-gradient( | |
| 90deg, | |
| transparent, | |
| transparent 3px, | |
| rgba(255, 255, 255, 0.08) 3px, | |
| rgba(255, 255, 255, 0.08) 4px | |
| ); | |
| border-radius: 4px; | |
| pointer-events: none; | |
| } | |
| /* Plaque inner shadow */ | |
| .brand-plaque::after { | |
| content: ''; | |
| position: absolute; | |
| inset: 4px; | |
| border: 1px solid rgba(255, 255, 255, 0.15); | |
| border-radius: 3px; | |
| pointer-events: none; | |
| } | |
| .brand-plaque-text { | |
| font-size: 9px; | |
| color: #2a2005; | |
| text-transform: uppercase; | |
| letter-spacing: 3px; | |
| font-weight: bold; | |
| text-shadow: | |
| 0 1px 0 rgba(255, 255, 255, 0.4), | |
| 0 -1px 0 rgba(0, 0, 0, 0.2); | |
| position: relative; | |
| z-index: 1; | |
| } | |
| /* ======================================== | |
| CONTROL PANEL RECESSED AREA | |
| ======================================== */ | |
| .control-panel-recess { | |
| background: | |
| linear-gradient( | |
| 180deg, | |
| #050505 0%, | |
| #0a0a0a 50%, | |
| #050505 100% | |
| ); | |
| border-radius: 8px; | |
| padding: 20px; | |
| margin: 12px; | |
| box-shadow: | |
| inset 0 4px 12px rgba(0, 0, 0, 0.9), | |
| inset 0 -2px 6px rgba(0, 0, 0, 0.7), | |
| 0 1px 0 rgba(255, 255, 255, 0.02); | |
| position: relative; | |
| } | |
| /* Recessed edge highlight */ | |
| .control-panel-recess::before { | |
| content: ''; | |
| position: absolute; | |
| inset: 0; | |
| border-radius: 8px; | |
| border: 1px solid #151515; | |
| pointer-events: none; | |
| } | |
| /* ======================================== | |
| JOYSTICK BASE | |
| ======================================== */ | |
| .joystick-base { | |
| width: 80px; | |
| height: 80px; | |
| background: | |
| radial-gradient( | |
| circle at 30% 30%, | |
| var(--metal-light) 0%, | |
| var(--metal-mid) 40%, | |
| var(--metal-dark) 70%, | |
| var(--metal-black) 100% | |
| ); | |
| border-radius: 50%; | |
| position: relative; | |
| box-shadow: | |
| inset 0 4px 8px rgba(0, 0, 0, 0.6), | |
| inset 0 -2px 6px rgba(255, 255, 255, 0.05), | |
| 0 4px 12px rgba(0, 0, 0, 0.5); | |
| } | |
| .joystick-base::before { | |
| content: ''; | |
| position: absolute; | |
| top: 50%; | |
| left: 50%; | |
| transform: translate(-50%, -50%); | |
| width: 50px; | |
| height: 50px; | |
| background: | |
| radial-gradient( | |
| circle, | |
| var(--metal-dark) 0%, | |
| var(--metal-black) 100% | |
| ); | |
| border-radius: 50%; | |
| box-shadow: | |
| inset 0 2px 4px rgba(0, 0, 0, 0.8), | |
| 0 0 0 2px var(--metal-mid); | |
| } | |
| /* ======================================== | |
| CABLE MANAGEMENT | |
| ======================================== */ | |
| .cable-ties { | |
| display: flex; | |
| gap: 6px; | |
| padding: 8px 20px; | |
| justify-content: center; | |
| } | |
| .cable-tie { | |
| width: 30px; | |
| height: 4px; | |
| background: | |
| linear-gradient( | |
| 180deg, | |
| #333 0%, | |
| #222 50%, | |
| #333 100% | |
| ); | |
| border-radius: 2px; | |
| box-shadow: | |
| inset 0 1px 2px rgba(0, 0, 0, 0.5), | |
| 0 1px 1px rgba(255, 255, 255, 0.05); | |
| } | |
| .cable-tie::before { | |
| content: ''; | |
| position: absolute; | |
| right: -8px; | |
| top: 50%; | |
| transform: translateY(-50%); | |
| width: 8px; | |
| height: 6px; | |
| background: | |
| linear-gradient( | |
| 180deg, | |
| #333 0%, | |
| #222 100% | |
| ); | |
| border-radius: 1px; | |
| clip-path: polygon(0 20%, 100% 0, 100% 100%, 0 80%); | |
| } | |
| /* ======================================== | |
| SPEAKER GRILLE | |
| ======================================== */ | |
| .speaker-grille { | |
| background: | |
| linear-gradient( | |
| 180deg, | |
| var(--metal-dark) 0%, | |
| var(--metal-black) 50%, | |
| var(--metal-dark) 100% | |
| ); | |
| padding: 18px 24px; | |
| display: flex; | |
| justify-content: center; | |
| align-items: center; | |
| border-top: 4px solid var(--metal-black); | |
| border-bottom: 4px solid var(--metal-black); | |
| position: relative; | |
| box-shadow: | |
| inset 0 3px 10px rgba(0, 0, 0, 0.9), | |
| inset 0 -3px 10px rgba(0, 0, 0, 0.7), | |
| 0 3px 6px rgba(0, 0, 0, 0.5); | |
| } | |
| /* Speaker grille mesh texture */ | |
| .speaker-grille::before { | |
| content: ''; | |
| position: absolute; | |
| inset: 0; | |
| background: repeating-linear-gradient( | |
| 45deg, | |
| transparent, | |
| transparent 2px, | |
| rgba(0, 0, 0, 0.3) 2px, | |
| rgba(0, 0, 0, 0.3) 3px | |
| ); | |
| pointer-events: none; | |
| opacity: 0.5; | |
| } | |
| .speaker-holes { | |
| display: grid; | |
| grid-template-columns: repeat(12, 1fr); | |
| gap: 8px; | |
| padding: 10px 16px; | |
| } | |
| .speaker-hole { | |
| width: 8px; | |
| height: 8px; | |
| background: | |
| radial-gradient( | |
| circle at 35% 35%, | |
| var(--grille-bg) 0%, | |
| var(--grille-hole) 60% | |
| ); | |
| border-radius: 50%; | |
| box-shadow: | |
| inset 0 2px 4px rgba(0, 0, 0, 1), | |
| 0 1px 2px rgba(0, 0, 0, 0.8), | |
| inset 0 0 0 1px #1a1a1a; | |
| } | |
| /* ======================================== | |
| CABINET VENTS | |
| ======================================== */ | |
| .cabinet-vents { | |
| display: flex; | |
| justify-content: space-between; | |
| padding: 0 16px 16px; | |
| } | |
| .vent-slot { | |
| width: 90px; | |
| height: 5px; | |
| background: | |
| linear-gradient( | |
| 90deg, | |
| var(--vent-color) 0%, | |
| var(--vent-shadow) 40%, | |
| #000000 50%, | |
| var(--vent-shadow) 60%, | |
| var(--vent-color) 100% | |
| ); | |
| border-radius: 3px; | |
| box-shadow: | |
| inset 0 2px 4px rgba(0, 0, 0, 1), | |
| 0 1px 2px rgba(0, 0, 0, 0.8), | |
| inset 0 0 0 1px #1a1a1a; | |
| position: relative; | |
| } | |
| /* Vent inner slats */ | |
| .vent-slot::before { | |
| content: ''; | |
| position: absolute; | |
| inset: 2px; | |
| background: repeating-linear-gradient( | |
| 90deg, | |
| transparent, | |
| transparent 8px, | |
| rgba(0, 0, 0, 0.8) 8px, | |
| rgba(0, 0, 0, 0.8) 10px | |
| ); | |
| border-radius: 2px; | |
| } | |
| /* ======================================== | |
| GAME OVER SHAKE | |
| ======================================== */ | |
| .game-over-shake { | |
| animation: shake 0.5s ease-in-out; | |
| } | |
| @keyframes shake { | |
| 0%, 100% { transform: translateX(0); } | |
| 25% { transform: translateX(-5px); } | |
| 75% { transform: translateX(5px); } | |
| } | |
| /* ======================================== | |
| SCORE UPDATE ANIMATION | |
| ======================================== */ | |
| .score-update .led-value { | |
| animation: scorePopup 0.3s ease-out; | |
| } | |
| @keyframes scorePopup { | |
| 0% { transform: scale(1); } | |
| 50% { transform: scale(1.2); } | |
| 100% { transform: scale(1); } | |
| } | |
| /* ======================================== | |
| CABINET EDGE DETAILS | |
| ======================================== */ | |
| .cabinet-edge-top { | |
| height: 6px; | |
| background: | |
| linear-gradient( | |
| 180deg, | |
| var(--metal-highlight) 0%, | |
| var(--metal-mid) 30%, | |
| var(--metal-dark) 70%, | |
| var(--metal-black) 100% | |
| ); | |
| border-bottom: 2px solid var(--metal-black); | |
| box-shadow: | |
| inset 0 1px 2px rgba(255, 255, 255, 0.1), | |
| 0 2px 4px rgba(0, 0, 0, 0.5); | |
| } | |
| .cabinet-edge-bottom { | |
| height: 6px; | |
| background: | |
| linear-gradient( | |
| 180deg, | |
| var(--metal-black) 0%, | |
| var(--metal-dark) 30%, | |
| var(--metal-mid) 70%, | |
| var(--metal-highlight) 100% | |
| ); | |
| border-top: 2px solid var(--metal-black); | |
| box-shadow: | |
| inset 0 -1px 2px rgba(255, 255, 255, 0.05), | |
| 0 -2px 4px rgba(0, 0, 0, 0.4); | |
| } | |
| /* ======================================== | |
| BUTTON BEZEL RINGS | |
| ======================================== */ | |
| .arcade-btn-bezel { | |
| width: 66px; | |
| height: 66px; | |
| background: | |
| radial-gradient( | |
| circle, | |
| var(--metal-dark) 0%, | |
| var(--metal-black) 70% | |
| ); | |
| border-radius: 50%; | |
| display: flex; | |
| align-items: center; | |
| justify-content: center; | |
| box-shadow: | |
| inset 0 2px 6px rgba(0, 0, 0, 0.9), | |
| inset 0 -1px 3px rgba(255, 255, 255, 0.02), | |
| 0 2px 4px rgba(0, 0, 0, 0.5), | |
| 0 4px 8px rgba(0, 0, 0, 0.3), | |
| 0 0 0 2px var(--metal-mid), | |
| 0 0 0 3px var(--metal-dark); | |
| position: relative; | |
| } | |
| /* Bezel inner ring */ | |
| .arcade-btn-bezel::before { | |
| content: ''; | |
| position: absolute; | |
| inset: 3px; | |
| border-radius: 50%; | |
| border: 1px solid var(--metal-light); | |
| opacity: 0.3; | |
| box-shadow: inset 0 1px 2px rgba(255, 255, 255, 0.1); | |
| } | |
| /* ======================================== | |
| CONTROL PANEL BUTTON GROUP | |
| ======================================== */ | |
| .button-group { | |
| display: flex; | |
| align-items: center; | |
| gap: 12px; | |
| padding: 12px; | |
| background: | |
| linear-gradient( | |
| 180deg, | |
| #0a0a0a 0%, | |
| #080808 100% | |
| ); | |
| border-radius: 8px; | |
| box-shadow: | |
| inset 0 2px 6px rgba(0, 0, 0, 0.8), | |
| 0 1px 0 rgba(255, 255, 255, 0.02); | |
| } | |
| /* ======================================== | |
| LED INDICATOR LIGHTS | |
| ======================================== */ | |
| .led-indicator { | |
| width: 8px; | |
| height: 8px; | |
| border-radius: 50%; | |
| background: | |
| radial-gradient( | |
| circle at 30% 30%, | |
| var(--led-red-light) 0%, | |
| var(--led-red) 50%, | |
| var(--led-red-dark) 100% | |
| ); | |
| box-shadow: | |
| 0 0 8px var(--led-glow), | |
| 0 0 16px rgba(255, 51, 51, 0.4), | |
| inset 0 1px 2px rgba(255, 255, 255, 0.3); | |
| animation: ledPulse 2s infinite; | |
| } | |
| .led-indicator.green { | |
| background: | |
| radial-gradient( | |
| circle at 30% 30%, | |
| var(--btn-green-light) 0%, | |
| var(--btn-green) 50%, | |
| var(--btn-green-dark) 100% | |
| ); | |
| box-shadow: | |
| 0 0 8px rgba(0, 255, 0, 0.6), | |
| 0 0 16px rgba(0, 255, 0, 0.3), | |
| inset 0 1px 2px rgba(255, 255, 255, 0.3); | |
| } | |
| .led-indicator.yellow { | |
| background: | |
| radial-gradient( | |
| circle at 30% 30%, | |
| var(--btn-yellow-light) 0%, | |
| var(--btn-yellow) 50%, | |
| var(--btn-yellow-dark) 100% | |
| ); | |
| box-shadow: | |
| 0 0 8px rgba(255, 221, 68, 0.6), | |
| 0 0 16px rgba(255, 221, 68, 0.3), | |
| inset 0 1px 2px rgba(255, 255, 255, 0.3); | |
| } | |
| @keyframes ledPulse { | |
| 0%, 100% { opacity: 1; } | |
| 50% { opacity: 0.7; } | |
| } | |
| .led-indicator-row { | |
| display: flex; | |
| gap: 8px; | |
| justify-content: center; | |
| padding: 8px 0; | |
| } | |
| /* ======================================== | |
| POWER SWITCH | |
| ======================================== */ | |
| .power-switch-container { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| gap: 4px; | |
| } | |
| .power-switch-label { | |
| font-size: 6px; | |
| color: var(--metal-chrome); | |
| letter-spacing: 1px; | |
| text-transform: uppercase; | |
| } | |
| .power-switch { | |
| width: 24px; | |
| height: 14px; | |
| background: | |
| linear-gradient( | |
| 180deg, | |
| var(--metal-mid) 0%, | |
| var(--metal-dark) 100% | |
| ); | |
| border-radius: 7px; | |
| border: 2px solid var(--metal-light); | |
| box-shadow: | |
| inset 0 2px 4px rgba(0, 0, 0, 0.6), | |
| 0 2px 4px rgba(0, 0, 0, 0.4); | |
| position: relative; | |
| cursor: pointer; | |
| } | |
| .power-switch::before { | |
| content: ''; | |
| position: absolute; | |
| top: 2px; | |
| left: 2px; | |
| width: 8px; | |
| height: 6px; | |
| background: | |
| linear-gradient( | |
| 180deg, | |
| var(--btn-green-light) 0%, | |
| var(--btn-green) 100% | |
| ); | |
| border-radius: 3px; | |
| box-shadow: | |
| 0 0 4px rgba(0, 255, 0, 0.5), | |
| 0 0 8px rgba(0, 255, 0, 0.3), | |
| inset 0 1px 2px rgba(255, 255, 255, 0.3); | |
| animation: powerPulse 3s infinite ease-in-out; | |
| } | |
| @keyframes powerPulse { | |
| 0%, 100% { | |
| opacity: 1; | |
| box-shadow: | |
| 0 0 4px rgba(0, 255, 0, 0.5), | |
| 0 0 8px rgba(0, 255, 0, 0.3), | |
| inset 0 1px 2px rgba(255, 255, 255, 0.3); | |
| } | |
| 50% { | |
| opacity: 0.85; | |
| box-shadow: | |
| 0 0 6px rgba(0, 255, 0, 0.6), | |
| 0 0 12px rgba(0, 255, 0, 0.4), | |
| inset 0 1px 2px rgba(255, 255, 255, 0.3); | |
| } | |
| } | |
| /* ======================================== | |
| VOLUME KNOB | |
| ======================================== */ | |
| .volume-knob { | |
| width: 28px; | |
| height: 28px; | |
| background: | |
| radial-gradient( | |
| circle at 30% 30%, | |
| var(--metal-light) 0%, | |
| var(--metal-mid) 40%, | |
| var(--metal-dark) 70%, | |
| var(--metal-black) 100% | |
| ); | |
| border-radius: 50%; | |
| border: 2px solid var(--metal-chrome); | |
| box-shadow: | |
| inset 0 2px 4px rgba(0, 0, 0, 0.6), | |
| inset 0 -1px 2px rgba(255, 255, 255, 0.05), | |
| 0 3px 6px rgba(0, 0, 0, 0.5), | |
| 0 5px 10px rgba(0, 0, 0, 0.3); | |
| position: relative; | |
| cursor: pointer; | |
| transition: transform 0.1s ease; | |
| } | |
| .volume-knob:hover { | |
| transform: scale(1.05); | |
| } | |
| .volume-knob:active { | |
| transform: scale(0.98); | |
| } | |
| .volume-knob::before { | |
| content: ''; | |
| position: absolute; | |
| top: 4px; | |
| left: 50%; | |
| transform: translateX(-50%); | |
| width: 2px; | |
| height: 6px; | |
| background: var(--metal-black); | |
| border-radius: 1px; | |
| } | |
| .volume-knob-label { | |
| font-size: 6px; | |
| color: var(--metal-chrome); | |
| letter-spacing: 1px; | |
| text-transform: uppercase; | |
| margin-top: 4px; | |
| } | |
| .volume-control { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| } | |
| /* ======================================== | |
| DECORATIVE RIVETS | |
| ======================================== */ | |
| .rivets-row { | |
| display: flex; | |
| justify-content: center; | |
| gap: 40px; | |
| padding: 8px 0; | |
| } | |
| .rivet { | |
| width: 8px; | |
| height: 8px; | |
| background: | |
| radial-gradient( | |
| circle at 35% 35%, | |
| var(--metal-chrome) 0%, | |
| var(--metal-light) 40%, | |
| var(--metal-mid) 70%, | |
| var(--metal-dark) 100% | |
| ); | |
| border-radius: 50%; | |
| box-shadow: | |
| inset 0 1px 2px rgba(255, 255, 255, 0.3), | |
| 0 1px 2px rgba(0, 0, 0, 0.5); | |
| } | |
| .rivet::before { | |
| content: ''; | |
| position: absolute; | |
| top: 50%; | |
| left: 50%; | |
| transform: translate(-50%, -50%); | |
| width: 4px; | |
| height: 1px; | |
| background: var(--metal-dark); | |
| } | |
| /* ======================================== | |
| RESPONSIVE DESIGN | |
| ======================================== */ | |
| @media (max-width: 480px) { | |
| body { | |
| padding: 10px; | |
| } | |
| .arcade-cabinet { | |
| border-radius: 14px; | |
| padding: 3px; | |
| } | |
| .cabinet-inner { | |
| border-radius: 10px; | |
| } | |
| .marquee { | |
| padding: 18px 20px; | |
| } | |
| .marquee-title { | |
| font-size: 18px; | |
| letter-spacing: 2px; | |
| } | |
| .marquee-subtitle { | |
| font-size: 7px; | |
| letter-spacing: 2px; | |
| } | |
| .rivets-row { | |
| gap: 30px; | |
| } | |
| .rivet { | |
| width: 6px; | |
| height: 6px; | |
| } | |
| .led-display-panel { | |
| padding: 14px 16px; | |
| } | |
| .led-value { | |
| font-size: 16px; | |
| min-width: 60px; | |
| } | |
| .led-label { | |
| font-size: 6px; | |
| } | |
| .screen-bezel { | |
| padding: 12px; | |
| margin: 0 8px; | |
| border-radius: 8px; | |
| } | |
| .crt-screen { | |
| border-radius: 6px; | |
| min-height: 250px; | |
| } | |
| .game-overlay h2 { | |
| font-size: 16px; | |
| letter-spacing: 3px; | |
| } | |
| .final-score { | |
| font-size: 11px; | |
| } | |
| .new-high-score { | |
| font-size: 9px; | |
| } | |
| .level-select { | |
| width: 160px; | |
| padding: 12px 14px; | |
| font-size: 9px; | |
| } | |
| .start-btn { | |
| width: 160px; | |
| padding: 14px 20px; | |
| font-size: 10px; | |
| } | |
| .control-panel { | |
| padding: 16px; | |
| } | |
| .coin-slot-opening { | |
| width: 40px; | |
| height: 6px; | |
| } | |
| .coin { | |
| width: 14px; | |
| height: 14px; | |
| } | |
| .power-switch { | |
| width: 20px; | |
| height: 12px; | |
| } | |
| .volume-knob { | |
| width: 24px; | |
| height: 24px; | |
| } | |
| .volume-knob-label, | |
| .power-switch-label { | |
| font-size: 5px; | |
| } | |
| .led-indicator { | |
| width: 6px; | |
| height: 6px; | |
| } | |
| .arcade-btn-bezel { | |
| width: 54px; | |
| height: 54px; | |
| } | |
| .arcade-btn { | |
| width: 48px; | |
| height: 48px; | |
| font-size: 8px; | |
| } | |
| .speaker-grille { | |
| padding: 12px 16px; | |
| } | |
| .speaker-holes { | |
| gap: 6px; | |
| padding: 8px 12px; | |
| } | |
| .speaker-hole { | |
| width: 6px; | |
| height: 6px; | |
| } | |
| .vent-slot { | |
| width: 60px; | |
| height: 4px; | |
| } | |
| .brand-plaque { | |
| padding: 8px 16px; | |
| margin: 8px 16px; | |
| } | |
| .brand-plaque-text { | |
| font-size: 7px; | |
| letter-spacing: 2px; | |
| } | |
| .screw { | |
| width: 12px; | |
| height: 12px; | |
| } | |
| } | |
| /* ======================================== | |
| PREFERS REDUCED MOTION | |
| ======================================== */ | |
| @media (prefers-reduced-motion: reduce) { | |
| *, | |
| *::before, | |
| *::after { | |
| animation-duration: 0.01ms ; | |
| animation-iteration-count: 1 ; | |
| transition-duration: 0.01ms ; | |
| } | |
| } | |