diff --git a/app/(auth)/login/page.tsx b/app/(auth)/login/page.tsx index e58e3bc..6fa3ec0 100644 --- a/app/(auth)/login/page.tsx +++ b/app/(auth)/login/page.tsx @@ -1,5 +1,6 @@ import { EntraSignInButton } from "@/components/auth/EntraSignInButton"; import { PasswortFormular } from "@/components/auth/PasswortFormular"; +import { AppWortmarke } from "@/components/brand/Logo"; import { logout, signInWithEntra } from "@/actions/auth"; // The query string is attacker-controlled, so the login page renders a message @@ -56,8 +57,8 @@ export default async function LoginPage({ searchParams }: LoginPageProps) {
-
- +
+

Anmelden

@@ -130,8 +131,10 @@ function BrandPanel() { }} /> -
- + {/* -ml-4 gleicht den Freiraum des Logos aus, damit die Wortmarke + buendig mit dem Text darunter beginnt und nicht eingerueckt wirkt. */} +
+
@@ -149,19 +152,6 @@ function BrandPanel() { ); } -function Wordmark({ className = "" }: { className?: string }) { - return ( -
- {/* Vier Quadrate wie ein Organigramm-Ausschnitt: eine Wurzel, darunter - drei Einheiten. */} - - Alpenwerk HR -
- ); -} +// Die vier Quadrate, die hier als Platzhalter-Bildmarke standen, sind +// entfallen: an ihrer Stelle steht jetzt das Manner-Logo +// (components/brand/Logo.tsx). diff --git a/app/apple-icon.png b/app/apple-icon.png new file mode 100644 index 0000000..5ba9f96 Binary files /dev/null and b/app/apple-icon.png differ diff --git a/app/favicon.ico b/app/favicon.ico index 718d6fe..5758ddb 100644 Binary files a/app/favicon.ico and b/app/favicon.ico differ diff --git a/app/global-error.tsx b/app/global-error.tsx index 0e7feaf..1c538de 100644 --- a/app/global-error.tsx +++ b/app/global-error.tsx @@ -6,6 +6,12 @@ import { useEffect } from "react"; // (app)/error.tsx is not mounted yet. It replaces , so it cannot use // the app's fonts, Tailwind layer or shared components — hence the inline // styles. Kept deliberately plain; anything clever here can fail too. +// +// Die Farben sind dieselben wie in app/globals.css, nur von Hand: surface, +// border, ink, ink-body, ink-muted und brand-500. Sie stehen hier doppelt, +// weil diese Seite gerade dann erscheint, wenn das Stylesheet nicht +// getragen hat — eine Variable waere hier genau das, worauf man sich nicht +// verlassen kann. export default function GlobalError({ error, reset }: { error: Error & { digest?: string }; reset: () => void }) { useEffect(() => { console.error("Global error:", error); @@ -13,19 +19,19 @@ export default function GlobalError({ error, reset }: { error: Error & { digest? return ( - -
+ +

Die Anwendung konnte nicht geladen werden

-

+

Es ist ein unerwarteter Fehler aufgetreten. Ihre Daten sind davon nicht betroffen.

{error.digest && ( -

Fehlerkennung: {error.digest}

+

Fehlerkennung: {error.digest}

)} + + + +
+

+ Der sekundaere Knopf hat jetzt border-strong — vorher war seine + Umrandung mit 1.3:1 kaum zu sehen.

+
+ +
+

Eingabefelder

+
+ + +
+
+ + +
Die Pruefziffer stimmt nicht.
+
+

+ Rahmen 3.56:1 statt 1.30:1 — WCAG 1.4.11 fuer Bedienelemente.

+
+ +
+

Status

+
+ Aktiv + Langzeitabwesenheit + Geplant + Ausgetreten +
+

+ „Geplant" ist der Fall ohne besondere Faerbung und bekommt deshalb die + Markenfarbe. Blau saehe hier nach Schaltflaeche aus.

+
+ +
+

Vorgaenge im Protokoll

+
+ Neueinstellung + Austritt + Versetzung + Befoerderung + Vertragsaenderung + Import +
+

