* { margin: 0; padding: 0; box-sizing: border-box; } body { background: radial-gradient(circle at 20% 20%, #3b0066, #0c001a 70%); background-size: 100% 100%; background-attachment: fixed; font-family: 'Poppins', sans-serif; color: white; text-align: center; min-height: 100vh; height: 100vh; display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 10px; overflow: hidden; position: relative; } /* ADDED: Animated Grid Pattern (optional, bisa dihapus kalau ga suka) */ body::before { content: ''; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-image: linear-gradient(rgba(0, 234, 255, 0.02) 1px, transparent 1px), linear-gradient(90deg, rgba(255, 0, 255, 0.02) 1px, transparent 1px); background-size: 40px 40px; animation: gridMove 25s linear infinite; z-index: 0; pointer-events: none; } @keyframes gridMove { 0% { transform: translate(0, 0); } 100% { transform: translate(40px, 40px); } } /* ADDED: Floating gradient blobs for depth */ body::after { content: ''; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: radial-gradient(ellipse at 10% 20%, rgba(0, 234, 255, 0.08), transparent 50%), radial-gradient(ellipse at 90% 80%, rgba(255, 0, 255, 0.08), transparent 50%), radial-gradient(ellipse at 50% 50%, rgba(138, 43, 226, 0.05), transparent 60%); filter: blur(60px); animation: blobFloat 20s ease-in-out infinite; z-index: 0; pointer-events: none; } @keyframes blobFloat { 0%, 100% { transform: translate(0, 0) scale(1); opacity: 0.6; } 50% { transform: translate(30px, -30px) scale(1.1); opacity: 0.8; } } /* ====================== GAME CONTAINER ====================== */ .game-container { width: 100%; max-width: 480px; margin: 0 auto; display: flex; flex-direction: column; align-items: center; transform: scale(0.95); } /* ====================== HEADER - All Centered Vertically ====================== */ .game-header { display: flex; flex-direction: column; align-items: center; margin-bottom: 20px; width: 100%; } h1 { font-size: clamp(42px, 7vw, 68px); font-weight: 800; text-shadow: 0 0 25px #00eaff, 0 0 45px #0099ff; letter-spacing: clamp(4px, 1vw, 8px); margin: 0 0 clamp(10px, 1.5vh, 16px) 0; line-height: 1; } /* Score Container - Centered below title */ .score-container { display: flex; gap: clamp(10px, 2vw, 14px); justify-content: center; margin-bottom: clamp(12px, 2vh, 16px); } .score-box { background: rgba(30, 0, 50, 0.85); backdrop-filter: blur(15px); border: 2px solid rgba(0, 217, 255, 0.45); border-radius: 12px; padding: clamp(10px, 1.5vh, 12px) clamp(20px, 3vw, 26px); min-width: clamp(85px, 12vw, 105px); box-shadow: 0 5px 20px rgba(0, 0, 0, 0.4), 0 0 20px rgba(0, 217, 255, 0.25), inset 0 1px 0 rgba(255, 255, 255, 0.1); transition: all 0.3s ease; } .score-box:hover { border-color: rgba(0, 217, 255, 0.7); box-shadow: 0 5px 20px rgba(0, 0, 0, 0.4), 0 0 30px rgba(0, 217, 255, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15); } .score-label { font-size: clamp(10px, 1.3vw, 12px); text-transform: uppercase; color: rgba(0, 234, 255, 0.85); letter-spacing: 1.2px; margin-bottom: 5px; font-weight: 700; } .score-value { font-size: clamp(22px, 3vw, 28px); font-weight: 800; color: white; text-shadow: 0 0 12px rgba(0, 234, 255, 0.9); line-height: 1; } /* ====================== TOP CONTROLS - Icon Buttons (Top Right) ====================== */ .top-controls { position: fixed; top: clamp(10px, 2vh, 20px); right: clamp(10px, 2vw, 20px); display: flex; gap: clamp(8px, 1.5vw, 12px); z-index: 100; } .sound-controls { position: fixed; top: clamp(10px, 2vh, 20px); left: clamp(10px, 2vw, 20px); display: flex; gap: clamp(8px, 1.5vw, 12px); z-index: 100; } /* Sound Button Styling */ .btn-sound { position: relative; width: clamp(36px, 6vw, 48px); height: clamp(36px, 6vw, 48px); padding: 0; background: rgba(30, 0, 50, 0.85); backdrop-filter: blur(15px); border: 2px solid rgba(0, 217, 255, 0.45); border-radius: 12px; cursor: pointer; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 18px rgba(0, 0, 0, 0.35), 0 0 20px rgba(0, 217, 255, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.1); } .btn-sound svg { width: clamp(18px, 3vw, 24px); height: clamp(18px, 3vw, 24px); color: rgba(0, 234, 255, 0.9); transition: all 0.3s ease; position: absolute; } /* BG Music Button - Purple */ #btn-sound-bg { background: rgba(50, 0, 70, 0.85); border-color: rgba(200, 100, 255, 0.45); } #btn-sound-bg svg { color: rgba(200, 100, 255, 0.9); } #btn-sound-bg:hover { background: rgba(200, 100, 255, 0.15); border-color: rgba(200, 100, 255, 0.8); box-shadow: 0 6px 25px rgba(0, 0, 0, 0.45), 0 0 35px rgba(200, 100, 255, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15); } #btn-sound-bg:hover svg { color: rgba(200, 100, 255, 1); } /* Pop SFX Button - Cyan */ #btn-sound-pop { background: rgba(0, 40, 50, 0.85); border-color: rgba(0, 234, 255, 0.45); } #btn-sound-pop svg { color: rgba(0, 234, 255, 0.9); } #btn-sound-pop:hover { background: rgba(0, 234, 255, 0.15); border-color: rgba(0, 234, 255, 0.8); box-shadow: 0 6px 25px rgba(0, 0, 0, 0.45), 0 0 35px rgba(0, 234, 255, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15); } #btn-sound-pop:hover svg { color: rgba(0, 234, 255, 1); } /* Merge SFX Button - Orange/Yellow */ #btn-sound-merge { background: rgba(60, 30, 0, 0.85); border-color: rgba(255, 170, 0, 0.45); } #btn-sound-merge svg { color: rgba(255, 170, 0, 0.9); } #btn-sound-merge:hover { background: rgba(255, 170, 0, 0.15); border-color: rgba(255, 170, 0, 0.8); box-shadow: 0 6px 25px rgba(0, 0, 0, 0.45), 0 0 35px rgba(255, 170, 0, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15); } #btn-sound-merge:hover svg { color: rgba(255, 170, 0, 1); } /* Hover & Active States */ .btn-sound:hover { transform: translateY(-2px); } .btn-sound:active { transform: translateY(0); box-shadow: 0 2px 12px rgba(0, 0, 0, 0.35), 0 0 20px rgba(0, 234, 255, 0.3), inset 0 2px 6px rgba(0, 0, 0, 0.25); } /* Muted State - Red with X */ .btn-sound.muted { background: rgba(60, 0, 10, 0.85) !important; border-color: rgba(255, 50, 50, 0.6) !important; box-shadow: 0 4px 18px rgba(0, 0, 0, 0.35), 0 0 20px rgba(255, 50, 50, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1) !important; } .btn-sound.muted svg.sound-icon { display: none !important; } .btn-sound.muted svg.mute-icon { display: block !important; color: rgba(255, 80, 80, 0.9) !important; } .btn-sound.muted:hover { background: rgba(255, 50, 50, 0.2) !important; border-color: rgba(255, 80, 80, 0.8) !important; box-shadow: 0 6px 25px rgba(0, 0, 0, 0.45), 0 0 35px rgba(255, 50, 50, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.15) !important; } .btn-sound.muted:hover svg.mute-icon { color: rgba(255, 100, 100, 1) !important; } /* Icon Transitions */ .btn-sound svg.sound-icon, .btn-sound svg.mute-icon { transition: all 0.3s ease; } .btn-sound:hover svg { transform: scale(1.1); } /* FORCE tombol sound untuk selalu visible */ .btn-sound-main { display: flex !important; position: relative !important; z-index: 103 !important; } .volume-panel { position: relative !important; z-index: 102 !important; } /* Mobile Responsive */ @media (max-width: 768px) { .sound-controls { flex-direction: column; gap: clamp(6px, 1.2vw, 10px); } } .icon-btn { width: clamp(36px, 6vw, 48px); height: clamp(36px, 6vw, 48px); padding: 0; background: rgba(30, 0, 50, 0.85); backdrop-filter: blur(15px); border: 2px solid rgba(0, 217, 255, 0.45); border-radius: 12px; cursor: pointer; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); display: flex; align-items: center; justify-content: center; box-shadow: 0 4px 18px rgba(0, 0, 0, 0.35), 0 0 20px rgba(0, 217, 255, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.1); } .icon-btn svg { width: clamp(18px, 3vw, 24px); height: clamp(18px, 3vw, 24px); color: rgba(0, 234, 255, 0.9); transition: all 0.3s ease; } .icon-btn:hover { background: rgba(0, 234, 255, 0.15); border-color: rgba(0, 234, 255, 0.8); box-shadow: 0 6px 25px rgba(0, 0, 0, 0.45), 0 0 35px rgba(0, 234, 255, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15); transform: translateY(-2px); } .icon-btn:hover svg { color: rgba(0, 234, 255, 1); transform: scale(1.1); } .btn-restart-icon:hover svg { transform: scale(1.1) rotate(180deg); } .icon-btn:active { transform: translateY(0); box-shadow: 0 2px 12px rgba(0, 0, 0, 0.35), 0 0 20px rgba(0, 234, 255, 0.3), inset 0 2px 6px rgba(0, 0, 0, 0.25); } /* Tutorial Button Specific */ .btn-tutorial { background: rgba(50, 0, 70, 0.85); border-color: rgba(200, 100, 255, 0.45); } .btn-tutorial svg { color: rgba(200, 100, 255, 0.9); } .btn-tutorial:hover { background: rgba(200, 100, 255, 0.15); border-color: rgba(200, 100, 255, 0.8); box-shadow: 0 6px 25px rgba(0, 0, 0, 0.45), 0 0 35px rgba(200, 100, 255, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15); } .btn-tutorial:hover svg { color: rgba(200, 100, 255, 1); } /* ========================== BOARD ========================== */ #board { width: 100%; max-width: min(480px, 85vmin); aspect-ratio: 1; margin: 0 auto; padding: clamp(10px, 2vmin, 18px); display: grid; grid-template-columns: repeat(4, 1fr); grid-template-rows: repeat(4, 1fr); gap: clamp(6px, 1.2vmin, 12px); background: rgba(30, 0, 50, 0.65); backdrop-filter: blur(12px); border: 2px solid rgba(0, 217, 255, 0.35); border-radius: 20px; box-shadow: 0 25px 70px rgba(0, 0, 0, 0.6), 0 0 45px rgba(0, 217, 255, 0.35), inset 0 0 35px rgba(0, 217, 255, 0.12); animation: glowBorderBoard 3.5s ease-in-out infinite; position: relative; z-index: 2; } @keyframes glowBorderBoard { 0%, 100% { border-color: rgba(0, 217, 255, 0.4); box-shadow: 0 25px 70px rgba(0, 0, 0, 0.6), 0 0 45px rgba(0, 217, 255, 0.35), inset 0 0 35px rgba(0, 217, 255, 0.12); } 50% { border-color: rgba(255, 0, 255, 0.55); box-shadow: 0 25px 70px rgba(0, 0, 0, 0.6), 0 0 55px rgba(255, 0, 255, 0.45), inset 0 0 45px rgba(255, 0, 255, 0.18); } } #board::after { content: ""; position: absolute; bottom: -40px; left: 50%; transform: translateX(-50%); width: 360px; height: 90px; background: radial-gradient(ellipse at center, rgba(0,234,255,0.14), transparent 65%); filter: blur(35px); z-index: -1; } /* ====================== TILE ====================== */ .tile { width: 100%; height: 100%; border-radius: clamp(8px, 1.8vmin, 14px); display: flex; align-items: center; justify-content: center; font-size: clamp(20px, 3.5vmin, 32px); font-weight: 800; color: white; background: rgba(255, 255, 255, 0.07); text-shadow: 0 0 12px rgba(255, 255, 255, 0.9); transition: transform 0.15s cubic-bezier(.2,.85,.2,1), opacity 0.13s linear, box-shadow 0.13s; will-change: transform, opacity, box-shadow; backface-visibility: hidden; -webkit-backface-visibility: hidden; } .tile.new { animation: pop 0.24s cubic-bezier(.2,.9,.2,1); } @keyframes pop { 0% { transform: scale(0.15); opacity: 0; } 100% { transform: scale(1); opacity: 1; } } .tile.merge { animation: mergePop 0.26s ease-out; z-index: 3; } @keyframes mergePop { 0% { transform: scale(1); box-shadow: 0 0 8px rgba(255,255,255,0.12); } 50% { transform: scale(1.2); box-shadow: 0 0 35px rgba(255,255,255,0.4); } 100% { transform: scale(1); box-shadow: 0 0 8px rgba(255,255,255,0.12); } } #board.shake { animation: shakeBoard 0.4s; } @keyframes shakeBoard { 0%,100% { transform: translateX(0); } 25% { transform: translateX(-10px); } 75% { transform: translateX(10px); } } /* Tile Colors */ .tile-2 { background: #00eaff55; box-shadow: 0 0 12px #00eaff; } .tile-4 { background: #00ff9955; box-shadow: 0 0 12px #00ff99; } .tile-8 { background: #ff00ff55; box-shadow: 0 0 12px #ff00ff; } .tile-16 { background: #ff006655; box-shadow: 0 0 12px #ff0066; } .tile-32 { background: #ffaa0055; box-shadow: 0 0 12px #ffaa00; } .tile-64 { background: #ff000055; box-shadow: 0 0 12px #ff0000; } .tile-128 { background: #5f00ff55; box-shadow: 0 0 12px #5f00ff; } .tile-256 { background: #00ffea55; box-shadow: 0 0 12px #00ffea; } .tile-512 { background: #ff00aa55; box-shadow: 0 0 12px #ff00aa; } .tile-1024 { background: #00ffaa55; box-shadow: 0 0 12px #00ffaa; } .tile-2048 { background: #ffd70066; box-shadow: 0 0 18px #ffd700; animation: goldShimmer 2.6s infinite; } @keyframes goldShimmer { 0% { box-shadow: 0 0 12px #ffd70066; transform: translateZ(0); } 50% { box-shadow: 0 0 30px #ffd700aa; transform: translateY(-2px); } 100% { box-shadow: 0 0 12px #ffd70066; transform: translateZ(0); } } /* Enhanced Merge Animation */ .tile.merge { animation: mergeBounce 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55); z-index: 10; } @keyframes mergeBounce { 0% { transform: scale(1); filter: brightness(1); } 40% { transform: scale(1.25) rotate(5deg); filter: brightness(1.4) drop-shadow(0 0 25px currentColor); } 60% { transform: scale(0.95) rotate(-3deg); filter: brightness(1.2); } 80% { transform: scale(1.08); filter: brightness(1.1); } 100% { transform: scale(1) rotate(0deg); filter: brightness(1); } } /* Particle Effect */ .merge-particle { position: fixed; width: 10px; height: 10px; border-radius: 50%; pointer-events: none; z-index: 9998; box-shadow: 0 0 10px currentColor, 0 0 20px currentColor, inset 0 0 5px rgba(255, 255, 255, 0.5); filter: blur(0.5px); } /* Score Popup Animation */ .score-popup { animation: scoreFloat 1s cubic-bezier(0.34, 1.56, 0.64, 1) forwards; } @keyframes scoreFloat { 0% { transform: translate(-50%, -50%) scale(0.5); opacity: 0; } 30% { transform: translate(-50%, -70px) scale(1.2); opacity: 1; } 100% { transform: translate(-50%, -120px) scale(1); opacity: 0; } } /* Enhanced Tile Glow on Merge */ .tile.merge { box-shadow: 0 0 30px currentColor, 0 0 50px currentColor, inset 0 0 20px rgba(255, 255, 255, 0.3) !important; } /* Smoother New Tile Animation */ .tile.new { animation: popIn 0.3s cubic-bezier(0.68, -0.55, 0.265, 1.55); } @keyframes popIn { 0% { transform: scale(0) rotate(-180deg); opacity: 0; filter: blur(4px); } 70% { transform: scale(1.15) rotate(10deg); filter: blur(0); } 100% { transform: scale(1) rotate(0deg); opacity: 1; filter: blur(0); } } /* Tile Hover Effect - Make it more interactive */ .tile:not(:empty):hover { transform: scale(1.05); transition: transform 0.2s ease; filter: brightness(1.2); } /* Add ripple effect on board when moving */ #board.moving { animation: boardPulse 0.3s ease-out; } @keyframes boardPulse { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.01); } } /* ========================== TUTORIAL MODAL ========================== */ .tutorial-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.88); backdrop-filter: blur(10px); display: flex; align-items: center; justify-content: center; z-index: 998; animation: fadeIn 0.3s ease-out; } .tutorial-modal { background: rgba(20, 0, 40, 0.96); backdrop-filter: blur(25px); border: 3px solid rgba(200, 100, 255, 0.5); border-radius: 24px; padding: 45px 50px; max-width: 500px; width: 90%; text-align: center; box-shadow: 0 35px 90px rgba(0, 0, 0, 0.75), 0 0 60px rgba(200, 100, 255, 0.4), inset 0 0 50px rgba(200, 100, 255, 0.1); animation: modalSlideUp 0.4s cubic-bezier(0.2, 0.8, 0.2, 1); position: relative; } .modal-close { position: absolute; top: 15px; right: 15px; width: 36px; height: 36px; padding: 0; background: rgba(255, 255, 255, 0.05); border: 2px solid rgba(255, 255, 255, 0.2); border-radius: 8px; cursor: pointer; transition: all 0.3s; display: flex; align-items: center; justify-content: center; } .modal-close svg { width: 20px; height: 20px; color: rgba(255, 255, 255, 0.7); } .modal-close:hover { background: rgba(255, 50, 50, 0.2); border-color: rgba(255, 50, 50, 0.6); transform: rotate(90deg); } .modal-close:hover svg { color: #ff5050; } .tutorial-title { font-size: 32px; font-weight: 800; color: #c864ff; text-shadow: 0 0 25px rgba(200, 100, 255, 0.8); margin-bottom: 30px; letter-spacing: 2px; } .tutorial-content { display: flex; flex-direction: column; gap: 30px; } .tutorial-section h3 { font-size: 18px; color: rgba(200, 100, 255, 0.9); margin-bottom: 15px; font-weight: 700; } /* Show/Hide based on device */ .mobile-controls { display: none; } @media (max-width: 768px) { .pc-controls { display: none !important; } .mobile-controls { display: block; } } /* Keys Display */ .keys-container { display: flex; align-items: center; justify-content: center; gap: clamp(20px, 5vw, 40px); flex-wrap: nowrap; } .keys-group { display: flex; flex-direction: column; align-items: center; gap: 10px; } .keys-grid-wasd, .keys-grid-arrow { display: grid; grid-template-columns: repeat(3, 1fr); grid-template-rows: repeat(2, 1fr); gap: 8px; justify-items: center; align-items: center; } .keys-separator { font-size: clamp(14px, 2.2vw, 18px); color: rgba(255, 255, 255, 0.5); font-weight: 700; padding: 0 clamp(10px, 2vw, 15px); } .key-box { width: clamp(42px, 6.5vw, 52px); height: clamp(42px, 6.5vw, 52px); background: rgba(0, 234, 255, 0.15); border: 2px solid rgba(0, 234, 255, 0.5); border-radius: 10px; display: flex; align-items: center; justify-content: center; font-size: clamp(17px, 2.8vw, 22px); font-weight: 700; color: #00eaff; text-shadow: 0 0 10px rgba(0, 234, 255, 0.8); box-shadow: 0 4px 15px rgba(0, 0, 0, 0.3), 0 0 20px rgba(0, 234, 255, 0.2), inset 0 -2px 0 rgba(0, 0, 0, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1); } .key-empty { width: clamp(42px, 6.5vw, 52px); height: clamp(42px, 6.5vw, 52px); visibility: hidden; } .keys-label { font-size: clamp(12px, 1.8vw, 14px); color: rgba(255, 255, 255, 0.6); margin-top: 5px; font-weight: 600; text-align: center; } /* Swipe Demo */ .swipe-demo { display: flex; flex-direction: column; align-items: center; gap: 10px; } .swipe-icon { font-size: 48px; animation: swipeAnimation 2s ease-in-out infinite; } @keyframes swipeAnimation { 0%, 100% { transform: translateX(0); } 25% { transform: translateX(-15px); } 50% { transform: translateX(0); } 75% { transform: translateX(15px); } } .swipe-demo p { font-size: 14px; color: rgba(255, 255, 255, 0.7); } /* Objective Text */ .objective-text { font-size: 15px; color: rgba(255, 255, 255, 0.85); line-height: 1.6; } .objective-text strong { color: #ffd700; text-shadow: 0 0 10px rgba(255, 215, 0, 0.6); font-weight: 800; } /* ========================== GAME OVER MODAL - WITH ICON BUTTONS ========================== */ /* ========================== GAME OVER MODAL - REVISED VERSION Copy bagian ini dan replace yang lama di 2048.css ========================== */ .game-over-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.93); backdrop-filter: blur(15px); display: flex; align-items: center; justify-content: center; z-index: 999; animation: fadeIn 0.3s ease-out; } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } .game-over-modal { background: linear-gradient(145deg, rgba(15, 0, 35, 0.98), rgba(25, 0, 45, 0.98)); backdrop-filter: blur(30px); border: 3px solid rgba(255, 50, 100, 0.5); border-radius: 32px; padding: 55px 50px 45px; max-width: 460px; width: 90%; text-align: center; box-shadow: 0 50px 120px rgba(0, 0, 0, 0.85), 0 0 100px rgba(255, 50, 100, 0.4), inset 0 2px 80px rgba(255, 50, 100, 0.06); animation: modalSlideUp 0.4s cubic-bezier(0.2, 0.8, 0.2, 1); position: relative; } @keyframes modalSlideUp { from { opacity: 0; transform: translateY(60px) scale(0.85); } to { opacity: 1; transform: translateY(0) scale(1); } } /* Close Button (X) - Top Right */ .game-over-close { position: absolute; top: 18px; right: 18px; width: 38px; height: 38px; padding: 0; background: rgba(255, 255, 255, 0.06); border: 2px solid rgba(255, 255, 255, 0.15); border-radius: 10px; cursor: pointer; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); display: flex; align-items: center; justify-content: center; z-index: 10; } .game-over-close svg { width: 20px; height: 20px; color: rgba(255, 255, 255, 0.6); transition: all 0.3s ease; } .game-over-close:hover { background: rgba(255, 80, 80, 0.2); border-color: rgba(255, 80, 80, 0.6); transform: rotate(90deg) scale(1.05); } .game-over-close:hover svg { color: #ff6666; } .game-over-close:active { transform: rotate(90deg) scale(0.95); } /* Title - Gradient Pink/Red */ .game-over-title { font-size: clamp(32px, 5vw, 42px); font-weight: 900; background: linear-gradient(135deg, #ff3366 0%, #ff6699 50%, #ff99cc 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; filter: drop-shadow(0 0 35px rgba(255, 51, 102, 0.5)); margin-bottom: 12px; letter-spacing: 4px; text-transform: uppercase; line-height: 1.2; } /* Subtitle */ .game-over-subtitle { font-size: 14px; color: rgba(255, 255, 255, 0.5); letter-spacing: 2px; margin-bottom: 35px; font-weight: 600; text-transform: uppercase; } /* Score Section - PURPLE/VIOLET gradient */ .game-over-score { margin: 0 0 38px; } .game-over-score-label { font-size: 11px; text-transform: uppercase; color: rgba(200, 100, 255, 0.7); letter-spacing: 3px; margin-bottom: 14px; font-weight: 700; } .game-over-score-value { font-size: clamp(52px, 8vw, 68px); font-weight: 900; background: linear-gradient(135deg, #c864ff 0%, #8b5cf6 50%, #a855f7 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; filter: drop-shadow(0 0 30px rgba(200, 100, 255, 0.6)); margin-bottom: 10px; line-height: 1; letter-spacing: -2px; } /* New High Score Badge - GOLD */ .new-high-score { display: inline-block; background: linear-gradient(135deg, rgba(255, 215, 0, 0.2), rgba(255, 165, 0, 0.2)); border: 2.5px solid rgba(255, 215, 0, 0.7); color: #ffd700; padding: 12px 26px; border-radius: 50px; font-size: 13px; font-weight: 800; text-transform: uppercase; letter-spacing: 2px; margin-top: 18px; box-shadow: 0 0 35px rgba(255, 215, 0, 0.35), inset 0 0 30px rgba(255, 215, 0, 0.1); animation: newHighScorePulse 2s ease-in-out infinite; } @keyframes newHighScorePulse { 0%, 100% { box-shadow: 0 0 30px rgba(255, 215, 0, 0.4), inset 0 0 30px rgba(255, 215, 0, 0.1); border-color: rgba(255, 215, 0, 0.7); transform: scale(1); } 50% { box-shadow: 0 0 50px rgba(255, 215, 0, 0.7), inset 0 0 40px rgba(255, 215, 0, 0.2); border-color: rgba(255, 215, 0, 1); transform: scale(1.02); } } /* High Score Display - ORANGE gradient */ .high-score-display { margin-top: 28px; padding-top: 28px; border-top: 2px solid rgba(255, 140, 0, 0.25); } .high-score-label { font-size: 11px; text-transform: uppercase; color: rgba(255, 160, 50, 0.7); letter-spacing: 2.5px; margin-bottom: 10px; font-weight: 700; } .high-score-value { font-size: clamp(34px, 5vw, 42px); font-weight: 900; background: linear-gradient(135deg, #ff8c00 0%, #ffa500 50%, #ffb347 100%); -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; filter: drop-shadow(0 0 20px rgba(255, 140, 0, 0.5)); line-height: 1; letter-spacing: -1px; } /* =========================== ICON BUTTONS - Enhanced Color =========================== */ .game-over-buttons { display: flex; gap: 16px; justify-content: center; margin-top: 42px; } /* Icon Button Base Style */ .btn-game-icon { width: clamp(70px, 10vw, 80px); height: clamp(70px, 10vw, 80px); padding: 0; background: rgba(255, 255, 255, 0.06); border: 2px solid rgba(255, 255, 255, 0.2); border-radius: 20px; cursor: pointer; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); display: flex; align-items: center; justify-content: center; backdrop-filter: blur(10px); box-shadow: 0 8px 30px rgba(0, 0, 0, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.1); position: relative; overflow: hidden; } .btn-game-icon svg { width: clamp(32px, 5vw, 38px); height: clamp(32px, 5vw, 38px); transition: all 0.3s ease; position: relative; z-index: 2; } /* Shine Effect */ .btn-game-icon::before { content: ""; position: absolute; top: 0; left: -100%; width: 100%; height: 100%; background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.15), transparent); transition: left 0.5s ease; } .btn-game-icon:hover::before { left: 100%; } .btn-game-icon:hover { background: rgba(255, 255, 255, 0.12); border-color: rgba(255, 255, 255, 0.4); box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5), 0 0 40px rgba(255, 255, 255, 0.15), inset 0 1px 0 rgba(255, 255, 255, 0.2); transform: translateY(-4px); } .btn-game-icon:active { transform: translateY(0); box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4), inset 0 2px 8px rgba(0, 0, 0, 0.3); } /* Restart Button - EMERALD GREEN */ .btn-restart-game { background: linear-gradient(135deg, rgba(16, 185, 129, 0.2), rgba(5, 150, 105, 0.2)); border-color: rgba(16, 185, 129, 0.6); box-shadow: 0 8px 30px rgba(0, 0, 0, 0.4), 0 0 30px rgba(16, 185, 129, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.1); } .btn-restart-game svg { color: #10b981; filter: drop-shadow(0 0 12px rgba(16, 185, 129, 0.5)); } .btn-restart-game:hover { background: linear-gradient(135deg, rgba(16, 185, 129, 0.3), rgba(5, 150, 105, 0.3)); border-color: rgba(16, 185, 129, 0.9); box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5), 0 0 50px rgba(16, 185, 129, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.2); } .btn-restart-game:hover svg { transform: rotate(180deg); color: #34d399; } /* Home Button - SKY BLUE */ .btn-home-game { background: linear-gradient(135deg, rgba(14, 165, 233, 0.2), rgba(2, 132, 199, 0.2)); border-color: rgba(14, 165, 233, 0.6); box-shadow: 0 8px 30px rgba(0, 0, 0, 0.4), 0 0 30px rgba(14, 165, 233, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.1); } .btn-home-game svg { color: #0ea5e9; filter: drop-shadow(0 0 12px rgba(14, 165, 233, 0.5)); } .btn-home-game:hover { background: linear-gradient(135deg, rgba(14, 165, 233, 0.3), rgba(2, 132, 199, 0.3)); border-color: rgba(14, 165, 233, 0.9); box-shadow: 0 12px 40px rgba(0, 0, 0, 0.5), 0 0 50px rgba(14, 165, 233, 0.5), inset 0 1px 0 rgba(255, 255, 255, 0.2); } .btn-home-game:hover svg { transform: scale(1.1); color: #38bdf8; } /* Responsive Design */ @media (max-width: 480px) { .game-over-modal { padding: 45px 35px 38px; } .game-over-buttons { gap: 12px; } .btn-game-icon { width: clamp(65px, 15vw, 75px); height: clamp(65px, 15vw, 75px); } .btn-game-icon svg { width: clamp(28px, 6vw, 34px); height: clamp(28px, 6vw, 34px); } } /* ========================== BACKGROUND EFFECTS ========================== */ .particles { position: fixed; inset: 0; pointer-events: none; z-index: 0; background: radial-gradient(circle at 20% 30%, rgba(0,234,255,0.2), transparent 48%), radial-gradient(circle at 80% 70%, rgba(255,0,90,0.2), transparent 48%), radial-gradient(circle at 50% 50%, rgba(140,0,255,0.16), transparent 58%), radial-gradient(circle at 10% 85%, rgba(0,255,200,0.14), transparent 58%), radial-gradient(circle at 90% 15%, rgba(255,0,255,0.17), transparent 48%); filter: blur(60px) brightness(125%) saturate(135%); animation: particlesFloat 20s ease-in-out infinite alternate; } @keyframes particlesFloat { 0% { transform: translateY(0px) translateX(0px); } 50% { transform: translateY(-30px) translateX(12px); } 100% { transform: translateY(-45px) translateX(-18px); } } .starfield { position: fixed; inset: 0; overflow: hidden; pointer-events: none; z-index: 1; } .starfield span { position: absolute; width: 4px; height: 4px; background: rgba(0,255,255,0.85); border-radius: 50%; filter: blur(2px); animation: starMove linear infinite; } @keyframes starMove { 0% { transform: translateY(0); opacity: 0.85; } 100% { transform: translateY(-750px); opacity: 0; } } .cursor-light { position: absolute; width: 250px; height: 250px; background: radial-gradient(circle, rgba(0,255,255,0.28), transparent 72%); border-radius: 50%; pointer-events: none; transform: translate(-50%, -50%); filter: blur(45px); mix-blend-mode: screen; opacity: 0.65; } .merge-particle { position: absolute; width: 8px; height: 8px; border-radius: 50%; pointer-events: none; opacity: 0.95; will-change: transform, opacity; filter: blur(1px) drop-shadow(0 0 8px rgba(255,255,255,0.1)); } /* ========================== ENHANCED BACKGROUND EFFECTS /* Update .particles styling */ .particles { position: fixed; inset: 0; pointer-events: none; z-index: 0; background: radial-gradient(circle at 20% 30%, rgba(0,234,255,0.15), transparent 40%), radial-gradient(circle at 80% 70%, rgba(255,0,90,0.15), transparent 40%), radial-gradient(circle at 50% 50%, rgba(140,0,255,0.12), transparent 50%), radial-gradient(circle at 10% 85%, rgba(0,255,200,0.1), transparent 50%), radial-gradient(circle at 90% 15%, rgba(255,0,255,0.13), transparent 40%); filter: blur(50px) brightness(110%); animation: particlesFloat 18s ease-in-out infinite alternate; } @keyframes particlesFloat { 0% { transform: translateY(0px) translateX(0px); opacity: 0.8; } 50% { transform: translateY(-25px) translateX(15px); opacity: 1; } 100% { transform: translateY(-40px) translateX(-20px); opacity: 0.8; } } /* Enhanced Starfield */ .starfield { position: fixed; inset: 0; overflow: hidden; pointer-events: none; z-index: 1; } .starfield span { position: absolute; width: 3px; height: 3px; background: rgba(0,255,255,0.7); border-radius: 50%; filter: blur(1.5px); box-shadow: 0 0 8px rgba(0, 234, 255, 0.6); animation: starMove linear infinite; } @keyframes starMove { 0% { transform: translateY(0); opacity: 0.7; } 100% { transform: translateY(-750px); opacity: 0; } } /* Enhanced Cursor Light */ .cursor-light { position: absolute; width: 280px; height: 280px; background: radial-gradient(circle, rgba(0,255,255,0.2), rgba(255,0,255,0.15) 50%, transparent 70%); border-radius: 50%; pointer-events: none; transform: translate(-50%, -50%); filter: blur(50px); mix-blend-mode: screen; opacity: 0.5; transition: opacity 0.3s ease; } /* ========================== RESPONSIVE DESIGN ========================== */ /* Touch hint for mobile only */ .touch-hint { display: none; } @media (max-width: 768px) { .touch-hint { display: block; position: fixed; right: clamp(10px, 2vw, 16px); bottom: clamp(10px, 2vh, 16px); background: rgba(0, 0, 0, 0.65); backdrop-filter: blur(12px); padding: clamp(7px, 1.5vw, 9px) clamp(11px, 2vw, 14px); border-radius: 10px; font-size: clamp(10px, 1.5vw, 11px); z-index: 4; color: #cfefff; border: 1px solid rgba(0, 217, 255, 0.35); box-shadow: 0 5px 18px rgba(0, 0, 0, 0.35); font-weight: 500; } } /* ========================== ADVANCED SOUND CONTROL ========================== */ .sound-control-container { position: fixed; top: clamp(10px, 2vh, 20px); left: clamp(10px, 2vw, 20px); z-index: 101; display: flex; flex-direction: column; gap: 12px; align-items: flex-start; } /* Backdrop Overlay untuk Mobile */ .volume-backdrop { display: none; position: fixed; inset: 0; background: rgba(0, 0, 0, 0.75); backdrop-filter: blur(8px); z-index: 99; animation: fadeIn 0.2s ease-out; } .volume-backdrop.active { display: block; } /* Main Sound Button */ .btn-sound-main { width: clamp(40px, 6.5vw, 52px); height: clamp(40px, 6.5vw, 52px); padding: 0; background: rgba(30, 0, 50, 0.9); backdrop-filter: blur(15px); border: 2px solid rgba(0, 217, 255, 0.5); border-radius: 14px; cursor: pointer; transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1); display: flex; align-items: center; justify-content: center; box-shadow: 0 5px 20px rgba(0, 0, 0, 0.4), 0 0 25px rgba(0, 217, 255, 0.25), inset 0 1px 0 rgba(255, 255, 255, 0.1); position: relative; } .btn-sound-main svg { width: clamp(20px, 3.5vw, 26px); height: clamp(20px, 3.5vw, 26px); color: rgba(0, 234, 255, 0.95); transition: all 0.3s ease; position: absolute; } .btn-sound-main:hover { background: rgba(0, 234, 255, 0.18); border-color: rgba(0, 234, 255, 0.85); box-shadow: 0 7px 28px rgba(0, 0, 0, 0.5), 0 0 40px rgba(0, 234, 255, 0.4), inset 0 1px 0 rgba(255, 255, 255, 0.15); transform: translateY(-2px); } .btn-sound-main:hover svg { color: rgba(0, 234, 255, 1); transform: scale(1.12); } .btn-sound-main:active { transform: translateY(0); } /* Muted State - Red */ .btn-sound-main.all-muted { background: rgba(60, 0, 10, 0.9) !important; border-color: rgba(255, 60, 60, 0.7) !important; box-shadow: 0 5px 20px rgba(0, 0, 0, 0.4), 0 0 25px rgba(255, 60, 60, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1) !important; } .btn-sound-main.all-muted svg { color: rgba(255, 80, 80, 0.95) !important; } .btn-sound-main.all-muted:hover { background: rgba(255, 60, 60, 0.2) !important; border-color: rgba(255, 80, 80, 0.9) !important; } /* Volume Panel */ .volume-panel { display: none; background: linear-gradient(145deg, rgba(20, 0, 40, 0.98), rgba(30, 0, 50, 0.98)); backdrop-filter: blur(25px); border: 2px solid rgba(0, 217, 255, 0.4); border-radius: 18px; padding: 20px 18px; min-width: clamp(240px, 30vw, 280px); box-shadow: 0 20px 60px rgba(0, 0, 0, 0.7), 0 0 50px rgba(0, 217, 255, 0.3), inset 0 1px 0 rgba(255, 255, 255, 0.1); animation: slideDown 0.3s cubic-bezier(0.2, 0.8, 0.2, 1); z-index: 102; } .volume-panel.active { display: block; } @keyframes slideDown { from { opacity: 0; transform: translateY(-15px); } to { opacity: 1; transform: translateY(0); } } /* Volume Item */ .volume-item { margin-bottom: 18px; } .volume-item:last-child { margin-bottom: 0; } .volume-header { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; } .volume-icon { width: 18px; height: 18px; color: rgba(0, 234, 255, 0.8); } .volume-label { font-size: 13px; font-weight: 700; color: rgba(255, 255, 255, 0.9); text-transform: uppercase; letter-spacing: 0.5px; flex: 1; } .volume-value { font-size: 12px; font-weight: 700; color: rgba(0, 234, 255, 0.9); min-width: 40px; text-align: right; } /* Volume Slider */ .volume-slider { width: 100%; height: 6px; -webkit-appearance: none; appearance: none; background: rgba(255, 255, 255, 0.1); border-radius: 10px; outline: none; cursor: pointer; transition: all 0.2s; } .volume-slider::-webkit-slider-track { height: 6px; background: rgba(255, 255, 255, 0.1); border-radius: 10px; } .volume-slider::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 18px; height: 18px; background: linear-gradient(135deg, #00eaff 0%, #0099ff 100%); border-radius: 50%; cursor: pointer; box-shadow: 0 2px 10px rgba(0, 234, 255, 0.5), 0 0 20px rgba(0, 234, 255, 0.3); transition: all 0.2s; } .volume-slider::-webkit-slider-thumb:hover { transform: scale(1.2); box-shadow: 0 4px 15px rgba(0, 234, 255, 0.7), 0 0 30px rgba(0, 234, 255, 0.5); } .volume-slider::-moz-range-track { height: 6px; background: rgba(255, 255, 255, 0.1); border-radius: 10px; } .volume-slider::-moz-range-thumb { width: 18px; height: 18px; background: linear-gradient(135deg, #00eaff 0%, #0099ff 100%); border: none; border-radius: 50%; cursor: pointer; box-shadow: 0 2px 10px rgba(0, 234, 255, 0.5), 0 0 20px rgba(0, 234, 255, 0.3); transition: all 0.2s; } .volume-slider::-moz-range-thumb:hover { transform: scale(1.2); } /* Slider Fill Effect */ .volume-slider { background: linear-gradient(to right, rgba(0, 234, 255, 0.3) 0%, rgba(0, 234, 255, 0.3) var(--value, 0%), rgba(255, 255, 255, 0.1) var(--value, 0%), rgba(255, 255, 255, 0.1) 100%); } /* Mobile Responsive */ @media (max-width: 768px) { .volume-panel { min-width: clamp(220px, 50vw, 260px); padding: 16px 14px; } .volume-item { margin-bottom: 14px; } .volume-label { font-size: 12px; } .volume-value { font-size: 11px; } }