Weniger Text, mehr Bild: Schablonen-Elemente entfernt

Über-uns-Block mit Kennzahlen, Zielgruppen-Leiste, Eyebrow-Labels,
Pillen, Checklisten und reine Textsektionen entfernt. Hero auf
Headline, eine Zeile und zwei Buttons reduziert. Unterseiten mit
Foto im Kopf, Philosophie über Fassadenbild mit Parallax, Layout
breiter (max. 1680px).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
NotPika69andClaude Opus 5.5 committed 2026-09-30 21:07:20 +02:00
1 parent 62916fc179
commit ba44dc3f0a
31 files changed
+227 -591

No files matched your search

+86 -213
View File
@@ -200,17 +200,18 @@ def page(file, title, desc, body, intro=False):
print("geschrieben:", file, len(html))
def page_hero(eyebrow, h1, lead, extra=""):
def page_hero(h1, lead="", img=None, extra="", small=False):
media = f'<div class="hero__media">{pic(img, "", "100vw", eager=True)}</div>' if img else ""
cls = "page-hero" + (" page-hero--image" if img else "") + (" page-hero--small" if small else "")
lead_html = f'<p class="lead" data-hero>{lead}</p>' if lead else ""
return f'''
<section class="page-hero">
<section class="{cls}">
{media}
{HERO_CHEVRONS}
<div class="wrap page-hero__grid">
<h1 class="display" data-split>{h1}</h1>
<div class="stack">
<p class="eyebrow" data-hero>{eyebrow}</p>
<h1 class="display" data-split>{h1}</h1>
</div>
<div class="stack">
<p class="lead" data-hero>{lead}</p>
{lead_html}
{extra}
</div>
</div>
@@ -222,17 +223,13 @@ def cta_final(h, p, theme=""):
<section class="section {theme}" aria-labelledby="cta-title">
<div class="wrap cta-final">
<div class="stack">
<p class="eyebrow" data-reveal>Kontakt</p>
<h2 class="display" id="cta-title" data-split>{h}</h2>
<p class="lead" data-reveal>{p}</p>
<div class="btn-row mt-2" data-reveal>
<a class="btn" href="{ANFRAGE}">Angebot per E-Mail {I_ARROW}</a>
</div>
</div>
<div class="contact-lines" data-reveal>
<a class="contact-line" href="{TEL_HREF}"><span><small>Büro</small><strong>{TEL}</strong></span>{I_ARROW_S}</a>
<a class="contact-line" href="{SOS_HREF}"><span><small>Notruf 24/7</small><strong>{SOS}</strong></span>{I_ARROW_S}</a>
<a class="contact-line" href="mailto:{MAIL}"><span><small>E-Mail</small><strong>{MAIL}</strong></span>{I_ARROW_S}</a>
<a class="contact-line" href="{ANFRAGE}"><span><small>E-Mail</small><strong>{MAIL}</strong></span>{I_ARROW_S}</a>
</div>
</div>
</section>'''
@@ -243,32 +240,25 @@ def cta_final(h, p, theme=""):
# ======================================================================
SERVICES = [
("reinigung", "Reinigung",
"Treppenhäuser, Eingangsbereiche, Innen- und Außenflächen — regelmäßig und nach festem Plan. Tiefgaragen reinigen wir mit modernen Maschinen.",
["Treppenhaus", "Innenreinigung", "Außenreinigung", "Tiefgarage"],
"Treppenhäuser, Innen- und Außenflächen nach festem Plan. Tiefgaragen mit modernen Maschinen.",
"Treppenhaus in einem modernen Wohngebäude"),
("glas", "Glas- & PV-Reinigung",
"Mit eigener Osmoseanlage und reinem Wasser: streifenfreie Fenster und saubere Photovoltaik-Module — meist sogar ohne Hebebühne.",
["Osmoseanlage", "Fenster & Fassadenglas", "Photovoltaik", "meist ohne Hebebühne"],
"Mit eigener Osmoseanlage und reinem Wasser — meist sogar ohne Hebebühne.",
"Fensterreinigung mit Teleskopstange an einem Wohnhaus"),
("garten", "Garten- & Grünpflege",
"Rasen, Hecken, Beete und Grünanlagen — gepflegt über das ganze Jahr, damit Ihr Objekt schon von außen einen guten Eindruck macht.",
["Rasenpflege", "Heckenschnitt", "Grünanlagen", "Gartenarbeiten"],
"Rasen, Hecken, Beete und Grünanlagen, das ganze Jahr über.",
"Heckenschnitt in einer Gartenanlage"),
("technik", "Technische Hausbetreuung",
"Kontrolle und Wartung technischer Anlagen, regelmäßige Rundgänge und ein wacher Blick, bevor aus Kleinigkeiten teure Schäden werden.",
["Anlagenkontrolle", "Wartung", "Objektrundgänge"],
"Kontrolle und Wartung technischer Anlagen.",
"Rohrleitungen einer Haustechnikanlage"),
("reparatur", "Reparaturen & Renovierungen",
"Handwerkliches Können im eigenen Team — vom Schreiner bis zum Servicetechniker. Kleine Reparaturen erledigen wir direkt, größere planen wir mit Ihnen.",
["Reparaturen", "Renovierungen", "Schreinerarbeiten"],
"Handwerk im eigenen Team — vom Servicetechniker bis zum Schreiner.",
"Handwerker bei der Arbeit mit einem Akkuschrauber"),
("winter", "Winterdienst",
"Räumen und Streuen mit eigenen Fahrzeugen, damit Wege, Zufahrten und Eingänge bei Schnee und Eis sicher bleiben.",
["Räumdienst", "Streudienst", "eigene Fahrzeuge"],
"Räumen und Streuen mit eigenen Fahrzeugen.",
"Schneeräumung vor einem Gebäude"),
("bereitschaft", "24/7-Bereitschaft",
"Auf Wunsch sind wir rund um die Uhr erreichbar. Wenn es brennt, erreichen Sie uns über den Notruf — auch nachts und am Wochenende.",
["rund um die Uhr", "Notruf", "auf Wunsch"],
"Auf Wunsch rund um die Uhr erreichbar — Notruf 0160 / 836 57 53.",
"Reinigung einer Glasfassade am Abend"),
]
@@ -281,9 +271,8 @@ panels = "".join(f'''
<div class="panel__body">
<h3>{t}</h3>
<p>{d}</p>
<ul class="tags" role="list">{"".join(f"<li>{x}</li>" for x in tags)}</ul>
</div>
</article>''' for i, (n, t, d, tags, alt) in enumerate(SERVICES, 1))
</article>''' for i, (n, t, d, alt) in enumerate(SERVICES, 1))
INDEX = f'''
<div class="intro" aria-hidden="true">
@@ -298,65 +287,20 @@ INDEX = f'''
{HERO_CHEVRONS}
<div class="wrap">
<div class="hero__content">
<p class="eyebrow" data-hero>Hausmeisterservice · Landshut &amp; Ergolding</p>
<h1 class="mega" id="hero-title" data-split>Ihr Gebäude.<br> In besten Händen.</h1>
<p class="lead" data-hero>Reinigung, Grünpflege, Technik, Reparaturen und Winterdienst aus einer Hand — für Privat, Eigentümergemeinschaften, Gewerbe und die öffentliche Hand. Seit 2003.</p>
<p class="lead" data-hero>Hausmeisterservice in Landshut und Ergolding — seit 2003.</p>
<div class="btn-row" data-hero>
<a class="btn" href="{ANFRAGE}">Angebot anfragen {I_ARROW}</a>
<a class="btn btn--ghost" href="leistungen.html">Alle Leistungen {I_ARROW}</a>
<a class="btn btn--ghost" href="leistungen.html">Leistungen {I_ARROW}</a>
</div>
</div>
<div class="hero__foot" data-hero>
<ul role="list">
<li>Das Original seit 2003</li>
<li>Eigene Osmoseanlage</li>
<li>24/7-Bereitschaft auf Wunsch</li>
</ul>
<span class="scroll-hint" aria-hidden="true"><span class="scroll-hint__line"></span>Scrollen</span>
</div>
</div>
</section>
<section class="audience" aria-label="Für wen wir arbeiten">
<div class="wrap">
<ul role="list">
<li data-reveal><b>Privat</b><span>Haus, Garten, Reparaturen</span></li>
<li data-reveal><b>Eigentümergemeinschaften</b><span>Wohnanlagen &amp; Hausverwaltungen</span></li>
<li data-reveal><b>Gewerbe</b><span>Büro-, Gewerbe- &amp; Tiefgaragen</span></li>
<li data-reveal><b>Öffentliche Hand</b><span>Kommunale Objekte</span></li>
</ul>
</div>
</section>
<section class="section theme-light" aria-labelledby="about-title">
<div class="wrap">
<div class="intro-split">
<div class="stack">
<p class="eyebrow" data-reveal>Über uns</p>
<h2 class="display" id="about-title" data-split>Werterhalt, der man ansieht.</h2>
</div>
<div class="stack">
<p class="lead" data-reveal>Seit 2003 kümmern wir uns um Immobilien in Landshut, Ergolding und Umgebung — und werden dabei auch gehobenen Ansprüchen im Premiumbereich gerecht.</p>
<p data-reveal class="muted">Sie bekommen feste Ansprechpartner, ein eingespieltes Team und professionelle Arbeit zu einem fairen Preis. Unsere langjährige Erfahrung bringen wir gern zum Werterhalt Ihrer Immobilie ein.</p>
<p data-reveal><a class="link-arrow accent" href="unternehmen.html">Unternehmen &amp; Team {I_ARROW_S}</a></p>
</div>
</div>
<div class="stats">
<div class="stat" data-reveal><span class="stat__num"><span data-count="years">{YEARS}</span></span><span class="stat__label">Jahre Erfahrung — das Original seit 2003</span></div>
<div class="stat" data-reveal><span class="stat__num"><span data-count="7">7</span></span><span class="stat__label">Leistungsbereiche aus einer Hand</span></div>
<div class="stat" data-reveal><span class="stat__num">24<sup>/7</sup></span><span class="stat__label">Bereitschaftsdienst auf Wunsch</span></div>
<div class="stat" data-reveal><span class="stat__num"><span data-count="4">4</span></span><span class="stat__label">Kundengruppen — von Privat bis Kommune</span></div>
</div>
</div>
</section>
<section class="section" aria-labelledby="services-title" style="padding-bottom:0">
<section class="section section--flush-bottom" aria-labelledby="services-title">
<div class="wrap services-head">
<div class="stack">
<p class="eyebrow" data-reveal>Leistungen</p>
<h2 class="display" id="services-title" data-split>Alles, was Ihr Gebäude braucht.</h2>
</div>
<p class="lead" data-reveal>Klassische Hausmeisterdienste und spezialisierte Leistungen — koordiniert von einem Team, das Ihr Objekt kennt.</p>
<h2 class="display" id="services-title" data-split>Leistungen</h2>
<a class="link-arrow" href="leistungen.html" data-reveal>Alle Leistungen im Detail {I_ARROW_S}</a>
</div>
</section>
<section class="hscroll" aria-label="Leistungsübersicht">
@@ -364,19 +308,12 @@ INDEX = f'''
</div>
<div class="hscroll__progress" aria-hidden="true"><span data-hs-count>01</span><span class="hscroll__bar"><i></i></span><span>{len(SERVICES):02d}</span></div>
</section>
<div class="wrap" style="padding-block: var(--s6) var(--section)"><a class="btn btn--ghost" href="leistungen.html">Alle Leistungen im Detail {I_ARROW}</a></div>
<section class="section theme-white" aria-labelledby="osmose-title">
<div class="wrap feature">
<div class="feature__copy">
<p class="eyebrow" data-reveal>Glas- &amp; PV-Reinigung</p>
<h2 class="display" id="osmose-title" data-split>Reines Wasser. Klare Sicht.</h2>
<p class="lead" data-reveal>Mit unserer eigenen Osmoseanlage reinigen wir Glasflächen und Photovoltaik-Module mit entmineralisiertem Wasser — ohne Rückstände.</p>
<ul class="checklist" role="list">
<li data-reveal>Streifenfrei trocknend, ohne Reinigungsmittel</li>
<li data-reveal>Teleskoptechnik — meist sogar ohne Hebebühne</li>
<li data-reveal>Für Fenster, Glasfassaden und PV-Anlagen</li>
</ul>
<h2 class="display" id="osmose-title" data-split>Glas- &amp; PV-Reinigung mit Osmose.</h2>
<p class="lead" data-reveal>Eigene Osmoseanlage, reines Wasser, keine Rückstände — meist sogar ohne Hebebühne.</p>
<p data-reveal class="mt-2"><a class="btn" href="{mailto('Anfrage Glas- / PV-Reinigung')}">Reinigung anfragen {I_ARROW}</a></p>
</div>
<figure data-reveal>
@@ -387,20 +324,15 @@ INDEX = f'''
<span class="compare__tag compare__tag--before" aria-hidden="true">Vorher</span>
<span class="compare__tag compare__tag--after" aria-hidden="true">Nachher</span>
</div>
<figcaption class="figure-note">Symbolbild — ziehen oder mit den Pfeiltasten vergleichen.</figcaption>
<figcaption class="figure-note">Symbolbild</figcaption>
</figure>
</div>
</section>
<section class="section theme-deep philosophy" aria-labelledby="philo-title">
<section class="philosophy philosophy--image" aria-label="Unser Motto">
<div class="philosophy__media">{pic("fassade", "", "100vw")}</div>
<div class="wrap">
<p class="eyebrow" data-reveal id="philo-title">Unsere Philosophie</p>
<p class="philosophy__words mt-4" data-scrub-words>Persönlich<span class="dot">.</span> Zuverlässig<span class="dot">.</span> Erstklassig<span class="dot">.</span></p>
<div class="philosophy__sub">
<div data-reveal><b>Persönlich</b><p>Feste Ansprechpartner und Mitarbeiter, die „ihre" Objekte kennen — keine wechselnden Springer.</p></div>
<div data-reveal><b>Zuverlässig</b><p>Klare Abläufe, strukturiert über unsere eigene App, und auf Wunsch Bereitschaft rund um die Uhr.</p></div>
<div data-reveal><b>Erstklassig</b><p>Moderne Maschinen, eigene Osmoseanlage, handwerkliche Ausbildung im Team — für Ansprüche bis in den Premiumbereich.</p></div>
</div>
<p class="philosophy__words" data-scrub-words>Persönlich<span class="dot">.</span> Zuverlässig<span class="dot">.</span> Erstklassig<span class="dot">.</span></p>
</div>
</section>
@@ -408,14 +340,13 @@ INDEX = f'''
{BAND_CHEV}
<div class="wrap band__inner">
<div class="stack">
<p class="eyebrow" data-reveal>Wir stellen ein</p>
<h2 class="display" id="jobs-title" data-split>Bock auf einen vielseitigen Job?</h2>
<p data-reveal>Hausmeister, Ga-La-Bauer, Glas- und Solarreiniger, Reinigungskräfte: übertarifliche Bezahlung, starkes Team, viel frische Luft — und freitagnachmittags frei.</p>
<h2 class="display" id="jobs-title" data-split>Wir stellen ein.</h2>
<p data-reveal>Hausmeister, Ga-La-Bauer, Glas- und Solarreiniger, Reinigungskräfte.</p>
</div>
<div data-reveal><a class="btn" href="karriere.html">Offene Stellen {I_ARROW}</a></div>
</div>
</section>
''' + cta_final("Sprechen wir über Ihr Objekt.", "Rufen Sie uns an oder schreiben Sie uns — wir melden uns schnell und unterbreiten Ihnen gern ein Angebot.")
''' + cta_final("Kontakt", "Wir freuen uns auf Ihre Anfrage und unterbreiten Ihnen gern ein Angebot.")
page("index.html",
"Kirschner Gebäudeservice — Hausmeisterservice in Landshut & Ergolding seit 2003",
@@ -425,42 +356,20 @@ page("index.html",
# ======================================================================
# Leistungen
# ======================================================================
PRIVAT = ["Gartenarbeiten", "Reparaturen", "Renovierungen", "Glas- & PV-Reinigung", "Winterdienst"]
GEWERBE = ["Technische Hausbetreuung", "Innenreinigung", "Außenreinigung", "Pflege von Grünanlagen", "Winterdienst",
"Reparaturen", "Renovierungen", "Tiefgaragenreinigung", "Glas- & PV-Reinigung", "24/7-Bereitschaft"]
rows = "".join(f'''
<article class="service-row" id="{n}">
<div class="service-row__media reveal-img">{pic(n, alt, "(min-width: 960px) 52vw, 100vw")}</div>
<div class="service-row__body">
<span class="service-row__num" data-reveal>{i:02d}</span>
<h3 class="title" data-split>{t}</h3>
<h2 class="title" data-split>{t}</h2>
<p class="muted" data-reveal>{d}</p>
<ul class="tags" role="list" data-reveal>{"".join(f"<li>{x}</li>" for x in tags)}</ul>
</div>
</article>''' for i, (n, t, d, tags, alt) in enumerate(SERVICES, 1))
</article>''' for i, (n, t, d, alt) in enumerate(SERVICES, 1))
LEISTUNGEN = page_hero("Leistungen", "Ein Team. Jedes Gewerk.",
"Klassische Hausmeisterdienste und spezialisierte Leistungen — einzeln buchbar oder als Rundum-Betreuung für Ihr Objekt.",
LEISTUNGEN = page_hero("Leistungen",
"Für Privat, Eigentümergemeinschaften, Gewerbe und die öffentliche Hand.",
"seil",
f'<div class="btn-row" data-hero><a class="btn" href="{ANFRAGE}">Angebot anfragen {I_ARROW}</a></div>') + f'''
<section class="section theme-light" aria-labelledby="scope-title">
<div class="wrap">
<div class="section-head">
<p class="eyebrow" data-reveal>Leistungsumfang</p>
<h2 class="display" id="scope-title" data-split>Für private und gewerbliche Objekte.</h2>
</div>
<div class="switch" role="tablist" aria-label="Objektart" data-reveal>
<span class="switch__pill" aria-hidden="true"></span>
<button class="switch__btn" role="tab" id="tab-gewerbe" aria-selected="true" aria-controls="scope-gewerbe" type="button">Gewerbe &amp; Wohnanlagen</button>
<button class="switch__btn" role="tab" id="tab-privat" aria-selected="false" aria-controls="scope-privat" tabindex="-1" type="button">Privat</button>
</div>
<div class="scope-lists">
<ul class="scope-list" role="tabpanel" id="scope-gewerbe" aria-labelledby="tab-gewerbe">{"".join(f"<li>{x}</li>" for x in GEWERBE)}</ul>
<ul class="scope-list" role="tabpanel" id="scope-privat" aria-labelledby="tab-privat" hidden>{"".join(f"<li>{x}</li>" for x in PRIVAT)}</ul>
</div>
</div>
</section>
<section class="section" aria-label="Leistungen im Detail">
<div class="wrap service-rows">{rows}
</div>
@@ -469,21 +378,16 @@ LEISTUNGEN = page_hero("Leistungen", "Ein Team. Jedes Gewerk.",
<section class="section theme-light" aria-labelledby="dl-title">
<div class="wrap">
<div class="section-head">
<p class="eyebrow" data-reveal>Leistungsverzeichnis</p>
<h2 class="display" id="dl-title" data-split>Alles schwarz auf weiß.</h2>
<p class="lead" data-reveal>Eine detaillierte Aufstellung unserer Dienstleistungen finden Sie in unseren Leistungsverzeichnissen.</p>
<h2 class="display" id="dl-title" data-split>Zum Download</h2>
</div>
<div class="downloads">
<a class="download" href="assets/docs/Leistungsverzeichnis-Wohnanlage.pdf" download data-reveal><span class="download__icon">PDF</span><span><b>Leistungsverzeichnis Wohnanlage</b><span>PDF · 1,4 MB</span></span>{I_DOWN}</a>
<a class="download" href="assets/docs/Leistungsverzeichnis-Tiefgarage.pdf" download data-reveal><span class="download__icon">PDF</span><span><b>Leistungsverzeichnis Tiefgarage</b><span>PDF · 400 KB</span></span>{I_DOWN}</a>
</div>
<div class="section-head mt-6" style="margin-bottom:0">
<p class="eyebrow" data-reveal>Referenzen</p>
<p class="title" data-reveal>Wir betreuen Wohnanlagen, Gewerbeanlagen und kommunale Objekte in Landshut. Auf Wunsch nennen wir Ihnen gern Referenzobjekte.</p>
</div>
<p class="muted mt-4" data-reveal>Referenzobjekte in Landshut nennen wir Ihnen gern auf Anfrage.</p>
</div>
</section>
''' + cta_final("Sie wünschen ein Angebot?", "Sprechen Sie uns an — wir schauen uns Ihr Objekt an und unterbreiten Ihnen ein Angebot, das zu Ihnen passt.")
''' + cta_final("Angebot anfragen", "Wir schauen uns Ihr Objekt an und machen Ihnen ein Angebot.")
page("leistungen.html",
"Leistungen — Hausmeisterservice, Reinigung, Winterdienst | Kirschner Gebäudeservice",
@@ -494,13 +398,12 @@ page("leistungen.html",
# Unternehmen
# ======================================================================
TIMELINE = [
("2003", "Gründung in Ergolding", "Kirschner Gebäudeservice startet — mit umfangreichen Dienstleistungen rund um Immobilien. Das Original seit 2003."),
("2013", "10 Jahre", "Zehn Jahre Kirschner Gebäudeservice. Wir bedanken uns bei unseren Kunden für die gute und erfolgreiche Zusammenarbeit."),
("2003", "Gründung in Ergolding", "Kirschner Gebäudeservice startet mit Dienstleistungen rund um Immobilien."),
("2013", "10 Jahre", "Zehn Jahre Kirschner Gebäudeservice."),
("2015", "Servicetechnik & Schreinerei", "Herr Listl verstärkt Servicetechnik und Hausmeisterei — mit langjähriger Erfahrung als Schreiner."),
("2018", "15 Jahre — und 120 Schulessen-Jahre", "Wir feiern das Jubiläum mit unseren Geschäftspartnern. Durch die Spenden des Abends werden über 120 Kinder in Nepal ein Jahr lang mit Schulessen versorgt."),
("2019", "Das Team wächst", "Herr Gerhart ergänzt das Team mit handwerklicher Ausbildung, Herr Ponath mit langjähriger Erfahrung in der Gebäudedienstleistung."),
("2020", "Für den Nachwuchs", "Ein neuer Trikotsatz für die U8 des FC Ergolding 1932 e.V."),
("Heute", f"<span data-years>{YEARS}</span> Jahre Erfahrung", "Wohnanlagen, Gewerbeanlagen und kommunale Objekte in Landshut und Umgebung — persönlich betreut von einem eingespielten Team."),
("2018", "15 Jahre", "Jubiläumsfeier mit Geschäftspartnern. Die Spenden des Abends versorgen über 120 Kinder in Nepal ein Jahr lang mit Schulessen."),
("2019", "Das Team wächst", "Herr Gerhart und Herr Ponath kommen ins Team."),
("2020", "FC Ergolding", "Ein neuer Trikotsatz für die U8 des FC Ergolding 1932 e.V."),
]
tl = "".join(f'''
<div class="tl-item" data-reveal><span class="tl-item__year">{y}</span><div><h3>{h}</h3><p>{p}</p></div></div>''' for y, h, p in TIMELINE)
@@ -515,7 +418,7 @@ team = "".join(f'''
</div>''' for ini, n, r in TEAM) + '''
<div class="member member--more" data-reveal>
<div class="member__photo"><span class="member__initials" aria-hidden="true">+</span></div>
<div><b>und viele mehr</b><span>geschätzte Kolleginnen und Kollegen</span></div>
<div><b>und viele mehr</b><span>Kolleginnen und Kollegen</span></div>
</div>'''
MAP_SVG = '''<svg viewBox="0 0 800 480" preserveAspectRatio="xMidYMid slice" aria-hidden="true">
@@ -528,25 +431,13 @@ MAP_SVG = '''<svg viewBox="0 0 800 480" preserveAspectRatio="xMidYMid slice" ari
<g fill="none" stroke="rgba(169,183,204,.14)" stroke-width="1.5"><path d="M0 60 L800 90"/><path d="M300 0 L340 480"/><path d="M0 420 L800 440"/><path d="M540 0 L580 480"/></g>
</svg>'''
UNTERNEHMEN = page_hero("Unternehmen", "Das Original seit 2003.",
"Hinter Kirschner Gebäudeservice stehen Qualität, Erfahrung, Kompetenz — und echte Freude an der Dienstleistung.") + f'''
<section class="section theme-deep philosophy" aria-labelledby="philo-title">
<div class="wrap">
<p class="eyebrow" data-reveal id="philo-title">Unsere Philosophie</p>
<p class="philosophy__words mt-4" data-scrub-words>Persönlich<span class="dot">.</span> Zuverlässig<span class="dot">.</span> Erstklassig<span class="dot">.</span></p>
<div class="philosophy__sub">
<div data-reveal><b>Seit 2003</b><p>Aus einer Idee wurde eine Erfolgsgeschichte — unsere Kunden belohnen hochwertigen Service mit Treue.</p></div>
<div data-reveal><b>Aus der Region</b><p>Sitz in Ergolding, Einsatz in Landshut und Umgebung. Kurze Wege, schnelle Reaktion.</p></div>
<div data-reveal><b>Engagiert</b><p>Wir unterstützen Vereine und Projekte vor Ort und weltweit — vom Jugendfußball bis zum Schulessen in Nepal.</p></div>
</div>
</div>
</section>
UNTERNEHMEN = page_hero("Das Original seit 2003.",
"Persönlich, zuverlässig, erstklassig — aus Ergolding für Landshut und Umgebung.",
"werkzeug") + f'''
<section class="section theme-light" aria-labelledby="tl-title">
<div class="wrap">
<div class="section-head">
<p class="eyebrow" data-reveal>Geschichte</p>
<h2 class="display" id="tl-title" data-split>Seit 2003 gewachsen.</h2>
<h2 class="display" id="tl-title" data-split>Geschichte</h2>
</div>
<div class="timeline">
<span class="timeline__line" aria-hidden="true"><i></i></span>{tl}
@@ -557,9 +448,7 @@ UNTERNEHMEN = page_hero("Unternehmen", "Das Original seit 2003.",
<section class="section theme-white" aria-labelledby="team-title">
<div class="wrap">
<div class="section-head">
<p class="eyebrow" data-reveal>Unser Team</p>
<h2 class="display" id="team-title" data-split>Gesichter statt Hotline.</h2>
<p class="lead" data-reveal>Sie sprechen mit Menschen, die Ihr Objekt kennen.</p>
<h2 class="display" id="team-title" data-split>Unser Team</h2>
</div>
<div class="team">{team}
</div>
@@ -569,12 +458,10 @@ UNTERNEHMEN = page_hero("Unternehmen", "Das Original seit 2003.",
<section class="section" aria-labelledby="map-title" id="anfahrt">
<div class="wrap map-card">
<div class="stack">
<p class="eyebrow" data-reveal>Anfahrt</p>
<h2 class="display" id="map-title" data-split>Hier finden Sie uns.</h2>
<p class="lead" data-reveal>Kirschner Gebäudeservice<br>Etzstraße 45 · 84030 Ergolding</p>
<h2 class="display" id="map-title" data-split>Anfahrt</h2>
<p class="lead" data-reveal>Etzstraße 45<br>84030 Ergolding</p>
<div class="btn-row" data-reveal>
<a class="btn" href="{MAPS}" target="_blank" rel="noopener">Route planen {I_ARROW}</a>
<a class="btn btn--ghost" href="{TEL_HREF}">{TEL}</a>
</div>
</div>
<a class="map reveal-img" href="{MAPS}" target="_blank" rel="noopener" aria-label="Standort in Google Maps öffnen (externe Seite)">
@@ -583,11 +470,11 @@ UNTERNEHMEN = page_hero("Unternehmen", "Das Original seit 2003.",
</a>
</div>
</section>
''' + cta_final("Lernen wir uns kennen.", "Wir freuen uns auf Ihre Anfrage, Ihren Auftrag — und natürlich über Ihr Feedback.", "theme-deep")
''' + cta_final("Kontakt", "Wir freuen uns auf Ihre Anfragen, Aufträge und Ihr Feedback.", "theme-deep")
page("unternehmen.html",
"Unternehmen & Team — Kirschner Gebäudeservice Ergolding",
"Kirschner Gebäudeservice in Ergolding — das Original seit 2003. Philosophie, Geschichte, Team und Anfahrt.",
"Kirschner Gebäudeservice in Ergolding — das Original seit 2003. Geschichte, Team und Anfahrt.",
UNTERNEHMEN)
# ======================================================================
@@ -597,20 +484,24 @@ JOBS = [
("Handwerker / Hausmeister", ["Teilzeit", "Vollzeit", "auch Ga-La-Bauer, Glas- & Solarreiniger"],
["Erfahrung im jeweiligen Bereich", "Blick für Sauberkeit und Qualität", "Freundlichkeit, Teamfähigkeit & Motivation", "Ambition, Verantwortung zu übernehmen"],
["Sicherer Arbeitsplatz — krisenfest und zukunftssicher", "Weit übertarifliche Bezahlung und klare Aufstiegspläne", "Hochwertige Arbeitskleidung", "Boni: Spritgeld, Urlaubs- & Weihnachtsgeld, Erfolgsbonus", "Starkes Team, das sich gegenseitig unterstützt"],
["Du sorgst dafür, dass sich unsere Kunden zuhause wohlfühlen — Sauberkeit in Deinen festen Objekten hat für Dich Priorität. Gemeinsam mit Kollegen pflegst Du Gärten und Grünflächen, reinigst Tiefgaragen mit modernen Maschinen und erlebst den Vorher-Nachher-Effekt.",
"Im Winter sorgst Du mit unseren Fahrzeugen bei Schnee und Eis für Sicherheit. Mit handwerklichem Geschick zeigen wir Dir, wie Du mit Reparaturen unsere Kunden begeisterst. Viel Zeit an der frischen Luft, gut strukturierte Arbeit mit unserer eigenen App — und keine permanenten Überstunden, keine Arbeit am Freitagnachmittag oder Samstag."],
["Du betreust feste Objekte, pflegst mit Kollegen Gärten und Grünflächen, reinigst Tiefgaragen mit modernen Maschinen und sorgst im Winter mit unseren Fahrzeugen für sichere Wege. Mit handwerklichem Geschick übernimmst Du auch Reparaturen.",
"Die Arbeit ist über unsere eigene App strukturiert — ohne permanente Überstunden, ohne Freitagnachmittag und Samstag."],
"Bewerbung: Handwerker / Hausmeister (TZ/VZ)"),
("Reinigungskraft", ["Minijob", "m/w/d"],
["Pünktlichkeit, Ehrlichkeit, Fleiß und Zuverlässigkeit", "Sauberes, gepflegtes Erscheinungsbild und gute Umgangsformen", "Blick für Sauberkeit", "Gutes Deutsch", "Du lebst den Teamgedanken", "Idealerweise Erfahrung im Reinigungsbereich"],
["Tarifliche Vergütung sowie Gutscheine (z. B. Tanken)", "Flexible Zeiteinteilung, die zu Deinem Leben passt", "30 Arbeitstage bezahlter Urlaub", "Lohnfortzahlung im Krankheitsfall", "Deine „eigenen“ festen Objekte — kein Springer", "Sehr kollegiales Betriebsklima", "Arbeitszeit einfach per App am Handy erfassen"],
["Wir sind ein familiäres und jung gebliebenes Unternehmen und suchen Dich, wenn Du Dich in diesen Punkten wiederfindest."],
["Pünktlichkeit, Ehrlichkeit, Fleiß und Zuverlässigkeit", "Sauberes, gepflegtes Erscheinungsbild und gute Umgangsformen", "Blick für Sauberkeit", "Gutes Deutsch", "Idealerweise Erfahrung im Reinigungsbereich"],
["Tarifliche Vergütung sowie Gutscheine (z. B. Tanken)", "Flexible Zeiteinteilung", "30 Arbeitstage bezahlter Urlaub", "Lohnfortzahlung im Krankheitsfall", "Feste eigene Objekte statt Springer", "Arbeitszeit per App am Handy erfassen"],
[],
"Bewerbung: Reinigungskraft (Minijob)"),
("Hausmeister", ["Minijob", "m/w/d"],
["Pünktlichkeit, Ehrlichkeit, Fleiß und Zuverlässigkeit", "Sauberes, gepflegtes Erscheinungsbild und gute Umgangsformen", "Blick für Sauberkeit", "Gutes Deutsch", "Du arbeitest gern im Team", "Idealerweise Erfahrung im Garten oder handwerklich"],
["Übertarifliche Vergütung", "Prämien wie Gutscheine (z. B. Tanken)", "Flexible Zeiteinteilung", "30 Arbeitstage bezahlter Urlaub", "Lohnfortzahlung im Krankheitsfall", "Abwechslungsreich — indoor und outdoor", "Moderne Maschinen und Fuhrpark", "Arbeitszeit einfach per App erfassen"],
["Wir sind ein familiäres und jung gebliebenes Unternehmen und suchen Dich, wenn Du Dich in diesen Punkten wiederfindest."],
["Pünktlichkeit, Ehrlichkeit, Fleiß und Zuverlässigkeit", "Sauberes, gepflegtes Erscheinungsbild und gute Umgangsformen", "Blick für Sauberkeit", "Gutes Deutsch", "Idealerweise Erfahrung im Garten oder handwerklich"],
["Übertarifliche Vergütung", "Prämien wie Gutscheine (z. B. Tanken)", "Flexible Zeiteinteilung", "30 Arbeitstage bezahlter Urlaub", "Lohnfortzahlung im Krankheitsfall", "Moderne Maschinen und Fuhrpark", "Arbeitszeit per App erfassen"],
[],
"Bewerbung: Hausmeister (Minijob)"),
]
def job_text(text):
return ('<div class="job__text">' + "".join(f"<p>{p}</p>" for p in text) + "</div>") if text else ""
APPLY_BODY = "Hallo Herr Kirschner,\n\nich interessiere mich für die Stelle und möchte mich kurz vorstellen:\n\nName:\nTelefon:\nErfahrung:\nFrühester Start:\n\nViele Grüße\n"
jobs = "".join(f'''
<details class="job" data-reveal{" open" if i == 0 else ""}>
@@ -619,62 +510,43 @@ jobs = "".join(f'''
<span class="job__toggle" aria-hidden="true">{I_PLUS}</span>
</summary>
<div class="job__body">
<div class="job__text">{"".join(f"<p>{p}</p>" for p in text)}</div>
{job_text(text)}
<div><h4>Das bringst Du mit</h4><ul role="list">{"".join(f"<li>{x}</li>" for x in need)}</ul></div>
<div><h4>Das bekommst Du</h4><ul role="list">{"".join(f"<li>{x}</li>" for x in give)}</ul></div>
<div class="job__apply btn-row"><a class="btn" href="{mailto(subj, APPLY_BODY)}">Jetzt bewerben {I_ARROW}</a><a class="btn btn--ghost" href="{TEL_HREF}">Lieber anrufen</a></div>
<div class="job__apply btn-row"><a class="btn" href="{mailto(subj, APPLY_BODY)}">Jetzt bewerben {I_ARROW}</a><a class="btn btn--ghost" href="{TEL_HREF}">Anrufen</a></div>
</div>
</details>''' for i, (t, meta, need, give, text, subj) in enumerate(JOBS))
BENEFITS = [("Übertarifliche Bezahlung", "Dein Einsatz wird fair belohnt — mit klaren Aufstiegsplänen."),
("Keine Freitagnachmittage", "Keine permanenten Überstunden, kein Samstag — Zeit für Familie und Freunde."),
("Feste Objekte", "Du betreust Deine eigenen Objekte, statt ständig einzuspringen."),
("Boni & Gutscheine", "Spritgeld, Urlaubs- und Weihnachtsgeld, Erfolgsbonus."),
("Moderne Ausstattung", "Hochwertige Arbeitskleidung, moderne Maschinen, eigener Fuhrpark."),
("Alles per App", "Gut strukturierte Arbeit und Zeiterfassung einfach am Handy.")]
KARRIERE = page_hero("Karriere", "Bock auf einen vielseitigen Job?",
"Viel Zeit an der frischen Luft statt in der Industriehalle, überaus faire Bezahlung und ein Team, das zusammenhält. Bewirb Dich — wir freuen uns auf ein Gespräch bei einem Espresso.",
KARRIERE = page_hero("Wir stellen ein.",
"Hausmeister, Ga-La-Bauer, Glas- und Solarreiniger und Reinigungskräfte für Landshut und Ergolding.",
"rasen",
f'<div class="btn-row" data-hero><a class="btn" href="#stellen">Offene Stellen {I_ARROW}</a></div>') + f'''
<section class="section" aria-labelledby="why-title">
<div class="wrap">
<div class="section-head">
<p class="eyebrow" data-reveal>Was uns ausmacht</p>
<h2 class="display" id="why-title" data-split>Arbeit, die man gern macht.</h2>
</div>
<ul class="benefits" role="list">{"".join(f'<li data-reveal><b>{b}</b><span>{s}</span></li>' for b, s in BENEFITS)}</ul>
</div>
</section>
<section class="section theme-light" aria-labelledby="stellen-title" id="stellen">
<div class="wrap">
<div class="section-head">
<p class="eyebrow" data-reveal>Offene Stellen</p>
<h2 class="display" id="stellen-title" data-split>Wir stellen ein.</h2>
<p class="lead" data-reveal>Bewirb Dich ganz einfach per E-Mail oder Telefon — ein Lebenslauf ist schön, aber kein Muss.</p>
<h2 class="display" id="stellen-title" data-split>Offene Stellen</h2>
</div>
<div class="jobs">{jobs}
</div>
</div>
</section>
''' + cta_final("Interesse? Melde Dich!", "Ruf uns an oder schreib uns eine kurze E-Mail. Wir melden uns schnell bei Dir.")
''' + cta_final("Interesse? Melde Dich!", "Per Telefon oder kurzer E-Mail — ein Lebenslauf ist kein Muss.")
page("karriere.html",
"Karriere — Hausmeister, Handwerker & Reinigungskräfte gesucht | Kirschner Gebäudeservice",
"Wir stellen ein: Hausmeister, Handwerker, Ga-La-Bauer, Glas- & Solarreiniger und Reinigungskräfte in Landshut und Ergolding. Übertarifliche Bezahlung, starkes Team.",
"Wir stellen ein: Hausmeister, Handwerker, Ga-La-Bauer, Glas- & Solarreiniger und Reinigungskräfte in Landshut und Ergolding.",
KARRIERE)
# ======================================================================
# Kontakt
# ======================================================================
KONTAKT = page_hero("Kontakt", "Wir sind für Sie da.",
"Schreiben Sie uns oder rufen Sie an — wir freuen uns auf Ihre Anfragen, Aufträge und natürlich über Ihr Feedback.") + f'''
<section class="section" style="padding-top:0" aria-label="Kontaktwege">
KONTAKT = page_hero("Kontakt", "", "balkone") + f'''
<section class="section" aria-label="Kontaktwege">
<div class="wrap">
<div class="contact-grid">
<a class="contact-card" href="{TEL_HREF}" data-reveal><small>Büro</small><strong>{TEL}</strong><p>Für Anfragen, Angebote und Rückfragen.</p><span class="contact-card__go">Anrufen {I_ARROW_S}</span></a>
<a class="contact-card contact-card--sos" href="{SOS_HREF}" data-reveal><small>Notruf 24/7</small><strong>{SOS}</strong><p>Wenn es dringend ist — auch nachts und am Wochenende.</p><span class="contact-card__go">Notruf wählen {I_ARROW_S}</span></a>
<a class="contact-card" href="{ANFRAGE}" data-reveal><small>E-Mail</small><strong>{MAIL}</strong><p>Wir haben die wichtigsten Angaben schon vorbereitet — einfach ausfüllen und absenden.</p><span class="contact-card__go">E-Mail schreiben {I_ARROW_S}</span></a>
<a class="contact-card" href="{TEL_HREF}" data-reveal><small>Büro</small><strong>{TEL}</strong><span class="contact-card__go">Anrufen {I_ARROW_S}</span></a>
<a class="contact-card contact-card--sos" href="{SOS_HREF}" data-reveal><small>Notruf 24/7</small><strong>{SOS}</strong><span class="contact-card__go">Notruf wählen {I_ARROW_S}</span></a>
<a class="contact-card" href="{ANFRAGE}" data-reveal><small>E-Mail</small><strong>{MAIL}</strong><span class="contact-card__go">E-Mail schreiben {I_ARROW_S}</span></a>
</div>
</div>
</section>
@@ -682,9 +554,8 @@ KONTAKT = page_hero("Kontakt", "Wir sind für Sie da.",
<section class="section theme-deep" aria-labelledby="map-title">
<div class="wrap map-card">
<div class="stack">
<p class="eyebrow" data-reveal>Adresse</p>
<h2 class="display" id="map-title" data-split>Mitten in Ergolding.</h2>
<p class="lead" data-reveal>Kirschner Gebäudeservice<br>Etzstraße 45 · 84030 Ergolding<br>Landshut-Ergolding</p>
<h2 class="display" id="map-title" data-split>Anfahrt</h2>
<p class="lead" data-reveal>Kirschner Gebäudeservice<br>Etzstraße 45<br>84030 Ergolding</p>
<div class="btn-row" data-reveal><a class="btn" href="{MAPS}" target="_blank" rel="noopener">Route planen {I_ARROW}</a></div>
</div>
<a class="map reveal-img" href="{MAPS}" target="_blank" rel="noopener" aria-label="Standort in Google Maps öffnen (externe Seite)">
@@ -704,9 +575,11 @@ page("kontakt.html",
# ======================================================================
CREDITS = [("Titelbild (Wohngebäude)", "Tobias Wilden"), ("Treppenhaus", "Payam Moin Afshari"), ("Fensterreinigung", "Joshua Bowers"),
("PV-Reinigung", "Florida Solar Fix"), ("Heckenschnitt", "Mustafa Turhan"), ("Haustechnik", "Peter Herrmann"),
("Reparatur", "Theme Photos"), ("Winterdienst", "Bradley Andrews"), ("Glasfassade", "Priscilla Du Preez")]
("Reparatur", "Theme Photos"), ("Winterdienst", "Bradley Andrews"), ("Glasfassade", "Priscilla Du Preez"),
("Fassadenreinigung am Seil", "Nuno Silva"), ("Fassade", "Luke van Zyl"), ("Werkzeugwand", "Barn Images"),
("Rasenmähen", "Carl Tronders"), ("Balkone", "Waldemar Brandt")]
IMPRESSUM = page_hero("Rechtliches", "Impressum", "Angaben gemäß § 5 Digitale-Dienste-Gesetz (DDG).") + f'''
IMPRESSUM = page_hero("Impressum", "Angaben gemäß § 5 Digitale-Dienste-Gesetz (DDG).", small=True) + f'''
<section class="section theme-light" style="padding-top: var(--s6)">
<div class="wrap legal">
<h2>Anbieter</h2>
@@ -739,7 +612,7 @@ IMPRESSUM = page_hero("Rechtliches", "Impressum", "Angaben gemäß § 5 Digitale
</section>'''
page("impressum.html", "Impressum — Kirschner Gebäudeservice", "Impressum von Kirschner Gebäudeservice, Etzstraße 45, 84030 Ergolding.", IMPRESSUM)
DATENSCHUTZ = page_hero("Rechtliches", "Datenschutz", "Kurz gesagt: Diese Website setzt keine Cookies, verwendet kein Tracking und lädt nichts von fremden Servern.") + f'''
DATENSCHUTZ = page_hero("Datenschutz", "Diese Website setzt keine Cookies, verwendet kein Tracking und lädt nichts von fremden Servern.", small=True) + f'''
<section class="section theme-light" style="padding-top: var(--s6)">
<div class="wrap legal">
<h2>1. Verantwortlicher</h2>