+ Rot bleibt Rot, Gruen bleibt Gruen: das Manual regelt die Identitaet, nicht die + Rueckmeldung. Violett ist nachgezogen — gegen den Fehler-Chip lag es bei dE 8.0 + und war im Vorbeigehen dieselbe Flaeche, jetzt bei dE 15.0.

+
+ +
+

Liste

+ + + + + + + + + + +
NamePers.-Nr.BereichEintrittStatus
Aigner, Katharina1042Produktion01.03.2019Aktiv
Berger, Anna1187Vertrieb15.09.2021Abwesend
Winkler, Michaela1590Technik01.10.2026Geplant
+

+ Die Zeile unter dem Zeiger wird blau angedeutet, nicht rosa: gegen die warme + Seitenflaeche ist ein kuehler Ton deutlicher, und Blau heisst in dieser + Oberflaeche „reagiert auf dich".

+
+ +
+

Navigation

+ +
+ +
+

Organigramm — die vier Knotenarten

+
+ Person + Rolle + Einheit + offene Stelle +
+

+ Die offene Stelle war vorher ein blasses Blau und damit eine schwaechere Person. + In Rosa ist sie etwas anderes — auch dann noch, wenn herausgezoomt nur die + Streifen uebrig sind.

+
+
+ + +

5 · Das Logo und sein Freiraum

+

CD §4.1 verlangt „genuegend Freiraum rundum (X, X/3)". X ist hier als Hoehe des + Logos gelesen, der Freiraum also als ein Drittel davon — die gestrichelte Linie zeigt + ihn. Er steckt im Bauteil selbst, nicht in den Aufrufstellen.

+
+
+ + Manner + +
auf Weiss
+
+
+ + Manner + +
auf dem Panel der Anmeldeseite
+
+
+

+ §1.2: der Schriftzug darf ausschliesslich zur Gaenze auf Rosa stehen. Die Datei + bringt ihr rosa Feld mit, das Logo ist damit auf jedem Untergrund regelkonform.

+ + +

6 · Was hier noch nicht entschieden ist

+
+

Das Logo ist das Markenlogo, nicht das Unternehmenslogo. + Nach §3.2 waere fuer eine Anwendung, hinter der „Josef Manner & Comp. AG" als + Absender steht, das Unternehmenslogo mit dem Stephansdom-Medaillon das richtige. Es + liegt nicht vor. Die offiziellen Dateien gaebe es bei der Kreativdirektion — der + Kontakt steht auf Seite 7 des Manuals.

+

Die Vorlage ist aus dem PDF gezogen, nicht das Original. Fuer die Testphase + traegt das; fuer die Uebergabe gehoert die offizielle Datei hinein.

+

Die Schrift ist Barlow, nicht DIN. Nachgezaehlt ist das Manual zu 95 % in + DIN gesetzt (DIN-Regular 79 %, DIN-Bold 16 %); Helvetica Neue steht nur in den + Visitenkarten-Mustern und im Claim. DIN ist aber lizenzpflichtig, und eine + Drucklizenz deckt die Auslieferung als Webfont nicht ab. Die freien Nachbauten der + DIN 1451 sind Schilderschriften und bei 14 px in einer langen Tabelle schlechter + lesbar als das, was sie ersetzen. Barlow ist dieselbe Grotesk-Familie mit schmalen + Proportionen und geraden Abschluessen. Liegt eine Web-Lizenz fuer DIN vor, ist der + Wechsel eine Zeile in app/layout.tsx.

+

Die Symbole sind nachgerechnet, nicht neu exportiert. + Favicon, Apple-Symbol und die Manifest-Symbole kamen als 24-Bit-RGB und trugen + #034DA1 als Blau. Sie liegen jetzt als RGBA vor — das verlangt der + Bildpfad des Bauwerkzeugs — und ihr Blau ist auf #164194 gezogen, + inklusive der kantengeglaetteten Raender: je Pixel wurde bestimmt, wieviel Blau + darin steckt, und derselbe Anteil neu gemischt. Betroffen waren 5 bis 10 Prozent + der Pixel je Datei. Ein Neuexport aus der korrigierten Vorlage bliebe trotzdem der + sauberere Weg, sobald die offiziellen Dateien da sind.

