diff --git a/assets/css/app.css b/assets/css/app.css
index b754a08..132a8f5 100644
--- a/assets/css/app.css
+++ b/assets/css/app.css
@@ -99,6 +99,25 @@
/* Make LiveView wrapper divs transparent for layout */
[data-phx-session] { display: contents }
+/* WCAG 1.4.12 Text Spacing: allow user stylesheets to adjust text spacing in popovers.
+ Popover content (e.g. from DaisyUI dropdown) must not rely on non-overridable inline
+ spacing; use inherited values so custom stylesheets can override. */
+[popover] {
+ line-height: inherit;
+ letter-spacing: inherit;
+ word-spacing: inherit;
+}
+
+/* WCAG 2 AA: success/error text on light backgrounds (e.g. base-200). Use instead of
+ text-success/text-error when contrast ratio of theme colors is insufficient. */
+.text-success-aa {
+ color: oklch(0.35 0.12 165);
+}
+
+.text-error-aa {
+ color: oklch(0.45 0.2 25);
+}
+
/* ============================================
Sidebar Base Styles
============================================ */
diff --git a/lib/mv_web/live/global_settings_live.ex b/lib/mv_web/live/global_settings_live.ex
index fc91b03..1a7e13b 100644
--- a/lib/mv_web/live/global_settings_live.ex
+++ b/lib/mv_web/live/global_settings_live.ex
@@ -366,9 +366,9 @@ defmodule MvWeb.GlobalSettingsLive do
{gettext("Last sync result:")}
- {gettext("%{count} synced", count: @result.synced)}
+ {gettext("%{count} synced", count: @result.synced)}
<%= if @result.errors != [] do %>
-
+
{gettext("%{count} failed", count: length(@result.errors))}
<% end %>
diff --git a/lib/mv_web/live/member_live/show/membership_fees_component.ex b/lib/mv_web/live/member_live/show/membership_fees_component.ex
index ce14317..02c9d66 100644
--- a/lib/mv_web/live/member_live/show/membership_fees_component.ex
+++ b/lib/mv_web/live/member_live/show/membership_fees_component.ex
@@ -66,7 +66,7 @@ defmodule MvWeb.MemberLive.Show.MembershipFeesComponent do
href={Mv.Config.vereinfacht_contact_view_url(@member.vereinfacht_contact_id)}
target="_blank"
rel="noopener noreferrer"
- class="link link-primary inline-flex items-center gap-1"
+ class="link link-accent underline inline-flex items-center gap-1"
>
{gettext("View contact in Vereinfacht")}
<.icon name="hero-arrow-top-right-on-square" class="inline-block size-4" />
@@ -83,7 +83,12 @@ defmodule MvWeb.MemberLive.Show.MembershipFeesComponent do
<%= if @vereinfacht_debug_response do %>
-
+
<%= format_vereinfacht_debug_response(@vereinfacht_debug_response) %>
<% end %>
diff --git a/priv/gettext/de/LC_MESSAGES/default.po b/priv/gettext/de/LC_MESSAGES/default.po
index ff321b6..3ed3f3d 100644
--- a/priv/gettext/de/LC_MESSAGES/default.po
+++ b/priv/gettext/de/LC_MESSAGES/default.po
@@ -2735,42 +2735,47 @@ msgstr "Für dieses Mitglied existiert kein Vereinfacht-Kontakt."
msgid "Sync this member from Settings (Vereinfacht section) or save the member again to create the contact."
msgstr "Synchronisieren Sie dieses Mitglied unter Einstellungen (Bereich Vereinfacht) oder speichern Sie das Mitglied erneut, um den Kontakt anzulegen."
-# Vereinfacht API validation messages (Laravel-style, shown when creating/editing members or syncing)
-msgid "The address field is required."
-msgstr "Das Adressfeld ist erforderlich."
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Vereinfacht API response"
+msgstr "Vereinfacht"
-msgid "The city field is required."
-msgstr "Das Ortsfeld ist erforderlich."
+#~ # Vereinfacht API validation messages (Laravel-style, shown when creating/editing members or syncing)
+#~ msgid "The address field is required."
+#~ msgstr "Das Adressfeld ist erforderlich."
-msgid "The city field must be at least 2 characters."
-msgstr "Das Ortsfeld muss mindestens 2 Zeichen haben."
+#~ msgid "The city field is required."
+#~ msgstr "Das Ortsfeld ist erforderlich."
-msgid "The country field is required."
-msgstr "Das Ländfeld ist erforderlich."
+#~ msgid "The city field must be at least 2 characters."
+#~ msgstr "Das Ortsfeld muss mindestens 2 Zeichen haben."
-msgid "The email field is required."
-msgstr "Das E-Mail-Feld ist erforderlich."
+#~ msgid "The country field is required."
+#~ msgstr "Das Ländfeld ist erforderlich."
-msgid "The email field must be a valid email address."
-msgstr "Das E-Mail-Feld muss eine gültige E-Mail-Adresse sein."
+#~ msgid "The email field is required."
+#~ msgstr "Das E-Mail-Feld ist erforderlich."
-msgid "The first name field is required."
-msgstr "Das Vornamenfeld ist erforderlich."
+#~ msgid "The email field must be a valid email address."
+#~ msgstr "Das E-Mail-Feld muss eine gültige E-Mail-Adresse sein."
-msgid "The first name field must be at least 2 characters."
-msgstr "Das Vornamenfeld muss mindestens 2 Zeichen haben."
+#~ msgid "The first name field is required."
+#~ msgstr "Das Vornamenfeld ist erforderlich."
-msgid "The last name field is required."
-msgstr "Das Nachnamenfeld ist erforderlich."
+#~ msgid "The first name field must be at least 2 characters."
+#~ msgstr "Das Vornamenfeld muss mindestens 2 Zeichen haben."
-msgid "The last name field must be at least 2 characters."
-msgstr "Das Nachnamenfeld muss mindestens 2 Zeichen haben."
+#~ msgid "The last name field is required."
+#~ msgstr "Das Nachnamenfeld ist erforderlich."
-msgid "The street field is required."
-msgstr "Das Straßenfeld ist erforderlich."
+#~ msgid "The last name field must be at least 2 characters."
+#~ msgstr "Das Nachnamenfeld muss mindestens 2 Zeichen haben."
-msgid "The zip code field is required."
-msgstr "Das Postleitzahlenfeld ist erforderlich."
+#~ msgid "The street field is required."
+#~ msgstr "Das Straßenfeld ist erforderlich."
-msgid "The zip code field must be at least 2 characters."
-msgstr "Das Postleitzahlenfeld muss mindestens 2 Zeichen haben."
+#~ msgid "The zip code field is required."
+#~ msgstr "Das Postleitzahlenfeld ist erforderlich."
+
+#~ msgid "The zip code field must be at least 2 characters."
+#~ msgstr "Das Postleitzahlenfeld muss mindestens 2 Zeichen haben."
diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot
index 70c462d..b151433 100644
--- a/priv/gettext/default.pot
+++ b/priv/gettext/default.pot
@@ -2734,3 +2734,8 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "Sync this member from Settings (Vereinfacht section) or save the member again to create the contact."
msgstr ""
+
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format
+msgid "Vereinfacht API response"
+msgstr ""
diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po
index 71cbe28..07caeb7 100644
--- a/priv/gettext/en/LC_MESSAGES/default.po
+++ b/priv/gettext/en/LC_MESSAGES/default.po
@@ -2735,42 +2735,47 @@ msgstr ""
msgid "Sync this member from Settings (Vereinfacht section) or save the member again to create the contact."
msgstr "Sync this member from Settings (Vereinfacht section) or save the member again to create the contact."
-# Vereinfacht API validation messages (Laravel-style, shown when creating/editing members or syncing)
-msgid "The address field is required."
-msgstr "The address field is required."
+#: lib/mv_web/live/member_live/show/membership_fees_component.ex
+#, elixir-autogen, elixir-format, fuzzy
+msgid "Vereinfacht API response"
+msgstr ""
-msgid "The city field is required."
-msgstr "The city field is required."
+#~ # Vereinfacht API validation messages (Laravel-style, shown when creating/editing members or syncing)
+#~ msgid "The address field is required."
+#~ msgstr "The address field is required."
-msgid "The city field must be at least 2 characters."
-msgstr "The city field must be at least 2 characters."
+#~ msgid "The city field is required."
+#~ msgstr "The city field is required."
-msgid "The country field is required."
-msgstr "The country field is required."
+#~ msgid "The city field must be at least 2 characters."
+#~ msgstr "The city field must be at least 2 characters."
-msgid "The email field is required."
-msgstr "The email field is required."
+#~ msgid "The country field is required."
+#~ msgstr "The country field is required."
-msgid "The email field must be a valid email address."
-msgstr "The email field must be a valid email address."
+#~ msgid "The email field is required."
+#~ msgstr "The email field is required."
-msgid "The first name field is required."
-msgstr "The first name field is required."
+#~ msgid "The email field must be a valid email address."
+#~ msgstr "The email field must be a valid email address."
-msgid "The first name field must be at least 2 characters."
-msgstr "The first name field must be at least 2 characters."
+#~ msgid "The first name field is required."
+#~ msgstr "The first name field is required."
-msgid "The last name field is required."
-msgstr "The last name field is required."
+#~ msgid "The first name field must be at least 2 characters."
+#~ msgstr "The first name field must be at least 2 characters."
-msgid "The last name field must be at least 2 characters."
-msgstr "The last name field must be at least 2 characters."
+#~ msgid "The last name field is required."
+#~ msgstr "The last name field is required."
-msgid "The street field is required."
-msgstr "The street field is required."
+#~ msgid "The last name field must be at least 2 characters."
+#~ msgstr "The last name field must be at least 2 characters."
-msgid "The zip code field is required."
-msgstr "The zip code field is required."
+#~ msgid "The street field is required."
+#~ msgstr "The street field is required."
-msgid "The zip code field must be at least 2 characters."
-msgstr "The zip code field must be at least 2 characters."
+#~ msgid "The zip code field is required."
+#~ msgstr "The zip code field is required."
+
+#~ msgid "The zip code field must be at least 2 characters."
+#~ msgstr "The zip code field must be at least 2 characters."