diff --git a/extension/audio-options.css b/extension/audio-options.css index 3e70dab..46ed508 100644 --- a/extension/audio-options.css +++ b/extension/audio-options.css @@ -1,5 +1,5 @@ :root { - /* v3.0.0 "The Greens Update" nature palette (shared with the website) */ + /* KoalaSync nature system: forest neutrals, eucalyptus brand, warm supporting accents. */ --bg-base: oklch(0.20 0.025 140); --surface: oklch(0.27 0.035 130); --surface-deep: oklch(0.16 0.025 135); @@ -8,9 +8,11 @@ --border-strong: oklch(0.32 0.03 125); --text-primary: oklch(0.96 0.01 90); --text-secondary: oklch(0.78 0.02 90); - --accent-green: oklch(0.68 0.13 150); - --accent-green-hover: oklch(0.75 0.13 150); + --accent-green: oklch(0.68 0.13 155); + --accent-green-hover: oklch(0.75 0.13 155); --accent-terracotta: oklch(0.62 0.14 45); + --success-green: oklch(0.72 0.14 135); + --warning-amber: oklch(0.76 0.14 80); --danger: oklch(0.55 0.15 25); --text-on-green: oklch(0.14 0.02 90); diff --git a/extension/i18n.js b/extension/i18n.js index 1e65eac..11d2ec5 100644 --- a/extension/i18n.js +++ b/extension/i18n.js @@ -12,7 +12,9 @@ let currentLanguage = null; */ export async function loadLocale(langCode) { const resolvedLang = SUPPORTED_LANGUAGES.includes(langCode) ? langCode : DEFAULT_LANGUAGE; - document.documentElement.lang = resolvedLang; + if (typeof document !== 'undefined') { + document.documentElement.lang = resolvedLang; + } if (currentLanguage === resolvedLang && Object.keys(activeDictionary).length > 0) { return; @@ -91,6 +93,8 @@ export function getMessage(key, placeholders = null) { * Performs dynamic DOM replacements for elements carrying data-i18n attributes. */ export function translateDOM() { + if (typeof document === 'undefined') return; + // 1. Text Content document.querySelectorAll('[data-i18n]').forEach(el => { const key = el.getAttribute('data-i18n'); diff --git a/extension/popup.html b/extension/popup.html index 6c41919..48bfc70 100644 --- a/extension/popup.html +++ b/extension/popup.html @@ -13,7 +13,7 @@ } :root { - /* v3.0.0 "The Greens Update" nature palette (shared with the website) */ + /* KoalaSync nature system: forest neutrals, eucalyptus brand, warm supporting accents. */ --bg-base: oklch(0.20 0.025 140); --surface: oklch(0.27 0.035 130); --surface-deep: oklch(0.16 0.025 135); @@ -22,9 +22,11 @@ --border-strong: oklch(0.32 0.03 125); --text-primary: oklch(0.96 0.01 90); --text-secondary: oklch(0.78 0.02 90); - --accent-green: oklch(0.68 0.13 150); - --accent-green-hover: oklch(0.75 0.13 150); + --accent-green: oklch(0.68 0.13 155); + --accent-green-hover: oklch(0.75 0.13 155); --accent-terracotta: oklch(0.62 0.14 45); + --success-green: oklch(0.72 0.14 135); + --warning-amber: oklch(0.76 0.14 80); --danger: oklch(0.55 0.15 25); --text-on-green: oklch(0.14 0.02 90); --text-on-warm: oklch(0.16 0.025 45); @@ -35,10 +37,11 @@ --accent-hover: var(--accent-green-hover); --text: var(--text-primary); --text-muted: var(--text-secondary); - --success: var(--accent-green); + --success: var(--success-green); + --warning: var(--warning-amber); --error: var(--danger); --radius: 12px; - --star: oklch(0.68 0.14 45); + --star: var(--warning); color-scheme: dark; } @@ -51,9 +54,11 @@ --border-strong: oklch(0.73 0.035 125); --text-primary: oklch(0.21 0.03 140); --text-secondary: oklch(0.43 0.03 135); - --accent-green: oklch(0.56 0.13 150); - --accent-green-hover: oklch(0.49 0.13 150); + --accent-green: oklch(0.52 0.13 155); + --accent-green-hover: oklch(0.45 0.12 155); --accent-terracotta: oklch(0.64 0.14 45); + --success-green: oklch(0.48 0.14 135); + --warning-amber: oklch(0.58 0.14 80); --danger: oklch(0.57 0.17 25); --text-on-green: oklch(0.16 0.03 140); --text-on-warm: oklch(0.18 0.03 45); @@ -350,9 +355,9 @@ border: 1px solid color-mix(in oklch, var(--success), transparent 70%); } .badge-loading { - background: color-mix(in oklch, var(--accent-terracotta), transparent 85%); - color: var(--accent-terracotta); - border: 1px solid color-mix(in oklch, var(--accent-terracotta), transparent 70%); + background: color-mix(in oklch, var(--warning), transparent 85%); + color: var(--warning); + border: 1px solid color-mix(in oklch, var(--warning), transparent 70%); } .lobby-peer-item { display: inline-flex; @@ -419,7 +424,7 @@ .toast-success { background: var(--success); color: var(--text-on-green); } .toast-error { background: var(--error); color: white; } .toast-info { background: var(--accent); color: var(--text-on-green); } - .toast-warning { background: var(--accent-terracotta); color: var(--text-on-warm); } + .toast-warning { background: var(--warning); color: var(--text-on-warm); } @keyframes toastSlideIn { from { opacity: 0; transform: translateY(-20px); } @@ -530,13 +535,52 @@ background-color: white; } .popup-footer { - margin-top: 20px; - text-align: center; - border-top: 1px solid rgba(255,255,255,0.05); - padding-top: 10px; - color: var(--text-muted); + margin-top: 18px; + padding: 12px; + border: 1px solid var(--border-soft); + border-radius: var(--radius); + background: color-mix(in oklch, var(--card), var(--accent) 5%); + } + .footer-support { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + padding-bottom: 10px; + border-bottom: 1px solid var(--border-soft); + } + .footer-prompt { + margin: 0; + color: var(--text); + font-size: 11px; + font-weight: 600; + line-height: 1.35; + } + .footer-review { + flex: none; + min-height: 30px; + padding: 7px 10px; + border-radius: 8px; + background: var(--warning); + color: var(--text-on-warm) !important; + font-size: 11px; + font-weight: 800; + } + .footer-links { + display: flex; + justify-content: center; + gap: 6px; + padding-top: 8px; + } + .footer-links a { + min-height: 28px; + padding: 6px 9px; + border-radius: 7px; font-size: 10px; - opacity: 0.78; + font-weight: 600; + } + .footer-links a:hover { + background: var(--surface-alt); } /* Unified interaction layer: the popup is a compact control surface, @@ -599,6 +643,151 @@ flex-direction: column; gap: 12px; } + + /* Settings are deliberately quieter than the control tabs: strong + grouping, neutral controls, and no decorative emoji iconography. */ + #tab-settings { + display: none; + } + #tab-settings.active { + display: block; + } + #tab-settings details.form-group { + background: color-mix(in oklch, var(--card), var(--bg) 12%); + border-color: var(--border-soft); + box-shadow: 0 10px 24px oklch(0.08 0.02 140 / 0.16); + } + #tab-settings details.form-group:hover { + border-color: var(--border-strong); + } + #tab-settings details.form-group[open] { + border-color: color-mix(in oklch, var(--accent), var(--border-strong) 72%); + } + #tab-settings details.form-group > summary { + min-height: 44px; + padding: 0 14px; + font-size: 12px; + font-weight: 750; + letter-spacing: 0.025em; + } + #tab-settings details.form-group > .details-content { + gap: 0; + padding: 2px 14px 8px; + } + .settings-row { + display: grid; + grid-template-columns: minmax(0, 1fr) 154px; + align-items: center; + gap: 14px; + min-height: 54px; + border-bottom: 1px solid var(--border-soft); + } + .settings-row:last-child { + border-bottom: 0; + } + .settings-row > label:not(.toggle-switch) { + margin: 0; + color: var(--text); + font-size: 12px; + font-weight: 600; + line-height: 1.3; + letter-spacing: 0; + text-transform: none; + } + .settings-control, + #tab-settings input[type="text"] { + width: 154px; + height: 38px; + min-height: 38px; + margin: 0; + border-radius: 9px; + border-color: var(--border-strong); + background-color: var(--surface-deep); + color: var(--text); + font-size: 12px; + font-weight: 600; + line-height: normal; + } + #tab-settings input[type="text"] { + padding: 0 11px; + } + .settings-select { + position: relative; + width: 154px; + } + .settings-select::after { + content: ""; + position: absolute; + top: 50%; + right: 12px; + width: 6px; + height: 6px; + border-right: 1.5px solid var(--text-muted); + border-bottom: 1.5px solid var(--text-muted); + transform: translateY(-68%) rotate(45deg); + pointer-events: none; + } + .settings-select select { + appearance: none; + padding: 0 32px 0 11px; + cursor: pointer; + } + .settings-row .toggle-switch { + justify-self: end; + margin: 0 2px 0 0; + } + .settings-action { + justify-self: end; + min-width: 76px; + min-height: 34px; + display: inline-flex; + align-items: center; + justify-content: center; + padding: 0 12px; + border: 1px solid color-mix(in oklch, var(--accent), transparent 62%); + border-radius: 9px; + background: color-mix(in oklch, var(--accent), transparent 90%); + color: var(--accent); + font-size: 11px; + font-weight: 750; + text-decoration: none; + } + .settings-action:hover { + background: color-mix(in oklch, var(--accent), transparent 84%); + } + .settings-tools { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 8px; + padding: 12px 0 8px; + } + .settings-tools button.secondary { + min-height: 38px; + margin: 0; + padding: 8px; + font-size: 11px; + } + .settings-note { + margin: 0; + color: var(--text-muted); + font-size: 10px; + line-height: 1.45; + text-align: left; + } + .settings-issue-link { + margin: 8px 0 2px; + padding-top: 9px; + border-top: 1px solid var(--border-soft); + font-size: 10px; + text-align: left; + } + .settings-issue-link a { + color: var(--text-muted); + text-decoration: none; + } + .settings-issue-link a:hover { + color: var(--accent); + } #section-join > .info-card, #section-active > .info-card, #tab-sync .info-card { @@ -668,7 +857,8 @@ background-color: white; } html.theme-light .popup-footer { - border-top-color: var(--border-soft); + border-color: var(--border-soft); + box-shadow: 0 8px 24px oklch(0.22 0.035 140 / 0.07); } html.theme-light .tab-btn.active { color: #fff; @@ -724,7 +914,7 @@
- +
Manual Connect / Advanced
@@ -833,7 +1023,7 @@
- + +
+ +
-
- - +
+ + + +
-
- - +
+ + + +
- 🔒 Privacy Settings + Privacy
-
- +
+
-
- - +
+ + + +
- ⚡ Playback & Sync + Playback & Sync
-
- +
+
-
- +
+
-
- +
+
-
- +
+
-
- - Open +
+ + Open
- 🔧 Troubleshooting -
- - -

Use this if you see "Duplicate Identity" errors.

-

Other issue? Open a GitHub Issue

+ Troubleshooting +
+
+ + +
+

Use this if you see "Duplicate Identity" errors.

+
@@ -1024,17 +1222,15 @@ -