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 @@
-
-
-
+
+
+
+
-
-
+
+
-
+