From 1ca20c4ee43faa926bd29fb98a5d9a54623de15e Mon Sep 17 00:00:00 2001 From: nichtLehdev Date: Tue, 15 Sep 2026 23:55:34 +0200 Subject: [PATCH 01/82] =?UTF-8?q?feat(design):=20Programmheft-Grundlagen?= =?UTF-8?q?=20=E2=80=93=20Archivo,=20Tokens=20und=20Hilfsklassen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Archivo mit Breitenachse als Variable für die öffentliche Website (das Dashboard bleibt bei Inter). Neue Farb-Tokens (Tinte, Papier, Messing-Tinte, Haarlinie, Nachtdruck), schmale Schnitte, Satzbreite, Füllzeile, Fokus- und Markierungsfarben sowie reduzierte Bewegung. --- src/app/layout.tsx | 20 +++++- src/styles/globals.css | 155 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 173 insertions(+), 2 deletions(-) diff --git a/src/app/layout.tsx b/src/app/layout.tsx index dd02cc46..04588ed2 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,5 +1,5 @@ import type { Metadata, Viewport } from "next"; -import { Inter } from "next/font/google"; +import { Archivo, Inter } from "next/font/google"; import "../styles/globals.css"; import { AppChrome } from "./_components/general/app-chrome"; import { TRPCReactProvider } from "@/trpc/react"; @@ -22,6 +22,18 @@ import { const inter = Inter({ subsets: ["latin"] }); +/** + * Programmheft-Schrift der öffentlichen Website. Die Breitenachse trägt beide + * Stimmen einer Familie: schmal für Titel, Daten und Programmköpfe, normal für + * Text. Nur als Variable geladen — das Dashboard bleibt bei Inter. + */ +const archivo = Archivo({ + subsets: ["latin", "latin-ext"], + axes: ["wdth"], + variable: "--font-archivo", + display: "swap", +}); + export const metadata: Metadata = { // Makes every relative URL in child metadata (canonicals, og:image) absolute. metadataBase: new URL(siteUrl()), @@ -91,7 +103,11 @@ export default function RootLayout({ children: React.ReactNode; }) { return ( - +