+
+ +
+ + diff --git a/lib/colors.ts b/lib/colors.ts index 0a4566c..bc031d1 100644 --- a/lib/colors.ts +++ b/lib/colors.ts @@ -1,14 +1,19 @@ import type { EmploymentStatus, NoteCategory } from "./types"; +// Die Initialen stehen in Weiss darauf, jeder Ton braucht also 4.5:1 gegen +// Weiss — nachgerechnet liegt der schwaechste bei 6.11:1. Die Reihe beginnt +// bei den beiden Markenfarben (Blau direkt, Rosa in der dunklen Stufe, weil +// #F69686 selbst nur 2.18:1 traegt) und faechert von dort auf, damit zwei +// Personen nebeneinander nicht denselben Kreis bekommen. const AVATAR_PALETTE = [ - "#d6046e", - "#00666d", + "#164194", // Manner Blau + "#0d2857", + "#a8402e", // dunkles Manner Rosa "#5c2e91", - "#835b00", "#0e700e", - "#b0035a", - "#2b6cb0", - "#a30354", + "#835b00", + "#00666d", + "#8a2740", ]; // Stable per-employee avatar color when employees.avatar_color isn't set. @@ -24,7 +29,10 @@ export function avatarColorFor(seed: string): string { export const STATUS_STYLES: Record = { Aktiv: "bg-success-bg text-success-text", Karenz: "bg-warning-bg text-warning-text", - Geplant: "bg-brand-100 text-brand-700", + // Rosa statt Blau: „Geplant" ist kein Hinweis und keine Warnung, sondern + // der Normalfall ohne besondere Faerbung — und dafuer ist die Markenfarbe + // die richtige. Blau wuerde hier nach Bedienelement aussehen. + Geplant: "bg-accent-200 text-brand-700", Ausgetreten: "bg-danger-bg text-danger-text", }; @@ -36,7 +44,9 @@ export const CATEGORY_STYLES: Record = { warning: "bg-warning-bg text-warning-text", info: "bg-info-bg text-info-text", purple: "bg-purple-bg text-purple-text", - brand: "bg-brand-100 text-brand-700", + // Der Chip ohne eigene Bedeutung. Auf accent-200 statt accent-100, weil + // die hellere Stufe dem Fehler-Chip zu nahe kommt (dE 5.6 gegen 13.7). + brand: "bg-accent-200 text-brand-700", }; // Audit-log / activity-feed action -> badge color, per the action list in diff --git a/public/brand/icon-192.png b/public/brand/icon-192.png new file mode 100644 index 0000000..0987c4b Binary files /dev/null and b/public/brand/icon-192.png differ diff --git a/public/brand/icon-512-maskable.png b/public/brand/icon-512-maskable.png new file mode 100644 index 0000000..8a5ee00 Binary files /dev/null and b/public/brand/icon-512-maskable.png differ diff --git a/public/brand/icon-512.png b/public/brand/icon-512.png new file mode 100644 index 0000000..f433a9d Binary files /dev/null and b/public/brand/icon-512.png differ diff --git a/public/brand/manner-logo.svg b/public/brand/manner-logo.svg new file mode 100644 index 0000000..2643339 --- /dev/null +++ b/public/brand/manner-logo.svg @@ -0,0 +1,312 @@ +AAAWgmp1bWIAAAAeanVtZGMycGEAEQAQgAAAqgA4m3EDYzJwYQAAABZcanVtYgAAAEdqdW1kYzJtYQARABCAAACqADibcQN1cm46YzJwYToxYWJmODI4OC1jZjYxLTQ5YWUtYWNhOC1lMGNmNjdkZGIxMDUAAAADl2p1bWIAAAApanVtZGMyYXMAEQAQgAAAqgA4m3EDYzJwYS5hc3NlcnRpb25zAAAAALxqdW1iAAAARGp1bWRjYm9yABEAEIAAAKoAOJtxE2MycGEuaW5ncmVkaWVudC52MwAAAAAYYzJzaKn7G/FL2ABjmkAWE5gQvwEAAABwY2JvcqNpZGM6Zm9ybWF0bWltYWdlL3N2Zyt4bWxqaW5zdGFuY2VJRHgseG1wOmlpZDplZmI3MzdkNi05ZmRkLTQ2YTktOGMzNy0zMTc1NjdiYWFmYmJscmVsYXRpb25zaGlwaHBhcmVudE9mAAAB4mp1bWIAAABBanVtZGNib3IAEQAQgAAAqgA4m3ETYzJwYS5hY3Rpb25zLnYyAAAAABhjMnNoFLuW9Pn2rm9K98G6dbECIAAAAZljYm9yomdhY3Rpb25zgqJmYWN0aW9ua2MycGEub3BlbmVkanBhcmFtZXRlcnOha2luZ3JlZGllbnRzgaJjdXJseC1zZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmluZ3JlZGllbnQudjNkaGFzaFggRhLsAzLclgGyj5MXqmAbsHpJPvUUCPGGvKMnBkKgQ5ekZmFjdGlvbngdY29tLmFudGhyb3BpYy5jbGF1ZGUucHJvdmlkZWRqcGFyYW1ldGVyc6F4H2NvbS5hbnRocm9waWMub3JpZ2luLWNvbmZpZGVuY2VndW5rbm93bmtkZXNjcmlwdGlvbnhmQ2xhdWRlIHByb3ZpZGVkIHRoaXMgZmlsZSBhdCB0aGUgcmVxdWVzdCBvZiBhIHVzZXIgYW5kIG1heSBoYXZlIGNyZWF0ZWQgb3IgbW9kaWZpZWQgdGhlIGZpbGUgY29udGVudHMubXNvZnR3YXJlQWdlbnShZG5hbWVmQ2xhdWRlcmFsbEFjdGlvbnNJbmNsdWRlZPUAAADIanVtYgAAAEBqdW1kY2JvcgARABCAAACqADibcRNjMnBhLmhhc2guZGF0YQAAAAAYYzJzaI8fKLnJujpJVNZYDI3AMTkAAACAY2JvcqVjYWxnZnNoYTI1NmNwYWRMAAAAAAAAAAAAAAAAZGhhc2hYILoDinW8CdwfcmMU16OU0qPw5bx92zi82okLedFjlFF7ZG5hbWVuanVtYmYgbWFuaWZlc3RqZXhjbHVzaW9uc4GiZXN0YXJ0GQEiZmxlbmd0aBkeBAAAAj5qdW1iAAAAJ2p1bWRjMmNsABEAEIAAAKoAOJtxA2MycGEuY2xhaW0udjIAAAACD2Nib3KlY2FsZ2ZzaGEyNTZpc2lnbmF0dXJleE1zZWxmI2p1bWJmPS9jMnBhL3VybjpjMnBhOjFhYmY4Mjg4LWNmNjEtNDlhZS1hY2E4LWUwY2Y2N2RkYjEwNS9jMnBhLnNpZ25hdHVyZWppbnN0YW5jZUlEeCx4bXA6aWlkOjVjMDNlNGRmLTE1Y2MtNGUxZC05YTIyLTk2NzI1MDQ3MWUzZHJjcmVhdGVkX2Fzc2VydGlvbnODomN1cmx4LXNlbGYjanVtYmY9YzJwYS5hc3NlcnRpb25zL2MycGEuaW5ncmVkaWVudC52M2RoYXNoWCBGEuwDMtyWAbKPkxeqYBuwekk+9RQI8Ya8oycGQqBDl6JjdXJseCpzZWxmI2p1bWJmPWMycGEuYXNzZXJ0aW9ucy9jMnBhLmFjdGlvbnMudjJkaGFzaFggtFBCWM6RaYU6rHNFs6QluEtc+RhZZat47tDGI6BZYSCiY3VybHgpc2VsZiNqdW1iZj1jMnBhLmFzc2VydGlvbnMvYzJwYS5oYXNoLmRhdGFkaGFzaFggf2y88SRQx7lSn0IRL3Rd0HobHb0nDs/7y6r42FZa0yN0Y2xhaW1fZ2VuZXJhdG9yX2luZm+jZG5hbWVvQW50aHJvcGljIEZpbGVzZ3ZlcnNpb25lMS4wLjBrc3BlY1ZlcnNpb25lMi40LjAAABA4anVtYgAAAChqdW1kYzJjcwARABCAAACqADibcQNjMnBhLnNpZ25hdHVyZQAAABAIY2JvctKEWQISogEmGCFZAgowggIGMIIBjaADAgECAhRA5aAK7sI50L64g/oGQgU9Z1UTADAKBggqhkjOPQQDAzBJMRcwFQYDVQQKEw5BbnRocm9waWMsIFBCQzEuMCwGA1UEAxMlQW50aHJvcGljIENvbnRlbnQgQ3JlZGVudGlhbHMgUm9vdCBDQTAeFw0yNjA4MDcxODQzNTZaFw0yODA4MDYxOTQzNTZaMEQxFzAVBgNVBAoTDkFudGhyb3BpYywgUEJDMSkwJwYDVQQDEyBBbnRocm9waWMgQ2xhdWRlIENvbnRlbnQgU2lnbmluZzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABJh6CmvLUBgFFNU0vUKlOVtE6djd17L5SuwX0LemFisBM3dkd/3cyjxFA3Qo5S46fX0/ihY0VZ7mfb9KF703t5OjWDBWMA4GA1UdDwEB/wQEAwIHgDAVBgNVHSUEDjAMBgorBgEEAYPoXgIBMAwGA1UdEwEB/wQCMAAwHwYDVR0jBBgwFoAUzlHiBIFOZFsj+OPEz5o+nMHXXMIwCgYIKoZIzj0EAwMDZwAwZAIwMXMdFJ4BetLLVY7ORuE9noqbbAZOZn/aArXyTwFAZfKrPzxF2vPoJNf1+UCdg1XGAjBwX1zd9WGqYkqmL5SFqw1QySjr1zJfpJM9+1rdDwSPLMOPOjKuiXjoU/pUUeG9RwmhY3BhZFkNngAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPZYQOnfjlijUvc9D9MCxC6p7qTjUw5hJRb7MRWLsNcJDcjtCvEegW2+X+bwN+/KpaY75bXQe7UtoF+2LLHT2dFlbWs= + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/file.svg b/public/file.svg deleted file mode 100644 index 004145c..0000000 --- a/public/file.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/globe.svg b/public/globe.svg deleted file mode 100644 index 567f17b..0000000 --- a/public/globe.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/next.svg b/public/next.svg deleted file mode 100644 index 5174b28..0000000 --- a/public/next.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/vercel.svg b/public/vercel.svg deleted file mode 100644 index 7705396..0000000 --- a/public/vercel.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/public/window.svg b/public/window.svg deleted file mode 100644 index b2b2a44..0000000 --- a/public/window.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/unit/colors.test.ts b/tests/unit/colors.test.ts index 698c522..134bbad 100644 --- a/tests/unit/colors.test.ts +++ b/tests/unit/colors.test.ts @@ -1,5 +1,5 @@ import { describe, expect, it } from "vitest"; -import { actionBadgeStyle, avatarColorFor, STATUS_STYLES } from "@/lib/colors"; +import { actionBadgeStyle, avatarColorFor, CATEGORY_STYLES, STATUS_STYLES } from "@/lib/colors"; describe("avatarColorFor", () => { it("is deterministic for the same seed", () => { @@ -23,7 +23,11 @@ describe("actionBadgeStyle", () => { expect(actionBadgeStyle("Neueinstellung")).toBe(STATUS_STYLES.Aktiv); }); - it("falls back to the brand style for an unknown action", () => { - expect(actionBadgeStyle("Irgendwas Unbekanntes")).toContain("bg-brand-100"); + // Gegen CATEGORY_STYLES.brand geprüft und nicht gegen einen abgetippten + // Klassennamen: welche Farbe der Chip ohne eigene Bedeutung trägt, ist eine + // Frage der Palette und hat sich mit der Umstellung auf das Manner-CD schon + // einmal geändert. Der Test soll die Zuordnung sichern, nicht den Farbton. + it("falls back to the neutral category style for an unknown action", () => { + expect(actionBadgeStyle("Irgendwas Unbekanntes")).toBe(CATEGORY_STYLES.brand); }); });