feat(phase-1): Premium design system, CapitoliumPreloader, IndexSectionIndicator, Recipe Showcase Stage
- Full CSS rewrite: Warm Ivory/Gold/Steinkohle design tokens, Floema grid, easing library - AuraMarbleBackground: fixed grain texture layer - CapitoliumPreloader: fullscreen counter animation with slide-up exit - LiquidOverlayMenu: fixed hamburger → fullscreen clip-path overlay with SlideUpTextHover nav links - IndexSectionIndicator: fixed left-side section tracker with animated fill line - Recipe Showcase Stage: GSAP ScrollTrigger pinned stage (images enter from right, exit left) with parallax inner-image effect, intro title, progress dots, hint line - LenisSmoothScroll: CDN integration synced with GSAP ticker - CapitoliumRevealButton: scaleY fill reveal on hover for all CTAs - SlideUpTextHover: overlay nav links - UnderlineExpandHover: footer + overlay footer links - head.php: GSAP 3.12.5 + ScrollTrigger + Lenis 1.0.42 CDN; Playfair Display + Manrope fonts - recipe.php: updated to new design system (btn-reveal, pill--gold, Lenis init) - impressum.php / datenschutz.php: migrated to shared head.php partial
This commit is contained in:
+34
-47
@@ -1,60 +1,41 @@
|
||||
<?php
|
||||
require __DIR__ . '/helpers.php';
|
||||
|
||||
$lang = strtolower((string) (filter_input(INPUT_GET, 'lang', FILTER_SANITIZE_FULL_SPECIAL_CHARS) ?: 'en')) === 'de' ? 'de' : 'en';
|
||||
$lang = strtolower((string)(filter_input(INPUT_GET, 'lang', FILTER_SANITIZE_FULL_SPECIAL_CHARS) ?: 'en')) === 'de' ? 'de' : 'en';
|
||||
$settings = load_site_settings();
|
||||
$imprint = $settings['imprint'][$lang] ?? ($settings['imprint']['en'] ?? []);
|
||||
$imprint = $settings['imprint'][$lang] ?? ($settings['imprint']['en'] ?? []);
|
||||
|
||||
$langSwitchLabel = $lang === 'de' ? 'DE' : 'EN';
|
||||
$langSwitchHref = lang_url($lang === 'de' ? 'en' : 'de');
|
||||
$navHome = $lang === 'de' ? 'Start' : 'Home';
|
||||
$navLatest = $lang === 'de' ? 'Neueste' : 'Latest';
|
||||
$navBasics = $lang === 'de' ? 'Basics' : 'Basics';
|
||||
$langSwitchHref = lang_url($lang === 'de' ? 'en' : 'de');
|
||||
|
||||
$t = [
|
||||
'title' => $lang === 'de' ? 'Impressum' : 'Imprint',
|
||||
'owner' => $lang === 'de' ? 'Medieninhaber' : 'Media owner',
|
||||
'address' => $lang === 'de' ? 'Adresse' : 'Address',
|
||||
'contact' => $lang === 'de' ? 'Kontakt' : 'Contact',
|
||||
'legal' => $lang === 'de' ? 'Rechtliches' : 'Legal',
|
||||
'purpose' => $lang === 'de' ? 'Unternehmensgegenstand / Blattlinie' : 'Business purpose / editorial line',
|
||||
'authority' => $lang === 'de' ? 'Aufsichts-/Gewerbebehörde' : 'Supervisory authority',
|
||||
'title' => $lang === 'de' ? 'Impressum' : 'Imprint',
|
||||
'owner' => $lang === 'de' ? 'Medieninhaber' : 'Media owner',
|
||||
'address' => $lang === 'de' ? 'Adresse' : 'Address',
|
||||
'contact' => $lang === 'de' ? 'Kontakt' : 'Contact',
|
||||
'legal' => $lang === 'de' ? 'Rechtliches' : 'Legal',
|
||||
'purpose' => $lang === 'de' ? 'Unternehmensgegenstand / Blattlinie' : 'Business purpose / editorial line',
|
||||
'authority' => $lang === 'de' ? 'Aufsichts-/Gewerbebehörde' : 'Supervisory authority',
|
||||
'membership' => $lang === 'de' ? 'WKO-Mitgliedschaft' : 'Chamber membership',
|
||||
'uid' => $lang === 'de' ? 'UID' : 'VAT ID',
|
||||
'odr' => $lang === 'de' ? 'Verbraucherstreitbeilegung / ODR' : 'Consumer dispute resolution / ODR',
|
||||
'uid' => $lang === 'de' ? 'UID' : 'VAT ID',
|
||||
'odr' => $lang === 'de' ? 'Verbraucherstreitbeilegung / ODR' : 'Consumer dispute resolution / ODR',
|
||||
'last_updated' => $lang === 'de' ? 'Stand' : 'Last updated',
|
||||
];
|
||||
|
||||
function legal_item(string $label, ?string $value): void {
|
||||
$value = trim((string) $value);
|
||||
if ($value === '') {
|
||||
return;
|
||||
}
|
||||
if ($value === '') return;
|
||||
echo '<div class="legal-item"><span class="legal-label">' . e($label) . '</span><span>' . nl2br(e($value)) . '</span></div>';
|
||||
}
|
||||
|
||||
$pageTitle = e($t['title']) . ' | FlixCooks';
|
||||
$description = $lang === 'de'
|
||||
? 'Pflichtangaben für diese Website gemäß ECG, MedienG und GewO.'
|
||||
: 'Mandatory website information in line with Austrian ECG, Media Act and Trade Regulation.';
|
||||
|
||||
include __DIR__ . '/partials/head.php';
|
||||
include __DIR__ . '/partials/header.php';
|
||||
?>
|
||||
<!doctype html>
|
||||
<html lang="<?php echo e($lang); ?>">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title><?php echo e($t['title']); ?> | FlixCooks</title>
|
||||
<link rel="stylesheet" href="/assets/style.css">
|
||||
<style>
|
||||
.legal-page { max-width: 900px; margin: 40px auto 80px; padding: 0 16px; }
|
||||
.legal-card { background: var(--surface-2); border-radius: 16px; padding: 24px; box-shadow: var(--shadow); border: 1px solid rgba(255,255,255,0.08); }
|
||||
.legal-item { display: grid; grid-template-columns: 220px 1fr; gap: 10px; padding: 10px 0; border-bottom: 1px solid rgba(255,255,255,0.08); }
|
||||
.legal-item:last-child { border-bottom: none; }
|
||||
.legal-label { font-weight: 700; color: var(--ink); }
|
||||
.legal-section { margin-top: 22px; }
|
||||
.legal-section h2 { margin: 0 0 8px; }
|
||||
@media (max-width: 600px) {
|
||||
.legal-item { grid-template-columns: 1fr; }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<?php include __DIR__ . '/partials/header.php'; ?>
|
||||
<main class="legal-page">
|
||||
<h1><?php echo e($t['title']); ?></h1>
|
||||
<p><?php echo $lang === 'de'
|
||||
@@ -64,24 +45,30 @@ function legal_item(string $label, ?string $value): void {
|
||||
<div class="legal-card legal-section">
|
||||
<h2><?php echo e($t['owner']); ?></h2>
|
||||
<?php
|
||||
legal_item($t['owner'], $imprint['owner_name'] ?? '');
|
||||
legal_item($t['owner'], $imprint['owner_name'] ?? '');
|
||||
legal_item($t['address'], $imprint['address'] ?? '');
|
||||
legal_item($t['contact'], ($imprint['email'] ?? '') . ($imprint['phone'] ? ' | ' . $imprint['phone'] : ''));
|
||||
legal_item($t['legal'], $imprint['legal_form'] ?? '');
|
||||
legal_item($t['legal'], $imprint['legal_form'] ?? '');
|
||||
legal_item($t['purpose'], $imprint['business_purpose'] ?? '');
|
||||
legal_item($t['membership'], $imprint['wko_membership'] ?? '');
|
||||
legal_item($t['authority'], $imprint['authority'] ?? '');
|
||||
legal_item($t['uid'], $imprint['uid'] ?? '');
|
||||
legal_item($t['authority'], $imprint['authority'] ?? '');
|
||||
legal_item($t['uid'], $imprint['uid'] ?? '');
|
||||
if (!empty($imprint['odr'])) {
|
||||
$odrText = $lang === 'de'
|
||||
? 'Die EU-ODR-Plattform wurde am 20. Juli 2025 eingestellt. Informationen zur Verbraucherstreitbeilegung finden Sie hier:'
|
||||
: 'The EU ODR platform was discontinued on 20 July 2025. Consumer dispute resolution information:';
|
||||
echo '<div class="legal-item"><span class="legal-label">' . e($t['odr']) . '</span><span>' . e($odrText) . ' <a href="' . e($imprint['odr']) . '" target="_blank" rel="noopener">consumer-redress.ec.europa.eu</a></span></div>';
|
||||
echo '<div class="legal-item"><span class="legal-label">' . e($t['odr']) . '</span><span>' . e($odrText) . ' <a href="' . e($imprint['odr']) . '" target="_blank" rel="noopener" class="underline-link">consumer-redress.ec.europa.eu</a></span></div>';
|
||||
}
|
||||
legal_item($t['last_updated'], $imprint['last_updated'] ?? '');
|
||||
?>
|
||||
</div>
|
||||
</main>
|
||||
<?php include __DIR__ . '/partials/footer.php'; ?>
|
||||
</body>
|
||||
</html>
|
||||
<script>
|
||||
if (typeof Lenis !== 'undefined') {
|
||||
var lenis = new Lenis({ duration: 1.2, smooth: true, smoothTouch: false });
|
||||
window.lenis = lenis;
|
||||
function raf(t) { lenis.raf(t); requestAnimationFrame(raf); }
|
||||
requestAnimationFrame(raf);
|
||||
}
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user