Initial commit — BMP Website 2026

Vollständiges Redesign mit Gold-Formularen, BMP-Logo, multi-step Forms (Bewerbung, Kontakt, Sponsoring), Netlify-Deployment.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Sebastian Pachon Araque
2026-05-29 09:01:20 +02:00
commit fea7998835
8482 changed files with 1259493 additions and 0 deletions

567
navigation.html Normal file
View File

@@ -0,0 +1,567 @@
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>BMP Navigation — Prototype</title>
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
:root {
--navy: #101828;
--gold: #C9A227;
--muted: #D0D5DD;
--white: #FFFFFF;
--blue: #0B4DA2;
--blue-h: #6FB6E9;
--sep: rgba(201, 162, 39, 0.25);
}
body {
font-family: Georgia, serif;
background: #0A192F;
overflow-x: hidden;
}
body.overlay-open {
overflow: hidden;
}
/* ─────────────────────────────────────────
SIDEBAR
───────────────────────────────────────── */
#sidebar {
position: fixed;
top: 0; left: 0;
width: 72px;
height: 100vh;
background: var(--navy);
border-right: 1px solid rgba(201, 162, 39, 0.3);
display: flex;
flex-direction: column;
align-items: center;
z-index: 100;
padding: 24px 0;
}
/* Logo */
#sidebar .s-logo {
display: flex;
flex-direction: column;
align-items: center;
gap: 3px;
text-decoration: none;
flex-shrink: 0;
}
#sidebar .s-logo span {
font-size: 8px;
font-weight: 700;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--gold);
line-height: 1.2;
text-align: center;
writing-mode: horizontal-tb;
}
#sidebar .s-logo .logo-bmp {
font-size: 16px;
font-weight: 900;
letter-spacing: 0.05em;
color: var(--gold);
}
/* Spacer that pushes hamburger to center */
#sidebar .s-spacer { flex: 1; }
/* Hamburger */
#sidebar .s-hamburger {
display: flex;
flex-direction: column;
align-items: center;
gap: 6px;
cursor: pointer;
background: none;
border: none;
padding: 10px 0;
flex-shrink: 0;
}
#sidebar .s-hamburger .bars {
display: flex;
flex-direction: column;
gap: 4px;
width: 22px;
}
#sidebar .s-hamburger .bars span {
display: block;
height: 1.5px;
background: var(--muted);
transition: all 0.3s ease;
transform-origin: center;
}
#sidebar .s-hamburger .menu-label {
font-family: Georgia, serif;
font-size: 10px;
text-transform: uppercase;
letter-spacing: 0.15em;
color: var(--muted);
writing-mode: horizontal-tb;
}
/* Social icons */
#sidebar .s-social {
display: flex;
flex-direction: column;
align-items: center;
gap: 16px;
margin-top: 28px;
flex-shrink: 0;
}
#sidebar .s-social a {
color: var(--muted);
text-decoration: none;
transition: color 0.2s;
display: flex;
align-items: center;
}
#sidebar .s-social a:hover { color: var(--gold); }
#sidebar .s-social svg { width: 18px; height: 18px; }
/* Language switcher */
#sidebar .s-lang {
margin-top: 24px;
display: flex;
flex-direction: column;
align-items: center;
gap: 2px;
flex-shrink: 0;
}
#sidebar .s-lang button {
font-family: Georgia, serif;
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.1em;
background: none;
border: none;
cursor: pointer;
color: var(--muted);
padding: 2px 0;
transition: color 0.2s;
line-height: 1;
}
#sidebar .s-lang button.active { color: var(--gold); }
#sidebar .s-lang button:hover:not(.active) { color: var(--white); }
#sidebar .s-lang .lang-sep {
width: 1px;
height: 10px;
background: rgba(201,162,39,0.3);
}
/* ─────────────────────────────────────────
OVERLAY
───────────────────────────────────────── */
#overlay {
position: fixed;
inset: 0;
background: var(--navy);
z-index: 200;
display: flex;
flex-direction: column;
padding: 32px 48px 36px;
/* closed state */
opacity: 0;
pointer-events: none;
transform: translateX(-20px);
transition: opacity 0.3s ease, transform 0.3s ease;
}
#overlay.is-open {
opacity: 1;
pointer-events: all;
transform: translateX(0);
}
/* Overlay top bar */
.ov-top {
display: flex;
justify-content: space-between;
align-items: flex-start;
flex-shrink: 0;
margin-bottom: 48px;
}
/* Close button */
.ov-close {
display: flex;
align-items: center;
gap: 10px;
background: none;
border: none;
cursor: pointer;
padding: 0;
}
.ov-close .x-icon {
width: 32px;
height: 32px;
position: relative;
display: flex;
align-items: center;
justify-content: center;
}
.ov-close .x-icon::before,
.ov-close .x-icon::after {
content: '';
position: absolute;
width: 22px;
height: 1.5px;
background: var(--muted);
transition: background 0.2s;
}
.ov-close .x-icon::before { transform: rotate(45deg); }
.ov-close .x-icon::after { transform: rotate(-45deg); }
.ov-close:hover .x-icon::before,
.ov-close:hover .x-icon::after { background: var(--white); }
.ov-close .x-label {
font-family: Georgia, serif;
font-size: 10px;
text-transform: uppercase;
letter-spacing: 0.15em;
color: var(--muted);
transition: color 0.2s;
}
.ov-close:hover .x-label { color: var(--white); }
/* Overlay logo (top right) */
.ov-logo {
text-align: right;
text-decoration: none;
}
.ov-logo .ov-logo-bmp {
font-size: 13px;
font-weight: 900;
letter-spacing: 0.12em;
color: var(--gold);
display: block;
}
.ov-logo .ov-logo-sub {
font-size: 8px;
letter-spacing: 0.2em;
text-transform: uppercase;
color: rgba(201,162,39,0.5);
display: block;
margin-top: 2px;
}
/* Nav list */
.ov-nav {
flex: 1;
display: flex;
flex-direction: column;
justify-content: center;
list-style: none;
padding-left: 48px;
}
.ov-nav li {
border-top: 1px solid var(--sep);
}
.ov-nav li:last-child {
border-bottom: 1px solid var(--sep);
}
.ov-nav a {
display: flex;
align-items: center;
justify-content: space-between;
padding: 20px 0;
text-decoration: none;
color: var(--white);
font-family: Georgia, serif;
font-size: clamp(22px, 3vw, 32px);
font-weight: bold;
text-transform: uppercase;
letter-spacing: 0.04em;
transition: color 0.15s, transform 0.15s;
}
.ov-nav a:hover {
color: var(--gold);
transform: translateX(8px);
}
.ov-nav a .nav-arrow {
color: var(--gold);
font-size: 1.2em;
font-style: normal;
margin-left: 16px;
flex-shrink: 0;
}
/* Overlay bottom bar */
.ov-bottom {
display: flex;
justify-content: flex-end;
align-items: center;
gap: 32px;
flex-shrink: 0;
flex-wrap: wrap;
}
/* Bottom lang */
.ov-lang {
display: flex;
align-items: center;
gap: 8px;
}
.ov-lang button {
font-family: Georgia, serif;
font-size: 12px;
text-transform: uppercase;
letter-spacing: 0.1em;
background: none;
border: none;
cursor: pointer;
color: var(--muted);
transition: color 0.2s;
padding: 0;
}
.ov-lang button.active { color: var(--gold); }
.ov-lang button:hover:not(.active) { color: var(--white); }
.ov-lang .lang-pipe {
color: rgba(201,162,39,0.3);
font-size: 14px;
}
/* Bottom social */
.ov-social {
display: flex;
align-items: center;
gap: 20px;
}
.ov-social a {
color: var(--muted);
text-decoration: none;
transition: color 0.2s;
display: flex;
}
.ov-social a:hover { color: var(--gold); }
.ov-social svg { width: 18px; height: 18px; }
/* CTA button */
.ov-cta {
background: var(--blue);
color: var(--white);
font-family: Georgia, serif;
font-size: 12px;
text-transform: uppercase;
letter-spacing: 0.1em;
border: none;
border-radius: 3px;
padding: 10px 20px;
cursor: pointer;
transition: background 0.2s;
text-decoration: none;
white-space: nowrap;
}
.ov-cta:hover { background: var(--blue-h); }
/* ─────────────────────────────────────────
DEMO CONTENT
───────────────────────────────────────── */
#demo-content {
margin-left: 72px;
min-height: 100vh;
background: #8B0020;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 16px;
padding: 60px;
text-align: center;
}
#demo-content h1 {
font-family: Georgia, serif;
font-size: clamp(32px, 6vw, 72px);
font-weight: 900;
color: rgba(255,255,255,0.15);
text-transform: uppercase;
letter-spacing: 0.08em;
line-height: 1;
}
#demo-content p {
font-family: Georgia, serif;
font-size: 13px;
color: rgba(255,255,255,0.2);
letter-spacing: 0.15em;
text-transform: uppercase;
}
</style>
</head>
<body>
<!-- ═══════════════════ SIDEBAR ═══════════════════ -->
<aside id="sidebar">
<!-- Logo -->
<a href="/" class="s-logo">
<span class="logo-bmp">BMP</span>
<span>Bayerischer<br/>Mittelstands<br/>preis</span>
</a>
<div class="s-spacer"></div>
<!-- Hamburger -->
<button class="s-hamburger" id="hamburger" aria-label="Menü öffnen" aria-expanded="false">
<div class="bars">
<span id="bar1"></span>
<span id="bar2"></span>
<span id="bar3"></span>
</div>
<span class="menu-label" id="menu-label">Menü</span>
</button>
<!-- Social -->
<div class="s-social">
<a href="https://instagram.com" target="_blank" rel="noopener" aria-label="Instagram">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
<rect x="2" y="2" width="20" height="20" rx="5"/><circle cx="12" cy="12" r="4"/><circle cx="17.5" cy="6.5" r=".8" fill="currentColor" stroke="none"/>
</svg>
</a>
<a href="https://linkedin.com" target="_blank" rel="noopener" aria-label="LinkedIn">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
<path d="M16 8a6 6 0 016 6v7h-4v-7a2 2 0 00-2-2 2 2 0 00-2 2v7h-4v-7a6 6 0 016-6z"/><rect x="2" y="9" width="4" height="12"/><circle cx="4" cy="4" r="2"/>
</svg>
</a>
<a href="https://facebook.com" target="_blank" rel="noopener" aria-label="Facebook">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
<path d="M18 2h-3a5 5 0 00-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 011-1h3z"/>
</svg>
</a>
</div>
<!-- Language -->
<div class="s-lang">
<button class="active" onclick="setLang('de')">DE</button>
<div class="lang-sep"></div>
<button onclick="setLang('en')">EN</button>
</div>
</aside>
<!-- ═══════════════════ OVERLAY ═══════════════════ -->
<div id="overlay" role="dialog" aria-modal="true" aria-label="Navigation">
<!-- Top bar -->
<div class="ov-top">
<button class="ov-close" id="overlay-close" aria-label="Menü schließen">
<div class="x-icon"></div>
<span class="x-label">Menü</span>
</button>
<a href="/" class="ov-logo">
<span class="ov-logo-bmp">BMP</span>
<span class="ov-logo-sub">Bayerischer Mittelstandspreis</span>
</a>
</div>
<!-- Nav items -->
<nav>
<ul class="ov-nav">
<li><a href="/preistraeger">Preisträger:innen <span class="nav-arrow">›</span></a></li>
<li><a href="/teilnahme">Teilnahme <span class="nav-arrow">›</span></a></li>
<li><a href="/kategorien">Kategorien <span class="nav-arrow">›</span></a></li>
<li><a href="/netzwerk">Netzwerk <span class="nav-arrow">›</span></a></li>
<li><a href="/presse">Presse <span class="nav-arrow">›</span></a></li>
</ul>
</nav>
<!-- Bottom bar -->
<div class="ov-bottom">
<div class="ov-lang">
<button class="active" onclick="setLang('de')">DE</button>
<span class="lang-pipe">|</span>
<button onclick="setLang('en')">EN</button>
</div>
<div class="ov-social">
<a href="https://instagram.com" target="_blank" rel="noopener" aria-label="Instagram">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
<rect x="2" y="2" width="20" height="20" rx="5"/><circle cx="12" cy="12" r="4"/><circle cx="17.5" cy="6.5" r=".8" fill="currentColor" stroke="none"/>
</svg>
</a>
<a href="https://linkedin.com" target="_blank" rel="noopener" aria-label="LinkedIn">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
<path d="M16 8a6 6 0 016 6v7h-4v-7a2 2 0 00-2-2 2 2 0 00-2 2v7h-4v-7a6 6 0 016-6z"/><rect x="2" y="9" width="4" height="12"/><circle cx="4" cy="4" r="2"/>
</svg>
</a>
<a href="https://facebook.com" target="_blank" rel="noopener" aria-label="Facebook">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
<path d="M18 2h-3a5 5 0 00-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 011-1h3z"/>
</svg>
</a>
</div>
<a href="/login" class="ov-cta">Login Datenbank</a>
</div>
</div>
<!-- ═══════════════════ DEMO CONTENT ═══════════════════ -->
<main id="demo-content">
<h1>Bayerischer<br/>Mittelstandspreis</h1>
<p>Exzellenz seit 2005</p>
</main>
<script>
const hamburger = document.getElementById('hamburger');
const overlay = document.getElementById('overlay');
const overlayClose = document.getElementById('overlay-close');
const menuLabel = document.getElementById('menu-label');
const bar1 = document.getElementById('bar1');
const bar2 = document.getElementById('bar2');
const bar3 = document.getElementById('bar3');
function openOverlay() {
overlay.classList.add('is-open');
document.body.classList.add('overlay-open');
hamburger.setAttribute('aria-expanded', 'true');
// Morph bars to X
bar1.style.transform = 'translateY(5.5px) rotate(45deg)';
bar2.style.opacity = '0';
bar3.style.transform = 'translateY(-5.5px) rotate(-45deg)';
menuLabel.style.opacity = '0';
// Focus trap: first nav link
setTimeout(() => overlay.querySelector('.ov-nav a')?.focus(), 310);
}
function closeOverlay() {
overlay.classList.remove('is-open');
document.body.classList.remove('overlay-open');
hamburger.setAttribute('aria-expanded', 'false');
// Restore bars
bar1.style.transform = '';
bar2.style.opacity = '1';
bar3.style.transform = '';
menuLabel.style.opacity = '1';
hamburger.focus();
}
hamburger.addEventListener('click', () => {
overlay.classList.contains('is-open') ? closeOverlay() : openOverlay();
});
overlayClose.addEventListener('click', closeOverlay);
// Close on Escape
document.addEventListener('keydown', e => {
if (e.key === 'Escape' && overlay.classList.contains('is-open')) closeOverlay();
});
// Language switcher (shared state)
let currentLang = 'de';
function setLang(lang) {
currentLang = lang;
document.querySelectorAll('.s-lang button, .ov-lang button').forEach(btn => {
btn.classList.toggle('active', btn.textContent.trim().toLowerCase() === lang);
});
}
</script>
</body>
</html>