diff --git a/examples/Caddyfile.example b/examples/Caddyfile.example index e74721e..85396ae 100644 --- a/examples/Caddyfile.example +++ b/examples/Caddyfile.example @@ -84,7 +84,7 @@ sync.koalastuff.net { import security_headers header { # CSP hardened with base-uri and form-action limits - Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; connect-src 'self'; img-src 'self' data:; object-src 'none'; frame-ancestors 'none'; base-uri 'none'; form-action 'none';" + Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; connect-src 'self'; img-src 'self' data: blob:; object-src 'none'; frame-ancestors 'none'; base-uri 'none'; form-action 'none';" # Modern Permissions Policy (blocks browser hardware access for enhanced privacy) Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=(), usb=()" diff --git a/extension/locales/de.json b/extension/locales/de.json index 7c8eb95..038d9c7 100644 --- a/extension/locales/de.json +++ b/extension/locales/de.json @@ -238,5 +238,9 @@ "LABEL_SEND_TAB_TITLE": "Tab-Titel senden", "LABEL_SEND_TAB_TITLE_TOOLTIP": "Sendet den Titel des ausgewählten Browser-Tabs an den Raum.", "LABEL_MEDIA_TITLE_PRIVACY": "Medientitel", - "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "Lege fest, wie Medientitel an den Raum gesendet werden." + "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "Lege fest, wie Medientitel an den Raum gesendet werden.", + "LABEL_SETTINGS_GROUP_PROFILE": "Profil & Aussehen", + "LABEL_SETTINGS_GROUP_PROFILE_TOOLTIP": "Ändere deinen Benutzernamen, dein Design und deine Spracheinstellungen.", + "LABEL_SETTINGS_GROUP_SYNC": "Wiedergabe & Sync", + "LABEL_SETTINGS_GROUP_SYNC_TOOLTIP": "Passe Wiedergabe-, Benachrichtigungs- und Audioeinstellungen an." } diff --git a/extension/locales/en.json b/extension/locales/en.json index 9d041e4..d221c54 100644 --- a/extension/locales/en.json +++ b/extension/locales/en.json @@ -238,5 +238,9 @@ "LABEL_SEND_TAB_TITLE": "Send tab title", "LABEL_SEND_TAB_TITLE_TOOLTIP": "Send the selected browser tab title to the room.", "LABEL_MEDIA_TITLE_PRIVACY": "Media title", - "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "Choose how media titles are sent to the room." + "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "Choose how media titles are sent to the room.", + "LABEL_SETTINGS_GROUP_PROFILE": "Profile & Appearance", + "LABEL_SETTINGS_GROUP_PROFILE_TOOLTIP": "Change your username, theme, and language preferences.", + "LABEL_SETTINGS_GROUP_SYNC": "Playback & Sync", + "LABEL_SETTINGS_GROUP_SYNC_TOOLTIP": "Customize playback, notifications, and audio preferences." } diff --git a/extension/locales/es.json b/extension/locales/es.json index 768e312..4b3010b 100644 --- a/extension/locales/es.json +++ b/extension/locales/es.json @@ -238,5 +238,9 @@ "LABEL_SEND_TAB_TITLE": "Enviar título de pestaña", "LABEL_SEND_TAB_TITLE_TOOLTIP": "Envía a la sala el título de la pestaña del navegador seleccionada.", "LABEL_MEDIA_TITLE_PRIVACY": "Título multimedia", - "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "Elige cómo se envían los títulos multimedia a la sala." + "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "Elige cómo se envían los títulos multimedia a la sala.", + "LABEL_SETTINGS_GROUP_PROFILE": "Perfil y Apariencia", + "LABEL_SETTINGS_GROUP_PROFILE_TOOLTIP": "Cambia tu nombre de usuario, tema y preferencias de idioma.", + "LABEL_SETTINGS_GROUP_SYNC": "Reproducción y Sincronización", + "LABEL_SETTINGS_GROUP_SYNC_TOOLTIP": "Personaliza la reproducción, las notificaciones y las preferencias de audio." } diff --git a/extension/locales/fr.json b/extension/locales/fr.json index ec85121..086c5a1 100644 --- a/extension/locales/fr.json +++ b/extension/locales/fr.json @@ -238,5 +238,9 @@ "LABEL_SEND_TAB_TITLE": "Envoyer le titre de l’onglet", "LABEL_SEND_TAB_TITLE_TOOLTIP": "Envoie au salon le titre de l’onglet de navigateur sélectionné.", "LABEL_MEDIA_TITLE_PRIVACY": "Titre du média", - "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "Choisissez comment les titres des médias sont envoyés au salon." + "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "Choisissez comment les titres des médias sont envoyés au salon.", + "LABEL_SETTINGS_GROUP_PROFILE": "Profil & Apparence", + "LABEL_SETTINGS_GROUP_PROFILE_TOOLTIP": "Modifiez votre nom d'utilisateur, votre thème et vos préférences linguistiques.", + "LABEL_SETTINGS_GROUP_SYNC": "Lecture & Sync", + "LABEL_SETTINGS_GROUP_SYNC_TOOLTIP": "Personnalisez la lecture, les notifications et les préférences audio." } diff --git a/extension/locales/it.json b/extension/locales/it.json index cca98b9..c78f029 100644 --- a/extension/locales/it.json +++ b/extension/locales/it.json @@ -238,5 +238,9 @@ "LABEL_SEND_TAB_TITLE": "Invia titolo scheda", "LABEL_SEND_TAB_TITLE_TOOLTIP": "Invia alla stanza il titolo della scheda del browser selezionata.", "LABEL_MEDIA_TITLE_PRIVACY": "Titolo multimediale", - "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "Scegli come inviare alla stanza i titoli multimediali." + "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "Scegli come inviare alla stanza i titoli multimediali.", + "LABEL_SETTINGS_GROUP_PROFILE": "Profilo & Aspetto", + "LABEL_SETTINGS_GROUP_PROFILE_TOOLTIP": "Modifica il tuo nome utente, tema e preferenze di lingua.", + "LABEL_SETTINGS_GROUP_SYNC": "Riproduzione & Sync", + "LABEL_SETTINGS_GROUP_SYNC_TOOLTIP": "Personalizza la riproduzione, le notifiche e le preferenze audio." } diff --git a/extension/locales/ja.json b/extension/locales/ja.json index 67f7843..cc7124b 100644 --- a/extension/locales/ja.json +++ b/extension/locales/ja.json @@ -238,5 +238,9 @@ "LABEL_SEND_TAB_TITLE": "タブタイトルを送信", "LABEL_SEND_TAB_TITLE_TOOLTIP": "選択中のブラウザータブのタイトルをルームに送信します。", "LABEL_MEDIA_TITLE_PRIVACY": "メディアタイトル", - "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "メディアタイトルをルームに送信する方法を選択します。" + "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "メディアタイトルをルームに送信する方法を選択します。", + "LABEL_SETTINGS_GROUP_PROFILE": "プロフィールと外観", + "LABEL_SETTINGS_GROUP_PROFILE_TOOLTIP": "ユーザー名、テーマ、言語設定を変更します。", + "LABEL_SETTINGS_GROUP_SYNC": "再生と同期", + "LABEL_SETTINGS_GROUP_SYNC_TOOLTIP": "再生、通知、オーディオ設定をカスタマイズします。" } diff --git a/extension/locales/ko.json b/extension/locales/ko.json index 87e4356..2ad90ef 100644 --- a/extension/locales/ko.json +++ b/extension/locales/ko.json @@ -238,5 +238,9 @@ "LABEL_SEND_TAB_TITLE": "탭 제목 보내기", "LABEL_SEND_TAB_TITLE_TOOLTIP": "선택한 브라우저 탭 제목을 방에 보냅니다.", "LABEL_MEDIA_TITLE_PRIVACY": "미디어 제목", - "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "미디어 제목을 방에 보내는 방식을 선택합니다." + "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "미디어 제목을 방에 보내는 방식을 선택합니다.", + "LABEL_SETTINGS_GROUP_PROFILE": "프로필 및 테마", + "LABEL_SETTINGS_GROUP_PROFILE_TOOLTIP": "사용자 이름, 테마 및 언어 설정을 변경합니다.", + "LABEL_SETTINGS_GROUP_SYNC": "재생 및 동기화", + "LABEL_SETTINGS_GROUP_SYNC_TOOLTIP": "재생, 알림 및 오디오 설정을 맞춤설정합니다." } diff --git a/extension/locales/nl.json b/extension/locales/nl.json index 96bfc50..d1ed3f5 100644 --- a/extension/locales/nl.json +++ b/extension/locales/nl.json @@ -238,5 +238,9 @@ "LABEL_SEND_TAB_TITLE": "Tabtitel verzenden", "LABEL_SEND_TAB_TITLE_TOOLTIP": "Stuurt de titel van het geselecteerde browsertabblad naar de kamer.", "LABEL_MEDIA_TITLE_PRIVACY": "Mediatitel", - "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "Kies hoe mediatitels naar de kamer worden gestuurd." + "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "Kies hoe mediatitels naar de kamer worden gestuurd.", + "LABEL_SETTINGS_GROUP_PROFILE": "Profiel & Weergave", + "LABEL_SETTINGS_GROUP_PROFILE_TOOLTIP": "Wijzig uw gebruikersnaam, thema en taalvoorkeuren.", + "LABEL_SETTINGS_GROUP_SYNC": "Afspelen & Sync", + "LABEL_SETTINGS_GROUP_SYNC_TOOLTIP": "Pas afspelen, meldingen en audiovoorkeuren aan." } diff --git a/extension/locales/pl.json b/extension/locales/pl.json index ceb4aa1..0d49f5e 100644 --- a/extension/locales/pl.json +++ b/extension/locales/pl.json @@ -238,5 +238,9 @@ "LABEL_SEND_TAB_TITLE": "Wysyłaj tytuł karty", "LABEL_SEND_TAB_TITLE_TOOLTIP": "Wysyła do pokoju tytuł wybranej karty przeglądarki.", "LABEL_MEDIA_TITLE_PRIVACY": "Tytuł multimediów", - "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "Wybierz, jak tytuły multimediów są wysyłane do pokoju." + "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "Wybierz, jak tytuły multimediów są wysyłane do pokoju.", + "LABEL_SETTINGS_GROUP_PROFILE": "Profil i Wygląd", + "LABEL_SETTINGS_GROUP_PROFILE_TOOLTIP": "Zmień swoją nazwę użytkownika, motyw i preferencje językowe.", + "LABEL_SETTINGS_GROUP_SYNC": "Odtwarzanie i Sync", + "LABEL_SETTINGS_GROUP_SYNC_TOOLTIP": "Dostosuj odtwarzanie, powiadomienia i preferencje audio." } diff --git a/extension/locales/pt-BR.json b/extension/locales/pt-BR.json index 5556955..ea7dafd 100644 --- a/extension/locales/pt-BR.json +++ b/extension/locales/pt-BR.json @@ -238,5 +238,9 @@ "LABEL_SEND_TAB_TITLE": "Enviar título da aba", "LABEL_SEND_TAB_TITLE_TOOLTIP": "Envia para a sala o título da aba selecionada do navegador.", "LABEL_MEDIA_TITLE_PRIVACY": "Título da mídia", - "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "Escolha como os títulos de mídia são enviados para a sala." + "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "Escolha como os títulos de mídia são enviados para a sala.", + "LABEL_SETTINGS_GROUP_PROFILE": "Perfil e Aparência", + "LABEL_SETTINGS_GROUP_PROFILE_TOOLTIP": "Altere o seu nome de usuário, tema e preferências de idioma.", + "LABEL_SETTINGS_GROUP_SYNC": "Reprodução e Sincronização", + "LABEL_SETTINGS_GROUP_SYNC_TOOLTIP": "Personalize a reprodução, as notificações e as preferências de áudio." } diff --git a/extension/locales/pt.json b/extension/locales/pt.json index b6426dd..811a511 100644 --- a/extension/locales/pt.json +++ b/extension/locales/pt.json @@ -238,5 +238,9 @@ "LABEL_SEND_TAB_TITLE": "Enviar título do separador", "LABEL_SEND_TAB_TITLE_TOOLTIP": "Envia para a sala o título do separador do navegador selecionado.", "LABEL_MEDIA_TITLE_PRIVACY": "Título multimédia", - "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "Escolhe como os títulos multimédia são enviados para a sala." + "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "Escolhe como os títulos multimédia são enviados para a sala.", + "LABEL_SETTINGS_GROUP_PROFILE": "Perfil e Aparência", + "LABEL_SETTINGS_GROUP_PROFILE_TOOLTIP": "Altere o seu nome de utilizador, tema e preferências de idioma.", + "LABEL_SETTINGS_GROUP_SYNC": "Reprodução e Sincronização", + "LABEL_SETTINGS_GROUP_SYNC_TOOLTIP": "Personalize a reprodução, as notificações e as preferências de áudio." } diff --git a/extension/locales/ru.json b/extension/locales/ru.json index 9660bd3..031df9a 100644 --- a/extension/locales/ru.json +++ b/extension/locales/ru.json @@ -238,5 +238,9 @@ "LABEL_SEND_TAB_TITLE": "Отправлять название вкладки", "LABEL_SEND_TAB_TITLE_TOOLTIP": "Отправляет в комнату название выбранной вкладки браузера.", "LABEL_MEDIA_TITLE_PRIVACY": "Название медиа", - "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "Выберите, как названия медиа отправляются в комнату." + "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "Выберите, как названия медиа отправляются в комнату.", + "LABEL_SETTINGS_GROUP_PROFILE": "Профиль и Оформление", + "LABEL_SETTINGS_GROUP_PROFILE_TOOLTIP": "Измените имя пользователя, тему и настройки языка.", + "LABEL_SETTINGS_GROUP_SYNC": "Воспроизведение и Синхронизация", + "LABEL_SETTINGS_GROUP_SYNC_TOOLTIP": "Настройте воспроизведение, уведомления и параметры звука." } diff --git a/extension/locales/tr.json b/extension/locales/tr.json index 2cb5101..a95d3b3 100644 --- a/extension/locales/tr.json +++ b/extension/locales/tr.json @@ -238,5 +238,9 @@ "LABEL_SEND_TAB_TITLE": "Sekme başlığını gönder", "LABEL_SEND_TAB_TITLE_TOOLTIP": "Seçili tarayıcı sekmesinin başlığını odaya gönderir.", "LABEL_MEDIA_TITLE_PRIVACY": "Medya başlığı", - "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "Medya başlıklarının odaya nasıl gönderileceğini seçin." + "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "Medya başlıklarının odaya nasıl gönderileceğini seçin.", + "LABEL_SETTINGS_GROUP_PROFILE": "Profil ve Görünüm", + "LABEL_SETTINGS_GROUP_PROFILE_TOOLTIP": "Kullanıcı adınızı, temanızı ve dil tercihlerinizi değiştirin.", + "LABEL_SETTINGS_GROUP_SYNC": "Oynatma ve Eşitleme", + "LABEL_SETTINGS_GROUP_SYNC_TOOLTIP": "Oynatma, bildirim ve ses tercihlerini özelleştirin." } diff --git a/extension/locales/uk.json b/extension/locales/uk.json index 3de331b..2477bfb 100644 --- a/extension/locales/uk.json +++ b/extension/locales/uk.json @@ -238,5 +238,9 @@ "LABEL_SEND_TAB_TITLE": "Надсилати назву вкладки", "LABEL_SEND_TAB_TITLE_TOOLTIP": "Надсилає до кімнати назву вибраної вкладки браузера.", "LABEL_MEDIA_TITLE_PRIVACY": "Назва медіа", - "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "Виберіть, як назви медіа надсилати до кімнати." + "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "Виберіть, як назви медіа надсилати до кімнати.", + "LABEL_SETTINGS_GROUP_PROFILE": "Профіль та Вигляд", + "LABEL_SETTINGS_GROUP_PROFILE_TOOLTIP": "Змініть ім'я користувача, тему та мовні налаштування.", + "LABEL_SETTINGS_GROUP_SYNC": "Відтворення та Синхронізація", + "LABEL_SETTINGS_GROUP_SYNC_TOOLTIP": "Налаштуйте відтворення, сповіщення та параметри звуку." } diff --git a/extension/locales/zh.json b/extension/locales/zh.json index 7330d74..80bd2d7 100644 --- a/extension/locales/zh.json +++ b/extension/locales/zh.json @@ -238,5 +238,9 @@ "LABEL_SEND_TAB_TITLE": "发送标签页标题", "LABEL_SEND_TAB_TITLE_TOOLTIP": "将所选浏览器标签页的标题发送到房间。", "LABEL_MEDIA_TITLE_PRIVACY": "媒体标题", - "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "选择媒体标题发送到房间的方式。" + "LABEL_MEDIA_TITLE_PRIVACY_TOOLTIP": "选择媒体标题发送到房间的方式。", + "LABEL_SETTINGS_GROUP_PROFILE": "个人资料与外观", + "LABEL_SETTINGS_GROUP_PROFILE_TOOLTIP": "更改您的用户名、主题和语言首选项。", + "LABEL_SETTINGS_GROUP_SYNC": "播放与同步", + "LABEL_SETTINGS_GROUP_SYNC_TOOLTIP": "自定义播放、通知和音频首选项。" } diff --git a/extension/popup.html b/extension/popup.html index 576e358..6c73d62 100644 --- a/extension/popup.html +++ b/extension/popup.html @@ -493,11 +493,53 @@ .tab-btn:not(:disabled):active { transform: translateY(1px) scale(0.985); } + details.form-group { + background: var(--card); + border: 1px solid var(--border-strong); + border-radius: var(--radius); + margin-bottom: 12px; + transition: border-color 0.2s, background-color 0.2s; + overflow: hidden; + } + details.form-group:hover { + border-color: var(--accent); + } details.form-group > summary { - min-height: 30px; + min-height: 38px; + padding: 10px 14px; display: flex; align-items: center; + justify-content: space-between; cursor: pointer; + font-weight: 700; + font-size: 13px; + color: var(--text-primary); + user-select: none; + list-style: none; + } + details.form-group > summary::-webkit-details-marker { + display: none; + } + details.form-group > summary::after { + content: ""; + display: inline-block; + width: 6px; + height: 6px; + border-right: 2px solid var(--text-muted); + border-bottom: 2px solid var(--text-muted); + transform: rotate(-45deg); + transition: transform 0.2s ease; + margin-right: 4px; + } + details[open].form-group > summary::after { + transform: rotate(45deg); + } + details.form-group > .details-content { + padding: 4px 14px 14px 14px; + border-top: 1px solid var(--border-soft); + display: flex; + flex-direction: column; + gap: 12px; } #section-join > .info-card, #section-active > .info-card, @@ -771,106 +813,112 @@
-
- - -
- -
- - -
- -
- Privacy Settings -
- - -
-
- - +
+ 👤 Profile & Theme +
+
+ + +
+
+ + +
+
+ + +
-
- - -
- -
- - -
- -
- - -
- -
- - -
- -
-
- +
+ 🔒 Privacy Settings +
+
+ + +
+
+ + +
- Open -
+
-
- - -
+
+ ⚡ Playback & Sync +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + Open +
+
+
-
- - - -

Use this if you see "Duplicate Identity" errors.

-

Other issue? Open a GitHub Issue

-
+
+ 🔧 Troubleshooting +
+ + +

Use this if you see "Duplicate Identity" errors.

+

Other issue? Open a GitHub Issue

+
+