feat(theme): ship exactly 2 themes (SRC default + VNClagoon); rebrand user-facing VNCmail+

Product decision 2026-08-05: exactly SRC (default) and VNClagoon ship as
selectable themes. Everything else (Qui, Nord, Catppuccin, Solarized,
Roundcube Elastic, Aurora Glass) is hidden via ThemePolicy.disabledBuiltinThemes
rather than deleted - cheap to re-enable later, zero code lost. Also removed
the hardcoded "Default/Bulwark" theme card from the Settings > Themes grid
(product wants exactly 2 theme choices, not 3).

Separately, found and fixed real "still says Bulwark" branding gaps:
- All 24 locale files: "Bulwark"/"Bulwark Mail"/"Bulwark Webmail" ->
  "VNCmail+" in every user-facing string (verified via the translations
  test, which only checks structural key parity across locales, not
  content - a straight string swap is safe against it. 48/48 still pass).
- PWA manifest fallback app name, package.json description/author.
- Demo mode fixtures: the "Welcome to Bulwark Mail!" email and identity
  signature a first-time demo user actually sees.
- The demo empty-state's logo was hardcoded to a literal Bulwark SVG file
  regardless of active theme - a real bug, not just stale text, since
  lib/theme-logo.ts's resolveThemeLogo() already exists and is already used
  correctly by the login page and nav rail for exactly this (theme-aware
  SRC mark / VNClagoon wordmark). Wired the same helper in here instead of
  a hardcoded path.

