diff --git a/src/components/TestimonialsSection.tsx b/src/components/TestimonialsSection.tsx index 563efe3..b8f3294 100644 --- a/src/components/TestimonialsSection.tsx +++ b/src/components/TestimonialsSection.tsx @@ -72,7 +72,7 @@ export default function TestimonialsSection() { {/* ── DESKTOP ── */} {!isMobile && (
- {/* Left — portrait photo */} + {/* Left – portrait photo */}
- {/* Right — quote */} + {/* Right – quote */}
Stimmen der Preisträger diff --git a/src/components/WegZurAuszeichnungSection.tsx b/src/components/WegZurAuszeichnungSection.tsx index b1e5fb8..d9b9b25 100644 --- a/src/components/WegZurAuszeichnungSection.tsx +++ b/src/components/WegZurAuszeichnungSection.tsx @@ -32,10 +32,10 @@ export default function WegZurAuszeichnungSection() {
Schritt für Schritt

- IHR WEG ZUR
AUSZEICHNUNG. + IHR WEG ZUM
PREIS.

- Von der Einreichung bis zur Gala — vier klar definierte Schritte auf dem Weg zur höchsten Auszeichnung des bayerischen Mittelstands. + Von der Einreichung bis zur Gala – vier klar definierte Schritte auf dem Weg zur höchsten Auszeichnung des bayerischen Mittelstands.

@@ -86,15 +86,15 @@ export default function WegZurAuszeichnungSection() {
Schritt für Schritt

- IHR WEG ZUR
AUSZEICHNUNG. + IHR WEG ZUM
PREIS.

- Von der Einreichung bis zur Gala — vier klar definierte Schritte auf dem Weg zur höchsten Auszeichnung des bayerischen Mittelstands. + Von der Einreichung bis zur Gala – vier klar definierte Schritte auf dem Weg zur höchsten Auszeichnung des bayerischen Mittelstands.

- {/* Scroll hint — prominent */} + {/* Scroll hint – prominent */}
{/* Animated chevron stack */}
diff --git a/src/components/editor/LayoutEditor.tsx b/src/components/editor/LayoutEditor.tsx index b585b66..6c529bd 100644 --- a/src/components/editor/LayoutEditor.tsx +++ b/src/components/editor/LayoutEditor.tsx @@ -74,7 +74,7 @@ function saveElementEdits(e: Record) { try { localStorage.setItem(LS_ELEMENT, JSON.stringify(e)); } catch {} } -// Archived = set of storage keys the user has "binned" — CSS stays active +// Archived = set of storage keys the user has "binned" – CSS stays active function loadArchived(): Set { try { return new Set(JSON.parse(localStorage.getItem(LS_ARCHIVED) || '[]')); } catch { return new Set(); } } @@ -108,7 +108,7 @@ function saveSaveCount(n: number) { } // --------------------------------------------------------------------------- -// CSS builders (backup stylesheet — primary persistence is via setProperty) +// CSS builders (backup stylesheet – primary persistence is via setProperty) // --------------------------------------------------------------------------- /** Build CSS only for edits that belong to `forPathname` */ @@ -159,7 +159,7 @@ function injectCSS(id: string, css: string) { } // --------------------------------------------------------------------------- -// Apply element edit directly via setProperty — survives React re-renders +// Apply element edit directly via setProperty – survives React re-renders // because inline !important beats React's non-!important inline style updates // --------------------------------------------------------------------------- @@ -209,7 +209,7 @@ function reapplyAllElementEdits(edits: Record, pathname: st } // --------------------------------------------------------------------------- -// Selectors — always include the current route so edits are page-isolated +// Selectors – always include the current route so edits are page-isolated // --------------------------------------------------------------------------- function getSectionSelector(section: HTMLElement, pathname: string): string { @@ -383,7 +383,7 @@ function SmallInput({ label, value, onChange, placeholder }: { label: string; va } // --------------------------------------------------------------------------- -// Element popup — full editor with live preview +// Element popup – full editor with live preview // --------------------------------------------------------------------------- const FONT_WEIGHTS = [ @@ -419,7 +419,7 @@ function ElementPopup({ const set = (key: K, val: ElementEdit[K]) => setProps(p => ({ ...p, [key]: val })); - // ── LIVE PREVIEW — apply every prop change directly to the element ────── + // ── LIVE PREVIEW – apply every prop change directly to the element ────── useEffect(() => { applyEditToElement(popup.el, props); if (props.text !== undefined) popup.el.innerText = props.text; @@ -502,7 +502,7 @@ function ElementPopup({ onChange={e => set('fontFamily', e.target.value)} style={{ fontFamily: FONT, fontSize: 11, color: '#fff', background: '#0D1540', border: '1px solid rgba(255,255,255,0.12)', padding: '7px 8px', width: '100%', outline: 'none', cursor: 'pointer' }} > - + {FONT_FAMILIES.map(f => ( ))} @@ -619,20 +619,20 @@ export default function LayoutEditor() { const [editMode, setEditMode] = useState(false); const [editTarget, setEditTarget] = useState('section'); - // — Module state — + // – Module state – const [savedModules, setSavedModules] = useState(() => loadModuleEdits()); const [selSel, setSelSel] = useState(''); const [preview, setPreview] = useState({}); - // — Element state — + // – Element state – const [savedElements, setSavedElements] = useState>(() => loadElementEdits()); const [popup, setPopup] = useState(null); - // — Bin (archived keys — CSS still active, hidden from main list) — + // – Bin (archived keys – CSS still active, hidden from main list) – const [archived, setArchived] = useState>(() => loadArchived()); const [binOpen, setBinOpen] = useState(false); - // — Batch / archive state — + // – Batch / archive state – const [batches, setBatches] = useState(() => loadBatches()); const [saveCount, setSaveCount] = useState(() => loadSaveCount()); const [expandedBatch, setExpandedBatch] = useState(null); @@ -705,7 +705,7 @@ export default function LayoutEditor() { return; } - // Element mode — open popup for the clicked element + // Element mode – open popup for the clicked element const sel = getElementSelector(target, location.pathname); const originalStyle = target.getAttribute('style') || ''; setPopup({ x: e.clientX + 14, y: e.clientY + 14, el: target, sel, originalStyle }); @@ -964,7 +964,7 @@ export default function LayoutEditor() {
)} - {/* Saved modules list — active (not binned) */} + {/* Saved modules list – active (not binned) */} {activeModuleKeys.length > 0 && (
@@ -987,7 +987,7 @@ export default function LayoutEditor() {
)} - {/* Saved elements list — active (not binned) */} + {/* Saved elements list – active (not binned) */} {activeElementKeys.length > 0 && (
@@ -1032,7 +1032,7 @@ export default function LayoutEditor() { {binOpen && (
- Änderungen sind weiterhin aktiv — nur aus der Hauptliste ausgeblendet. + Änderungen sind weiterhin aktiv – nur aus der Hauptliste ausgeblendet.
{binKeys.map(key => { const isMod = key in savedModules; @@ -1130,7 +1130,7 @@ export default function LayoutEditor() { {/* Footer */}
- BMP Layout Editor — Dev Only + BMP Layout Editor – Dev Only
)} diff --git a/src/components/forms/BewerbungsForm.tsx b/src/components/forms/BewerbungsForm.tsx index 87dabf9..520f686 100644 --- a/src/components/forms/BewerbungsForm.tsx +++ b/src/components/forms/BewerbungsForm.tsx @@ -545,7 +545,7 @@ export default function BewerbungsForm({ theme = 'dark' }: { theme?: 'dark' | 'g {[ { label: 'Unternehmen', value: data.nomFirma }, { label: 'Branche', value: data.nomBranche }, - { label: 'Standort', value: data.nomStandort || '—' }, + { label: 'Standort', value: data.nomStandort || '–' }, { label: 'Nominiert von',value: `${data.nomName} · ${data.nomEmail}` }, ].map(row => (
diff --git a/src/components/forms/SponsoringForm.tsx b/src/components/forms/SponsoringForm.tsx index a3f5132..d4ad5a2 100644 --- a/src/components/forms/SponsoringForm.tsx +++ b/src/components/forms/SponsoringForm.tsx @@ -100,8 +100,8 @@ const STEPS = [ ]; const PAKETE = [ - { value: 'main', title: 'Haupt-Sponsoring', desc: 'Maximale Sichtbarkeit auf allen Kanälen — Bühne, Digital, Print.' }, - { value: 'category', title: 'Kategorie-Partner', desc: 'Namensgebung einer Auszeichnungskategorie — fokussiertes Branding.' }, + { value: 'main', title: 'Haupt-Sponsoring', desc: 'Maximale Sichtbarkeit auf allen Kanälen – Bühne, Digital, Print.' }, + { value: 'category', title: 'Kategorie-Partner', desc: 'Namensgebung einer Auszeichnungskategorie – fokussiertes Branding.' }, { value: 'event', title: 'Event-Partner', desc: 'Präsenz beim exklusiven Gala-Abend in München.' }, ]; @@ -253,7 +253,7 @@ export default function SponsoringForm({ theme = 'dark' }: { theme?: 'dark' | 'g {step === 0 && (
-

Schritt 1 — Paket wählen

+

Schritt 1 – Paket wählen

Interesse an

@@ -268,7 +268,7 @@ export default function SponsoringForm({ theme = 'dark' }: { theme?: 'dark' | 'g {step === 1 && (
-

Schritt 2 — Unternehmen

+

Schritt 2 – Unternehmen

Ihr Unternehmen

@@ -283,7 +283,7 @@ export default function SponsoringForm({ theme = 'dark' }: { theme?: 'dark' | 'g {step === 2 && (
-

Schritt 3 — Kontakt

+

Schritt 3 – Kontakt

Ansprechpartner

diff --git a/src/components/layout/Layout.tsx b/src/components/layout/Layout.tsx index e152958..650ae83 100644 --- a/src/components/layout/Layout.tsx +++ b/src/components/layout/Layout.tsx @@ -29,19 +29,14 @@ const NAV: NavItem[] = [ sub: [ { label: 'Alle Preisträger:innen', path: '/preistraeger' }, { label: 'Sieger & Aufsteiger 2025', path: '/preistraeger' }, - { label: 'Preisträger 2024', path: '/preistraeger' }, - { label: 'Preisträger 2023', path: '/preistraeger' }, - { label: 'Preisträger-Detail →', path: '/preistraeger' }, ], }, { key: 'teilnahme', label: 'Ihr Weg zum Preis', path: '/teilnahme', subLabel: 'IHR WEG ZUM PREIS', sub: [ - { label: 'Die 4 Schritte zum Preis', path: '/teilnahme#schritte' }, { label: 'Teilnahmevoraussetzungen', path: '/teilnahme#voraussetzungen' }, { label: 'Kriterien & Bewertung', path: '/teilnahme#kriterien' }, - { label: 'Vorschlag unterbreiten', path: '/teilnahme#bewerben' }, { label: 'Fristen & Termine', path: '/teilnahme#fristen' }, { label: 'Bewerbungsformular', path: '/teilnahme#bewerben' }, ], @@ -53,30 +48,24 @@ const NAV: NavItem[] = [ { label: 'Was ist der Preis?', path: '/der-bmp#was-ist' }, { label: 'Geschichte & Werte', path: '/der-bmp#geschichte' }, { label: 'Vorteile der Auszeichnung', path: '/der-bmp#vorteile' }, - { label: 'Bayerischer Mittelstand', path: '/der-bmp#mittelstand' }, - { label: 'Jetzt bewerben →', path: '/teilnahme' }, ], }, { key: 'netzwerk', label: 'Netzwerk', path: '/netzwerk', subLabel: 'NETZWERK', sub: [ - { label: 'Das Netzwerk', path: '/netzwerk' }, { label: 'Jury-Mitglieder', path: '/netzwerk#jury' }, { label: 'Partner & Sponsoren', path: '/netzwerk#partner' }, { label: 'Schirmherrschaft', path: '/netzwerk#schirmherrschaft' }, { label: 'Mitglied werden', path: '/mitglied-werden' }, - { label: 'Sponsoring-Anfrage →', path: '/netzwerk#sponsoring' }, ], }, { key: 'presse', label: 'Presse', path: '/presse', subLabel: 'PRESSE', sub: [ - { label: 'Aktuelles & News', path: '/presse' }, { label: 'Events & Gala', path: '/presse#events' }, { label: 'Downloads & Impressionen', path: '/presse#downloads' }, - { label: 'Pressekontakt →', path: '/kontakt' }, ], }, ]; @@ -184,7 +173,7 @@ const Layout: React.FC = ({ children }) => { return () => clearTimeout(t); }, []); - // Hide floating CTA when the form section (#bewerben) is in view — homepage only + // Hide floating CTA when the form section (#bewerben) is in view – homepage only useEffect(() => { setFormVisible(false); if (location.pathname !== '/') return; @@ -217,7 +206,7 @@ const Layout: React.FC = ({ children }) => { {/* ═══════════════════════════════════════════════════════════ */} - {/* ══ DESKTOP CHROME (≥768px) — original top bar + overlay ══ */} + {/* ══ DESKTOP CHROME (≥768px) – original top bar + overlay ══ */} {/* ═══════════════════════════════════════════════════════════ */} {!isMobile && ( <> @@ -231,7 +220,7 @@ const Layout: React.FC = ({ children }) => { transition:'transform 0.45s cubic-bezier(0.22,1,0.36,1)', }}> - {/* LEFT — logo */} + {/* LEFT – logo */}
= ({ children }) => {
- {/* CENTER — hamburger */} + {/* CENTER – hamburger */}
- {/* RIGHT — social + lang */} + {/* RIGHT – social + lang */}
{SOCIAL.map(s => )} @@ -297,7 +286,7 @@ const Layout: React.FC = ({ children }) => { >
- {/* TOP — tagline + logo */} + {/* TOP – tagline + logo */}
@@ -312,14 +301,14 @@ const Layout: React.FC = ({ children }) => {
- {/* BOTTOM — 3 columns */} + {/* BOTTOM – 3 columns */}
- {/* LEFT — main nav */} + {/* LEFT – main nav */}
    {NAV.map((item, idx) => ( @@ -354,7 +343,7 @@ const Layout: React.FC = ({ children }) => {
- {/* MIDDLE — subnav */} + {/* MIDDLE – subnav */}
{NAV.map(item => (
= ({ children }) => { ))}
- {/* RIGHT — utilities */} + {/* RIGHT – utilities */}
@@ -471,7 +460,7 @@ const Layout: React.FC = ({ children }) => { {/* ═══════════════════════════════════════════════════════════ */} - {/* ══ MOBILE CHROME (<768px) — top bar + fullscreen overlay ══ */} + {/* ══ MOBILE CHROME (<768px) – top bar + fullscreen overlay ══ */} {/* ═══════════════════════════════════════════════════════════ */} {isMobile && ( <> @@ -735,7 +724,7 @@ const Layout: React.FC = ({ children }) => { alignItems: 'flex-start', }}> - {/* Decorative year — desktop only */} + {/* Decorative year – desktop only */} {!isMobile && (
= ({ children }) => {
- {/* Gold vertical separator — desktop only */} + {/* Gold vertical separator – desktop only */} {!isMobile && (
= ({ children }) => {
- {/* Gold vertical separator — desktop only */} + {/* Gold vertical separator – desktop only */} {!isMobile && (
- {value || "—"} + {value || "–"}
); @@ -513,7 +513,7 @@ function ProgressBar({ current, total }: { current: number; total: number }) { })}
- {/* Step labels — full list on desktop; on mobile only the active label + {/* Step labels – full list on desktop; on mobile only the active label (the 5-up text row would overflow / wrap on narrow screens) */} {isMobile ? (
void; errors: Errors; @@ -742,7 +742,7 @@ function Step1({ data, onChange, errors }: { ); } -// ─── STEP 2 — KONTAKT ───────────────────────────────────────────────────────── +// ─── STEP 2 – KONTAKT ───────────────────────────────────────────────────────── function Step2({ data, onChange, errors }: { data: FormData; onChange: (k: keyof FormData, v: string | boolean) => void; errors: Errors; @@ -785,7 +785,7 @@ function Step2({ data, onChange, errors }: { ); } -// ─── STEP 3 — DETAILS ───────────────────────────────────────────────────────── +// ─── STEP 3 – DETAILS ───────────────────────────────────────────────────────── function Step3({ data, onChange, errors }: { data: FormData; onChange: (k: keyof FormData, v: string | boolean) => void; errors: Errors; @@ -857,7 +857,7 @@ function Step3({ data, onChange, errors }: { ); } -// ─── STEP 4 — SEPA ──────────────────────────────────────────────────────────── +// ─── STEP 4 – SEPA ──────────────────────────────────────────────────────────── function Step4({ data, onChange, errors }: { data: FormData; onChange: (k: keyof FormData, v: string | boolean) => void; errors: Errors; @@ -929,7 +929,7 @@ function Step4({ data, onChange, errors }: { ); } -// ─── STEP 5 — SUMMARY + CONSENT ─────────────────────────────────────────────── +// ─── STEP 5 – SUMMARY + CONSENT ─────────────────────────────────────────────── function Step5({ data, onChange, errors }: { data: FormData; onChange: (k: keyof FormData, v: string | boolean) => void; errors: Errors; @@ -943,7 +943,7 @@ function Step5({ data, onChange, errors }: { - + diff --git a/src/components/ui/munich-skyline-bg.tsx b/src/components/ui/munich-skyline-bg.tsx index 2ae16e8..bd19919 100644 --- a/src/components/ui/munich-skyline-bg.tsx +++ b/src/components/ui/munich-skyline-bg.tsx @@ -3,7 +3,7 @@ import React, { useEffect, useRef } from 'react'; /** * MunichSkylineBg * Drop inside any light section (position: relative required on parent). - * Uses backgroundPositionY for parallax — no transform, no GPU compositing layer. + * Uses backgroundPositionY for parallax – no transform, no GPU compositing layer. * No mixBlendMode to avoid Safari compositing bleed into sibling elements. */ const MunichSkylineBg: React.FC = () => { diff --git a/src/pages/About.tsx b/src/pages/About.tsx index e397599..afc01b2 100644 --- a/src/pages/About.tsx +++ b/src/pages/About.tsx @@ -86,7 +86,7 @@ const About: React.FC = () => {
- {/* Left — text on cream */} + {/* Left – text on cream */}
{!isMobile && ( <> @@ -103,7 +103,7 @@ const About: React.FC = () => {

Entstanden aus einer Initiative bayerischer Wirtschaftsvertreter, ehrt der Preis heute jährlich die Leuchttürme unserer Wirtschaft.

- {/* Key facts — moved above the copy on mobile */} + {/* Key facts – moved above the copy on mobile */}
{[ { val: '2005', label: 'Gegründet' }, @@ -118,7 +118,7 @@ const About: React.FC = () => {
- {/* Right — full-bleed image (+ heading on mobile) */} + {/* Right – full-bleed image (+ heading on mobile) */}
{
- {/* Heading overlay — mobile only */} + {/* Heading overlay – mobile only */} {isMobile && (
Was ist der Preis? @@ -137,7 +137,7 @@ const About: React.FC = () => {
)} - {/* Decorative label — desktop only */} + {/* Decorative label – desktop only */} {!isMobile && (
BMP Preisverleihung · München
@@ -152,7 +152,7 @@ const About: React.FC = () => {
- {/* Left — full-bleed image (+ heading on mobile) */} + {/* Left – full-bleed image (+ heading on mobile) */}
{
)} - {/* Heading overlay — mobile only */} + {/* Heading overlay – mobile only */} {isMobile && (
Relevanz & Zielsetzung @@ -178,7 +178,7 @@ const About: React.FC = () => { )}
- {/* Right — text on navy */} + {/* Right – text on navy */}
{!isMobile && ( <> @@ -245,9 +245,9 @@ const About: React.FC = () => {
- {/* LEFT — navy, timeline */} + {/* LEFT – navy, timeline */}
- {/* Ghost "20" watermark — desktop only */} + {/* Ghost "20" watermark – desktop only */} {!isMobile &&
20
} Geschichte & Meilensteine @@ -279,7 +279,7 @@ const About: React.FC = () => {
- {/* RIGHT — cream, Zielsetzung */} + {/* RIGHT – cream, Zielsetzung */}
Zielsetzung

@@ -326,7 +326,7 @@ const About: React.FC = () => {

- {/* Editorial rows — no cards, pure typography */} + {/* Editorial rows – no cards, pure typography */} {[ { num: '01', diff --git a/src/pages/BlogDetail.tsx b/src/pages/BlogDetail.tsx index 93073f4..3efe648 100644 --- a/src/pages/BlogDetail.tsx +++ b/src/pages/BlogDetail.tsx @@ -121,7 +121,7 @@ export default function BlogDetail() {
- {/* LEFT — article text */} + {/* LEFT – article text */}
{/* Lead */}

- {/* RIGHT — sticky sidebar */} + {/* RIGHT – sticky sidebar */}
@@ -73,7 +73,7 @@ const Contact: React.FC = () => {
- {/* Left — info panel */} + {/* Left – info panel */}

Direktkontakt @@ -112,7 +112,7 @@ const Contact: React.FC = () => { {/* Divider */} {!isMobile &&

} - {/* Right — gold form panel */} + {/* Right – gold form panel */}
- {/* Left — sticky label */} + {/* Left – sticky label */}

Antworten @@ -208,7 +208,7 @@ const Contact: React.FC = () => {

- {/* Right — accordion */} + {/* Right – accordion */}
{faqs.map((faq, idx) => { const isOpen = openFaq === idx; diff --git a/src/pages/Datenschutz.tsx b/src/pages/Datenschutz.tsx index a02bf01..80bc67c 100644 --- a/src/pages/Datenschutz.tsx +++ b/src/pages/Datenschutz.tsx @@ -65,7 +65,7 @@ export default function Datenschutz() { {/* ── BODY ──────────────────────────────────────────────────────────── */}
- {/* LEFT — sticky TOC */} + {/* LEFT – sticky TOC */} {!isMobile && ( )} - {/* RIGHT — content */} + {/* RIGHT – content */}
@@ -204,7 +204,7 @@ export default function Datenschutz() {
  • Kommunikationsdaten: Browsertyp, Betriebssystem, IP-Adressen
  • Mit der Verarbeitung dieser Daten wollen wir das Nutzerverhalten in zusammengefasster Form analysieren, um die Darstellung und den Inhalt unserer Website zu verbessern.

    - Rechtsgrundlage: berechtigtes Interesse gemäß Art. 6 Abs. 1 lit. f. DSGVO — insbesondere an der Durchführung von Webmessungen zur Verbesserung unserer Website. + Rechtsgrundlage: berechtigtes Interesse gemäß Art. 6 Abs. 1 lit. f. DSGVO – insbesondere an der Durchführung von Webmessungen zur Verbesserung unserer Website.

    Die erhobenen Daten werden mit unserem Website-Hosting-Anbieter geteilt und innerhalb der EU verarbeitet.

    diff --git a/src/pages/EventDetail.tsx b/src/pages/EventDetail.tsx index 34a7702..c7aca46 100644 --- a/src/pages/EventDetail.tsx +++ b/src/pages/EventDetail.tsx @@ -135,7 +135,7 @@ export default function EventDetail() {

    - {/* Right — key facts */} + {/* Right – key facts */}
    {[ { icon: Calendar, label: event.date }, @@ -158,7 +158,7 @@ export default function EventDetail() {
    - {/* Left — Description + Eckdaten */} + {/* Left – Description + Eckdaten */}
    {/* Description */}
    @@ -223,7 +223,7 @@ export default function EventDetail() {
    - {/* Right — Live Updates Feed (sticky on desktop, static on mobile) */} + {/* Right – Live Updates Feed (sticky on desktop, static on mobile) */}
    {/* Header */}
    diff --git a/src/pages/FormularUpload.tsx b/src/pages/FormularUpload.tsx index ada6f83..bdc7995 100644 --- a/src/pages/FormularUpload.tsx +++ b/src/pages/FormularUpload.tsx @@ -53,7 +53,7 @@ export default function FormularUpload() {
    - BMP 2026 — Bewerbungsportal + BMP 2026 – Bewerbungsportal

    UNTERLAGEN
    EINREICHEN @@ -118,7 +118,7 @@ export default function FormularUpload() {
      {items.map((item, j) => (
    • - + {item}
    • ))} diff --git a/src/pages/Home.tsx b/src/pages/Home.tsx index 4c732ac..bc575e0 100644 --- a/src/pages/Home.tsx +++ b/src/pages/Home.tsx @@ -58,7 +58,7 @@ const STATUS_PHASES: StatusPhase[] = [ pulse: true, phase: 'Bewerbungsphase 2026', headline: 'BEWERBEN SIE SICH JETZT.', - body: 'Die Bewerbungsphase 2026 ist eröffnet — es ist noch nicht zu spät. Reichen Sie Ihre Unterlagen bis zum 30. Juni kostenlos ein und zeigen Sie, was den bayerischen Mittelstand ausmacht.', + body: 'Die Bewerbungsphase 2026 ist eröffnet – es ist noch nicht zu spät. Reichen Sie Ihre Unterlagen bis zum 30. Juni kostenlos ein und zeigen Sie, was den bayerischen Mittelstand ausmacht.', cta: { label: 'Jetzt kostenlos bewerben', to: '/teilnahme' }, accent: '#EFBF04', bg: '#020A1E', @@ -84,7 +84,7 @@ const STATUS_PHASES: StatusPhase[] = [ pulse: false, phase: 'Preisverleihung · Oktober 2026', headline: 'DER BMP 2026 WAR EIN ERFOLG.', - body: 'Wir danken allen 247 Bewerberinnen und Bewerbern für Mut und Exzellenz. Drei außergewöhnliche Unternehmen wurden in München ausgezeichnet — ein unvergesslicher Abend.', + body: 'Wir danken allen 247 Bewerberinnen und Bewerbern für Mut und Exzellenz. Drei außergewöhnliche Unternehmen wurden in München ausgezeichnet – ein unvergesslicher Abend.', cta: { label: 'Alle Preisträger ansehen', to: '/preistraeger' }, accent: '#EFBF04', bg: '#06090F', @@ -143,8 +143,8 @@ const Home: React.FC = () => {
      - - Bewerbungsphase 2026 Eröffnet + + Bewerbungsphase 2026 geschlossen

      @@ -192,9 +192,9 @@ const Home: React.FC = () => { {/* Partner Bar */}
      - {/* Left: label — stays put */} + {/* Left: label – stays put */} Unsere Partner - {/* Right: ticker — fixed window, exactly 4 logos wide */} + {/* Right: ticker – fixed window, exactly 4 logos wide */}
      @@ -209,9 +209,9 @@ const Home: React.FC = () => {
      - {/* Left (desktop) / Bottom (mobile) — text block (light bg, dark text) */} + {/* Left (desktop) / Bottom (mobile) – text block (light bg, dark text) */}
      - {/* Eyebrow + heading — desktop only (on mobile these are overlaid on the image) */} + {/* Eyebrow + heading – desktop only (on mobile these are overlaid on the image) */} {!isMobile && ( <> Schnell-Check @@ -257,7 +257,7 @@ const Home: React.FC = () => {
      - {/* Right (desktop) / Top (mobile) — image; on mobile the heading is overlaid here */} + {/* Right (desktop) / Top (mobile) – image; on mobile the heading is overlaid here */}
      {
      - {/* Heading overlay — mobile only */} + {/* Heading overlay – mobile only */} {isMobile && (
      Schnell-Check @@ -277,17 +277,17 @@ const Home: React.FC = () => {

      )} - {/* Gold accent line — bottom edge */} + {/* Gold accent line – bottom edge */}

    - {/* Intro Section — editorial split, no radius, no floating badge */} + {/* Intro Section – editorial split, no radius, no floating badge */}
    - {/* Left — full-bleed image with stats overlay (+ heading on mobile) */} + {/* Left – full-bleed image with stats overlay (+ heading on mobile) */}
    {
    - {/* Heading overlay — mobile only (bottom-left) */} + {/* Heading overlay – mobile only (bottom-left) */} {isMobile && (
    Ein Gewinn für alle @@ -307,7 +307,7 @@ const Home: React.FC = () => {
    )} - {/* Stats bottom-left — desktop only (mobile shows them below the image) */} + {/* Stats bottom-left – desktop only (mobile shows them below the image) */} {!isMobile && (
    {[['20+', 'Jahre Exzellenz'], ['0 €', 'Teilnahmegebühr'], ['100%', 'Unabhängig']].map(([v, l]) => ( @@ -320,7 +320,7 @@ const Home: React.FC = () => { )}
    - {/* Right — editorial text */} + {/* Right – editorial text */}
    {!isMobile && ( <> @@ -330,7 +330,7 @@ const Home: React.FC = () => { )} - {/* Stats row — mobile only, below the image */} + {/* Stats row – mobile only, below the image */} {isMobile && (
    {[['20+', 'Jahre Exzellenz'], ['0 €', 'Teilnahmegebühr'], ['100%', 'Unabhängig']].map(([v, l]) => ( @@ -363,7 +363,7 @@ const Home: React.FC = () => { {/* Status Phase Slider */} - {/* Winners Grid — neue Preisträger-Übersicht */} + {/* Winners Grid – neue Preisträger-Übersicht */}
    @@ -403,12 +403,12 @@ const Home: React.FC = () => { - {/* Benefits Section — editorial split */} + {/* Benefits Section – editorial split */}
    - {/* Left — text on cream */} + {/* Left – text on cream */}
    {!isMobile && ( <> @@ -419,12 +419,12 @@ const Home: React.FC = () => { )} - {/* Numbered rows — no cards, no shadows */} + {/* Numbered rows – no cards, no shadows */}
    {[ { num: '01', title: 'Netzwerk', desc: 'Direkter Zugang zu Entscheidern aus Staatsregierung, Wirtschaft und Wissenschaft.' }, { num: '02', title: 'Sichtbarkeit', desc: 'Breite mediale Begleitung durch TV-, Radio- und Print-Partner bayernweit.' }, - { num: '03', title: 'Bestätigung', desc: 'Ein unabhängiger Qualitätsnachweis — das stärkste Siegel für Ihren Marktauftritt.' }, + { num: '03', title: 'Bestätigung', desc: 'Ein unabhängiger Qualitätsnachweis – das stärkste Siegel für Ihren Marktauftritt.' }, ].map((item, i) => (
    {
    - {/* Right — full-bleed photo (+ heading on mobile) */} + {/* Right – full-bleed photo (+ heading on mobile) */}
    {
    - {/* Heading overlay — mobile only (bottom-left) */} + {/* Heading overlay – mobile only (bottom-left) */} {isMobile && (
    Mehr als nur ein Preis @@ -461,7 +461,7 @@ const Home: React.FC = () => {
    )} - {/* Bottom-left label — desktop only */} + {/* Bottom-left label – desktop only */} {!isMobile && (
    BMP Gala-Netzwerk
    @@ -472,14 +472,14 @@ const Home: React.FC = () => {
    - {/* CTA Section — with embedded form */} + {/* CTA Section – with embedded form */}
    {/* Subtle radial glow behind left copy */}
    - {/* Left — pitch copy */} + {/* Left – pitch copy */}
    Chance ergreifen

    @@ -487,7 +487,7 @@ const Home: React.FC = () => {

    - Werden Sie Teil der Wall of Fame des bayerischen Mittelstands — vollständig kostenfrei. + Werden Sie Teil der Wall of Fame des bayerischen Mittelstands – vollständig kostenfrei.

    {/* Benefit rows */} @@ -512,7 +512,7 @@ const Home: React.FC = () => { {/* Divider */} {!isMobile &&
    } - {/* Right — gold premium panel */} + {/* Right – gold premium panel */}
    {/* Premium award crosshatch pattern */} @@ -525,7 +525,7 @@ const Home: React.FC = () => { - {/* Inner vignette — edges slightly deeper gold */} + {/* Inner vignette – edges slightly deeper gold */}
    {/* Award ceremony photo */} @@ -558,7 +558,7 @@ const Home: React.FC = () => { {/* Footnote row */}
    - Kostenlos und unverbindlich — + Kostenlos und unverbindlich – keine Teilnahmegebühr
    @@ -788,7 +788,7 @@ function StatusSlideCard({ phase, isMobile }: { phase: StatusPhase; isMobile: bo
    )} - {/* Membership CTA — for active phases only */} + {/* Membership CTA – for active phases only */} {phase.num !== '03' && (
    diff --git a/src/pages/Impressum.tsx b/src/pages/Impressum.tsx index 2b19af8..a8bceea 100644 --- a/src/pages/Impressum.tsx +++ b/src/pages/Impressum.tsx @@ -66,7 +66,7 @@ export default function Impressum() { {/* ── BODY ──────────────────────────────────────────────────────────── */}
    - {/* LEFT — sticky TOC */} + {/* LEFT – sticky TOC */} {!isMobile && ( )} - {/* RIGHT — content */} + {/* RIGHT – content */}
    @@ -167,7 +167,7 @@ export default function Impressum() { -

    Wenn Sie uns personenbezogene Daten überlassen haben, können Sie diese jederzeit im Benutzerprofil wieder ändern und löschen. Für eine vollständige Löschung des Accounts bitte an den Webmaster wenden. Bis zu diesem Zeitpunkt erfolgte Beiträge in Foren, Kommentaren, Terminankündigungen und Artikeln bleiben allerdings unter Umständen erhalten — Informationen dazu auch bei den allgemeinen Nutzungsbedingungen.

    +

    Wenn Sie uns personenbezogene Daten überlassen haben, können Sie diese jederzeit im Benutzerprofil wieder ändern und löschen. Für eine vollständige Löschung des Accounts bitte an den Webmaster wenden. Bis zu diesem Zeitpunkt erfolgte Beiträge in Foren, Kommentaren, Terminankündigungen und Artikeln bleiben allerdings unter Umständen erhalten – Informationen dazu auch bei den allgemeinen Nutzungsbedingungen.

    diff --git a/src/pages/MitgliedWerden.tsx b/src/pages/MitgliedWerden.tsx index 30bca36..daba486 100644 --- a/src/pages/MitgliedWerden.tsx +++ b/src/pages/MitgliedWerden.tsx @@ -270,7 +270,7 @@ function BeitragsrechnerSection({ isMobile }: { isMobile: boolean }) { ); } -// ── PDF Download Section — editorial split strip ────────────────────────────── +// ── PDF Download Section – editorial split strip ────────────────────────────── function PDFDownloadSection({ isMobile }: { isMobile: boolean }) { const [hover, setHover] = useState<'online' | 'pdf' | null>(null); @@ -291,7 +291,7 @@ function PDFDownloadSection({ isMobile }: { isMobile: boolean }) { gridTemplateColumns: isMobile ? '1fr' : '1fr 1px 1fr', minHeight: isMobile ? undefined : 140, }}> - {/* Left — online */} + {/* Left – online */} )} - {/* Right — PDF */} + {/* Right – PDF */} { return (
    - {/* ── SECTION 1 — Minimal Header ──────────────────────────────────────── */} + {/* ── SECTION 1 – Minimal Header ──────────────────────────────────────── */}
    {
    - {/* ── SECTION 2 — Hero ────────────────────────────────────────────────── */} + {/* ── SECTION 2 – Hero ────────────────────────────────────────────────── */}
    {

    - {/* Right col — typographic stat block */} + {/* Right col – typographic stat block */} {!isMobile && (
    { />
    - {/* ── SECTION 3 — Benefit cards ───────────────────────────────────────── */} + {/* ── SECTION 3 – Benefit cards ───────────────────────────────────────── */}
    { } title="Sichtbarkeit" - body="Als Vereinsmitglied wirst du im BMP-Ökosystem sichtbar — auf Events, in Publikationen und online." + body="Als Vereinsmitglied wirst du im BMP-Ökosystem sichtbar – auf Events, in Publikationen und online." isLast={false} isMobile={isMobile} /> @@ -981,7 +981,7 @@ const MitgliedWerden: React.FC = () => {
    - {/* ── SECTION 4 — Über den Verein ─────────────────────────────────────── */} + {/* ── SECTION 4 – Über den Verein ─────────────────────────────────────── */}
    { }} > Unsere Mitglieder sind Unternehmer:innen, Wissenschaftler:innen, Verbände und - Einzelpersonen — verbunden durch das Ziel, den Mittelstand als Rückgrat der + Einzelpersonen – verbunden durch das Ziel, den Mittelstand als Rückgrat der bayerischen Wirtschaft zu stärken.

    {

    - {/* ── SECTION 5 — Beitragsrechner ─────────────────────────────────────── */} + {/* ── SECTION 5 – Beitragsrechner ─────────────────────────────────────── */} {/* ── Antrag-Wahl Strip ────────────────────────────────────────────────── */} - {/* ── SECTION 6 — Formular ────────────────────────────────────────────── */} + {/* ── SECTION 6 – Formular ────────────────────────────────────────────── */}
    { overflow: isMobile ? 'visible' : 'hidden', }} > - {/* Left — pitch */} + {/* Left – pitch */}
    { }} /> - {/* Right — wizard */} + {/* Right – wizard */}
    {!isMobile && (
    @@ -1330,7 +1330,7 @@ const MitgliedWerden: React.FC = () => {
    - {/* ── SECTION 7 — Testimonials ────────────────────────────────────────── */} + {/* ── SECTION 7 – Testimonials ────────────────────────────────────────── */}
    { role="Verbandsvertreterin" /> { {/* ── FAQ ─────────────────────────────────────────────────────────────── */} - {/* ── SECTION 8 — Bottom CTA ──────────────────────────────────────────── */} + {/* ── SECTION 8 – Bottom CTA ──────────────────────────────────────────── */}
    = ({ member, idx } {member.name}
    -
    -
    {member.name}
    -
    {member.role}
    -
    -
    {member.bio}
    +
    +
    {member.name}
    +
    {member.role}
    +
    +
    {member.bio}
    +
    +
    + ); +}; + +// ── JuryChairCard (Vorsitz – prominent) ─────────────────────────────────────── + +const JuryChairCard: React.FC<{ member: JuryMember }> = ({ member }) => { + const [hovered, setHovered] = useState(false); + const isMobileCard = useIsMobile(); + return ( +
    setHovered(true)} + onMouseLeave={() => setHovered(false)} + style={{ + display: 'grid', + gridTemplateColumns: isMobileCard ? '1fr' : '380px 1fr', + gap: 0, + background: 'rgba(255,255,255,0.03)', + border: `1px solid ${GOLD}40`, + borderRadius: 20, + overflow: 'hidden', + }} + > +
    + {member.name} +
    +
    +
    + + Jury-Vorsitz + +
    {member.name}
    +
    {member.role}
    +
    +
    {member.bio}
    ); @@ -212,7 +248,7 @@ function PartnerModal({ partner, onClose }: { partner: Partner; onClose: () => v {/* Gradient to white */}
    - {/* Category badge — top left */} + {/* Category badge – top left */}
    v
    - {/* Social + Close — top right */} + {/* Social + Close – top right */}
    {partner.linkedin && ( v
    - {/* Logo box — bottom left (overflows hero) */} + {/* Logo box – bottom left (overflows hero) */}
    { }, { id: 'wwk', name: 'WWK', role: 'Hauptsponsor', tier: 1, - desc: 'Eine starke Gemeinschaft — Lebensversicherungsgruppe mit bayerischen Wurzeln.', - fullDesc: 'Die WWK Lebensversicherung a. G. ist eine der leistungsstärksten deutschen Lebensversicherungsgruppen. Als Münchner Traditionsunternehmen verbindet die WWK tiefe bayerische Verwurzelung mit finanzieller Stärke — Werte, die sie mit dem Bayerischen Mittelstandspreis teilt.', + desc: 'Eine starke Gemeinschaft – Lebensversicherungsgruppe mit bayerischen Wurzeln.', + fullDesc: 'Die WWK Lebensversicherung a. G. ist eine der leistungsstärksten deutschen Lebensversicherungsgruppen. Als Münchner Traditionsunternehmen verbindet die WWK tiefe bayerische Verwurzelung mit finanzieller Stärke – Werte, die sie mit dem Bayerischen Mittelstandspreis teilt.', logo: (WWK), industry: 'Lebensversicherung', location: 'München, Bayern', website: 'wwk.de', linkedin: 'https://linkedin.com/company/wwk-versicherung', }, @@ -407,7 +443,7 @@ const Netzwerk: React.FC = () => { /* ── TIER 2 · Medienpartner ──────────────────────────────── */ { id: 'radiogong', name: 'Radio Gong 96.3', role: 'Medienpartner', tier: 2, - desc: 'Der reichweitenstärkste Radiosender Münchens — Stimme des Mittelstands.', + desc: 'Der reichweitenstärkste Radiosender Münchens – Stimme des Mittelstands.', fullDesc: 'Radio Gong 96.3 ist der reichweitenstärkste Radiosender Münchens. Als Medienpartner des BMP sorgt er für Aufmerksamkeit für die Nominierten in Sendemitschnitten und redaktionellen Beiträgen.', logo: (Radio
    Gong 96.3
    ), industry: 'Medien', location: 'München', website: 'radiogong.com', @@ -423,8 +459,8 @@ const Netzwerk: React.FC = () => { /* ── TIER 3 · Weitere Sponsoren ──────────────────────────── */ { id: 'metzler', name: 'METZLER', role: 'Sponsor', tier: 3, - desc: 'Älteste Privatbank Deutschlands — Unabhängigkeit seit 1674.', - fullDesc: 'B. Metzler seel. Sohn & Co. KGaA ist die älteste deutsche Privatbank in Familienbesitz — seit über 350 Jahren unabhängig. Ihr Engagement für den BMP unterstreicht die tiefe Verbundenheit mit dem Mittelstand, dessen Werte wie Verlässlichkeit, Substanz und Langfristigkeit Metzler selbst verkörpert.', + desc: 'Älteste Privatbank Deutschlands – Unabhängigkeit seit 1674.', + fullDesc: 'B. Metzler seel. Sohn & Co. KGaA ist die älteste deutsche Privatbank in Familienbesitz – seit über 350 Jahren unabhängig. Ihr Engagement für den BMP unterstreicht die tiefe Verbundenheit mit dem Mittelstand, dessen Werte wie Verlässlichkeit, Substanz und Langfristigkeit Metzler selbst verkörpert.', logo: (METZLER), industry: 'Privatbankwesen', location: 'Frankfurt a. M.', website: 'metzler.com', linkedin: 'https://linkedin.com/company/metzler', }, @@ -437,7 +473,7 @@ const Netzwerk: React.FC = () => { }, { id: 'fristads', name: 'Fristads', role: 'Sponsor', tier: 3, - desc: 'Premium-Arbeitsbekleidung — Funktion, Qualität und Design.', + desc: 'Premium-Arbeitsbekleidung – Funktion, Qualität und Design.', fullDesc: 'Fristads steht für hochwertige, funktionale Arbeitsbekleidung, die Schutz, Komfort und Design vereint. Als Sponsor des Bayerischen Mittelstandspreises unterstützt das Unternehmen die Auszeichnung herausragender mittelständischer Betriebe.', logo: (FRISTADS), industry: 'Workwear & Textil', location: 'Deutschland', website: 'fristads.com', @@ -540,7 +576,7 @@ const Netzwerk: React.FC = () => { />
    - {/* Grußwort — Ilse Aigner */} + {/* Grußwort – Ilse Aigner */}
    @@ -555,7 +591,7 @@ const Netzwerk: React.FC = () => { "Der Bayerische Mittelstandspreis steht für das, was Bayern stark macht: Unternehmergeist, Verantwortung und Qualität. Mit großer Freude übernehme ich erneut die Schirmherrschaft für diesen bedeutenden Preis."
    - — Ilse Aigner MdL, Präsidentin des Bayerischen Landtags + – Ilse Aigner MdL, Präsidentin des Bayerischen Landtags
    @@ -572,7 +608,7 @@ const Netzwerk: React.FC = () => {
    )} {isMobile ? ( - /* Mobile: one cohesive navy module — copy + compact stat strip */ + /* Mobile: one cohesive navy module – copy + compact stat strip */
    Wer entscheidet?

    @@ -580,7 +616,7 @@ const Netzwerk: React.FC = () => {

    - Die Jury des Bayerischen Mittelstandspreises besteht ausschließlich aus ehrenamtlich tätigen Expertinnen und Experten. Kein Mitglied steht in wirtschaftlicher Verbindung zu einem Bewerber — Transparenz und Unparteilichkeit sind die Grundpfeiler unseres Verfahrens. + Die Jury des Bayerischen Mittelstandspreises besteht ausschließlich aus ehrenamtlich tätigen Expertinnen und Experten. Kein Mitglied steht in wirtschaftlicher Verbindung zu einem Bewerber – Transparenz und Unparteilichkeit sind die Grundpfeiler unseres Verfahrens.

    {/* Stat strip */}
    @@ -598,7 +634,7 @@ const Netzwerk: React.FC = () => {
    ) : ( <> - {/* Left — Cream, stats */} + {/* Left – Cream, stats */}
    11
    @@ -615,7 +651,7 @@ const Netzwerk: React.FC = () => {
    Unabhängig & ehrenamtlich
    - {/* Right — Navy, editorial copy */} + {/* Right – Navy, editorial copy */}
    Wer entscheidet?

    @@ -623,7 +659,7 @@ const Netzwerk: React.FC = () => {

    - Die Jury des Bayerischen Mittelstandspreises besteht ausschließlich aus ehrenamtlich tätigen Expertinnen und Experten. Kein Mitglied steht in wirtschaftlicher Verbindung zu einem Bewerber — Transparenz und Unparteilichkeit sind die Grundpfeiler unseres Verfahrens. + Die Jury des Bayerischen Mittelstandspreises besteht ausschließlich aus ehrenamtlich tätigen Expertinnen und Experten. Kein Mitglied steht in wirtschaftlicher Verbindung zu einem Bewerber – Transparenz und Unparteilichkeit sind die Grundpfeiler unseres Verfahrens.

    @@ -642,11 +678,25 @@ const Netzwerk: React.FC = () => { Unabhängige Expertinnen und Experten aus Wirtschaft, Wissenschaft und Verbänden, für einen vollständig unabhängigen Bewertungsprozess.

    -
    - {juryMembers.map((member, idx) => ( + {/* ── Prominenter Vorsitz-Bereich ─────────────────────────────────── */} + {/* TODO: echten Jury-Vorsitzenden bestätigen (Name & Foto sind Platzhalter) */} +
    + +
    + + {/* ── Übrige Jury-Mitglieder ──────────────────────────────────────── */} +
    + {juryMembers.slice(1).map((member, idx) => ( ))}
    + + {/* ── Hinweis: Doppelrolle Jury / Partner (#179) ──────────────────── */} +
    +

    + Hinweis: Einzelne Persönlichkeiten engagieren sich sowohl in der Jury als auch als Partner des BMP – beide Rollen werden auf dieser Seite getrennt ausgewiesen. +

    +
    @@ -671,7 +721,7 @@ const Netzwerk: React.FC = () => {

    - Die Jury des BMP ist vollständig von wirtschaftlichen Interessen unabhängig. Jede Entscheidung wird transparent nachvollzogen — das ist unser Versprechen an die Unternehmen Bayerns. + Die Jury des BMP ist vollständig von wirtschaftlichen Interessen unabhängig. Jede Entscheidung wird transparent nachvollzogen – das ist unser Versprechen an die Unternehmen Bayerns.

    @@ -687,14 +737,14 @@ const Netzwerk: React.FC = () => {
    Netzwerkqualität -

    PARTNER & SPONSOREN.

    +

    PARTNER & SPONSOREN

    Partner in drei Kategorien: Hauptsponsoren, Medienpartner und weitere Sponsoren. Klicken für Details.

    - {/* Tiered grid — continuous, ranks marked by label bars */} + {/* Tiered grid – continuous, ranks marked by label bars */}
    {([ { tier: 1 as const, label: 'Hauptsponsoren', note: 'Premium', variant: 'lg' as const, cols: isMobile ? 1 : 2 }, @@ -721,13 +771,13 @@ const Netzwerk: React.FC = () => { display: 'flex', flexDirection: 'column', }}>
    - {/* Left — pitch */} + {/* Left – pitch */}
    Wachstum durch Partnerschaft

    WIR FREUEN UNS ÜBER NEUE SPONSOREN.

    - Positionieren Sie Ihre Marke im exklusivsten Netzwerk des bayerischen Mittelstands — mit maßgeschneiderten Sponsoring-Paketen. + Positionieren Sie Ihre Marke im exklusivsten Netzwerk des bayerischen Mittelstands – mit maßgeschneiderten Sponsoring-Paketen.

    {[ { num: '01', label: 'Markenpräsenz', sub: 'Bühne, Drucksachen, digitale Kanäle' }, @@ -745,7 +795,7 @@ const Netzwerk: React.FC = () => {
    {/* Center divider */} {!isMobile &&
    } - {/* Right — gold form panel */} + {/* Right – gold form panel */}
    - {/* ── TIMELINE — direkt nach Hero ──────────────────────────────────────── */} + {/* ── TIMELINE – direkt nach Hero ──────────────────────────────────────── */} {/* ── QUALIFICATIONS ───────────────────────────────────────────────────── */} @@ -141,10 +141,10 @@ const Participation: React.FC = () => { {/* ── CRITERIA / BEWERTUNG ─────────────────────────────────────────────── */}
    - {/* TOP: editorial split — image left (45%) / header right (55%) */} + {/* TOP: editorial split – image left (45%) / header right (55%) */}
    - {/* Left — full-bleed image with gradient blend into navy on the right (+ heading on mobile) */} + {/* Left – full-bleed image with gradient blend into navy on the right (+ heading on mobile) */}
    { {isMobile &&
    } {/* Bottom blend for continuity with grid below */}
    - {/* Heading overlay — mobile only */} + {/* Heading overlay – mobile only */} {isMobile && (
    Bewertung @@ -170,7 +170,7 @@ const Participation: React.FC = () => { )}
    - {/* Right — overline + headline + intro */} + {/* Right – overline + headline + intro */}
    {!isMobile && ( <> @@ -265,7 +265,7 @@ const Participation: React.FC = () => { {/* ── FORM SECTION ─────────────────────────────────────────────────────── */}
    - {/* Left — copy */} + {/* Left – copy */}
    Direktbewerbung

    @@ -295,7 +295,7 @@ const Participation: React.FC = () => { {/* Divider */} {!isMobile &&
    } - {/* Right — gold form panel */} + {/* Right – gold form panel */}
    - {/* 3 Wege — premium swipe cards on mobile, 3-col grid on desktop */} + {/* 3 Wege – premium swipe cards on mobile, 3-col grid on desktop */}
    {/* ── MOBILE: unified premium cards ── */} diff --git a/src/pages/Preistraeger.tsx b/src/pages/Preistraeger.tsx index cf33329..28a9c75 100644 --- a/src/pages/Preistraeger.tsx +++ b/src/pages/Preistraeger.tsx @@ -49,7 +49,7 @@ export default function Preistraeger() { {/* Filter Section */}
    - {/* #93: Headline entfernt — Seitenname steht bereits oben im Breadcrumb. */} + {/* #93: Headline entfernt – Seitenname steht bereits oben im Breadcrumb. */} {/* Year Tabs */}
    @@ -127,7 +127,7 @@ export default function Preistraeger() {
    - {activeYear} — {filtered.length} Preisträger:innen + {activeYear} – {filtered.length} Preisträger:innen
    diff --git a/src/pages/PreistraegerDetail.tsx b/src/pages/PreistraegerDetail.tsx index 412f24f..78baded 100644 --- a/src/pages/PreistraegerDetail.tsx +++ b/src/pages/PreistraegerDetail.tsx @@ -94,7 +94,7 @@ export default function PreistraegerDetail() { "

    - — {winner.quotePerson}, {winner.quoteRole} + – {winner.quotePerson}, {winner.quoteRole}

    diff --git a/src/pages/Press.tsx b/src/pages/Press.tsx index ce841c2..916264d 100644 --- a/src/pages/Press.tsx +++ b/src/pages/Press.tsx @@ -369,7 +369,7 @@ const Press: React.FC = () => { margin: 0, }} > - Von der Jurysitzung bis zur festlichen Gala — alle Veranstaltungen auf einen Blick. + Von der Jurysitzung bis zur festlichen Gala – alle Veranstaltungen auf einen Blick.

    @@ -389,7 +389,7 @@ const Press: React.FC = () => { cursor: 'pointer', }} > - {/* Left — image cell */} + {/* Left – image cell */}
    {event.title}
    @@ -397,7 +397,7 @@ const Press: React.FC = () => {
    - {/* Right — copy cell */} + {/* Right – copy cell */}
    {event.cat}

    {event.title}

    @@ -588,7 +588,7 @@ const Press: React.FC = () => { Download Presse-Kit
    - Print_BMP.zip — 1,5 MB + Print_BMP.zip – 1,5 MB