From 7fea11de0a3778062f493b83cf6bced075ac34c1 Mon Sep 17 00:00:00 2001
From: KoalaDev <6156589+Shik3i@users.noreply.github.com>
Date: Sat, 11 Jul 2026 11:21:47 +0200
Subject: [PATCH] Polish extension and landing page UI
---
extension/i18n.js | 1 +
extension/popup.html | 88 ++++++++--
scripts/test-website-theme.mjs | 31 ++++
scripts/verify-release.mjs | 1 +
website/style.css | 285 ++++++++++++++++++++++++++++++---
website/template.html | 39 +++--
6 files changed, 394 insertions(+), 51 deletions(-)
create mode 100644 scripts/test-website-theme.mjs
diff --git a/extension/i18n.js b/extension/i18n.js
index 026de47..1e65eac 100644
--- a/extension/i18n.js
+++ b/extension/i18n.js
@@ -12,6 +12,7 @@ let currentLanguage = null;
*/
export async function loadLocale(langCode) {
const resolvedLang = SUPPORTED_LANGUAGES.includes(langCode) ? langCode : DEFAULT_LANGUAGE;
+ document.documentElement.lang = resolvedLang;
if (currentLanguage === resolvedLang && Object.keys(activeDictionary).length > 0) {
return;
diff --git a/extension/popup.html b/extension/popup.html
index bbd7f4f..576e358 100644
--- a/extension/popup.html
+++ b/extension/popup.html
@@ -1,5 +1,5 @@
-
+
KoalaSync
@@ -61,9 +61,10 @@
}
body {
- width: 320px;
+ width: 360px;
margin: 0;
- padding: 16px;
+ padding: 18px;
+ box-sizing: border-box;
background: var(--bg);
color: var(--text);
font-family: 'Twemoji Country Flags', -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
@@ -83,7 +84,8 @@
.header-row {
display: flex;
align-items: center;
- margin-bottom: 16px;
+ margin-bottom: 14px;
+ padding: 2px 2px 0;
}
h1 {
@@ -98,8 +100,8 @@
}
h1 img {
- width: 48px;
- height: 48px;
+ width: 42px;
+ height: 42px;
object-fit: contain;
border-radius: 4px;
}
@@ -132,7 +134,8 @@
background: var(--card);
padding: 4px;
border-radius: var(--radius);
- margin-bottom: 20px;
+ margin-bottom: 16px;
+ border: 1px solid var(--border-soft);
}
.tab-btn {
@@ -146,11 +149,13 @@
border-radius: 8px;
min-height: 36px;
transition: background-color 0.2s, color 0.2s, box-shadow 0.2s;
+ white-space: nowrap;
}
.tab-btn.active {
background: var(--accent);
color: var(--text-on-green);
+ box-shadow: 0 5px 14px oklch(0.38 0.10 150 / 0.22);
}
.tab-content {
@@ -191,6 +196,8 @@
border-radius: 8px;
outline: none;
font-family: inherit;
+ min-height: 40px;
+ transition: border-color 0.2s, box-shadow 0.2s, background-color 0.2s;
}
@supports (appearance: base-select) {
@@ -207,9 +214,10 @@
}
}
- input:focus {
+ input:focus,
+ select:focus {
border-color: var(--accent);
- box-shadow: 0 0 0 2px rgba(86, 174, 108, 0.2);
+ box-shadow: 0 0 0 3px oklch(0.68 0.13 150 / 0.18);
}
button.primary {
@@ -277,13 +285,14 @@
.info-card {
background: var(--card);
padding: 12px;
- border-radius: 8px;
+ border-radius: 10px;
margin-bottom: 12px;
border: 1px solid var(--border-strong);
+ box-shadow: 0 8px 22px rgba(0, 0, 0, 0.08);
}
.peer-item {
- padding: 8px 0;
+ padding: 10px 0;
border-bottom: 1px solid var(--border-strong);
}
@@ -471,6 +480,51 @@
font-size: 10px;
opacity: 0.78;
}
+
+ /* Unified interaction layer: the popup is a compact control surface,
+ so every actionable target gets the same tactile and keyboard cues. */
+ button,
+ select,
+ summary,
+ a {
+ -webkit-tap-highlight-color: transparent;
+ }
+ button:not(:disabled):active,
+ .tab-btn:not(:disabled):active {
+ transform: translateY(1px) scale(0.985);
+ }
+ details.form-group > summary {
+ min-height: 30px;
+ display: flex;
+ align-items: center;
+ cursor: pointer;
+ }
+ #section-join > .info-card,
+ #section-active > .info-card,
+ #tab-sync .info-card {
+ position: relative;
+ overflow: hidden;
+ }
+ #section-active > .info-card:first-child::before,
+ #connStatus::before {
+ content: "";
+ position: absolute;
+ inset: 0 auto 0 0;
+ width: 3px;
+ background: var(--accent);
+ }
+ #playBtn,
+ #pauseBtn,
+ #forceSyncBtn {
+ min-height: 42px;
+ }
+ #leaveBtn {
+ background: transparent;
+ border: 1px solid color-mix(in oklch, var(--error), transparent 35%);
+ }
+ #leaveBtn:hover {
+ background: color-mix(in oklch, var(--error), transparent 88%);
+ }
.popup-footer a {
color: var(--text-muted);
text-decoration: none;
@@ -516,6 +570,9 @@
html.theme-light .popup-footer {
border-top-color: var(--border-soft);
}
+ html.theme-light .tab-btn.active {
+ color: #fff;
+ }
.feature-hint {
display: inline-block;
width: 8px;
@@ -543,6 +600,7 @@
+