NOT touched: internal code comments referencing "Bulwark" as historical/
attribution context (e.g. design-rationale comments explaining why a value
differs from Bulwark's original) - those are harmless and a full-repo sweep
of every comment wasn't the ask.

Verified: typecheck clean, lint clean, translations test 48/48 passing.
This commit is contained in:
Bernd Rodler
2026-08-05 23:43:19 +02:00
parent 3f99a2fc9e
commit bde9f14832
31 changed files with 416 additions and 404 deletions
+15 -15
View File
@@ -146,18 +146,18 @@
},
"protocol_handlers": {
"title": "Aplicații implicite",
"description": "Alegeți dacă linkurile către e-mail și calendar se deschid în Bulwark. Din punct de vedere tehnic, Bulwark se înregistrează ca gestionar de protocol pentru linkurile de tip mailto: și webcal:.",
"description": "Alegeți dacă linkurile către e-mail și calendar se deschid în VNCmail+. Din punct de vedere tehnic, VNCmail+ se înregistrează ca gestionar de protocol pentru linkurile de tip mailto: și webcal:.",
"unsupported": "Acest browser sau această conexiune nu acceptă înregistrarea manuală a gestionarului de protocoale. Este posibil să puteți utiliza totuși aplicația PWA instalată prin setările browserului sau ale sistemului de operare.",
"mailto_label": "Linkuri din e-mail",
"mailto_description": "Deschideți linkurile „mailto:” în Bulwark cu o fereastră de redactare precompletată.",
"mailto_description": "Deschideți linkurile „mailto:” în VNCmail+ cu o fereastră de redactare precompletată.",
"protocol_open_mode_label": "La deschiderea linkurilor de protocol",
"protocol_open_mode_description": "Alegeți dacă Bulwark deschide linkurile mailto: și webcal: într-o filă nouă sau reutilizează o sesiune deschisă. Opțiunea „sesiune activă” necesită permisiunea de notificare, astfel încât să puteți face clic pe o notificare de rezervă pentru a aduce Bulwark în prim-plan dacă browserul blochează focalizarea.",
"protocol_open_mode_description": "Alegeți dacă VNCmail+ deschide linkurile mailto: și webcal: într-o filă nouă sau reutilizează o sesiune deschisă. Opțiunea „sesiune activă” necesită permisiunea de notificare, astfel încât să puteți face clic pe o notificare de rezervă pentru a aduce VNCmail+ în prim-plan dacă browserul blochează focalizarea.",
"protocol_open_mode_active_session": "Deschideți într-o sesiune activă, dacă este posibil",
"protocol_open_mode_new_tab": "Deschideți întotdeauna o filă nouă",
"focus_notification_title": "Deschideți Bulwark",
"focus_notification_body": "Linkul a fost deschis în Bulwark. Faceți clic pentru a aduce fereastra în prim-plan.",
"focus_notification_title": "Deschideți VNCmail+",
"focus_notification_body": "Linkul a fost deschis în VNCmail+. Faceți clic pentru a aduce fereastra în prim-plan.",
"webcal_label": "Linkuri către calendar",
"webcal_description": "Deschideți linkurile webcal: din Bulwark cu o fereastră de dialog de abonare la calendar completată în prealabil.",
"webcal_description": "Deschideți linkurile webcal: din VNCmail+ cu o fereastră de dialog de abonare la calendar completată în prealabil.",
"register_mailto": "Înregistrați aplicația de e-mail",
"register_webcal": "Înregistrați aplicația de calendar",
"mailto_registered": "S-a solicitat înregistrarea unui gestionar de e-mail",
@@ -165,7 +165,7 @@
"registration_failed": "Înregistrarea gestionarului de protocol a eșuat",
"opening_mailto": "Se deschide fereastra de redactare...",
"opening_webcal": "Se deschide calendarul...",
"browser_note": "Este posibil ca browserul sau sistemul de operare să vă solicite confirmarea acestei acțiuni și să necesite instalareBulwarkului înainte de a putea fi selectat ca aplicație implicită.",
"browser_note": "Este posibil ca browserul sau sistemul de operare să vă solicite confirmarea acestei acțiuni și să necesite instalareVNCmail+ului înainte de a putea fi selectat ca aplicație implicită.",
"select_account_title": "Alegeți contul",
"select_mailto_account": "Alegeți contul în care să se deschidă acest link de e-mail.",
"select_webcal_account": "Alegeți contul care ar trebui să deschidă acest link către calendar.",
@@ -738,9 +738,9 @@
"app_title": "Webmail",
"reconnecting": "Conexiune pierdută. Se încearcă reconectarea…",
"rate_limited_title": "Autentificarea pe server este temporar limitată ca frecvență.",
"rate_limited_detail": "Bulwark A suspendat solicitările de fundal pentru a evita blocarea. Se va încerca din nou în câteva {seconds} s.",
"rate_limited_detail": "VNCmail+ A suspendat solicitările de fundal pentru a evita blocarea. Se va încerca din nou în câteva {seconds} s.",
"rate_limited_action_title": "Solicitarea a fost pusă în așteptare pentru a evita blocarea contului.",
"rate_limited_action_detail": "Bulwark Așteaptă încheierea perioadei de așteptare a serverului înainte de a trimite alte cereri autentificate. Încercați din nou în câteva {seconds}."
"rate_limited_action_detail": "VNCmail+ Așteaptă încheierea perioadei de așteptare a serverului înainte de a trimite alte cereri autentificate. Încercați din nou în câteva {seconds}."
},
"notifications": {
"email_sent": "E-mailul a fost trimis cu succes",
@@ -1052,9 +1052,9 @@
},
"push": {
"title": "Notificări în fundal",
"description": "Primiți notificări de sistem pentru e-mailuri noi chiar și atunci când acest site este închis. Notificările sunt transmise prin intermediul serverului de push Bulwark; serverul nu vede niciodată conținutul e-mailurilor.",
"description": "Primiți notificări de sistem pentru e-mailuri noi chiar și atunci când acest site este închis. Notificările sunt transmise prin intermediul serverului de push VNCmail+; serverul nu vede niciodată conținutul e-mailurilor.",
"relay_label": "Relay push",
"relay_desc": "Implicit este setat serverul de retransmitere găzduit Bulwark. Modificați această setare numai dacă utilizați un server propriu.",
"relay_desc": "Implicit este setat serverul de retransmitere găzduit VNCmail+. Modificați această setare numai dacă utilizați un server propriu.",
"relay_locked": "Configurat de administrator",
"relay_locked_desc": "Relay-ul push URL a fost configurat de administratorul dvs. și nu poate fi modificat.",
"relay_placeholder": "https://notifications.relay.example.com",
@@ -1535,10 +1535,10 @@
},
"link_device": {
"title": "Aplicație mobilă",
"description": "Conectați-vă la aplicația mobilă „Bulwark” fără a introduce nimic. Generați un cod QR aici și scanați-l din ecranul de conectare al aplicației.",
"description": "Conectați-vă la aplicația mobilă „VNCmail+” fără a introduce nimic. Generați un cod QR aici și scanați-l din ecranul de conectare al aplicației.",
"generate": "Afișați codul QR",
"regenerate": "Afișați un cod nou",
"instructions": "Deschideți aplicația „BulwarkMail”, atingeți „Scanează codul QR” pe ecranul de autentificare și îndreptați camera în această direcție.",
"instructions": "Deschideți aplicația „VNCmail+Mail”, atingeți „Scanează codul QR” pe ecranul de autentificare și îndreptați camera în această direcție.",
"expires_in": "Acest cod expiră în {seconds} secunde. Poate fi utilizat o singură dată.",
"expired": "Acest cod a expirat.",
"generating": "Se generează…",
@@ -1713,7 +1713,7 @@
"button": "Import"
},
"about": {
"title": "Bulwark Webmail"
"title": "VNCmail+"
}
},
"sidebar_apps": {
@@ -3055,7 +3055,7 @@
"start_tour": "Începe turul"
},
"demo_welcome": {
"title": "Bine ați venit la Bulwark Mail",
"title": "Bine ați venit la VNCmail+",
"description": "Explorați un client de e-mail web cu funcționalități complete direct în browserul dvs. Toate datele rămân pe dispozitivul dvs., așa că nu ezitați să testați totul.",
"feature_email": "Citiți și redactați e-mailuri",
"feature_organize": "Etichete, stele și dosare",