feat(ui): Leseerlebnis fuer Wissen und rechtliche Seiten

- Artikel: Lesefortschritt als feine Honiglinie am oberen Rand, Initiale
  in Serifenschrift und Honig, groesserer Titel, angenehme Zeilenlaenge
- Wissen-Uebersicht und "Weitere Artikel" als ruhige Liste mit grossen
  Serifen-Titeln, Unterstrich und gezeichnetem Pfeil statt "→"
- Rechtliche Seiten mit klarerer Ueberschriften-Hierarchie

Co-Authored-By: Claude Opus 5.5 (1M context) <[email protected]>
This commit is contained in:
Nick SzaunigandClaude Opus 5.5 committed 2026-09-25 13:09:22 +02:00
1 parent e75392c75b
commit dfda94ddfc
4 files changed
+62 -17

No files matched your search

+24 -7
View File
@@ -1,6 +1,7 @@
import type { Metadata } from "next";
import { notFound } from "next/navigation";
import Link from "next/link";
import { ReadingProgress } from "@/components/reading-progress";
import { Container } from "@/components/ui";
import { BackLink } from "@/components/back-link";
import { wissenSlugs } from "@/lib/site-config";
@@ -67,6 +68,7 @@ export default async function WissenArticlePage(
return (
<div className="py-20">
<ReadingProgress />
<script
type="application/ld+json"
dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd).replace(/</g, "\\u003c") }}
@@ -78,23 +80,38 @@ export default async function WissenArticlePage(
<Container className="max-w-2xl">
<BackLink href="/wissen" label={t.wissenArticlePage.backLabel} />
<p className="tracking-wide-caps text-xs text-honey-dark mb-3">{t.wissenArticlePage.eyebrow}</p>
<h1 className="text-3xl text-forest">{article.title}</h1>
<div className="mt-8 space-y-5 text-ink/75 leading-relaxed">
<h1 className="text-4xl md:text-5xl leading-[1.05] tracking-[-0.01em] text-forest">{article.title}</h1>
<div className="mt-10 max-w-[65ch] space-y-6 text-lg text-ink/80 leading-[1.75]">
{article.body.map((paragraph, i) => (
<p key={i}>{paragraph}</p>
// Initiale wie im Buch: der erste Buchstabe des Artikels gross in Honig.
<p key={i} className={i === 0 ? "first-letter:float-left first-letter:mr-3 first-letter:mt-1.5 first-letter:font-serif first-letter:text-7xl first-letter:leading-[0.8] first-letter:text-honey-dark" : undefined}>
{paragraph}
</p>
))}
</div>
{otherArticles.length > 0 ? (
<div className="mt-16 border-t border-ink/10 pt-10">
<p className="text-sm tracking-wide-caps text-ink/70 mb-6">{t.wissenArticlePage.otherArticlesHeading}</p>
<div className="space-y-6">
<div className="divide-y divide-ink/10 border-y border-ink/10">
{otherArticles.map((otherSlug) => {
const other = t.wissenArticles[otherSlug];
return (
<Link key={otherSlug} href={`/wissen/${otherSlug}`} className="group block">
<h2 className="text-lg text-forest group-hover:underline">{other.title}</h2>
<p className="mt-1 text-sm text-ink/65 leading-relaxed">{other.excerpt}</p>
<Link key={otherSlug} href={`/wissen/${otherSlug}`} className="group flex items-start justify-between gap-6 py-6">
<span>
<span className="link-draw pb-0.5 font-serif text-2xl text-forest">{other.title}</span>
<span className="mt-2 block text-sm text-ink/65 leading-relaxed">{other.excerpt}</span>
</span>
<svg
aria-hidden="true"
viewBox="0 0 24 24"
className="mt-2 h-4 w-4 flex-shrink-0 text-forest transition-transform duration-300 ease-[var(--ease-arrive)] group-hover:translate-x-1"
fill="none"
stroke="currentColor"
strokeWidth="1.6"
>
<path d="M4 12h15M13 6l6 6-6 6" strokeLinecap="round" strokeLinejoin="round" />
</svg>
</Link>
);
})}
+15 -8
View File
@@ -23,19 +23,26 @@ export default async function WissenPage() {
<ScrollReveal>
<SectionHeading level="h1" eyebrow={t.wissenListPage.eyebrow} title={t.wissenListPage.title} />
</ScrollReveal>
<div className="mt-14 space-y-10">
<div className="mt-14 divide-y divide-ink/10 border-y border-ink/10">
{wissenSlugs.map((slug, i) => {
const article = t.wissenArticles[slug];
return (
<ScrollReveal key={slug} delay={(i % 5) * 0.06}>
<Link href={`/wissen/${slug}`} className="block group">
<h2 className="text-xl text-forest group-hover:underline">{article.title}</h2>
<p className="mt-2 text-sm text-ink/65 leading-relaxed">{article.excerpt}</p>
<span className="mt-3 inline-flex items-center gap-1 text-sm text-honey-dark tracking-wide-caps">
<Link href={`/wissen/${slug}`} className="group block py-9">
<h2 className="link-draw inline pb-0.5 text-3xl leading-tight text-forest">{article.title}</h2>
<p className="mt-3 max-w-[60ch] text-ink/70 leading-relaxed">{article.excerpt}</p>
<span className="mt-4 inline-flex items-center gap-2 text-sm text-honey-dark tracking-wide-caps">
{t.wissenListPage.readMore}
<span className="transition-transform group-hover:translate-x-1" aria-hidden="true">
→
</span>
<svg
aria-hidden="true"
viewBox="0 0 24 24"
className="h-3.5 w-3.5 transition-transform duration-300 ease-[var(--ease-arrive)] group-hover:translate-x-1"
fill="none"
stroke="currentColor"
strokeWidth="1.6"
>
<path d="M4 12h15M13 6l6 6-6 6" strokeLinecap="round" strokeLinejoin="round" />
</svg>
</span>
</Link>
</ScrollReveal>