v6.8.0: light theme

The palette lived as ~620 hex literals in inline styles plus a few hundred more in
the stylesheets, so there was no single thing to change. It is now 113 custom
properties in src/styles/theme.css, in two blocks.

src/scripts/theme-boot.js decides the theme before first paint — blocking, in <head>,
above the stylesheet, because a deferred script paints dark first and corrects itself.
It stores the mode ('system' | 'light' | 'dark'), never the colour it resolved to, and
stamps data-theme so an explicit choice can beat the media query. The switcher in the
header is a view onto it.

A filled accent stays the brand colour in both themes — the ink on it is near-black
either way — while an accent used as text darkens to clear 4.5:1 on white. A colour
reaches a fill by four routes (a style property, a constant, a helper argument, an SVG
source string), and tests/theme-switching.test.mjs covers all four.

The dark theme is unchanged: every colour declaration the previous build produced comes
out of this one identically once the properties are resolved.

Also: the roadmap drops its status chips on mobile, and Roadmap.jsx no longer splits a
colour with parseInt at runtime, which a var() reference cannot survive.
This commit is contained in:
lockbitchat
2026-09-04 17:38:41 -04:00
parent 1c153b290a
commit 9e63cf65a4
109 changed files with 4320 additions and 1910 deletions
+6
View File
@@ -38,6 +38,10 @@
"language.suggest.text": "هذه الصفحة متوفرة أيضًا بالعربية.",
"language.suggest.cta": "اقرأ بالعربية",
"language.suggest.dismiss": "إغلاق",
"theme.label": "المظهر",
"theme.system": "النظام",
"theme.light": "فاتح",
"theme.dark": "داكن",
"community.title": "انضمّ إلى مستقبل الخصوصية",
"community.description": "ينمو SecureBit بفضل مجتمعه. أفكاركم وملاحظاتكم هي ما يصوغ مستقبل التواصل الآمن - مبنيّ في العلن، مع تحقّق ASN.1 كامل من طرف إلى طرف.",
"community.github": "مستودع GitHub",
@@ -322,6 +326,8 @@
"pwa.iosStep3Hint": "أكّد لتثبيت SecureBit.chat",
"pwa.genericTitle": "تثبيت SecureBit",
"pwa.genericDesc": "لكلّ متصفّح طريقته في التثبيت. اختر الخطوات التي تناسب متصفّحك.",
"pwa.androidChromeHint": "اضغط على ⋮ في الزاوية العلوية، ثم «تثبيت التطبيق»",
"pwa.androidOtherHint": "افتح القائمة، ثم «إضافة إلى الشاشة الرئيسية»",
"pwa.gotIt": "فهمت",
"pwa.installedTitle": "تمّ تثبيت التطبيق!",
"pwa.installedIos": "تمّ تثبيت تطبيق iOS! افتحه من الشاشة الرئيسية.",
+6
View File
@@ -38,6 +38,10 @@
"language.suggest.text": "Diese Seite gibt es auch auf Deutsch.",
"language.suggest.cta": "Auf Deutsch lesen",
"language.suggest.dismiss": "Schließen",
"theme.label": "Design",
"theme.system": "System",
"theme.light": "Hell",
"theme.dark": "Dunkel",
"community.title": "Gestalten Sie die Zukunft der Privatsphäre mit",
"community.description": "SecureBit wächst durch seine Community. Ihre Ideen und Ihr Feedback prägen die Zukunft sicherer Kommunikation - offen entwickelt, mit vollständiger ASN.1-Validierung von Ende zu Ende.",
"community.github": "GitHub-Repository",
@@ -322,6 +326,8 @@
"pwa.iosStep3Hint": "Bestätigen, um SecureBit.chat zu installieren",
"pwa.genericTitle": "SecureBit installieren",
"pwa.genericDesc": "Jeder Browser installiert auf seine eigene Weise. Wählen Sie die Schritte, die zu Ihrem passen.",
"pwa.androidChromeHint": "Tippe oben auf ⋮ und dann auf „App installieren“",
"pwa.androidOtherHint": "Öffne das Menü und wähle „Zum Startbildschirm hinzufügen“",
"pwa.gotIt": "Verstanden",
"pwa.installedTitle": "App installiert!",
"pwa.installedIos": "iOS-App installiert! Vom Home-Bildschirm öffnen.",
+6
View File
@@ -33,6 +33,10 @@
"language.suggest.text": "This page is also available in English.",
"language.suggest.cta": "Read in English",
"language.suggest.dismiss": "Dismiss",
"theme.label": "Theme",
"theme.system": "System",
"theme.light": "Light",
"theme.dark": "Dark",
"community.title": "Join the future of privacy",
"community.description": "SecureBit grows thanks to its community. Your ideas and feedback shape the future of secure communication - built in the open, with complete ASN.1 validation end-to-end.",
"community.github": "GitHub Repository",
@@ -317,6 +321,8 @@
"pwa.iosStep3Hint": "Confirm to install SecureBit.chat",
"pwa.genericTitle": "Install SecureBit",
"pwa.genericDesc": "Your browser handles installs its own way. Pick the steps that match yours.",
"pwa.androidChromeHint": "Tap ⋮ in the top corner, then “Install app”",
"pwa.androidOtherHint": "Tap the menu, then “Add to Home screen”",
"pwa.gotIt": "Got it",
"pwa.installedTitle": "App Installed!",
"pwa.installedIos": "iOS App installed! Open from home screen.",
+6
View File
@@ -38,6 +38,10 @@
"language.suggest.text": "Esta página también está disponible en español.",
"language.suggest.cta": "Leer en español",
"language.suggest.dismiss": "Cerrar",
"theme.label": "Tema",
"theme.system": "Sistema",
"theme.light": "Claro",
"theme.dark": "Oscuro",
"community.title": "Construye el futuro de la privacidad",
"community.description": "SecureBit crece gracias a su comunidad. Tus ideas y comentarios dan forma al futuro de la comunicación segura, desarrollada de forma abierta y con validación ASN.1 completa de extremo a extremo.",
"community.github": "Repositorio en GitHub",
@@ -322,6 +326,8 @@
"pwa.iosStep3Hint": "Confirma para instalar SecureBit.chat",
"pwa.genericTitle": "Instalar SecureBit",
"pwa.genericDesc": "Cada navegador instala a su manera. Elige los pasos que coincidan con el tuyo.",
"pwa.androidChromeHint": "Toca ⋮ en la esquina superior y elige «Instalar aplicación»",
"pwa.androidOtherHint": "Abre el menú y elige «Añadir a la pantalla de inicio»",
"pwa.gotIt": "Entendido",
"pwa.installedTitle": "¡App instalada!",
"pwa.installedIos": "¡App de iOS instalada! Ábrela desde la pantalla de inicio.",
+6
View File
@@ -38,6 +38,10 @@
"language.suggest.text": "این صفحه به فارسی هم در دسترس است.",
"language.suggest.cta": "خواندن به فارسی",
"language.suggest.dismiss": "بستن",
"theme.label": "پوسته",
"theme.system": "سیستم",
"theme.light": "روشن",
"theme.dark": "تیره",
"community.title": "به آیندهٔ حریم خصوصی بپیوندید",
"community.description": "SecureBit به‌لطف جامعه‌اش رشد می‌کند. ایده‌ها و بازخوردهای شما آیندهٔ ارتباط امن را شکل می‌دهد - ساخته‌شده در فضای باز، با اعتبارسنجی کامل ASN.1 از یک سر تا سر دیگر.",
"community.github": "مخزن GitHub",
@@ -322,6 +326,8 @@
"pwa.iosStep3Hint": "برای نصب SecureBit.chat تأیید کنید",
"pwa.genericTitle": "نصب SecureBit",
"pwa.genericDesc": "هر مرورگر روش نصب خودش را دارد. گام‌هایی را برگزینید که با مرورگر شما می‌خواند.",
"pwa.androidChromeHint": "روی ⋮ در گوشهٔ بالا بزنید و «نصب برنامه» را بزنید",
"pwa.androidOtherHint": "منو را باز کنید و «افزودن به صفحهٔ اصلی» را بزنید",
"pwa.gotIt": "متوجه شدم",
"pwa.installedTitle": "برنامه نصب شد!",
"pwa.installedIos": "برنامهٔ iOS نصب شد! از صفحهٔ اصلی بازش کنید.",
+6
View File
@@ -33,6 +33,10 @@
"language.suggest.text": "Cette page est aussi disponible en français.",
"language.suggest.cta": "Lire en français",
"language.suggest.dismiss": "Fermer",
"theme.label": "Thème",
"theme.system": "Système",
"theme.light": "Clair",
"theme.dark": "Sombre",
"community.title": "Construisez l'avenir de la vie privée",
"community.description": "SecureBit grandit grâce à sa communauté. Vos idées et vos retours façonnent l'avenir des communications sécurisées, développées à ciel ouvert, avec une validation ASN.1 complète de bout en bout.",
"community.github": "Dépôt GitHub",
@@ -317,6 +321,8 @@
"pwa.iosStep3Hint": "Confirmez pour installer SecureBit.chat",
"pwa.genericTitle": "Installer SecureBit",
"pwa.genericDesc": "Chaque navigateur installe à sa manière. Choisissez les étapes qui correspondent au vôtre.",
"pwa.androidChromeHint": "Appuyez sur ⋮ en haut, puis sur « Installer lapplication »",
"pwa.androidOtherHint": "Ouvrez le menu, puis « Ajouter à l’écran daccueil »",
"pwa.gotIt": "Compris",
"pwa.installedTitle": "Application installée !",
"pwa.installedIos": "Application iOS installée ! Ouvrez-la depuis l'écran d'accueil.",
+6
View File
@@ -38,6 +38,10 @@
"language.suggest.text": "הדף הזה זמין גם בעברית.",
"language.suggest.cta": "לקריאה בעברית",
"language.suggest.dismiss": "סגירה",
"theme.label": "ערכת נושא",
"theme.system": "מערכת",
"theme.light": "בהיר",
"theme.dark": "כהה",
"community.title": "הצטרפו לעתיד של הפרטיות",
"community.description": "SecureBit גדל בזכות הקהילה שלו. הרעיונות והמשוב שלכם מעצבים את עתיד התקשורת המאובטחת - נבנה בגלוי, עם אימות ASN.1 מלא מקצה לקצה.",
"community.github": "מאגר GitHub",
@@ -322,6 +326,8 @@
"pwa.iosStep3Hint": "אשרו כדי להתקין את SecureBit.chat",
"pwa.genericTitle": "התקנת SecureBit",
"pwa.genericDesc": "לכל דפדפן דרך משלו להתקין. בחרו את השלבים שמתאימים לשלכם.",
"pwa.androidChromeHint": "הקישו על ⋮ בפינה העליונה ובחרו ב־”התקנת אפליקציה”",
"pwa.androidOtherHint": "פתחו את התפריט ובחרו ב־”הוספה למסך הבית”",
"pwa.gotIt": "הבנתי",
"pwa.installedTitle": "האפליקציה הותקנה!",
"pwa.installedIos": "אפליקציית iOS הותקנה! פתחו ממסך הבית.",
+6
View File
@@ -33,6 +33,10 @@
"language.suggest.text": "यह पृष्ठ हिन्दी में भी उपलब्ध है।",
"language.suggest.cta": "हिन्दी में पढ़ें",
"language.suggest.dismiss": "बंद करें",
"theme.label": "थीम",
"theme.system": "सिस्टम",
"theme.light": "हल्की",
"theme.dark": "गहरी",
"community.title": "निजता के भविष्य में शामिल हों",
"community.description": "SecureBit अपने समुदाय से बढ़ता है। आपके विचार और सुझाव सुरक्षित संवाद का भविष्य गढ़ते हैं - खुले में बना, और पूरे रास्ते पूरी ASN.1 जाँच के साथ।",
"community.github": "GitHub रिपॉज़िटरी",
@@ -317,6 +321,8 @@
"pwa.iosStep3Hint": "पुष्टि कीजिए, SecureBit.chat इंस्टॉल हो जाएगा",
"pwa.genericTitle": "SecureBit इंस्टॉल करें",
"pwa.genericDesc": "हर ब्राउज़र अपने तरीक़े से इंस्टॉल करता है। अपने ब्राउज़र से मेल खाते चरण चुनिए।",
"pwa.androidChromeHint": "ऊपर के कोने में ⋮ दबाएँ, फिर “ऐप इंस्टॉल करें” चुनें",
"pwa.androidOtherHint": "मेनू खोलें और “होम स्क्रीन पर जोड़ें” चुनें",
"pwa.gotIt": "समझ गया",
"pwa.installedTitle": "ऐप इंस्टॉल हो गया!",
"pwa.installedIos": "iOS ऐप इंस्टॉल हो गया! होम स्क्रीन से खोलिए।",
+6
View File
@@ -33,6 +33,10 @@
"language.suggest.text": "이 페이지는 한국어로도 볼 수 있습니다.",
"language.suggest.cta": "한국어로 보기",
"language.suggest.dismiss": "닫기",
"theme.label": "테마",
"theme.system": "시스템",
"theme.light": "밝게",
"theme.dark": "어둡게",
"community.title": "프라이버시의 미래를 함께 만듭니다",
"community.description": "SecureBit은 커뮤니티 덕분에 자랍니다. 여러분의 아이디어와 의견이 안전한 소통의 미래를 만듭니다 - 모든 과정이 공개되어 있고, 전 구간에서 ASN.1 검증을 수행합니다.",
"community.github": "GitHub 저장소",
@@ -317,6 +321,8 @@
"pwa.iosStep3Hint": "확인하면 SecureBit.chat이 설치됩니다",
"pwa.genericTitle": "SecureBit 설치",
"pwa.genericDesc": "브라우저마다 설치 방법이 다릅니다. 쓰시는 브라우저에 맞는 순서를 고르세요.",
"pwa.androidChromeHint": "오른쪽 위 ⋮ 를 누른 뒤 “앱 설치”를 선택하세요",
"pwa.androidOtherHint": "메뉴를 열고 “홈 화면에 추가”를 선택하세요",
"pwa.gotIt": "알겠습니다",
"pwa.installedTitle": "앱이 설치되었습니다",
"pwa.installedIos": "iOS 앱이 설치되었습니다. 홈 화면에서 열어보세요.",
+6
View File
@@ -38,6 +38,10 @@
"language.suggest.text": "Эта страница также доступна на русском.",
"language.suggest.cta": "Читать по-русски",
"language.suggest.dismiss": "Закрыть",
"theme.label": "Тема",
"theme.system": "Системная",
"theme.light": "Светлая",
"theme.dark": "Тёмная",
"community.title": "Присоединяйтесь к будущему приватности",
"community.description": "SecureBit растёт благодаря сообществу. Ваши идеи и отзывы формируют будущее защищённого общения - разработка ведётся открыто, с полной проверкой ASN.1 на всём пути.",
"community.github": "Репозиторий на GitHub",
@@ -322,6 +326,8 @@
"pwa.iosStep3Hint": "Подтвердите, чтобы установить SecureBit.chat",
"pwa.genericTitle": "Установить SecureBit",
"pwa.genericDesc": "Каждый браузер устанавливает по-своему. Выберите шаги, подходящие вашему.",
"pwa.androidChromeHint": "Нажмите ⋮ в верхнем углу и выберите «Установить приложение»",
"pwa.androidOtherHint": "Откройте меню и выберите «Добавить на главный экран»",
"pwa.gotIt": "Понятно",
"pwa.installedTitle": "Приложение установлено!",
"pwa.installedIos": "Приложение для iOS установлено! Откройте его с экрана «Домой».",
+6
View File
@@ -38,6 +38,10 @@
"language.suggest.text": "Ця сторінка також доступна українською.",
"language.suggest.cta": "Читати українською",
"language.suggest.dismiss": "Закрити",
"theme.label": "Тема",
"theme.system": "Системна",
"theme.light": "Світла",
"theme.dark": "Темна",
"community.title": "Долучайтеся до майбутнього приватності",
"community.description": "SecureBit росте завдяки своїй спільноті. Ваші ідеї та відгуки формують майбутнє захищеного спілкування - розробка ведеться відкрито, з повною валідацією ASN.1 на всьому шляху.",
"community.github": "Репозиторій на GitHub",
@@ -322,6 +326,8 @@
"pwa.iosStep3Hint": "Підтвердіть, щоб встановити SecureBit.chat",
"pwa.genericTitle": "Встановити SecureBit",
"pwa.genericDesc": "Кожен браузер встановлює по-своєму. Оберіть кроки, які відповідають вашому.",
"pwa.androidChromeHint": "Натисніть ⋮ у верхньому кутку та оберіть «Встановити застосунок»",
"pwa.androidOtherHint": "Відкрийте меню та оберіть «Додати на головний екран»",
"pwa.gotIt": "Зрозуміло",
"pwa.installedTitle": "Застосунок встановлено!",
"pwa.installedIos": "Застосунок для iOS встановлено! Відкрийте його з екрана «Домів».",
+6
View File
@@ -38,6 +38,10 @@
"language.suggest.text": "یہ صفحہ اردو میں بھی دستیاب ہے۔",
"language.suggest.cta": "اردو میں پڑھیں",
"language.suggest.dismiss": "بند کریں",
"theme.label": "تھیم",
"theme.system": "سسٹم",
"theme.light": "روشن",
"theme.dark": "گہرا",
"community.title": "نجیت کے مستقبل میں شامل ہوں",
"community.description": "SecureBit اپنی برادری کی بدولت بڑھتا ہے۔ آپ کے خیالات اور آراء محفوظ رابطے کا مستقبل تشکیل دیتے ہیں - کھلے عام بنایا گیا، سرے سے سرے تک مکمل ASN.1 توثیق کے ساتھ۔",
"community.github": "GitHub مخزن",
@@ -322,6 +326,8 @@
"pwa.iosStep3Hint": "SecureBit.chat نصب کرنے کی تصدیق کریں",
"pwa.genericTitle": "SecureBit نصب کریں",
"pwa.genericDesc": "ہر براؤزر اپنے انداز میں نصب کرتا ہے۔ وہ مراحل چنیں جو آپ کے براؤزر سے میل کھاتے ہوں۔",
"pwa.androidChromeHint": "اوپر کے کونے میں ⋮ دبائیں، پھر «ایپ انسٹال کریں»",
"pwa.androidOtherHint": "مینیو کھولیں اور «ہوم اسکرین پر شامل کریں» منتخب کریں",
"pwa.gotIt": "سمجھ گیا",
"pwa.installedTitle": "ایپ نصب ہو گئی!",
"pwa.installedIos": "‏iOS ایپ نصب ہو گئی! ہوم سکرین سے کھولیں۔",
+6
View File
@@ -33,6 +33,10 @@
"language.suggest.text": "本页面也有简体中文版本。",
"language.suggest.cta": "阅读简体中文",
"language.suggest.dismiss": "关闭",
"theme.label": "主题",
"theme.system": "跟随系统",
"theme.light": "浅色",
"theme.dark": "深色",
"community.title": "一起构筑隐私的未来",
"community.description": "SecureBit 因社区而成长。你的想法与反馈塑造着安全通讯的未来 —— 开放开发,全程完整的 ASN.1 校验。",
"community.github": "GitHub 仓库",
@@ -317,6 +321,8 @@
"pwa.iosStep3Hint": "确认以安装 SecureBit.chat",
"pwa.genericTitle": "安装 SecureBit",
"pwa.genericDesc": "每种浏览器的安装方式都不一样。请选择与你的浏览器相符的步骤。",
"pwa.androidChromeHint": "点击右上角的 ⋮ ,选择“安装应用”",
"pwa.androidOtherHint": "打开菜单,选择“添加到主屏幕”",
"pwa.gotIt": "知道了",
"pwa.installedTitle": "应用已安装!",
"pwa.installedIos": "iOS 应用已安装!请从主屏幕打开。",