diff --git a/2048.css b/2048.css index af9a003..c9d16a4 100644 --- a/2048.css +++ b/2048.css @@ -1273,4 +1273,241 @@ h1 { 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: 100; +} + +/* 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 { + position: absolute; + top: clamp(46px, 8vh, 60px); + left: 0; + 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); +} + +@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; + } } \ No newline at end of file diff --git a/2048.html b/2048.html index 7ff2249..d91f3e8 100644 --- a/2048.html +++ b/2048.html @@ -16,42 +16,72 @@ -
- - + +
+ + - - + + - +