diff --git a/CSS/style.css b/CSS/style.css
index 1eaa862..ebe0dcc 100644
--- a/CSS/style.css
+++ b/CSS/style.css
@@ -9,16 +9,80 @@
--list-bg-rgba: rgba(255, 255, 255, 0.1);
--tilt-x: 0px; --tilt-y: 0px;
--title-size: 22px; --title-spacing: 0.5px; --label-display: block;
+
+ --media-bg-rgb: 255, 255, 255; --media-bg-opacity: 0.03;
+ --media-width: 90%; --media-btn-size: 50px; --media-btn-play: 65px;
+ --media-btn-color: rgba(255, 255, 255, 0.05); --media-svg-color: #ffffff;
+ --bg-image: none;
}
* { box-sizing: border-box; margin: 0; padding: 0; font-family: -apple-system, sans-serif; -webkit-tap-highlight-color: transparent; }
-body { background-color: var(--bg-main); background-size: cover; background-position: center; background-attachment: fixed; color: var(--text-color); min-height: 100vh; overflow-x: hidden; transition: background-color 0.3s ease; }
+a { text-decoration: none; color: inherit; }
+
+body { color: var(--text-color); min-height: 100vh; overflow-x: hidden; }
+body::before {
+ content: ""; position: fixed; top: 0; left: 0; right: 0; bottom: 0;
+ background-color: var(--bg-main); background-image: var(--bg-image); background-size: cover;
+ background-position: center; background-repeat: no-repeat; z-index: -1; transition: background-color 0.3s ease;
+}
+
+body.standard-mode .dev-only { display: none !important; }
+
+.app-header { text-align: center; padding: 60px 0 20px 0; font-size: var(--title-size); font-weight: bold; letter-spacing: var(--title-spacing); text-shadow: none; transition: font-size 0.2s, letter-spacing 0.2s; }
+.label { font-size: var(--icon-font-size, 14px); font-weight: 500; letter-spacing: var(--icon-spacing, 0px); text-align: center; text-shadow: none; display: var(--label-display); transition: font-size 0.2s, letter-spacing 0.2s; }
+
+#intro-screen { position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; z-index: 99999; display: flex; justify-content: center; align-items: center; pointer-events: none; }
+.intro-half { position: absolute; top: 0; width: 50%; height: 100%; background: #000000; transition: transform 1.5s cubic-bezier(0.77, 0, 0.175, 1); z-index: 1; }
+.intro-left { left: 0; }
+.intro-right { right: 0; }
+
+.intro-content { position: relative; z-index: 10; display: flex; flex-direction: column; align-items: center; transition: opacity 0.5s ease, transform 0.5s ease; }
+.apple-logo-wrapper { color: #ffffff; filter: drop-shadow(0 0 12px #007aff) drop-shadow(0 0 25px #007aff); animation: pulseGlow 1.5s infinite alternate; }
+@keyframes pulseGlow { 0% { filter: drop-shadow(0 0 8px #007aff); transform: scale(1); } 100% { filter: drop-shadow(0 0 22px #007aff) drop-shadow(0 0 35px #0051a8); transform: scale(1.05); } }
+
+.intro-title-wrapper { margin-top: 18px; opacity: 0; animation: fadeInDelay 0.5s forwards 1.5s; }
+@keyframes fadeInDelay { to { opacity: 1; } }
+
+.intro-title-container { font-size: 24px; font-weight: bold; color: #007aff; display: flex; }
+.intro-title-container span { display: inline-block; }
+
+.anim-wave span { animation: waveAnim 1.2s infinite ease-in-out; }
+@keyframes waveAnim { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-8px); color: #66b2ff; } }
-.app-header { text-align: center; padding: 60px 0 20px 0; font-size: var(--title-size); font-weight: bold; letter-spacing: var(--title-spacing); text-shadow: 0 2px 5px rgba(0,0,0,0.5); transition: font-size 0.2s, letter-spacing 0.2s; }
+.anim-bounce span { animation: bounceAnim 1s infinite ease-in-out alternate; }
+@keyframes bounceAnim { 0% { transform: translateY(0); } 100% { transform: translateY(-10px) scale(1.1); color: #33ccff; } }
+
+.anim-flip span { animation: flipAnim 2s infinite ease-in-out; perspective: 1000px; }
+@keyframes flipAnim { 0%, 100% { transform: rotateY(0deg); } 50% { transform: rotateY(180deg) scale(1.1); color: #00f2fe; } }
+
+.intro-title-container span:nth-child(1) { animation-delay: 0.0s; } .intro-title-container span:nth-child(2) { animation-delay: 0.1s; }
+.intro-title-container span:nth-child(3) { animation-delay: 0.2s; } .intro-title-container span:nth-child(4) { animation-delay: 0.3s; }
+.intro-title-container span:nth-child(5) { animation-delay: 0.4s; } .intro-title-container span:nth-child(6) { animation-delay: 0.5s; }
+.intro-title-container span:nth-child(7) { animation-delay: 0.6s; } .intro-title-container span:nth-child(8) { animation-delay: 0.7s; }
+.intro-title-container span:nth-child(9) { animation-delay: 0.8s; } .intro-title-container span:nth-child(10) { animation-delay: 0.9s; }
+.intro-title-container span:nth-child(11) { animation-delay: 1.0s; } .intro-title-container span:nth-child(12) { animation-delay: 1.1s; }
+.intro-title-container span:nth-child(13) { animation-delay: 1.2s; }
+
+#intro-screen.dismiss .intro-content { opacity: 0; transform: scale(0.8); transition-duration: 0.5s; }
+#intro-screen.dismiss .intro-left { transform: translateX(-100%); }
+#intro-screen.dismiss .intro-right { transform: translateX(100%); }
+
+.app-container { transition: transform 1s cubic-bezier(0.175, 0.885, 0.32, 1.275), opacity 1s ease; }
+.app-container.intro-zoom { transform: scale(0.9); opacity: 0; }
+.slider-item { position: relative; display: flex; align-items: center; margin-bottom: 8px; width: 100%; }
+.slider-item > div { flex: 1; display: flex; align-items: center; }
+
+.slider-item input[type=range] { flex: 1; width: 100% !important; }
+.slider-label { width: 95px; font-size: 12px; opacity: 0.8; flex-shrink: 0; }
+.slider-tooltip { position: absolute; top: -28px; background: #007aff; color: #ffffff; font-size: 11px; font-weight: bold; padding: 4px 8px; border-radius: 8px; opacity: 0; transform: translateY(5px); transition: opacity 0.2s, transform 0.2s, left 0.1s ease-out; pointer-events: none; z-index: 50; white-space: nowrap; box-shadow: 0 2px 6px rgba(0,0,0,0.3); }
+.slider-tooltip.show { opacity: 1; transform: translateY(0); }
+
+.badge-dot { display: inline-block; width: 8px; height: 8px; background-color: #ff3b30; border-radius: 50%; margin-left: 5px; vertical-align: middle; box-shadow: 0 0 6px #ff3b30; animation: badgePulse 1.5s infinite; }
+@keyframes badgePulse { 0% { opacity: 0.5; } 100% { opacity: 1; transform: scale(1.2); } }
+.badge-dot.hidden { display: none !important; }
-/* Grid Mode */
.grid-layout { display: grid; grid-template-columns: repeat(4, 1fr); gap: 15px; padding: 20px; max-width: 600px; margin: 0 auto; position: relative; }
-.glass-btn { display: flex; flex-direction: column; align-items: center; gap: 8px; text-decoration: none; color: var(--text-color); user-select: none; }
+.glass-btn { display: flex; flex-direction: column; align-items: center; gap: 8px; text-decoration: none; color: var(--text-color); user-select: none; position: relative; }
.icon-box {
width: var(--frame-size); height: var(--frame-size); background-image: var(--frame-bg); background-color: var(--frame-bg-color);
background-size: cover; background-position: center; background-repeat: no-repeat; border-radius: var(--frame-border-radius);
@@ -27,133 +91,107 @@ body { background-color: var(--bg-main); background-size: cover; background-posi
}
.icon-box svg { width: var(--svg-size); height: var(--svg-size); fill: var(--svg-color); color: var(--svg-color); opacity: var(--svg-opacity); position: relative; z-index: 2; transform: perspective(500px) translate3d(calc(var(--tilt-x) * 1.5), calc(var(--tilt-y) * 1.5), 10px); }
.glass-btn:active .icon-box { transform: scale(0.92); }
-
-.label { font-size: var(--icon-font-size, 14px); font-weight: 500; letter-spacing: var(--icon-spacing, 0px); text-align: center; text-shadow: 0 1px 3px rgba(0,0,0,0.5); display: var(--label-display); transition: font-size 0.2s, letter-spacing 0.2s; }
-
.glass-active .icon-box { background: rgba(255,255,255,0.15); backdrop-filter: blur(15px); -webkit-backdrop-filter: blur(15px); border: 1px solid rgba(255,255,255,0.2); }
.glass-active.list-mode .glass-btn { background: rgba(0,0,0,0.3); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); border: 1px solid rgba(255,255,255,0.1); }
-@keyframes jiggle { 0% { transform: rotate(-2deg); } 50% { transform: rotate(2deg); } 100% { transform: rotate(-2deg); } }
-.edit-mode .glass-btn { animation: jiggle 0.3s infinite; pointer-events: none; }
-.edit-mode .glass-btn.dragging { opacity: 0.5; animation: none; transform: scale(1.1); z-index: 999; }
+@keyframes pulseSwap { 0% { box-shadow: 0 0 0 0 rgba(0, 122, 255, 0.7); } 70% { box-shadow: 0 0 0 15px rgba(0, 122, 255, 0); } 100% { box-shadow: 0 0 0 0 rgba(0, 122, 255, 0); } }
+.edit-mode .glass-btn { pointer-events: auto; cursor: pointer; }
+.edit-mode .glass-btn.selected-swap .icon-box { border: 2px solid #007aff; animation: pulseSwap 1.5s infinite; transform: scale(1.05); }
+.edit-mode .glass-btn.selected-swap::after { content: "🔄"; position: absolute; top: -5px; right: -5px; font-size: 18px; background: #007aff; border-radius: 50%; padding: 2px; }
.edit-mode .grid-layout { background: rgba(255,255,255,0.05); border: 2px dashed rgba(255,255,255,0.3); border-radius: 20px; }
.app-container.list-mode .grid-layout { grid-template-columns: 1fr; gap: 12px; }
-.app-container.list-mode .glass-btn {
- flex-direction: row; justify-content: flex-start; align-items: center; gap: 15px;
- background: var(--list-bg-rgba); padding: 12px 18px;
- border-radius: var(--list-border-radius); color: var(--list-text-color); box-shadow: var(--btn-shadow);
-}
-.app-container.list-mode:not(.list-frame-active) .icon-box {
- background: transparent !important; box-shadow: none !important;
- width: var(--svg-size); height: var(--svg-size); transform: none; border-radius: 0;
-}
-.app-container.list-mode:not(.list-frame-active) .icon-box svg {
- fill: var(--list-svg-color); color: var(--list-svg-color); width: 100%; height: 100%; transform: none; opacity: var(--svg-opacity);
-}
+.app-container.list-mode .glass-btn { flex-direction: row; justify-content: flex-start; align-items: center; gap: 15px; background: var(--list-bg-rgba); padding: 12px 18px; border-radius: var(--list-border-radius); color: var(--list-text-color); box-shadow: var(--btn-shadow); }
+.app-container.list-mode:not(.list-frame-active) .icon-box { background: transparent !important; box-shadow: none !important; width: var(--svg-size); height: var(--svg-size); transform: none; border-radius: 0; }
+.app-container.list-mode:not(.list-frame-active) .icon-box svg { fill: var(--list-svg-color); color: var(--list-svg-color); width: 100%; height: 100%; transform: none; opacity: var(--svg-opacity); }
.app-container.list-mode .label { text-align: left; }
.app-container.list-mode.list-frame-active .glass-btn { background: var(--list-bg-rgba); box-shadow: none; }
-.app-container.list-mode.list-frame-active .icon-box {
- width: var(--frame-size); height: var(--frame-size); min-width: var(--frame-size);
- background-image: var(--frame-bg) !important; background-color: var(--frame-bg-color) !important;
- background-size: cover; background-position: center; background-repeat: no-repeat;
- border-radius: var(--frame-border-radius); box-shadow: var(--btn-shadow) !important;
- transform: perspective(500px) translate3d(var(--tilt-x), var(--tilt-y), 0); display: flex; justify-content: center; align-items: center;
-}
+.app-container.list-mode.list-frame-active .icon-box { width: var(--frame-size); height: var(--frame-size); min-width: var(--frame-size); background-image: var(--frame-bg) !important; background-color: var(--frame-bg-color) !important; background-size: cover; background-position: center; background-repeat: no-repeat; border-radius: var(--frame-border-radius); box-shadow: var(--btn-shadow) !important; transform: perspective(500px) translate3d(var(--tilt-x), var(--tilt-y), 0); display: flex; justify-content: center; align-items: center; }
.app-container.list-mode.list-frame-active .icon-box svg { fill: var(--svg-color); color: var(--svg-color); width: var(--svg-size); height: var(--svg-size); opacity: var(--svg-opacity); }
-/* WIDGET TRÌNH PHÁT NHẠC & HỆ THỐNG NEUMORPHISM */
-.media-player-widget {
- margin: 10px auto 30px auto;
- width: 90%;
- max-width: 400px;
- padding: 20px;
- border-radius: 24px;
- display: flex;
- flex-direction: column;
- gap: 22px;
- background: rgba(255, 255, 255, 0.03);
- box-shadow: inset 2px 2px 5px rgba(255,255,255,0.05), inset -2px -2px 5px rgba(0,0,0,0.2);
- backdrop-filter: blur(10px);
- -webkit-backdrop-filter: blur(10px);
-}
-
-.media-controls {
- display: flex;
- align-items: center;
- justify-content: center;
- gap: 30px;
-}
-
-.media-btn {
- border: none;
- background: rgba(255, 255, 255, 0.05);
- color: var(--text-color, #ffffff);
- border-radius: 50%;
- width: 50px;
- height: 50px;
- display: flex;
- align-items: center;
- justify-content: center;
+.media-player-widget { margin: 10px auto 30px auto; width: var(--media-width); max-width: 400px; padding: 20px; border-radius: 24px; display: flex; flex-direction: column; gap: 22px; background: rgba(var(--media-bg-rgb), var(--media-bg-opacity)); box-shadow: var(--btn-shadow); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); border: 1px solid rgba(255,255,255,0.1); }
+.media-controls { display: flex; align-items: center; justify-content: center; gap: 30px; }
+.media-btn { border: none; background: var(--media-btn-color); color: var(--media-svg-color); border-radius: 50%; width: var(--media-btn-size); height: var(--media-btn-size); display: flex; align-items: center; justify-content: center; cursor: pointer; box-shadow: var(--btn-shadow); transition: all 0.15s ease; }
+.media-btn.play-main { width: var(--media-btn-play); height: var(--media-btn-play); }
+.media-btn:active { box-shadow: inset 0 0 10px rgba(0,0,0,0.3); transform: scale(0.95); }
+.system-sliders { display: flex; flex-direction: column; gap: 15px; width: 100%; }
+.sys-slider-container { display: flex; align-items: center; gap: 12px; color: var(--media-svg-color); opacity: 0.8; }
+.sys-slider { -webkit-appearance: none; flex: 1; height: 8px !important; border-radius: 4px; background: rgba(0, 0, 0, 0.3) !important; box-shadow: inset 1px 1px 3px rgba(0,0,0,0.5), inset -1px -1px 3px rgba(255,255,255,0.1) !important; outline: none; }
+
+.settings-fab { position: fixed; bottom: 25px; right: 25px; width: 45px; height: 45px; border-radius: 50%; background: transparent; border: none; box-shadow: none; z-index: 100; cursor: pointer; overflow: hidden; padding: 0; transition: transform 0.2s ease; }
+.settings-fab img { width: 100%; height: 100%; object-fit: contain; }
+.settings-fab:active { transform: scale(0.9); }
+
+input[type=range]::-webkit-slider-thumb, .sys-slider::-webkit-slider-thumb {
+ -webkit-appearance: none; height: 25px !important; width: 25px !important;
+ background-size: contain !important; background-position: center !important;
+ background-repeat: no-repeat !important; background-color: transparent !important;
+ border-radius: 0 !important; border: none !important; box-shadow: none !important;
+ filter: drop-shadow(0px 2px 4px rgba(0,0,0,0.4)); cursor: pointer;
+}
+input[type=range]::-webkit-slider-thumb {
+ -webkit-appearance: none !important;
+ height: 25px !important;
+ width: 25px !important;
+ background-image: url('../Theme/icon-dot.png') !important;
+ background-size: contain !important;
+ background-position: center !important;
+ background-repeat: no-repeat !important;
+ background-color: transparent !important;
+ border: none !important;
+ margin-top: -9.5px !important;
+ filter: drop-shadow(0px 2px 4px rgba(0,0,0,0.4));
cursor: pointer;
- box-shadow: -4px -4px 8px rgba(255, 255, 255, 0.1), 4px 4px 8px rgba(0, 0, 0, 0.4);
- transition: all 0.15s ease;
-}
-
-.media-btn.play-main {
- width: 65px;
- height: 65px;
- box-shadow: -5px -5px 10px rgba(255, 255, 255, 0.15), 5px 5px 10px rgba(0, 0, 0, 0.5);
}
-
-.media-btn:active {
- box-shadow: inset -2px -2px 5px rgba(255, 255, 255, 0.1), inset 2px 2px 5px rgba(0, 0, 0, 0.4);
- transform: scale(0.95);
+.sys-slider::-webkit-slider-thumb {
+ -webkit-appearance: none !important;
+ height: 25px !important;
+ width: 25px !important;
+ background-image: url('../Theme/icon-control.png') !important;
+ background-size: contain !important;
+ background-position: center !important;
+ background-repeat: no-repeat !important;
+ background-color: transparent !important;
+ border: none !important;
+ margin-top: -8.5px !important;
+ filter: drop-shadow(0px 2px 4px rgba(0,0,0,0.4));
+ cursor: pointer;
}
+input[type=range]::-webkit-slider-runnable-track { width: 100%; height: 6px; background: rgba(255,255,255,0.2); border-radius: 3px; }
-.system-sliders {
- display: flex;
- flex-direction: column;
- gap: 15px;
- width: 100%;
+.settings-drawer .theme-grid-picker {
+ display: grid; grid-template-columns: repeat(5, 1fr); grid-template-rows: repeat(2, 44px);
+ gap: 12px; margin-top: 10px; justify-items: center; align-items: center; overflow: hidden;
}
-.sys-slider-container {
- display: flex;
- align-items: center;
- gap: 12px;
- color: var(--text-color, #ffffff);
- opacity: 0.8;
+.macos-window .full-grid {
+ display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px;
+ max-height: 280px; overflow-y: auto; padding: 5px; justify-items: center; align-items: center;
}
-.sys-slider {
- -webkit-appearance: none;
- flex: 1;
- height: 8px !important;
- border-radius: 4px;
- background: rgba(0, 0, 0, 0.3) !important;
- box-shadow: inset 1px 1px 3px rgba(0,0,0,0.5), inset -1px -1px 3px rgba(255,255,255,0.1) !important;
- outline: none;
+.theme-chip {
+ width: calc(100% - 3px); max-width: 44px; aspect-ratio: 1; border-radius: 10px;
+ background: transparent; border: 2px solid transparent;
+ display: flex; align-items: center; justify-content: center;
+ cursor: pointer; transition: all 0.2s ease; padding: 2px;
}
+.theme-chip img { width: 100%; height: 100%; object-fit: contain; pointer-events: none; border-radius: inherit; }
+.theme-chip.active { border-color: var(--accent-color); box-shadow: 0 0 12px rgba(0, 122, 255, 0.4); background: rgba(0, 122, 255, 0.1); }
-.sys-slider::-webkit-slider-thumb {
- -webkit-appearance: none;
- width: 24px !important;
- height: 24px !important;
- margin-top: -8px !important;
- border-radius: 50% !important;
- background: url('../Theme/icon-control.png') center/contain no-repeat #fff !important;
- box-shadow: 0 0 5px rgba(0,0,0,0.5) !important;
- cursor: pointer;
+.theme-chip-more {
+ width: calc(100% - 3px); max-width: 44px; aspect-ratio: 1; border-radius: 50%;
+ background: #007aff; color: #ffffff; font-size: 26px; font-weight: 300;
+ display: flex; align-items: center; justify-content: center; cursor: pointer;
+ box-shadow: 0 2px 8px rgba(0, 122, 255, 0.4); transition: all 0.2s ease;
}
+.theme-chip-more span { margin-top: -2px; }
+.theme-chip-more:active { transform: scale(0.9); }
-/* Giao diện Setting Dark Mode */
.settings-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); opacity: 0; visibility: hidden; transition: opacity 0.3s ease; z-index: 998; }
.settings-overlay.open { opacity: 1; visibility: visible; }
-.settings-fab { position: fixed; bottom: 30px; right: 30px; width: 50px; height: 50px; border-radius: 25px; background: var(--accent-color); color: white; border: none; box-shadow: 0 4px 12px rgba(0,0,0,0.3); z-index: 100; display: flex; justify-content: center; align-items: center; font-size: 24px; cursor: pointer; }
.settings-drawer { position: fixed; top: calc(env(safe-area-inset-top) + 15px); right: -120%; width: 85%; max-width: 360px; max-height: 85vh; border-radius: 20px; background: rgba(30,30,30,0.95); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px); box-shadow: -5px 0 25px rgba(0,0,0,0.5); z-index: 999; transition: right 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), background 0.3s ease, backdrop-filter 0.3s ease; display: flex; flex-direction: column; color: white; overflow: hidden; }
.settings-drawer.open { right: 15px; }
-.settings-drawer.adjusting { background: rgba(30, 30, 30, 0.1) !important; backdrop-filter: blur(0px) !important; -webkit-backdrop-filter: blur(0px) !important; box-shadow: none !important; }
+.settings-drawer.adjusting { background: rgba(30, 30, 30, 0.1) !important; opacity: 0.15 !important; backdrop-filter: blur(0px) !important; -webkit-backdrop-filter: blur(0px) !important; box-shadow: none !important; }
.settings-header { padding: 15px 20px; display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid rgba(255,255,255,0.1); }
.settings-header button { background: rgba(255,255,255,0.2); border: none; color: white; width: 30px; height: 30px; border-radius: 50%; cursor: pointer; }
.settings-body { padding: 20px 20px 60px 20px; overflow-y: auto; flex: 1; }
@@ -162,22 +200,6 @@ body { background-color: var(--bg-main); background-size: cover; background-posi
.feature-toggles { display: flex; flex-direction: column; gap: 10px; margin-top: 10px; font-size: 13px; }
.feature-toggles label { display: flex; justify-content: space-between; align-items: center; }
.section-title { margin: 20px 0 10px; font-size: 16px; color: var(--accent-color); border-bottom: 1px solid rgba(255,255,255,0.1); padding-bottom: 5px; }
-.slider-item { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
-.slider-item input[type=range] { flex: 1; }
-.slider-label { width: 95px; font-size: 12px; opacity: 0.8; }
-
-input[type=range] { -webkit-appearance: none; width: 100%; background: transparent; }
-input[type=range]::-webkit-slider-runnable-track { width: 100%; height: 6px; background: rgba(255,255,255,0.2); border-radius: 3px; }
-input[type=range]::-webkit-slider-thumb {
- -webkit-appearance: none;
- height: 25px; width: 25px;
- background: url('../Theme/icon-dot.png') center/contain no-repeat transparent !important;
- border: 0px solid transparent !important;
- border-radius: 0 !important;
- box-shadow: none !important;
- margin-top: -9.5px; cursor: pointer;
-}
-
.slider-item input[type="color"] { height: 28px; padding: 0; border: none; background: none; border-radius: 5px; cursor: pointer; }
.layout-buttons { display: flex; gap: 10px; }
.layout-btn { flex: 1; padding: 10px 0; background: rgba(255,255,255,0.1); border: 1px solid transparent; color: white; border-radius: 8px; cursor: pointer; font-weight: 500; transition: all 0.2s; }
@@ -189,38 +211,21 @@ input[type=range]::-webkit-slider-thumb {
.shadow-drawer { max-height: 0; overflow: hidden; transition: max-height 0.3s ease; padding: 0 15px; background: rgba(0,0,0,0.1); }
.shadow-drawer.active { max-height: 400px; padding: 15px; }
select { width: 100%; padding: 10px; border-radius: 8px; background: rgba(0,0,0,0.3); color: white; border: 1px solid rgba(255,255,255,0.2); font-size: 14px; }
-.info-btn { position: absolute; bottom: 20px; right: 20px; background: none; border: none; font-size: 24px; cursor: pointer; opacity: 0.8; z-index: 10; }
+.info-btn { position: absolute; bottom: 20px; right: 20px; width: 28px; height: 28px; border-radius: 50%; background: #007aff; color: #ffffff; border: none; font-size: 15px; font-weight: bold; font-family: -apple-system, sans-serif; display: flex; align-items: center; justify-content: center; cursor: pointer; z-index: 10; }
-/* Info Popup macOS */
.info-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.6); opacity: 0; visibility: hidden; transition: opacity 0.3s ease; z-index: 2000; backdrop-filter: blur(5px); -webkit-backdrop-filter: blur(5px); }
.info-overlay.show { opacity: 1; visibility: visible; }
-.macos-window { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%) scale(0.9); width: 85%; max-width: 320px; background: rgba(30, 30, 32, 0.85); border-radius: 14px; box-shadow: 0 20px 40px rgba(0,0,0,0.5); z-index: 2001; border: 1px solid rgba(255,255,255,0.15); opacity: 0; visibility: hidden; transition: all 0.3s ease; backdrop-filter: blur(25px); -webkit-backdrop-filter: blur(25px); color: white; }
+.macos-window { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%) scale(0.9); width: 85%; max-width: 380px; background: #ffffff; border-radius: 16px; box-shadow: 0 20px 40px rgba(0,0,0,0.3); z-index: 2001; opacity: 0; visibility: hidden; transition: all 0.3s ease; color: #000000; overflow: hidden; }
.macos-window.show { opacity: 1; visibility: visible; transform: translate(-50%, -50%) scale(1); }
-.macos-header { padding: 12px 15px; display: flex; gap: 8px; align-items: center; border-bottom: 1px solid rgba(255,255,255,0.1); background: rgba(255,255,255,0.05); border-radius: 14px 14px 0 0; }
-.macos-btn { width: 20px; height: 20px; border-radius: 50%; cursor: pointer; display: block; object-fit: cover; }
-.close-btn:hover { opacity: 0.8; }
-.macos-body { padding: 25px 20px; text-align: center; }
-.macos-body h3 { margin-bottom: 8px; font-size: 18px; font-weight: 600; }
-.macos-body a { color: var(--accent-color); text-decoration: none; font-weight: bold; }
-.info-desc { font-size: 13px; margin-top: 12px; opacity: 0.75; line-height: 1.5; }
-.dev-text { color: #ffffff; font-weight: bold;}
-
-/* AUTO LIGHT MODE */
-@media (prefers-color-scheme: light) {
- .settings-drawer { background: rgba(245, 245, 247, 0.95); color: #000; box-shadow: -5px 0 25px rgba(0,0,0,0.2); }
- .settings-header { border-bottom: 1px solid rgba(0,0,0,0.1); }
- .settings-header button { background: rgba(0,0,0,0.1); color: #000; }
- .highlight-box { background: rgba(0,0,0,0.04); border: 1px solid rgba(0,0,0,0.05); }
- .action-btn, .layout-btn { background: rgba(0,0,0,0.05); color: #000; border: 1px solid rgba(0,0,0,0.05); }
- .layout-btn.active { color: white; }
- select { background: rgba(0,0,0,0.05); color: #000; border: 1px solid rgba(0,0,0,0.1); }
- input[type=range]::-webkit-slider-runnable-track { background: rgba(0,0,0,0.15); }
- .shadow-item { border: 1px solid rgba(0,0,0,0.1); }
- .shadow-header { background: rgba(0,0,0,0.03); border-bottom: 1px solid rgba(0,0,0,0.05); }
- .shadow-drawer { background: rgba(0,0,0,0.01); }
-
- .macos-window { background: rgba(245, 245, 247, 0.95); border: 1px solid rgba(0,0,0,0.1); color: #000; }
- .macos-header { background: rgba(0,0,0,0.03); border-bottom: 1px solid rgba(0,0,0,0.1); }
- .info-desc { opacity: 0.8; }
- .dev-text { color: #ffffff; background: #000; padding: 2px 6px; border-radius: 5px;}
-}
\ No newline at end of file
+.macos-header { background: #f1f1f1; padding: 12px 15px; display: flex; gap: 8px; align-items: center; justify-content: flex-start; }
+.mac-dot { width: 13px; height: 13px; border-radius: 50%; cursor: pointer; box-shadow: inset 0 0 4px rgba(0,0,0,0.1); }
+.close-dot { background: #ff5f56; } .min-dot { background: #ffbd2e; } .max-dot { background: #27c93f; }
+.macos-body { padding: 20px 15px 30px 15px; text-align: center; }
+.info-desc { font-size: 15px; margin-top: 15px; line-height: 1.6; }
+
+.settings-drawer.anim-zoom { right: 15px; transform: scale(0.6); opacity: 0; transition: transform 0.3s cubic-bezier(0.175, 0.885, 0.32, 1.275), opacity 0.3s ease; pointer-events: none; }
+.settings-drawer.anim-zoom.open { transform: scale(1); opacity: 1; pointer-events: auto; }
+.settings-drawer.anim-slide-top { right: 15px; transform: translateY(-120%); opacity: 0; transition: transform 0.4s cubic-bezier(0.1, 0.7, 0.1, 1), opacity 0.4s ease; pointer-events: none; }
+.settings-drawer.anim-slide-top.open { transform: translateY(0); opacity: 1; pointer-events: auto; }
+.settings-drawer.anim-fade { right: 15px; opacity: 0; transition: opacity 0.3s ease; pointer-events: none; }
+.settings-drawer.anim-fade.open { opacity: 1; pointer-events: auto; }
\ No newline at end of file
diff --git a/Data/data.json b/Data/data.json
index 25ef18f..3271658 100644
--- a/Data/data.json
+++ b/Data/data.json
@@ -41,7 +41,7 @@
},
{
"id": "mdi:access-point",
- "title_key": "lang_access-point",
+ "title_key": "lang_access_point",
"action": "shortcuts://run-shortcut?name=QuickControl&input=text&text=mdi:access-point",
"svg": ""
},
@@ -63,7 +63,7 @@
"action": "shortcuts://run-shortcut?name=QuickControl&input=text&text=zondicons:flashlight",
"svg": ""
},
- {
+ {
"id": "icon-park-solid:handle-round",
"title_key": "lang_assistivetouch",
"action": "shortcuts://run-shortcut?name=QuickControl&input=text&text=icon-park-solid:handle-round",
@@ -83,9 +83,45 @@
},
{
"id": "bi:battery-low",
- "title_key": "lang_battery-low",
+ "title_key": "lang_battery_low",
"action": "shortcuts://run-shortcut?name=QuickControl&input=text&text=bi:battery-low",
"svg": ""
+ },
+ {
+ "id": "bxs:leaf",
+ "title_key": "lang_bxs_leaf",
+ "action": "shortcuts://run-shortcut?name=QuickControl&input=text&text=bxs:leaf",
+ "svg": ""
+ },
+ {
+ "id": "streamline-ultimate:synchronize-arrows-lock-bold",
+ "title_key": "lang_arrows_lock_bold",
+ "action": "shortcuts://run-shortcut?name=QuickControl&input=text&text=streamline-ultimate:synchronize-arrows-lock-bold",
+ "svg": ""
+ },
+ {
+ "id": "fluent-mdl2:photo-2-remove",
+ "title_key": "lang_photo_remove",
+ "action": "shortcuts://run-shortcut?name=QuickControl&input=text&text=fluent-mdl2:photo-2-remove",
+ "svg": ""
+ },
+ {
+ "id": "hugeicons:airdrop",
+ "title_key": "lang_airdrop",
+ "action": "shortcuts://run-shortcut?name=QuickControl&input=text&text=hugeicons:airdrop",
+ "svg": ""
+ },
+ {
+ "id": "material-symbols:text-to-speech-rounded",
+ "title_key": "lang_text_to_speech",
+ "action": "shortcuts://run-shortcut?name=QuickControl&input=text&text=material-symbols:text-to-speech-rounded",
+ "svg": ""
+ },
+ {
+ "id": "material-symbols-light:speech-to-text-2-outline-rounded",
+ "title_key": "lang_speech_to_text",
+ "action": "shortcuts://run-shortcut?name=QuickControl&input=text&text=material-symbols-light:speech-to-text-2-outline-rounded",
+ "svg": ""
}
]
}
\ No newline at end of file
diff --git a/Language/vi-VN.json b/Language/vi-VN.json
index d0d5915..f965c64 100644
--- a/Language/vi-VN.json
+++ b/Language/vi-VN.json
@@ -1,21 +1,30 @@
{
"app_title": "Quick Control",
- "settings_title": "⚙️ Cài đặt",
+ "settings_title": "⚙️ CÀI ĐẶT",
"btn_list": "Danh sách",
"btn_grid": "Lưới",
"btn_export": "Xuất",
"btn_import": "Nhập",
"btn_edit_layout": "Sắp xếp",
+ "btn_clear_bg": "Xóa ảnh nền",
+ "btn_config_copy": "📋 Sao chép",
+ "btn_config_apply": "✅ Áp dụng",
"lbl_theme_presets": "🪄 Giao diện",
"opt_preset_none": "Tự do tùy chỉnh",
- "opt_preset_vn": "🇻🇳 Cờ Việt Nam",
- "opt_preset_neon": "🤖 Neon",
+ "opt_preset_vn": "🇻🇳 VietOS",
+ "opt_preset_neon_light": "🔆 Neon Sáng",
+ "opt_preset_neon_dark": "🌑 Neon Tối",
"opt_preset_dark": "🖤 Dark",
"opt_preset_gold": "👑 Gold",
+ "lbl_popup_anim": "✨ Hiệu ứng Popup Cài đặt",
+ "opt_popup_default": "Trượt từ phải sang (Mặc định)",
+ "opt_popup_zoom": "Thu phóng (macOS)",
+ "opt_popup_slide_top": "Trượt từ trên xuống",
+ "opt_popup_fade": "Làm mờ (Fade)",
"lbl_title_adjust": "Sửa tiêu đề",
- "lbl_title_size": "💫 Cỡ chữ chính",
+ "lbl_title_size": "🔠 Cỡ chữ chính",
"lbl_title_spacing": "📐 Dãn chữ chính",
- "lbl_icon_size": "💫 Cỡ chữ Icon",
+ "lbl_icon_size": "🔠 Cỡ chữ Icon",
"lbl_icon_spacing": "📐 Dãn chữ Icon",
"lbl_hide_labels": "Ẩn tên",
"lbl_list_frame": "Theme cho Danh sách",
@@ -24,34 +33,21 @@
"lbl_parallax": "🧭 Gia tốc kế 3D",
"lbl_bg_image": "📱 Hình nền tự chọn",
"lbl_glassmorphism": "Bật Kính mờ",
- "info_title": "Quick Control",
- "info_dev_prefix": "Phát triển bởi",
- "info_desc": "Webclip điều khiển đa năng, tích hợp giao diện kính mờ và hệ thống Live Knobs tuỳ biến sống động chuyên nghiệp dành riêng cho iOS.",
"lbl_bg_main": "🏳️🌈 Màu Nền Chính",
"lbl_text_color": "🏳️🌈 Màu Chữ Hệ Thống",
"lbl_list_bg": "Màu nền Danh sách",
"lbl_list_text": "Màu chữ Danh sách",
"lbl_list_svg": "Màu SVG Danh sách",
- "lbl_theme_frame": "💠 Theme SVG",
- "opt_frame_none": "Không khung",
- "opt_frame_black": "⚫️",
- "opt_frame_red": "🔴",
- "opt_frame_green": "🟢",
- "opt_frame_orange": "🟠",
- "opt_frame_purple": "🟣",
- "opt_frame_moss": "🔵",
- "opt_frame_glass": "⚪️",
- "opt_frame_glass2": "⚪️",
- "opt_frame_glass3": "⚪️",
- "opt_frame_siri": "👩💻",
- "opt_frame_custom": "SVG Tùy chỉnh",
+ "lbl_theme_frame": "💠 CHỦ ĐỀ",
"lbl_frame_svg_size": "🖼️ Khung Icon & SVG",
+ "lbl_frame_size": "Khung",
+ "lbl_svg_size": "SVG",
"lbl_svg_opacity": "Độ đậm SVG",
"lbl_frame_radius": "Bo góc",
"lbl_frame_color": "Nền khung",
"lbl_frame_bg_opacity": "Độ đậm nền",
"lbl_svg_color": "Màu SVG",
- "lbl_shadow_section": "🔘 Đổ Bóng",
+ "lbl_shadow_section": "🔘 ĐỔ BÓNG",
"shadow_inset": "⚪️ Bóng Chìm",
"shadow_outer": "⚪️ Bóng Ngoài",
"shadow_soft": "⚪️ Mờ Diện Rộng",
@@ -64,21 +60,43 @@
"slider_color": "Màu Bóng",
"slider_opacity": "Độ đậm bóng",
"lbl_layout_mode": "Danh sách/Lưới",
- "msg_copy_success": "Đã sao chép mã cấu hình (22 Biến)!",
+ "lbl_media_widget": "🎵 Trình Phát Nhạc",
+ "lbl_media_width": "Kích thước khung",
+ "lbl_media_bg_opacity": "Độ mờ khung",
+ "lbl_media_btn_size": "Cỡ nút bấm",
+ "lbl_media_bg_color": "Màu khung",
+ "lbl_media_btn_color": "Màu nút",
+ "lbl_media_svg_color": "Màu SVG",
+ "msg_copy_success": "Đã sao chép mã cấu hình!",
"msg_prompt_import": "📥 Dán mã cấu hình vào đây:",
+ "modal_info_title": "Thông tin ứng dụng",
+ "modal_theme_title": "Kho Giao Diện",
+ "modal_config_title": "Cấu hình",
+ "modal_config_title_export": "📤 Xuất cấu hình",
+ "modal_config_title_import": "📥 Nhập cấu hình",
+ "config_placeholder": "Mã cấu hình...",
+ "info_title": "Quick Control",
+ "info_dev_prefix": "Phát triển bởi",
+ "info_desc": "Webclip điều khiển đa năng, tích hợp giao diện kính mờ và hệ thống Live Knobs tuỳ biến sống động chuyên nghiệp dành riêng cho iOS.",
"lang_wifi": "Wi-Fi",
"lang_bluetooth": "Bluetooth",
"lang_cellular": "Di động",
"lang_airplane": "Máy bay",
- "lang_access-point": "Phát Wifi",
"lang_reset": "Khởi động lại",
"lang_power": "Tắt máy",
"lang_5g": "5G",
"lang_vpn": "VPN",
"lang_dnd": "Tập Trung",
+ "lang_access_point": "Phát Wifi",
"lang_flashlight": "Đèn pin",
"lang_assistivetouch": "AssistiveTouch",
"lang_location": "Vị Trí",
"lang_bell": "Tắt Âm",
- "lang_battery-low": "Pin yếu"
+ "lang_battery_low": "Pin yếu",
+ "lang_bxs_leaf": "Tiết kiệm pin",
+ "lang_arrows_lock_bold": "Khoá hướng",
+ "lang_photo_remove": "Xoá ảnh",
+ "lang_airdrop": "Airdrop",
+ "lang_text_to_speech": "Văn bản thành giọng nói",
+ "lang_speech_to_text": "Giọng nói thành văn bản"
}
\ No newline at end of file
diff --git a/Quick-Control.mobileconfig b/Quick-Control.mobileconfig
new file mode 100644
index 0000000..a9627d2
--- /dev/null
+++ b/Quick-Control.mobileconfig
@@ -0,0 +1,51 @@
+
+
+
Phát triển bởi Sentechtipsvn
+Mang sự hoàn mỹ đến gần hơn với hệ sinh thái Apple của bạn.
+












Phát triển bởi Sentechtipsvn
-Webclip điều khiển đa năng, tích hợp giao diện kính mờ và hệ thống Live Knobs tuỳ biến sống động chuyên nghiệp dành riêng cho iOS.
++ Phát triển bởi + Sentechtipvn +
++ Webclip điều khiển đa năng, tích hợp giao diện kính mờ và hệ thống Live Knobs tuỳ biến sống động chuyên nghiệp dành riêng cho iOS. +
+