feat: separate settings and gallery config, add impressum page
This commit is contained in:
@@ -877,11 +877,17 @@
|
||||
.footer__inner {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
justify-content: space-between;
|
||||
gap: 20px;
|
||||
flex-wrap: wrap;
|
||||
}
|
||||
|
||||
.footer__left {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
.footer__name {
|
||||
font-family: var(--font-sans);
|
||||
font-size: 0.75rem;
|
||||
@@ -891,6 +897,19 @@
|
||||
color: var(--text-muted);
|
||||
}
|
||||
|
||||
.footer__legal-link {
|
||||
font-size: 0.7rem;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.1em;
|
||||
color: var(--text-muted);
|
||||
opacity: 0.5;
|
||||
transition: opacity var(--transition-fast);
|
||||
}
|
||||
|
||||
.footer__legal-link:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.footer__links {
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
|
||||
121
app/impressum/page.tsx
Normal file
121
app/impressum/page.tsx
Normal file
@@ -0,0 +1,121 @@
|
||||
/**
|
||||
* Impressum (Legal Notice) page.
|
||||
* Required for German law compliance. Displays information from settings.yaml.
|
||||
*/
|
||||
|
||||
import { Metadata } from 'next';
|
||||
import { notFound } from 'next/navigation';
|
||||
import { getConfig } from '@/lib/config';
|
||||
import { BackLink } from '@/components/BackLink';
|
||||
import { FadeIn } from '@/components/FadeIn';
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: 'Impressum',
|
||||
robots: { index: false, follow: true }, // Usually no need to index legal pages
|
||||
};
|
||||
|
||||
export default function ImpressumPage() {
|
||||
const { legal } = getConfig();
|
||||
|
||||
if (!legal.enabled) {
|
||||
notFound();
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="subpage-container">
|
||||
<header className="subpage-header">
|
||||
<BackLink href="/" label="Home" />
|
||||
<FadeIn>
|
||||
<h1 className="subpage-title">Impressum</h1>
|
||||
<p className="subpage-subtitle">Angaben gemäß § 5 TMG</p>
|
||||
</FadeIn>
|
||||
</header>
|
||||
|
||||
<main className="subpage-content" style={{ maxWidth: '600px', margin: '0 auto' }}>
|
||||
<FadeIn delay={0.1}>
|
||||
<section style={{ marginBottom: '2rem' }}>
|
||||
<h2 style={{ fontSize: '1.2rem', marginBottom: '0.5rem', opacity: 0.8 }}>Anschrift</h2>
|
||||
<p style={{ lineHeight: 1.6 }}>
|
||||
{legal.name}
|
||||
<br />
|
||||
{legal.address}
|
||||
<br />
|
||||
{legal.zipCity}
|
||||
<br />
|
||||
{legal.country}
|
||||
</p>
|
||||
</section>
|
||||
|
||||
{(legal.email || legal.phone) && (
|
||||
<section style={{ marginBottom: '2rem' }}>
|
||||
<h2 style={{ fontSize: '1.2rem', marginBottom: '0.5rem', opacity: 0.8 }}>Kontakt</h2>
|
||||
<p style={{ lineHeight: 1.6 }}>
|
||||
{legal.email && (
|
||||
<>
|
||||
E-Mail: {legal.email}
|
||||
<br />
|
||||
</>
|
||||
)}
|
||||
{legal.phone && <>Telefon: {legal.phone}</>}
|
||||
</p>
|
||||
</section>
|
||||
)}
|
||||
|
||||
{(legal.taxId || legal.vatId) && (
|
||||
<section style={{ marginBottom: '2rem' }}>
|
||||
<h2 style={{ fontSize: '1.2rem', marginBottom: '0.5rem', opacity: 0.8 }}>
|
||||
Steuernummer
|
||||
</h2>
|
||||
<p style={{ lineHeight: 1.6 }}>
|
||||
{legal.taxId && (
|
||||
<>
|
||||
Steuernummer: {legal.taxId}
|
||||
<br />
|
||||
</>
|
||||
)}
|
||||
{legal.vatId && <>Umsatzsteuer-ID: {legal.vatId}</>}
|
||||
</p>
|
||||
</section>
|
||||
)}
|
||||
|
||||
{legal.extraInfo && (
|
||||
<section style={{ marginBottom: '2rem' }}>
|
||||
<h2 style={{ fontSize: '1.2rem', marginBottom: '0.5rem', opacity: 0.8 }}>
|
||||
Weitere Informationen
|
||||
</h2>
|
||||
<p style={{ lineHeight: 1.6, whiteSpace: 'pre-wrap' }}>{legal.extraInfo}</p>
|
||||
</section>
|
||||
)}
|
||||
|
||||
<section style={{ marginTop: '4rem', fontSize: '0.85rem', opacity: 0.6 }}>
|
||||
<p>Quelle: Erstellt mit dem Impressum-Generator von eRecht24.</p>
|
||||
</section>
|
||||
</FadeIn>
|
||||
</main>
|
||||
|
||||
<style jsx>{`
|
||||
.subpage-container {
|
||||
padding: 4rem 2rem;
|
||||
min-height: 80vh;
|
||||
}
|
||||
.subpage-header {
|
||||
margin-bottom: 4rem;
|
||||
text-align: center;
|
||||
}
|
||||
.subpage-title {
|
||||
font-family: var(--font-serif);
|
||||
font-size: clamp(2.5rem, 8vw, 4rem);
|
||||
font-weight: 400;
|
||||
margin-bottom: 1rem;
|
||||
}
|
||||
.subpage-subtitle {
|
||||
font-family: var(--font-caption);
|
||||
font-size: 1rem;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.1em;
|
||||
opacity: 0.6;
|
||||
}
|
||||
`}</style>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user