.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; } .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); } .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%); }