Apply linen design system across app

This commit is contained in:
t.indorf
2026-05-20 22:47:52 +02:00
parent 99ff978116
commit 1c5d2f10ac
56 changed files with 4693 additions and 2154 deletions
@@ -54,7 +54,7 @@ export function AddFamilyDialog() {
<Dialog open={open} onOpenChange={handleOpenChange}>
<DialogTrigger asChild>
<Button size="sm">
<Plus className="mr-2 h-4 w-4" />
<Plus className="h-4 w-4" />
Familie hinzufügen
</Button>
</DialogTrigger>
@@ -82,7 +82,9 @@ export function AddFamilyDialog() {
{/* ── Elternteile ────────────────────────────────────────── */}
<fieldset className="space-y-4">
<legend className="text-sm font-semibold">Elternteil 1</legend>
<legend className="text-[11px] font-semibold uppercase text-[var(--ink-muted)] [letter-spacing:0.12em]">
Elternteil 1
</legend>
<div className="grid grid-cols-2 gap-3">
<FormField
@@ -112,8 +114,13 @@ export function AddFamilyDialog() {
</fieldset>
<fieldset className="space-y-4">
<legend className="text-sm font-semibold">
Elternteil 2 <span className="font-normal text-muted-foreground">(optional)</span>
<legend>
<span className="text-[11px] uppercase text-[var(--ink-muted)] [letter-spacing:0.12em]">
Elternteil 2
</span>{" "}
<span className="font-normal italic text-[var(--ink-faint)]">
optional
</span>
</legend>
<div className="grid grid-cols-2 gap-3">
@@ -149,7 +156,7 @@ export function AddFamilyDialog() {
{/* ── Kinder ─────────────────────────────────────────────── */}
<fieldset className="space-y-3">
<div className="flex items-center justify-between">
<legend className="text-sm font-semibold">
<legend className="text-[11px] font-semibold uppercase text-[var(--ink-muted)] [letter-spacing:0.12em]">
Kinder ({childCount})
</legend>
{childCount < 10 && (
@@ -168,7 +175,7 @@ export function AddFamilyDialog() {
{Array.from({ length: childCount }).map((_, i) => (
<div
key={i}
className="relative rounded-md border p-4"
className="relative rounded-lg border border-[var(--hairline)] bg-[var(--surface-2)] p-4"
>
{childCount > 1 && (
<button
@@ -178,13 +185,13 @@ export function AddFamilyDialog() {
// Felder nach Index benannt sind und der letzte entfernt wird.
setChildCount((c) => c - 1);
}}
className="absolute right-3 top-3 rounded p-0.5 text-muted-foreground hover:text-destructive"
className="absolute right-3 top-3 rounded-md p-1 text-[var(--ink-muted)] transition-colors hover:bg-[var(--danger-soft)] hover:text-[var(--danger)] focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-[var(--accent)] focus-visible:ring-offset-2 focus-visible:ring-offset-[var(--surface-2)]"
aria-label={`Kind ${i + 1} entfernen`}
>
<Trash2 className="h-4 w-4" />
</button>
)}
<p className="mb-3 text-xs font-medium text-muted-foreground">
<p className="mb-3 text-[11px] font-semibold uppercase text-[var(--ink-muted)] [letter-spacing:0.12em]">
Kind {i + 1}
</p>
<div className="grid grid-cols-2 gap-3">
@@ -203,7 +210,7 @@ export function AddFamilyDialog() {
))}
{state.errors?.children?.[0] && (
<p className="text-xs text-destructive">
<p className="text-xs text-[var(--danger)]">
{state.errors.children[0]}
</p>
)}
@@ -211,7 +218,7 @@ export function AddFamilyDialog() {
{/* Globaler Fehler */}
{state.errors?._form?.[0] && (
<p className="rounded-md border border-destructive/50 bg-destructive/10 p-3 text-sm text-destructive">
<p className="rounded-lg border border-[var(--danger)] bg-[var(--danger-soft)] p-3 text-sm text-[var(--danger)]">
{state.errors._form[0]}
</p>
)}
@@ -219,7 +226,7 @@ export function AddFamilyDialog() {
<DialogFooter>
<Button
type="button"
variant="outline"
variant="ghost"
onClick={() => setOpen(false)}
disabled={pending}
>
@@ -268,7 +275,7 @@ function FormField({
required={required}
aria-invalid={!!error}
/>
{error && <p className="text-xs text-destructive">{error}</p>}
{error && <p className="text-xs text-[var(--danger)]">{error}</p>}
</div>
);
}