fix: raise text-ink/50 contrast to WCAG AA across 8 files

Live Lighthouse audit of /konto found the same class of bug as the
prior checkout/cart commit, one shade lighter: text-ink/50 measures
3.08:1 against the cream background, under the 4.5:1 WCAG AA minimum
for normal-size text. Grepped for every other use of the same token
(login divider, language switcher, sold-out label, admin image-upload
status text, admin hint text) and bumped them all to text-ink/70
(5.61:1, same value used in the earlier checkout fix) for one
consistent, compliant muted-text shade. Verified: tsc clean, 151/151
tests pass, /konto Lighthouse accessibility 96 -> 100.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
This commit is contained in:
Nick SzaunigandClaude Sonnet 5 committed 2026-09-06 21:43:43 +02:00
1 parent 0402f7510d
commit 229a1dc435
8 files changed
+10 -10

No files matched your search

+1 -1
View File
@@ -94,7 +94,7 @@ export default async function AdminHarvestEditPage(props: PageProps<"/admin/ernt
<input type="checkbox" name="isPublished" defaultChecked={harvest.isPublished} />
{t.adminHarvestEditPage.isPublishedLabel}
</label>
<p className="text-xs text-ink/50">{t.adminHarvestEditPage.isPublishedHint}</p>
<p className="text-xs text-ink/70">{t.adminHarvestEditPage.isPublishedHint}</p>
<button type="submit" className="bg-forest text-cream px-6 py-2 text-sm">
{t.adminHarvestEditPage.save}
</button>
+2 -2
View File
@@ -106,7 +106,7 @@ export default async function AdminInhaltePage(props: PageProps<"/admin/inhalte"
<p className="text-sm text-ink/70 mb-2">{label}</p>
<div className="grid sm:grid-cols-2 gap-4">
<label className="block text-xs">
<span className="text-ink/50">{t.adminContentPage.deLabel}</span>
<span className="text-ink/70">{t.adminContentPage.deLabel}</span>
{isTextarea ? (
<textarea
name={`de::${def.key}`}
@@ -126,7 +126,7 @@ export default async function AdminInhaltePage(props: PageProps<"/admin/inhalte"
)}
</label>
<label className="block text-xs">
<span className="text-ink/50">{t.adminContentPage.enLabel}</span>
<span className="text-ink/70">{t.adminContentPage.enLabel}</span>
{isTextarea ? (
<textarea
name={`en::${def.key}`}
+1 -1
View File
@@ -81,7 +81,7 @@ export default async function KontoPage(props: PageProps<"/konto">) {
</form>
</div>
<div className="mt-10 flex items-center gap-4 text-xs text-ink/50">
<div className="mt-10 flex items-center gap-4 text-xs text-ink/70">
<span className="h-px flex-1 bg-ink/10" />
{t.account.ssoDivider}
<span className="h-px flex-1 bg-ink/10" />
+1 -1
View File
@@ -44,7 +44,7 @@ export default async function NewsletterBestaetigtPage(props: PageProps<"/newsle
{t.newsletterBestaetigtPage.discountText(NEWSLETTER_DISCOUNT_PERCENT)}{" "}
<span className="font-medium">{NEWSLETTER_DISCOUNT_CODE}</span>
</p>
<p className="mt-2 text-xs text-ink/50">{t.newsletterBestaetigtPage.discountCopyHint}</p>
<p className="mt-2 text-xs text-ink/70">{t.newsletterBestaetigtPage.discountCopyHint}</p>
</div>
) : null}
+2 -2
View File
@@ -73,14 +73,14 @@ export function AdminImageField({ name, label, initialValue }: AdminImageFieldPr
className="block text-xs"
/>
{status === "uploading" ? (
<p className="mt-1 text-xs text-ink/50">{t.adminImageField.uploading}</p>
<p className="mt-1 text-xs text-ink/70">{t.adminImageField.uploading}</p>
) : null}
{status === "error" ? <p className="mt-1 text-xs text-red-700">{errorMessage}</p> : null}
{value ? (
<button
type="button"
onClick={() => setValue("")}
className="mt-1 text-xs text-ink/50 underline"
className="mt-1 text-xs text-ink/70 underline"
>
{t.adminImageField.remove}
</button>
+1 -1
View File
@@ -91,7 +91,7 @@ export function AdminImageListField({ name, label, initialValues }: AdminImageLi
className="block text-xs"
/>
{status === "uploading" ? (
<p className="mt-1 text-xs text-ink/50">{t.adminImageField.uploading}</p>
<p className="mt-1 text-xs text-ink/70">{t.adminImageField.uploading}</p>
) : null}
{status === "error" ? <p className="mt-1 text-xs text-red-700">{errorMessage}</p> : null}
</div>
+1 -1
View File
@@ -38,7 +38,7 @@ export function LanguageSwitcher({ className = "" }: { className?: string }) {
aria-current={code === locale}
title={localeLabels[code]}
className={`uppercase tracking-wide transition-colors disabled:opacity-50 ${
code === locale ? "text-forest font-medium" : "text-ink/50 hover:text-forest"
code === locale ? "text-forest font-medium" : "text-ink/70 hover:text-forest"
}`}
>
{code}
+1 -1
View File
@@ -61,7 +61,7 @@ export function StickyAddToCartBar({
{justAdded ? t.product.added : t.product.addToCart}
</Button>
) : (
<span className="flex-shrink-0 text-xs tracking-wide-caps text-ink/50">{t.productPage.soldOut}</span>
<span className="flex-shrink-0 text-xs tracking-wide-caps text-ink/70">{t.productPage.soldOut}</span>
)}
</div>
</div>