Some checks failed
CI / Lint, typecheck, test (pull_request) Successful in 4m41s
CI / Build container images (pull_request) Successful in 4m4s
CI / Auth e2e pack (pull_request) Successful in 11m40s
CI / Import/export fidelity gate (pull_request) Successful in 52s
CD / Deploy to Test (push) Blocked by required conditions
CD / Smoke tests against Test (push) Blocked by required conditions
CD / Promote to Int (push) Blocked by required conditions
CI / Auth e2e pack (push) Blocked by required conditions
CI / Import/export fidelity gate (push) Blocked by required conditions
CI / Build container images (push) Blocked by required conditions
CD / Build and push images (push) Has been cancelled
CI / Lint, typecheck, test (push) Has been cancelled
apply-theme.ts derives BOTH modes' accent tokens from the stored choice
(ui.theme.accent: preset id or {custom:'#hex'}) and writes them as
<style id="user-theme"> with :root:root + :root:root[data-theme='dark']
blocks — the doubled :root beats tokens.css regardless of document
order, since theme-init.js injects the ui.theme.css cache during <head>
parsing, before the bundle styles. The default preset means NO override
(hand-tuned tokens.css values stay). main.tsx re-derives from the
choice at startup, healing stale caches after app updates.
Settings: accent radiogroup inside the Appearance section (visible
names, color never the only cue) with per-mode preview swatches on
each mode's canonical background, plus a custom color input; i18n
de+en. The second fieldset made bare .settings-fieldset locators
ambiguous — theme specs now scope via input[name] (fence stays).
Tests: apply-theme unit pack, BASE_PALETTE<->tokens.css drift fence in
theme-contrast.test.ts, e2e theme-accent.spec (instant apply, pre-paint
persistence, default removes override, axe smoke with garish yellow in
both modes). ADR 0018 amendment documents the stage-B details.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QRtCnB3uLdQtFmvp9HXcRX
86 lines
2.9 KiB
JSON
86 lines
2.9 KiB
JSON
{
|
||
"title": "Settings",
|
||
"profile": {
|
||
"title": "Profile",
|
||
"displayName": "Display name",
|
||
"locale": "Language",
|
||
"locales": {
|
||
"de": "Deutsch",
|
||
"en": "English"
|
||
},
|
||
"save": "Save",
|
||
"saved": "Saved."
|
||
},
|
||
"password": {
|
||
"title": "Change password",
|
||
"current": "Current password",
|
||
"new": "New password",
|
||
"submit": "Change password",
|
||
"changed": "Password changed. Other devices were signed out."
|
||
},
|
||
"sessions": {
|
||
"title": "Active sessions",
|
||
"current": "This session",
|
||
"created": "Signed in",
|
||
"lastSeen": "Last active",
|
||
"device": "Device",
|
||
"revoke": "Sign out",
|
||
"revokeAll": "Sign out all other sessions",
|
||
"empty": "No other active sessions."
|
||
},
|
||
"dataExport": {
|
||
"title": "Export my data",
|
||
"description": "Download a ZIP with your profile, a list of your memberships, and the Markdown export of your personal pond and the ponds you own.",
|
||
"request": "Prepare export",
|
||
"preparing": "Preparing your export…",
|
||
"download": "Download export",
|
||
"ready": "Your export is ready.",
|
||
"expiresHint": "The download link expires on {{when}}.",
|
||
"failed": "The export could not be prepared. Please try again.",
|
||
"rateLimited": "You requested an export recently. Please try again later."
|
||
},
|
||
"admin": {
|
||
"title": "Administration",
|
||
"general": "General",
|
||
"instanceName": "Instance name",
|
||
"defaultLocale": "Default language",
|
||
"registrationMode": "Self-registration",
|
||
"registrationOpen": "Open — anyone can register",
|
||
"registrationClosed": "Closed — no new registrations",
|
||
"save": "Save",
|
||
"saved": "Saved."
|
||
},
|
||
"landing": {
|
||
"title": "Landing page",
|
||
"hint": "The public home page (/) content as Markdown. Leave empty to show the built-in welcome text.",
|
||
"label": "Landing page content (Markdown)",
|
||
"save": "Save landing page",
|
||
"saved": "Saved."
|
||
},
|
||
"appearance": {
|
||
"title": "Appearance",
|
||
"legend": "Color scheme",
|
||
"light": "Light",
|
||
"dark": "Dark",
|
||
"system": "System setting",
|
||
"hint": "“System setting” follows the device’s light/dark mode. Applies to this device.",
|
||
"cycle": "Switch color scheme (current: {{mode}})",
|
||
"accentLegend": "Accent color",
|
||
"presets": {
|
||
"pond-green": "Pond green (default)",
|
||
"lake-blue": "Lake blue",
|
||
"iris-violet": "Iris violet",
|
||
"reed-teal": "Reed teal",
|
||
"stone-slate": "Stone slate"
|
||
},
|
||
"custom": "Custom color",
|
||
"customPick": "Pick a custom accent color",
|
||
"accentHint": "The chosen color is automatically lightened or darkened per mode so text stays readable. Applies to this device."
|
||
},
|
||
"interaction": {
|
||
"title": "Interaction",
|
||
"disableSingleKey": "Disable single-key shortcuts",
|
||
"disableSingleKeyHint": "Turns off the “e” (edit) and “/” (search) shortcuts — helpful with speech input. Applies to this device."
|
||
}
|
||
}
|