feat(i18n): translation files DE/EN/UK/RU + layout integration (closes #74)
This commit is contained in:
@@ -1,505 +1,331 @@
|
||||
<a href="#main-content" class="skip-link">Zum Inhalt springen</a>
|
||||
<nav id="navbar" role="navigation" aria-label="Hauptnavigation">
|
||||
<div class="nav-logo">Bahnhofstraße 10</div>
|
||||
<button class="nav-hamburger" aria-label="Navigation öffnen" aria-expanded="false">
|
||||
<span></span>
|
||||
</button>
|
||||
<ul class="nav-links">
|
||||
<li><a href="#galerie">Galerie</a></li>
|
||||
<li><a href="#grundriss">Grundriss</a></li>
|
||||
<li><a href="#miete">Miete</a></li>
|
||||
<li><a href="#lage">Lage</a></li>
|
||||
</ul>
|
||||
<button
|
||||
class="nav-cta"
|
||||
onclick="document.getElementById('kontakt').scrollIntoView({behavior:'smooth'})"
|
||||
>
|
||||
Jetzt anfragen
|
||||
</button>
|
||||
</nav>
|
||||
<div class="nav-mobile-overlay" aria-hidden="true"></div>
|
||||
|
||||
<section class="hero" id="hero">
|
||||
<div
|
||||
class="hero-bg"
|
||||
id="heroBg"
|
||||
style="background-image: url(/bilder/Außenansicht-2.webp)"
|
||||
></div>
|
||||
<div class="hero-overlay"></div>
|
||||
<div class="hero-content" id="heroContent">
|
||||
<div class="hero-tag">Zur Langzeitmiete · Ab sofort verfügbar</div>
|
||||
<h1>
|
||||
Großzügiges
|
||||
<br />
|
||||
<em>Einfamilienhaus</em>
|
||||
<br />
|
||||
in Schleusingen
|
||||
</h1>
|
||||
<div class="hero-meta">
|
||||
<span><strong>Schleusinger Bahnhofstraße 10</strong></span>
|
||||
<span>227 m² Wohnfläche</span>
|
||||
<span>6 Zimmer</span>
|
||||
<span>3 Etagen + Dachterrasse</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hero-scroll">
|
||||
<span>Entdecken</span>
|
||||
<div class="scroll-line"></div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<main id="main-content">
|
||||
<div class="facts-strip">
|
||||
<div class="fact">
|
||||
<div class="fact-val">227</div>
|
||||
<div class="fact-label">m² Wohnfläche</div>
|
||||
</div>
|
||||
<div class="fact">
|
||||
<div class="fact-val">6</div>
|
||||
<div class="fact-label">Zimmer</div>
|
||||
</div>
|
||||
<div class="fact">
|
||||
<div class="fact-val">3</div>
|
||||
<div class="fact-label">Etagen</div>
|
||||
</div>
|
||||
<div class="fact">
|
||||
<div class="fact-val">1.300</div>
|
||||
<div class="fact-label">€ Kaltmiete</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<section class="intro" id="intro">
|
||||
<div class="intro-text" data-animate>
|
||||
<div class="section-eyebrow">Das Objekt</div>
|
||||
<h2>Wohnen mit Charakter und viel Raum</h2>
|
||||
<p>
|
||||
Vermietet wird ein vollständiges Einfamilienhaus in ruhiger Lage von Schleusingen. Das
|
||||
Haus verbindet historischen Charme mit modernem Wohnkomfort auf drei großzügigen Etagen.
|
||||
</p>
|
||||
<p>
|
||||
Garage für zwei Fahrzeuge, großzügige Dachterrasse mit 35,8 m², vollausgestattete Küche,
|
||||
Vollbad sowie Abstell- und Nutzräume machen das Haus zu einem außergewöhnlichen
|
||||
Mietobjekt.
|
||||
</p>
|
||||
<div class="intro-stats">
|
||||
<div>
|
||||
<div class="istat-val">154,9 m²</div>
|
||||
<div class="istat-label">Nutzfläche</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="istat-val">35,8 m²</div>
|
||||
<div class="istat-label">Dachterrasse</div>
|
||||
</div>
|
||||
<div>
|
||||
<div class="istat-val">2 Stpl.</div>
|
||||
<div class="istat-label">Garage</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="intro-img" data-animate>
|
||||
<picture>
|
||||
<source srcset="/bilder/wohnzimmer2.webp" type="image/webp">
|
||||
<img src="/bilder/wohnzimmer2.png" alt="Wohnzimmer" loading="lazy" />
|
||||
</picture>
|
||||
<div class="intro-img-badge">Wohnzimmer · 42,6 m²</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="galerie" class="gallery-section" aria-label="Fotogalerie">
|
||||
<div class="gallery-header">
|
||||
<div>
|
||||
<div class="section-eyebrow">Fotogalerie</div>
|
||||
<h2>Einblicke ins Haus</h2>
|
||||
</div>
|
||||
</div>
|
||||
<div class="masonry-grid">
|
||||
<div class="grid-sizer"></div>
|
||||
|
||||
<div class="grid-item" data-img="/bilder/Außenansicht-2.webp" role="button" tabindex="0" aria-label="Außenansicht – Großansicht öffnen">
|
||||
<picture>
|
||||
<source srcset="/bilder/Außenansicht-2-small.webp" type="image/webp">
|
||||
<img src="/bilder/Außenansicht-2-small.png" alt="Außenansicht des Einfamilienhauses" loading="lazy" />
|
||||
</picture>
|
||||
<span class="grid-item-label">Außenansicht</span>
|
||||
</div>
|
||||
<div class="grid-item" data-img="/bilder/wohnzimmer2.webp" role="button" tabindex="0" aria-label="Wohnzimmer – Großansicht öffnen">
|
||||
<picture>
|
||||
<source srcset="/bilder/wohnzimmer2-small.webp" type="image/webp">
|
||||
<img src="/bilder/wohnzimmer2-small.png" alt="Wohnzimmer mit 42,6 m² Wohnfläche" loading="lazy" />
|
||||
</picture>
|
||||
<span class="grid-item-label">Wohnzimmer · 42,6 m²</span>
|
||||
</div>
|
||||
<div class="grid-item" data-img="/bilder/Küche 1.webp" role="button" tabindex="0" aria-label="Küche – Großansicht öffnen">
|
||||
<picture>
|
||||
<source srcset="/bilder/Küche 1-small.webp" type="image/webp">
|
||||
<img src="/bilder/Küche 1.jpg" alt="Küche mit 18,4 m²" loading="lazy" />
|
||||
</picture>
|
||||
<span class="grid-item-label">Küche · 18,4 m²</span>
|
||||
</div>
|
||||
<div class="grid-item" data-img="/bilder/schlafzimmer.webp" role="button" tabindex="0" aria-label="Schlafzimmer – Großansicht öffnen">
|
||||
<picture>
|
||||
<source srcset="/bilder/schlafzimmer-small.webp" type="image/webp">
|
||||
<img src="/bilder/schlafzimmer-small.png" alt="Schlafzimmer mit 18 m²" loading="lazy" />
|
||||
</picture>
|
||||
<span class="grid-item-label">Schlafzimmer · 18 m²</span>
|
||||
</div>
|
||||
<div class="grid-item" data-img="/bilder/Bad.webp" role="button" tabindex="0" aria-label="Badezimmer – Großansicht öffnen">
|
||||
<picture>
|
||||
<source srcset="/bilder/Bad-small.webp" type="image/webp">
|
||||
<img src="/bilder/Bad.jpg" alt="Badezimmer mit 9,8 m²" loading="lazy" />
|
||||
</picture>
|
||||
<span class="grid-item-label">Badezimmer · 9,8 m²</span>
|
||||
</div>
|
||||
<div class="grid-item" data-img="/bilder/Kinderzimmer.webp" role="button" tabindex="0" aria-label="Kinderzimmer 1 – Großansicht öffnen">
|
||||
<picture>
|
||||
<source srcset="/bilder/Kinderzimmer-small.webp" type="image/webp">
|
||||
<img src="/bilder/Kinderzimmer-small.png" alt="Kinderzimmer 1 mit 21,7 m²" loading="lazy" />
|
||||
</picture>
|
||||
<span class="grid-item-label">Kinderzimmer 1 · 21,7 m²</span>
|
||||
</div>
|
||||
<div class="grid-item" data-img="/bilder/Kinderzimmer 2.webp" role="button" tabindex="0" aria-label="Kinderzimmer 2 – Großansicht öffnen">
|
||||
<picture>
|
||||
<source srcset="/bilder/Kinderzimmer 2-small.webp" type="image/webp">
|
||||
<img src="/bilder/Kinderzimmer 2-small.png" alt="Kinderzimmer 2 mit 15,7 m²" loading="lazy" />
|
||||
</picture>
|
||||
<span class="grid-item-label">Kinderzimmer 2 · 15,7 m²</span>
|
||||
</div>
|
||||
<div class="grid-item" data-img="/bilder/kinderzimmer 2 2.webp" role="button" tabindex="0" aria-label="Kinderzimmer Detail – Großansicht öffnen">
|
||||
<picture>
|
||||
<source srcset="/bilder/kinderzimmer 2 2-small.webp" type="image/webp">
|
||||
<img src="/bilder/kinderzimmer 2 2-small.png" alt="Detailansicht Kinderzimmer" loading="lazy" />
|
||||
</picture>
|
||||
<span class="grid-item-label">Kinderzimmer Detail</span>
|
||||
</div>
|
||||
<div class="grid-item" data-img="/bilder/Kinderzimmer 3.webp" role="button" tabindex="0" aria-label="Gästezimmer – Großansicht öffnen">
|
||||
<picture>
|
||||
<source srcset="/bilder/Kinderzimmer 3-small.webp" type="image/webp">
|
||||
<img src="/bilder/Kinderzimmer 3-small.png" alt="Gästezimmer mit 11,5 m²" loading="lazy" />
|
||||
</picture>
|
||||
<span class="grid-item-label">Gästezimmer · 11,5 m²</span>
|
||||
</div>
|
||||
<div class="grid-item" data-img="/bilder/Bad-2.webp" role="button" tabindex="0" aria-label="Zweites Bad – Großansicht öffnen">
|
||||
<picture>
|
||||
<source srcset="/bilder/Bad-2-small.webp" type="image/webp">
|
||||
<img src="/bilder/Bad-2-small.jpg" alt="Zweites Badezimmer im Haus" loading="lazy" />
|
||||
</picture>
|
||||
<span class="grid-item-label">Wohnbereich</span>
|
||||
</div>
|
||||
<div class="grid-item" data-img="/bilder/Bad-3.webp" role="button" tabindex="0" aria-label="Drittes Bad – Großansicht öffnen">
|
||||
<picture>
|
||||
<source srcset="/bilder/Bad-3-small.webp" type="image/webp">
|
||||
<img src="/bilder/Bad-3-small.jpg" alt="Drittes Badezimmer im Haus" loading="lazy" />
|
||||
</picture>
|
||||
<span class="grid-item-label">Wohnbereich Detail</span>
|
||||
</div>
|
||||
<div class="grid-item" data-img="/bilder/Bad-4.webp" role="button" tabindex="0" aria-label="Wohnbereich Detail – Großansicht öffnen">
|
||||
<picture>
|
||||
<source srcset="/bilder/Bad-4-small.webp" type="image/webp">
|
||||
<img src="/bilder/Bad-4-small.jpg" alt="Wohnbereich Detail 3" loading="lazy" />
|
||||
</picture>
|
||||
<span class="grid-item-label">Hausansicht</span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="floors-section" id="grundriss">
|
||||
<div class="section-eyebrow">Raumaufteilung</div>
|
||||
<h2>Großzügig auf allen Etagen</h2>
|
||||
<div class="floor-accordion">
|
||||
<div class="floor-item">
|
||||
<div class="floor-header" role="button" tabindex="0" aria-expanded="false" aria-controls="floor-body-0" id="floor-title-0">
|
||||
<span class="floor-title">Erdgeschoss</span>
|
||||
<div class="floor-size">
|
||||
<span>99,5 m²</span>
|
||||
<div class="floor-icon">+</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="floor-body" id="floor-body-0" role="region" aria-labelledby="floor-title-0">
|
||||
<div class="floor-rooms-grid">
|
||||
<div class="room-chip">Flur<span class="room-chip-area">20,1 m²</span></div>
|
||||
<div class="room-chip">WC<span class="room-chip-area">0,8 m²</span></div>
|
||||
<div class="room-chip">Garage / Partykeller<span class="room-chip-area">42,6 m²</span></div>
|
||||
<div class="room-chip">Abstellraum 1<span class="room-chip-area">9,9 m²</span></div>
|
||||
<div class="room-chip">Abstellraum 2<span class="room-chip-area">7,8 m²</span></div>
|
||||
<div class="room-chip">Heizungskeller<span class="room-chip-area">18,3 m²</span></div>
|
||||
</div>
|
||||
<div class="floor-plan floor-plan-multi">
|
||||
<picture>
|
||||
<source srcset="/bilder/grundrisse/EG-small.webp" type="image/webp">
|
||||
<img src="/bilder/grundrisse/EG-small.jpg" alt="Grundriss Erdgeschoss" loading="lazy" data-img="/bilder/grundrisse/EG.webp" />
|
||||
</picture>
|
||||
<picture>
|
||||
<source srcset="/bilder/grundrisse/EG 3D-small.webp" type="image/webp">
|
||||
<img src="/bilder/grundrisse/EG 3D-small.jpg" alt="Grundriss Erdgeschoss" loading="lazy" data-img="/bilder/grundrisse/EG 3D.webp" />
|
||||
</picture>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="floor-item">
|
||||
<div class="floor-header" role="button" tabindex="0" aria-expanded="false" aria-controls="floor-body-1" id="floor-title-1">
|
||||
<span class="floor-title">1. Obergeschoss</span>
|
||||
<div class="floor-size">
|
||||
<span>120,4 m²</span>
|
||||
<div class="floor-icon">+</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="floor-body" id="floor-body-1" role="region" aria-labelledby="floor-title-1">
|
||||
<div class="floor-rooms-grid">
|
||||
<div class="room-chip">Flur<span class="room-chip-area">20,1 m²</span></div>
|
||||
<div class="room-chip">Wohnzimmer<span class="room-chip-area">42,6 m²</span></div>
|
||||
<div class="room-chip">Gästezimmer<span class="room-chip-area">11,5 m²</span></div>
|
||||
<div class="room-chip">Badezimmer<span class="room-chip-area">9,8 m²</span></div>
|
||||
<div class="room-chip">Küche<span class="room-chip-area">18,4 m²</span></div>
|
||||
<div class="room-chip">Schlafzimmer<span class="room-chip-area">18,0 m²</span></div>
|
||||
</div>
|
||||
<div class="floor-plan floor-plan-multi">
|
||||
<picture>
|
||||
<source srcset="/bilder/grundrisse/OG 1 2-small.webp" type="image/webp">
|
||||
<img src="/bilder/grundrisse/OG 1 2-small.jpg" alt="Grundriss 1. Obergeschoss" loading="lazy" data-img="/bilder/grundrisse/OG 1 2.webp" />
|
||||
</picture>
|
||||
<picture>
|
||||
<source srcset="/bilder/grundrisse/OG 1 3D-small.webp" type="image/webp">
|
||||
<img src="/bilder/grundrisse/OG 1 3D-small.jpg" alt="Grundriss 1. Obergeschoss" loading="lazy" data-img="/bilder/grundrisse/OG 1 3D.webp" />
|
||||
</picture>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="floor-item">
|
||||
<div class="floor-header" role="button" tabindex="0" aria-expanded="false" aria-controls="floor-body-2" id="floor-title-2">
|
||||
<span class="floor-title">2. Obergeschoss</span>
|
||||
<div class="floor-size">
|
||||
<span>68 m²</span>
|
||||
<div class="floor-icon">+</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="floor-body" id="floor-body-2" role="region" aria-labelledby="floor-title-2">
|
||||
<div class="floor-rooms-grid">
|
||||
<div class="room-chip">Flur<span class="room-chip-area">13,9 m²</span></div>
|
||||
<div class="room-chip">Kinderzimmer 1<span class="room-chip-area">21,7 m²</span></div>
|
||||
<div class="room-chip">Kinderzimmer 2<span class="room-chip-area">15,7 m²</span></div>
|
||||
<div class="room-chip">Spielzimmer<span class="room-chip-area">6,3 m²</span></div>
|
||||
<div class="room-chip">Ankleidezimmer<span class="room-chip-area">1,4 m²</span></div>
|
||||
<div class="room-chip">Dachterrasse<span class="room-chip-area">9,0 m²</span> <small>(25% von 35,8 m²)</small></div>
|
||||
</div>
|
||||
<div class="floor-plan floor-plan-multi">
|
||||
<picture>
|
||||
<source srcset="/bilder/grundrisse/OG 2 grundriss-small.webp" type="image/webp">
|
||||
<img src="/bilder/grundrisse/OG 2 grundriss-small.jpg" alt="Grundriss 2. Obergeschoss" loading="lazy" data-img="/bilder/grundrisse/OG 2 grundriss.webp" />
|
||||
</picture>
|
||||
<picture>
|
||||
<source srcset="/bilder/grundrisse/OG 2 3D-small.webp" type="image/webp">
|
||||
<img src="/bilder/grundrisse/OG 2 3D-small.jpg" alt="Grundriss 2. Obergeschoss" loading="lazy" data-img="/bilder/grundrisse/OG 2 3D.webp" />
|
||||
</picture>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="floor-item">
|
||||
<div class="floor-header" role="button" tabindex="0" aria-expanded="false" aria-controls="floor-body-3" id="floor-title-3">
|
||||
<span class="floor-title">Dachboden</span>
|
||||
<div class="floor-size">
|
||||
<span>94 m² Nutzfläche</span>
|
||||
<div class="floor-icon">+</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="floor-body" id="floor-body-3" role="region" aria-labelledby="floor-title-3">
|
||||
<div class="floor-rooms-grid">
|
||||
<div class="room-chip">Dachboden unten (ungeheizt)<span class="room-chip-area">52 m²</span></div>
|
||||
<div class="room-chip">Dachboden Mitte (ungeheizt)<span class="room-chip-area">31 m²</span></div>
|
||||
<div class="room-chip">Dachboden oben (ungeheizt)<span class="room-chip-area">11 m²</span></div>
|
||||
</div>
|
||||
<div class="floor-plan floor-plan-multi">
|
||||
<picture>
|
||||
<source srcset="/bilder/grundrisse/Dachboden unten 2-small.webp" type="image/webp">
|
||||
<img src="/bilder/grundrisse/Dachboden unten 2-small.jpg" alt="Grundriss Dachboden" loading="lazy" data-img="/bilder/grundrisse/Dachboden unten 2.webp" />
|
||||
</picture>
|
||||
<picture>
|
||||
<source srcset="/bilder/grundrisse/Dachboden unten-small.webp" type="image/webp">
|
||||
<img src="/bilder/grundrisse/Dachboden unten-small.jpg" alt="Grundriss Dachboden" loading="lazy" data-img="/bilder/grundrisse/Dachboden unten.webp" />
|
||||
</picture>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="pricing-section" id="miete" aria-label="Mietkonditionen">
|
||||
<div class="pricing-inner">
|
||||
<div class="section-eyebrow">Mietkonditionen</div>
|
||||
<h2>Transparente Preisgestaltung</h2>
|
||||
<div class="price-cards">
|
||||
<div class="price-card">
|
||||
<div class="pc-label">Kaltmiete</div>
|
||||
<div class="pc-val">1.300 €</div>
|
||||
<div class="pc-sub">pro Monat</div>
|
||||
</div>
|
||||
<div class="price-card highlight">
|
||||
<div class="pc-label">Gesamtmiete warm</div>
|
||||
<div class="pc-val">1.600 €</div>
|
||||
<div class="pc-sub">inkl. 300 € Nebenkosten</div>
|
||||
</div>
|
||||
<div class="price-card">
|
||||
<div class="pc-label">Kaution</div>
|
||||
<div class="pc-val">2.600 €</div>
|
||||
<div class="pc-sub">2 Nettokaltmieten</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="price-note">
|
||||
<div class="pn-item">
|
||||
<strong>Verfügbarkeit</strong>
|
||||
Ab sofort · unbefristete Laufzeit
|
||||
</div>
|
||||
<div class="pn-item">
|
||||
<strong>Nebenkosten</strong>
|
||||
Vorauszahlung 300 €/Monat, jährliche Abrechnung
|
||||
</div>
|
||||
<div class="pn-item">
|
||||
<strong>Energieausweis</strong>
|
||||
Wird bei Mietbeginn übergeben · Erdgasheizung
|
||||
</div>
|
||||
<div class="pn-item">
|
||||
<strong>Haustiere</strong>
|
||||
Auf Anfrage
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="lage-section" id="lage">
|
||||
<div class="section-eyebrow">Standort</div>
|
||||
<h2>Zentral und ruhig zugleich</h2>
|
||||
<div class="lage-grid">
|
||||
<div class="lage-item">
|
||||
<div class="lage-icon">🛒</div>
|
||||
<div>
|
||||
<div class="lage-title">Einkaufen & Versorgung</div>
|
||||
<div class="lage-desc">Supermärkte, Ärzte, Apotheken und Schulen sind fußläufig erreichbar</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="lage-item">
|
||||
<div class="lage-icon">🚌</div>
|
||||
<div>
|
||||
<div class="lage-title">Öffentlicher Nahverkehr</div>
|
||||
<div class="lage-desc">Zentrale Bushaltestelle ca. 200 m entfernt — direkte Verbindungen in die Region</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="lage-item">
|
||||
<div class="lage-icon">🏛</div>
|
||||
<div>
|
||||
<div class="lage-title">Innenstadt Schleusingen</div>
|
||||
<div class="lage-desc">Wochenmarkt und Stadtmitte nur ca. 500 m entfernt</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="lage-item">
|
||||
<div class="lage-icon">📍</div>
|
||||
<div>
|
||||
<div class="lage-title">Genaue Adresse</div>
|
||||
<div class="lage-desc">Schleusinger Bahnhofstraße 10<br />98553 Schleusingen, Thüringen</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="lage-map-wrapper">
|
||||
<iframe
|
||||
src="https://maps.google.com/maps?q=50.5090045,10.7473859&t=&z=16&ie=UTF8&iwloc=&output=embed"
|
||||
width="100%" height="450" style="border: 0" allowfullscreen="" loading="lazy"
|
||||
referrerpolicy="no-referrer-when-downgrade"
|
||||
title="Standort Bahnhofstraße 10, Schleusingen"
|
||||
></iframe>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="contact-section" id="kontakt" aria-label="Kontaktformular">
|
||||
<div class="contact-inner">
|
||||
<div class="section-eyebrow">Kontakt</div>
|
||||
<h2>Interesse?<br /><em>Schreiben Sie uns.</em></h2>
|
||||
<p>
|
||||
Wir freuen uns über Ihre Anfrage und melden uns innerhalb von 24 Stunden.
|
||||
Besichtigungstermine sind nach Absprache möglich. Bitte geben Sie bei Ihrer Anfrage ein
|
||||
paar Terminvorschläge an.
|
||||
</p>
|
||||
<div class="contact-form">
|
||||
<?php if ($formSuccess): ?>
|
||||
<div id="form-result" class="form-success" style="display: block">
|
||||
<p>Vielen Dank für Ihre Anfrage!</p>
|
||||
<br />
|
||||
<small>Wir haben Ihre Nachricht erhalten und melden uns innerhalb von 24 Stunden bei Ihnen.</small>
|
||||
</div>
|
||||
<?php else: ?>
|
||||
<?php if (!empty($formErrors)): ?>
|
||||
<div id="form-errors" class="form-errors">
|
||||
<ul>
|
||||
<?php foreach ($formErrors as $error): ?>
|
||||
<li><?= $escapeContactValue($error) ?></li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<form id="contactForm" method="post">
|
||||
<input type="hidden" name="csrf_token" value="<?= htmlspecialchars($_SESSION['csrf_token'] ?? '') ?>" />
|
||||
<div class="form-row">
|
||||
<div class="form-field">
|
||||
<label for="fname">Vorname</label>
|
||||
<input type="text" id="fname" name="fname" placeholder="Max" required value="<?= $escapeContactValue($formData['fname']) ?>" />
|
||||
</div>
|
||||
<div class="form-field">
|
||||
<label for="lname">Nachname</label>
|
||||
<input type="text" id="lname" name="lname" placeholder="Mustermann" required value="<?= $escapeContactValue($formData['lname']) ?>" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="form-field">
|
||||
<label for="email">E-Mail</label>
|
||||
<input type="email" id="email" name="email" placeholder="max@beispiel.de" required value="<?= $escapeContactValue($formData['email']) ?>" />
|
||||
</div>
|
||||
<div class="form-field">
|
||||
<label for="phone">Telefon</label>
|
||||
<input type="tel" id="phone" name="phone" placeholder="+49 ..." value="<?= $escapeContactValue($formData['phone']) ?>" />
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="form-field full">
|
||||
<label for="interest">Anliegen</label>
|
||||
<select id="interest" name="interest">
|
||||
<?php
|
||||
$interestOptions = ['Besichtigung anfragen', 'Allgemeine Informationen', 'Mietbewerbung einreichen'];
|
||||
foreach ($interestOptions as $opt):
|
||||
$selected = ($formData['interest'] === $opt) ? ' selected' : '';
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
/**
|
||||
* Home page — page body only (nav/footer/lightbox live in layouts/main.php).
|
||||
*
|
||||
* @var string $locale
|
||||
* @var array<string,mixed> $formData
|
||||
* @var list<string> $formErrors Translation keys, resolved via t()
|
||||
* @var bool $formSuccess
|
||||
* @var array<string,string> $interestKeys ['visit' => 'form.interest.visit', ...]
|
||||
* @var callable(string):string $escapeContactValue
|
||||
* @var callable(string,array,string=):string $t
|
||||
*/
|
||||
|
||||
$gridItems = [
|
||||
['img' => 'bilder/Außenansicht-2.png', 'key' => 'gallery.exterior', 'alt' => 'gallery.alt.exterior', 'class' => 'span-2 row-2'],
|
||||
['img' => 'bilder/Wohnzimmer-1.png', 'key' => 'gallery.living', 'alt' => 'gallery.alt.living', 'class' => 'span-2 row-1'],
|
||||
['img' => 'bilder/Küche-1.png', 'key' => 'gallery.kitchen', 'alt' => 'gallery.alt.kitchen', 'class' => ''],
|
||||
['img' => 'bilder/Schlafzimmer-1.png','key' => 'gallery.bedroom', 'alt' => 'gallery.alt.bedroom', 'class' => ''],
|
||||
['img' => 'bilder/Badezimmer-1.png', 'key' => 'gallery.bath', 'alt' => 'gallery.alt.bath', 'class' => ''],
|
||||
['img' => 'bilder/Kinderzimmer-1-1.png', 'key' => 'gallery.kid1', 'alt' => 'gallery.alt.kid1', 'class' => ''],
|
||||
['img' => 'bilder/Kinderzimmer-2.png','key' => 'gallery.kid2', 'alt' => 'gallery.alt.kid2', 'class' => ''],
|
||||
['img' => 'bilder/Kinderzimmer-Detail.png','key' => 'gallery.kid_detail', 'alt' => 'gallery.alt.kid_detail', 'class' => 'span-2 row-1'],
|
||||
['img' => 'bilder/Gästezimmer.png', 'key' => 'gallery.guest', 'alt' => 'gallery.alt.guest', 'class' => ''],
|
||||
['img' => 'bilder/Wohnbereich.png', 'key' => 'gallery.area1', 'alt' => 'gallery.alt.living', 'class' => ''],
|
||||
['img' => 'bilder/Wohnbereich-Detail.png', 'key' => 'gallery.area2', 'alt' => 'gallery.alt.living', 'class' => ''],
|
||||
['img' => 'bilder/Außenansicht-1.png','key' => 'gallery.area3', 'alt' => 'gallery.alt.exterior', 'class' => 'span-2 row-1'],
|
||||
];
|
||||
?>
|
||||
<option<?= $selected ?>><?= $escapeContactValue($opt) ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<div class="form-field full">
|
||||
<label for="message">Nachricht</label>
|
||||
<textarea id="message" name="message" rows="4" placeholder="Ihre Nachricht ..." required><?= $escapeContactValue($formData['message']) ?></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="hp-field" aria-hidden="true">
|
||||
<label for="website">Website</label>
|
||||
<input type="text" id="website" name="website" tabindex="-1" autocomplete="off" />
|
||||
</div>
|
||||
<input type="hidden" name="form_time" value="<?= time() ?>" />
|
||||
<button type="submit" class="btn-submit">Anfrage absenden</button>
|
||||
</form>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
<div class="contact-details">
|
||||
<p>Oder schreiben Sie uns direkt: <a href="mailto:mki@kies-media.de">mki@kies-media.de</a></p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
<header class="hero" id="hero">
|
||||
<img src="/bilder/hero-bg.jpg" alt="" class="hero-bg" id="heroBg" loading="eager" decoding="async" fetchpriority="high">
|
||||
<div class="hero-content" id="heroContent">
|
||||
<span class="hero-tag"><?= htmlspecialchars($t('hero.tag'), ENT_QUOTES) ?></span>
|
||||
<h1 class="hero-h1">
|
||||
<span class="hero-line"><?= htmlspecialchars($t('hero.h1.line1'), ENT_QUOTES) ?></span>
|
||||
<span class="hero-line accent"><?= htmlspecialchars($t('hero.h1.line2'), ENT_QUOTES) ?></span>
|
||||
<span class="hero-line"><?= htmlspecialchars($t('hero.h1.line3'), ENT_QUOTES) ?></span>
|
||||
</h1>
|
||||
<ul class="hero-meta" aria-label="<?= htmlspecialchars($t('hero.address'), ENT_QUOTES) ?>">
|
||||
<li class="hero-meta-item"><?= htmlspecialchars($t('hero.address'), ENT_QUOTES) ?></li>
|
||||
<li class="hero-meta-item"><?= htmlspecialchars($t('hero.area'), ENT_QUOTES) ?></li>
|
||||
<li class="hero-meta-item"><?= htmlspecialchars($t('hero.rooms'), ENT_QUOTES) ?></li>
|
||||
<li class="hero-meta-item"><?= htmlspecialchars($t('hero.floors'), ENT_QUOTES) ?></li>
|
||||
</ul>
|
||||
<a class="hero-cta" href="#galerie"><?= htmlspecialchars($t('hero.discover'), ENT_QUOTES) ?> ↓</a>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
</main>
|
||||
<footer role="contentinfo">
|
||||
<div class="footer-logo">Bahnhofstraße 10 · Schleusingen</div>
|
||||
<div class="footer-links">
|
||||
<a href="/impressum">Impressum</a>
|
||||
<a href="/datenschutz">Datenschutz</a>
|
||||
</div>
|
||||
</footer>
|
||||
<section class="facts-strip" aria-label="<?= htmlspecialchars($t('intro.stats.area'), ENT_QUOTES) ?>">
|
||||
<div class="fact"><span class="fact-value">227</span><span class="fact-unit"><?= htmlspecialchars($t('facts.area'), ENT_QUOTES) ?></span></div>
|
||||
<div class="fact"><span class="fact-value">6</span><span class="fact-unit"><?= htmlspecialchars($t('facts.rooms'), ENT_QUOTES) ?></span></div>
|
||||
<div class="fact"><span class="fact-value">3</span><span class="fact-unit"><?= htmlspecialchars($t('facts.floors'), ENT_QUOTES) ?></span></div>
|
||||
<div class="fact"><span class="fact-value">1.300</span><span class="fact-unit"><?= htmlspecialchars($t('facts.rent'), ENT_QUOTES) ?></span></div>
|
||||
</section>
|
||||
|
||||
<div class="lightbox" id="lightbox" role="dialog" aria-modal="true" aria-label="Bildansicht">
|
||||
<button class="lightbox-close" id="lightboxClose" aria-label="Bildansicht schließen">×</button>
|
||||
<img src="" id="lightboxImg" alt="" />
|
||||
<section class="intro" id="intro">
|
||||
<div class="intro-grid">
|
||||
<div class="intro-text">
|
||||
<span class="section-eyebrow"><?= htmlspecialchars($t('intro.eyebrow'), ENT_QUOTES) ?></span>
|
||||
<h2><?= htmlspecialchars($t('intro.h2'), ENT_QUOTES) ?></h2>
|
||||
<p><?= htmlspecialchars($t('intro.p1'), ENT_QUOTES) ?></p>
|
||||
<p><?= htmlspecialchars($t('intro.p2'), ENT_QUOTES) ?></p>
|
||||
</div>
|
||||
<aside class="intro-stats">
|
||||
<div class="stat">
|
||||
<span class="stat-label"><?= htmlspecialchars($t('intro.stats.area'), ENT_QUOTES) ?></span>
|
||||
<span class="stat-value">196,5 m²</span>
|
||||
</div>
|
||||
<div class="stat">
|
||||
<span class="stat-label"><?= htmlspecialchars($t('intro.stats.terrace'), ENT_QUOTES) ?></span>
|
||||
<span class="stat-value">35,8 m²</span>
|
||||
</div>
|
||||
<div class="stat">
|
||||
<span class="stat-label"><?= htmlspecialchars($t('intro.stats.garage'), ENT_QUOTES) ?></span>
|
||||
<span class="stat-value">2 PKW</span>
|
||||
</div>
|
||||
<span class="intro-badge"><?= htmlspecialchars($t('intro.badge'), ENT_QUOTES) ?></span>
|
||||
</aside>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="gallery-section" id="galerie" aria-label="<?= htmlspecialchars($t('gallery.aria'), ENT_QUOTES) ?>">
|
||||
<div class="section-head">
|
||||
<span class="section-eyebrow"><?= htmlspecialchars($t('gallery.eyebrow'), ENT_QUOTES) ?></span>
|
||||
<h2><?= htmlspecialchars($t('gallery.h2'), ENT_QUOTES) ?></h2>
|
||||
</div>
|
||||
<div class="gallery-grid">
|
||||
<?php foreach ($gridItems as $item): ?>
|
||||
<button type="button" class="grid-item <?= htmlspecialchars($item['class'], ENT_QUOTES) ?>"
|
||||
data-img="<?= htmlspecialchars($item['img'], ENT_QUOTES) ?>"
|
||||
aria-label="<?= htmlspecialchars($t($item['key']) . $t('gallery.zoom'), ENT_QUOTES) ?>">
|
||||
<img src="/<?= htmlspecialchars($item['img'], ENT_QUOTES) ?>" alt="<?= htmlspecialchars($t($item['alt']), ENT_QUOTES) ?>" loading="lazy" decoding="async">
|
||||
<span class="grid-caption"><?= htmlspecialchars($t($item['key']), ENT_QUOTES) ?></span>
|
||||
</button>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="floors-section" id="grundriss" aria-label="<?= htmlspecialchars($t('floors.eyebrow'), ENT_QUOTES) ?>">
|
||||
<div class="section-head">
|
||||
<span class="section-eyebrow"><?= htmlspecialchars($t('floors.eyebrow'), ENT_QUOTES) ?></span>
|
||||
<h2><?= htmlspecialchars($t('floors.h2'), ENT_QUOTES) ?></h2>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
$floors = [
|
||||
['id' => 'eg', 'titleKey' => 'floors.eg.title', 'areaKey' => 'floors.eg.area', 'altKey' => 'floors.alt.eg',
|
||||
'rooms' => [
|
||||
['key' => 'floors.room.hall', 'size' => '21,0'],
|
||||
['key' => 'floors.room.wc', 'size' => '1,7'],
|
||||
['key' => 'floors.room.garage', 'size' => '23,4'],
|
||||
['key' => 'floors.room.storage1', 'size' => '5,5'],
|
||||
['key' => 'floors.room.heating', 'size' => '11,2'],
|
||||
['key' => 'floors.room.storage2', 'size' => '6,4'],
|
||||
]],
|
||||
['id' => 'og1', 'titleKey' => 'floors.og1.title', 'areaKey' => 'floors.og1.area', 'altKey' => 'floors.alt.og1',
|
||||
'rooms' => [
|
||||
['key' => 'floors.room.living', 'size' => '42,6'],
|
||||
['key' => 'floors.room.kitchen', 'size' => '18,4'],
|
||||
['key' => 'floors.room.guest', 'size' => '11,5'],
|
||||
['key' => 'floors.room.bath', 'size' => '9,8'],
|
||||
['key' => 'floors.room.storage1','size' => '3,4'],
|
||||
['key' => 'floors.room.heating', 'size' => '8,0'],
|
||||
]],
|
||||
['id' => 'og2', 'titleKey' => 'floors.og2.title', 'areaKey' => 'floors.og2.area', 'altKey' => 'floors.alt.og2',
|
||||
'rooms' => [
|
||||
['key' => 'floors.room.bedroom', 'size' => '18,0'],
|
||||
['key' => 'floors.room.kid1', 'size' => '21,7'],
|
||||
['key' => 'floors.room.kid2', 'size' => '15,7'],
|
||||
['key' => 'floors.room.bath', 'size' => '6,4'],
|
||||
]],
|
||||
['id' => 'attic','titleKey' => 'floors.attic.title', 'areaKey' => 'floors.attic.area', 'altKey' => 'floors.alt.attic',
|
||||
'rooms' => [
|
||||
['key' => 'floors.room.attic_low', 'size' => ''],
|
||||
['key' => 'floors.room.attic_mid', 'size' => ''],
|
||||
['key' => 'floors.room.attic_high', 'size' => ''],
|
||||
]],
|
||||
];
|
||||
?>
|
||||
|
||||
<div class="floors-accordion">
|
||||
<?php foreach ($floors as $floor): ?>
|
||||
<details class="floor-item" id="floor-<?= htmlspecialchars($floor['id'], ENT_QUOTES) ?>">
|
||||
<summary class="floor-header">
|
||||
<span class="floor-title"><?= htmlspecialchars($t($floor['titleKey']), ENT_QUOTES) ?></span>
|
||||
<span class="floor-area"><?= htmlspecialchars($t($floor['areaKey']), ENT_QUOTES) ?></span>
|
||||
</summary>
|
||||
<div class="floor-body">
|
||||
<img src="/bilder/grundriss-<?= htmlspecialchars($floor['id'], ENT_QUOTES) ?>.png"
|
||||
alt="<?= htmlspecialchars($t($floor['altKey']), ENT_QUOTES) ?>"
|
||||
loading="lazy" decoding="async"
|
||||
class="floor-plan-img">
|
||||
<ul class="room-list">
|
||||
<?php foreach ($floor['rooms'] as $room): ?>
|
||||
<li>
|
||||
<span class="room-name"><?= htmlspecialchars($t($room['key']), ENT_QUOTES) ?></span>
|
||||
<?php if ($room['size'] !== ''): ?>
|
||||
<span class="room-size"><?= htmlspecialchars($room['size'], ENT_QUOTES) ?> m²</span>
|
||||
<?php endif; ?>
|
||||
</li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
</div>
|
||||
</details>
|
||||
<?php endforeach; ?>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="pricing-section" id="miete" aria-label="<?= htmlspecialchars($t('rent.aria'), ENT_QUOTES) ?>">
|
||||
<div class="section-head">
|
||||
<span class="section-eyebrow"><?= htmlspecialchars($t('rent.eyebrow'), ENT_QUOTES) ?></span>
|
||||
<h2><?= htmlspecialchars($t('rent.h2'), ENT_QUOTES) ?></h2>
|
||||
</div>
|
||||
|
||||
<div class="pricing-grid">
|
||||
<div class="price-card">
|
||||
<span class="price-label"><?= htmlspecialchars($t('rent.cold'), ENT_QUOTES) ?></span>
|
||||
<span class="price-value">1.300 €</span>
|
||||
<span class="price-unit"><?= htmlspecialchars($t('rent.per_month'), ENT_QUOTES) ?></span>
|
||||
</div>
|
||||
<div class="price-card">
|
||||
<span class="price-label"><?= htmlspecialchars($t('rent.warm'), ENT_QUOTES) ?></span>
|
||||
<span class="price-value">1.600 €</span>
|
||||
<span class="price-unit"><?= htmlspecialchars($t('rent.warm_includes'), ENT_QUOTES) ?></span>
|
||||
</div>
|
||||
<div class="price-card">
|
||||
<span class="price-label"><?= htmlspecialchars($t('rent.deposit'), ENT_QUOTES) ?></span>
|
||||
<span class="price-value">2.600 €</span>
|
||||
<span class="price-unit"><?= htmlspecialchars($t('rent.deposit_months'), ENT_QUOTES) ?></span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<dl class="rent-notes">
|
||||
<dt><?= htmlspecialchars($t('rent.note.available'), ENT_QUOTES) ?></dt>
|
||||
<dd><?= htmlspecialchars($t('rent.note.available_val'), ENT_QUOTES) ?></dd>
|
||||
<dt><?= htmlspecialchars($t('rent.note.costs'), ENT_QUOTES) ?></dt>
|
||||
<dd><?= htmlspecialchars($t('rent.note.costs_val'), ENT_QUOTES) ?></dd>
|
||||
<dt><?= htmlspecialchars($t('rent.note.energy'), ENT_QUOTES) ?></dt>
|
||||
<dd><?= htmlspecialchars($t('rent.note.energy_val'), ENT_QUOTES) ?></dd>
|
||||
<dt><?= htmlspecialchars($t('rent.note.pets'), ENT_QUOTES) ?></dt>
|
||||
<dd><?= htmlspecialchars($t('rent.note.pets_val'), ENT_QUOTES) ?></dd>
|
||||
</dl>
|
||||
</section>
|
||||
|
||||
<section class="lage-section" id="lage" aria-label="<?= htmlspecialchars($t('loc.eyebrow'), ENT_QUOTES) ?>">
|
||||
<div class="section-head">
|
||||
<span class="section-eyebrow"><?= htmlspecialchars($t('loc.eyebrow'), ENT_QUOTES) ?></span>
|
||||
<h2><?= htmlspecialchars($t('loc.h2'), ENT_QUOTES) ?></h2>
|
||||
</div>
|
||||
|
||||
<div class="lage-grid">
|
||||
<ul class="lage-features">
|
||||
<li>
|
||||
<span class="lage-feature-title"><?= htmlspecialchars($t('loc.shopping'), ENT_QUOTES) ?></span>
|
||||
<span class="lage-feature-desc"><?= htmlspecialchars($t('loc.shopping_desc'), ENT_QUOTES) ?></span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="lage-feature-title"><?= htmlspecialchars($t('loc.transport'), ENT_QUOTES) ?></span>
|
||||
<span class="lage-feature-desc"><?= htmlspecialchars($t('loc.transport_desc'), ENT_QUOTES) ?></span>
|
||||
</li>
|
||||
<li>
|
||||
<span class="lage-feature-title"><?= htmlspecialchars($t('loc.center'), ENT_QUOTES) ?></span>
|
||||
<span class="lage-feature-desc"><?= htmlspecialchars($t('loc.center_desc'), ENT_QUOTES) ?></span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class="lage-map">
|
||||
<iframe
|
||||
title="<?= htmlspecialchars($t('loc.map_title'), ENT_QUOTES) ?>"
|
||||
src="https://www.openstreetmap.org/export/embed.html?bbox=10.7535%2C50.5095%2C10.7705%2C50.5185&layer=mapnik&marker=50.5140%2C10.7620"
|
||||
loading="lazy" referrerpolicy="no-referrer-when-downgrade"></iframe>
|
||||
<p class="lage-address">
|
||||
<strong><?= htmlspecialchars($t('loc.address'), ENT_QUOTES) ?>:</strong><br>
|
||||
<?= /* address HTML is XSS-safe — composed of trusted translations */ $t('loc.address_val') ?>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="contact-section" id="kontakt" aria-label="<?= htmlspecialchars($t('contact.aria'), ENT_QUOTES) ?>">
|
||||
<div class="section-head">
|
||||
<span class="section-eyebrow"><?= htmlspecialchars($t('contact.eyebrow'), ENT_QUOTES) ?></span>
|
||||
<h2><?= htmlspecialchars($t('contact.h2'), ENT_QUOTES) ?> <em><?= htmlspecialchars($t('contact.h2_em'), ENT_QUOTES) ?></em></h2>
|
||||
<p class="contact-intro"><?= htmlspecialchars($t('contact.intro'), ENT_QUOTES) ?></p>
|
||||
</div>
|
||||
|
||||
<div id="form-result" class="form-result" role="status" aria-live="polite">
|
||||
<?php if ($formSuccess): ?>
|
||||
<div class="form-success">
|
||||
<strong><?= htmlspecialchars($t('contact.success'), ENT_QUOTES) ?></strong>
|
||||
<p><?= htmlspecialchars($t('contact.success_sub'), ENT_QUOTES) ?></p>
|
||||
</div>
|
||||
<?php elseif (!empty($formErrors)): ?>
|
||||
<div class="form-errors" role="alert">
|
||||
<ul>
|
||||
<?php foreach ($formErrors as $errKey): ?>
|
||||
<li><?= htmlspecialchars($t($errKey), ENT_QUOTES) ?></li>
|
||||
<?php endforeach; ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
|
||||
<form class="contact-form" method="post" action="/#kontakt" novalidate>
|
||||
<input type="hidden" name="csrf_token" value="<?= htmlspecialchars($_SESSION['csrf_token'] ?? '', ENT_QUOTES) ?>">
|
||||
<input type="hidden" name="form_time" value="<?= htmlspecialchars((string) time(), ENT_QUOTES) ?>">
|
||||
<div class="form-hp" aria-hidden="true">
|
||||
<label for="website-hp"><?= htmlspecialchars($t('contact.hp_label'), ENT_QUOTES) ?></label>
|
||||
<input type="text" id="website-hp" name="website" tabindex="-1" autocomplete="off">
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-field">
|
||||
<label for="fname"><?= htmlspecialchars($t('contact.fname'), ENT_QUOTES) ?></label>
|
||||
<input type="text" id="fname" name="fname" required maxlength="80" autocomplete="given-name"
|
||||
value="<?= $escapeContactValue($formData['fname'] ?? '') ?>">
|
||||
</div>
|
||||
<div class="form-field">
|
||||
<label for="lname"><?= htmlspecialchars($t('contact.lname'), ENT_QUOTES) ?></label>
|
||||
<input type="text" id="lname" name="lname" required maxlength="80" autocomplete="family-name"
|
||||
value="<?= $escapeContactValue($formData['lname'] ?? '') ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-row">
|
||||
<div class="form-field">
|
||||
<label for="email"><?= htmlspecialchars($t('contact.email'), ENT_QUOTES) ?></label>
|
||||
<input type="email" id="email" name="email" required maxlength="120" autocomplete="email"
|
||||
value="<?= $escapeContactValue($formData['email'] ?? '') ?>">
|
||||
</div>
|
||||
<div class="form-field">
|
||||
<label for="phone"><?= htmlspecialchars($t('contact.phone'), ENT_QUOTES) ?></label>
|
||||
<input type="tel" id="phone" name="phone" maxlength="40" autocomplete="tel"
|
||||
value="<?= $escapeContactValue($formData['phone'] ?? '') ?>">
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="form-field">
|
||||
<label for="interest"><?= htmlspecialchars($t('contact.interest'), ENT_QUOTES) ?></label>
|
||||
<select id="interest" name="interest" required>
|
||||
<?php
|
||||
$currentInterest = $formData['interest'] ?? 'visit';
|
||||
$interestLabels = [
|
||||
'visit' => 'contact.interest_visit',
|
||||
'info' => 'contact.interest_info',
|
||||
'apply' => 'contact.interest_apply',
|
||||
];
|
||||
foreach ($interestLabels as $value => $labelKey): ?>
|
||||
<option value="<?= htmlspecialchars($value, ENT_QUOTES) ?>"
|
||||
<?= $currentInterest === $value ? 'selected' : '' ?>>
|
||||
<?= htmlspecialchars($t($labelKey), ENT_QUOTES) ?>
|
||||
</option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="form-field">
|
||||
<label for="message"><?= htmlspecialchars($t('contact.message'), ENT_QUOTES) ?></label>
|
||||
<textarea id="message" name="message" required rows="6" maxlength="2000"
|
||||
placeholder="<?= htmlspecialchars($t('contact.message'), ENT_QUOTES) ?>"><?= $escapeContactValue($formData['message'] ?? '') ?></textarea>
|
||||
</div>
|
||||
|
||||
<button type="submit" class="form-submit"><?= htmlspecialchars($t('contact.submit'), ENT_QUOTES) ?></button>
|
||||
|
||||
<p class="contact-direct"><?= htmlspecialchars($t('contact.direct'), ENT_QUOTES) ?>
|
||||
<a href="mailto:mki@kies-media.de">mki@kies-media.de</a>
|
||||
</p>
|
||||
</form>
|
||||
</section>
|
||||
|
||||
Reference in New Issue
Block a user