<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Wäscheservice für Hotels, Pensionen und Boardinghouses | Wäscherei Oliver Winkel</title>
<meta property="og:type" content="website"><meta property="og:locale" content="de_DE"><meta property="og:title" content="Wäscheservice für Hotels, Pensionen und Boardinghouses"><meta property="og:description" content="Bettwäsche und Frottee abholen, waschen, zurückliefern. Berlin und Brandenburger Rand. Ab ca. 100 kg pro Abholung.">
<meta name="description" content="Bett- und Frotteewäsche abholen, gewerblich waschen, zu festen Terminen zurückliefern. Für Hotels, Pensionen, Boardinghouses und Serviced Apartments in Berlin und am Brandenburger Rand. Angebot in wenigen Schritten anfragen.">
<style>
:root{
  --bg:#f5f3ed; --bg2:#ece9df; --ink:#12201c; --muted:#4a5a55; --line:#d9d5c8;
  --brand:#0e5a4b; --brand-d:#093f34; --brand-l:#dff0ea; --accent:#f0a93a; --accent-d:#c9861c;
  --card:#ffffff; --danger:#a3271f; --ok:#0e6b3c;
  --shadow:0 10px 30px rgba(18,32,28,.10);
}
@media (prefers-color-scheme: dark){
  :root{--bg:#0d1513;--bg2:#121d1a;--ink:#eef3f0;--muted:#a5b4ae;--line:#24332f;--brand:#46c2a6;--brand-d:#37a88f;--brand-l:#123028;--card:#16221f;--shadow:0 10px 30px rgba(0,0,0,.4)}
}
*{box-sizing:border-box}
html{scroll-behavior:smooth;-webkit-text-size-adjust:100%}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*{animation:none!important;transition:none!important}}
body{margin:0;background:var(--bg);color:var(--ink);font:17px/1.55 system-ui,-apple-system,"Segoe UI",Roboto,sans-serif}
a{color:inherit}
.wrap{max-width:1080px;margin:0 auto;padding:0 16px}
h1{font-size:clamp(30px,6.4vw,52px);line-height:1.08;margin:0 0 16px;letter-spacing:-.02em}
h2{font-size:clamp(23px,4.4vw,34px);line-height:1.15;margin:0 0 14px;letter-spacing:-.01em}
h3{margin:0 0 6px;font-size:18px}
p{margin:0 0 12px}
.eyebrow{display:inline-block;font-size:13px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--brand);background:var(--brand-l);padding:6px 12px;border-radius:999px;margin-bottom:16px}
.note{font-size:14px;color:var(--muted)}

/* Kopfzeile */
header.top{position:sticky;top:0;z-index:30;background:color-mix(in srgb,var(--bg) 92%,transparent);backdrop-filter:blur(8px);border-bottom:1px solid var(--line)}
header.top .wrap{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-top:10px;padding-bottom:10px}
.logo{font-weight:800;letter-spacing:-.01em;text-decoration:none;display:flex;align-items:center;min-width:0}
.logo small{display:block;font-weight:500;font-size:12px;color:var(--muted);letter-spacing:0}
.kap{background:var(--accent);color:#251705;font-weight:700;border-radius:12px;padding:10px 14px;margin:0 0 14px;font-size:15px}
.chip{display:inline-block;padding:8px 14px;border-radius:999px;background:var(--brand-l);color:var(--brand);font-weight:700;margin:0 8px 8px 0;font-size:15px}
.refline{display:inline-block;background:var(--accent);color:#251705;font-weight:800;padding:8px 14px;border-radius:10px;margin:0 0 14px;font-size:15px}
.plzmsg{font-size:14px;font-weight:600;min-height:1.3em;margin:0}
.plzmsg.ok{color:var(--ok)}
.plzmsg.warn{color:var(--accent-d)}
.qs{counter-reset:q;list-style:none;padding:0;margin:16px 0 0;display:grid;gap:10px}
.qs li{counter-increment:q;position:relative;padding:14px 16px 14px 56px;background:var(--card);border:1px solid var(--line);border-radius:14px}
.qs li::before{content:counter(q);position:absolute;left:14px;top:12px;width:30px;height:30px;border-radius:50%;background:var(--brand);color:#fff;font-weight:800;display:grid;place-items:center}
@media(prefers-color-scheme:dark){.qs li::before{color:#06231c}}
.call{background:var(--brand);color:#fff;text-decoration:none;padding:10px 16px;border-radius:999px;font-weight:700;white-space:nowrap}
.call:hover{background:var(--brand-d)}
@media(prefers-color-scheme:dark){.call,.btn.primary{color:#06231c}}

/* Buttons */
.btn{display:inline-block;text-decoration:none;font-weight:800;padding:15px 24px;border-radius:14px;border:2px solid var(--brand);cursor:pointer;font-size:17px;font-family:inherit;text-align:center}
.btn.primary{background:var(--brand);color:#fff}
.btn.primary:hover{background:var(--brand-d);border-color:var(--brand-d)}
.btn.ghost{background:transparent;color:var(--brand)}
.btn.accent{background:var(--accent);border-color:var(--accent);color:#251705}
.btn.accent:hover{background:var(--accent-d);border-color:var(--accent-d)}
.btn[disabled]{opacity:.6;cursor:wait}

/* Hero */
.hero{padding:34px 0 26px;background:
  radial-gradient(900px 400px at 85% -10%,var(--brand-l),transparent 60%),var(--bg)}
.hero .grid{display:grid;gap:22px;grid-template-areas:"intro" "form" "bul"}
.hero .grid>div:nth-child(1){grid-area:intro}
.hero .grid>.bul{grid-area:bul}
.hero .grid>.formcard{grid-area:form}
.art{display:none}
.lead{font-size:19px;color:var(--muted);max-width:52ch}
.tick{list-style:none;padding:0;margin:18px 0 0;display:grid;gap:9px}
.tick li{padding-left:30px;position:relative}
.tick li::before{content:"";position:absolute;left:2px;top:.42em;width:16px;height:9px;border-left:3px solid var(--brand);border-bottom:3px solid var(--brand);transform:rotate(-45deg)}
.art{margin-top:22px;max-width:420px}
.art svg{width:100%;height:auto;display:block}

/* Formular-Karte */
.card{background:var(--card);border:1px solid var(--line);border-radius:20px;padding:20px;box-shadow:var(--shadow)}
.formcard h2{font-size:24px;margin-bottom:4px}
.progress{display:flex;gap:6px;margin:14px 0 18px}
.progress i{flex:1;height:6px;border-radius:99px;background:var(--line);transition:background .25s}
.progress i.on{background:var(--brand)}
.stepno{font-size:13px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin-bottom:8px}
form{display:grid;gap:14px}
.step{display:none;gap:14px}
.step.active{display:grid}
label{display:grid;gap:6px;font-weight:700;font-size:15px}
input,select,textarea{font:inherit;padding:13px;border-radius:12px;border:1.5px solid var(--line);background:var(--bg);color:var(--ink);width:100%;min-height:48px}
input:focus,select:focus,textarea:focus{outline:3px solid var(--accent);outline-offset:1px;border-color:transparent}
.row2{display:grid;gap:14px;align-items:end}
.result{background:var(--brand-l);border-radius:14px;padding:14px 16px;min-height:74px}
.result b{font-size:28px;letter-spacing:-.02em;color:var(--brand)}
.result span{display:block;font-size:14px;color:var(--muted)}
.check{display:flex;gap:10px;align-items:flex-start;font-weight:400;font-size:14px;color:var(--muted)}
.check input{width:22px;min-height:22px;margin-top:2px;flex:0 0 22px}
.hp{position:absolute;left:-9999px;height:0;overflow:hidden}
.err{color:var(--danger);font-size:14px;font-weight:600;min-height:1.2em;margin:0}
.nav{display:flex;gap:10px}
.nav .btn{flex:1}
.nav .back{flex:0 0 auto;padding-inline:18px}
.success{display:none;text-align:left}
.success.show{display:block}
.success h3{font-size:22px;color:var(--ok)}
.micro{font-size:13px;color:var(--muted);text-align:center;margin-top:10px}
.cb{margin-top:16px;padding-top:16px;border-top:1px dashed var(--line)}
.cb summary{cursor:pointer;font-weight:700;color:var(--brand)}
.cb form{margin-top:12px}

/* Sektionen */
section{padding:44px 0}
section.alt{background:var(--bg2)}
.cards{display:grid;gap:14px}
.pain{padding:20px}
.pain .ico{width:44px;height:44px;border-radius:12px;background:var(--brand-l);display:grid;place-items:center;margin-bottom:12px}
.pain .ico svg{width:24px;height:24px;stroke:var(--brand);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.flow{display:grid;gap:0;position:relative;counter-reset:s}
.flow .s{display:flex;gap:16px;padding-bottom:22px;position:relative}
.flow .s::before{content:"";position:absolute;left:19px;top:42px;bottom:0;width:2px;background:var(--line)}
.flow .s:last-child::before{display:none}
.flow .n{flex:0 0 40px;height:40px;border-radius:50%;background:var(--accent);color:#251705;font-weight:800;display:grid;place-items:center;z-index:1}
.cmp{display:grid;gap:14px}
.cmp .col{padding:20px}
.cmp .bad{border-top:5px solid #b9b3a3}
.cmp .good{border-top:5px solid var(--brand)}
.cmp ul{list-style:none;padding:0;margin:12px 0 0;display:grid;gap:10px}
.cmp li{padding-left:26px;position:relative}
.cmp .bad li::before{content:"\00d7";position:absolute;left:0;top:-3px;font-size:24px;color:#8a8474;font-weight:700}
.cmp .good li::before{content:"";position:absolute;left:2px;top:.45em;width:13px;height:7px;border-left:3px solid var(--brand);border-bottom:3px solid var(--brand);transform:rotate(-45deg)}
.honest{border-left:6px solid var(--accent);padding:18px 20px}
.contract{display:grid;gap:14px}
.contract .big{font-size:clamp(22px,4vw,30px);font-weight:800;letter-spacing:-.01em;line-height:1.2}
details{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:16px 18px;margin-bottom:10px}
summary{cursor:pointer;font-weight:700}
details p{margin:10px 0 0;color:var(--muted)}
.final{background:var(--brand);color:#fff;border-radius:22px;padding:28px 22px;text-align:center}
.final h2{color:#fff}
.final a.btn.accent{margin-top:6px}
.final .tel{display:block;color:#fff;font-size:24px;font-weight:800;text-decoration:none;margin:10px 0 4px}
@media(prefers-color-scheme:dark){.final{background:#123a30}}
footer{border-top:1px solid var(--line);padding:26px 0 96px;color:var(--muted);font-size:14px}
footer a{color:var(--muted)}
.stickybar{position:fixed;left:0;right:0;bottom:0;background:var(--bg);border-top:1px solid var(--line);padding:10px 16px calc(10px + env(safe-area-inset-bottom));display:flex;gap:10px;z-index:40}
.stickybar a{flex:1;text-align:center;text-decoration:none;font-weight:800;padding:14px;border-radius:12px}
.stickybar .a1{background:var(--accent);color:#251705}
.stickybar .a2{border:2px solid var(--brand);color:var(--brand)}

/* Einblenden nur mit JS */
.js .rv{opacity:0;transform:translateY(14px);transition:opacity .5s ease,transform .5s ease}
.js .rv.in{opacity:1;transform:none}

@media(min-width:800px){
  .hero{padding:56px 0 44px}
  .hero .grid{grid-template-columns:1.05fr .95fr;grid-template-rows:auto 1fr;grid-template-areas:"intro form" "bul form";align-items:start;column-gap:44px;row-gap:0}
  .art{display:block}
  .cards.three{grid-template-columns:repeat(3,1fr)}
  .cmp{grid-template-columns:1fr 1fr}
  .row2{grid-template-columns:1fr 1fr}
  .contract{grid-template-columns:1.2fr .8fr;align-items:center}
  .stickybar{display:none}
  footer{padding-bottom:30px}
  .formcard{position:sticky;top:78px}
}

/* ===== V3: sichtbar anderer Auftritt ===== */
.hero{background:linear-gradient(160deg,#072f27 0%,#0e5a4b 58%,#17806a 100%);color:#fff;position:relative;overflow:hidden;padding:38px 0 84px}
.hero::before{content:"";position:absolute;right:-120px;top:-120px;width:420px;height:420px;border-radius:50%;background:radial-gradient(circle,rgba(240,169,58,.28),transparent 65%)}
.hero::after{content:"";position:absolute;left:-80px;bottom:40px;width:300px;height:300px;border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.10),transparent 65%)}
.hero .wrap{position:relative;z-index:1}
.hero h1{color:#fff;text-shadow:0 2px 24px rgba(0,0,0,.25)}
.hero .lead{color:#d3ebe3}
.hero .eyebrow{background:rgba(255,255,255,.14);color:#ffd28a}
.hero .tick li{color:#fff}
.hero .tick li::before{border-color:var(--accent)}
.hero .card{color:var(--ink)}
.hero .formcard{box-shadow:0 24px 60px rgba(0,0,0,.35);border:none}
.wave{position:absolute;left:0;right:0;bottom:-1px;width:100%;height:48px;z-index:1}
.wave path{fill:var(--bg)}
.art{display:block;max-width:440px;margin-top:20px}
.van{animation:drive 7s ease-in-out infinite alternate}
@keyframes drive{from{transform:translateX(0)}to{transform:translateX(110px)}}
.wheel{transform-box:fill-box;transform-origin:center;animation:spin 1.2s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.cloud{animation:float 9s ease-in-out infinite alternate}
.cloud.c2{animation-duration:12s}
@keyframes float{from{transform:translateX(0)}to{transform:translateX(26px)}}
.band{background:var(--accent);color:#251705;overflow:hidden;white-space:nowrap;padding:12px 0;font-weight:800;letter-spacing:.06em;text-transform:uppercase;font-size:14px}
.band .track{display:inline-block;animation:marquee 32s linear infinite}
.band span{display:inline-block;margin:0 22px}
.band span::after{content:"\2726";margin-left:44px;opacity:.55}
@keyframes marquee{from{transform:translateX(0)}to{transform:translateX(-50%)}}
.facts{padding:34px 0 8px}
.factgrid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.fact{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:18px 16px;text-align:center}
.fact b{display:block;font-size:clamp(30px,7vw,46px);line-height:1;color:var(--brand);letter-spacing:-.03em;margin-bottom:8px}
.fact span{font-size:14px;color:var(--muted);line-height:1.35;display:block}
h2::after{content:"";display:block;width:54px;height:5px;border-radius:99px;background:var(--accent);margin-top:12px}
.final h2::after{margin-inline:auto;background:#fff;opacity:.7}
.pain{transition:transform .2s,box-shadow .2s}
.pain:hover{transform:translateY(-4px);box-shadow:var(--shadow)}
.final{background:linear-gradient(160deg,#072f27,#0e5a4b 60%,#17806a);box-shadow:0 24px 60px rgba(7,47,39,.35)}
@media(min-width:800px){.factgrid{grid-template-columns:repeat(4,1fr)}.hero{padding:64px 0 100px}}
@media(prefers-color-scheme:dark){.hero .formcard{box-shadow:0 24px 60px rgba(0,0,0,.6)}}
</style>
</head>
<body id="top">
<script>document.documentElement.className+=" js";</script>

<header class="top">
  <div class="wrap">
    <a class="logo" href="#top"><span>Wäscherei Oliver Winkel<small>Wäscheservice für Hotels und Boardinghouses</small></span></a>
    <a class="call" href="tel:+493054907425" data-track="call">030 54907425</a>
  </div>
</header>

<main>
<!-- HERO -->
<div class="hero">
<div class="wrap grid">
  <div>
    <p class="refline" id="refline" hidden></p>
    <span class="eyebrow">Berlin und Brandenburger Rand</span>
    <h1 id="headline">Wäscheservice für Hotels, Pensionen und Boardinghouses</h1>
    <p class="lead" id="subline">Wir holen Ihre Bett- und Frotteewäsche ab, waschen sie gewerblich und liefern sie zu festen Terminen zurück. Ihr Team bleibt bei den Gästen.</p>
  </div>
  <div class="bul">
    <ul class="tick">
      <li>Bettwäsche, Handtücher, Badvorleger</li>
      <li>Feste Abhol- und Liefertermine nach Ihren Wechseltagen</li>
      <li>Unbefristeter Vertrag, ein Monat Kündigungsfrist</li>
      <li>Für Betriebe ab ca. 100 kg Wäsche pro Abholung</li>
      <li>Ein fester Ansprechpartner, kein Callcenter</li>
    </ul>
    <div class="art" aria-hidden="true">
      <svg viewBox="0 0 480 210" role="img">
        <defs>
          <linearGradient id="gv" x1="0" x2="1"><stop offset="0" stop-color="#0e5a4b"/><stop offset="1" stop-color="#2c8f79"/></linearGradient>
        </defs>
        <circle cx="420" cy="34" r="20" fill="#f0a93a" opacity=".95"/>
        <g class="cloud c1"><ellipse cx="90" cy="34" rx="34" ry="11" fill="#fff" opacity=".18"/><ellipse cx="112" cy="28" rx="22" ry="10" fill="#fff" opacity=".18"/></g>
        <g class="cloud c2"><ellipse cx="300" cy="58" rx="30" ry="9" fill="#fff" opacity=".14"/><ellipse cx="318" cy="52" rx="18" ry="8" fill="#fff" opacity=".14"/></g>
        <!-- Haus / Hotel -->
        <g>
          <rect x="350" y="70" width="104" height="112" rx="6" fill="#f5f3ed"/>
          <rect x="340" y="62" width="124" height="14" rx="4" fill="#dff0ea"/>
          <g fill="#0e5a4b" opacity=".85">
            <rect x="362" y="88" width="16" height="16" rx="2"/><rect x="388" y="88" width="16" height="16" rx="2"/><rect x="414" y="88" width="16" height="16" rx="2"/>
            <rect x="362" y="114" width="16" height="16" rx="2"/><rect x="388" y="114" width="16" height="16" rx="2"/><rect x="414" y="114" width="16" height="16" rx="2"/>
          </g>
          <g fill="#f0a93a"><rect x="388" y="114" width="16" height="16" rx="2"/></g>
          <rect x="392" y="150" width="24" height="32" rx="3" fill="#0e5a4b"/>
        </g>
        <!-- Strasse -->
        <rect x="0" y="182" width="480" height="6" rx="3" fill="#ffffff" opacity=".25"/>
        <path d="M0 196H480" stroke="#fff" stroke-opacity=".35" stroke-width="3" stroke-dasharray="10 12"/>
        <!-- Waeschestapel -->
        <g>
          <rect x="14" y="152" width="86" height="28" rx="6" fill="#ffffff" opacity=".95"/>
          <rect x="18" y="126" width="80" height="26" rx="6" fill="#f0a93a"/>
          <rect x="12" y="100" width="90" height="26" rx="6" fill="#dff0ea"/>
          <rect x="20" y="76" width="74" height="24" rx="6" fill="#ffffff" opacity=".95"/>
        </g>
        <!-- Transporter faehrt hin und her -->
        <g class="van">
          <g transform="translate(120 122)">
            <rect x="0" y="0" width="96" height="58" rx="8" fill="url(#gv)"/>
            <path d="M96 16h30l16 24v18H96z" fill="#f5f3ed"/>
            <rect x="106" y="22" width="22" height="16" rx="3" fill="#0e5a4b"/>
            <text x="48" y="36" text-anchor="middle" font-family="system-ui" font-size="15" font-weight="800" fill="#fff">frisch</text>
            <g class="wheel"><circle cx="26" cy="60" r="12" fill="#12201c"/><circle cx="26" cy="60" r="5" fill="#dcd8cc"/></g>
            <g class="wheel"><circle cx="118" cy="60" r="12" fill="#12201c"/><circle cx="118" cy="60" r="5" fill="#dcd8cc"/></g>
          </g>
        </g>
      </svg>
    </div>
  </div>

  <!-- MEHRSTUFIGES FORMULAR -->
  <div class="card formcard" id="anfrage">
    <div class="kap" id="kap" hidden></div>
    <h2>Angebot anfordern</h2>
    <p class="note" style="margin:0">Drei kurze Schritte. Sie bekommen ein Angebot, das zu Ihrer Menge passt. Wir melden uns an Werktagen innerhalb von 24 Stunden.</p>
    <div class="progress" aria-hidden="true"><i class="on"></i><i></i><i></i></div>

    <form id="lead" novalidate>
      <div class="step active" data-step="1">
        <div class="stepno">Schritt 1 von 3: Ihr Bedarf</div>
        <div class="row2">
          <label>Zimmer / Einheiten
            <input type="number" name="einheiten" id="einheiten" min="1" max="999" inputmode="numeric" placeholder="z.B. 12" required>
          </label>
          <label>Wäschewechsel pro Woche
            <select name="rhythmus" id="rhythmus" required>
              <option value="">Bitte wählen</option>
              <option value="1">1 Mal pro Woche</option>
              <option value="2">2 Mal pro Woche</option>
              <option value="3">3 Mal pro Woche</option>
              <option value="5">5 Mal pro Woche</option>
              <option value="7">Täglich</option>
            </select>
          </label>
        </div>
        <label>Wäschemenge pro Abholung in kg, ungefähr (falls bekannt)
          <input type="number" name="menge_kg" id="kg" min="1" max="99999" inputmode="numeric" placeholder="z.B. 150">
        </label>
        <p class="plzmsg" id="kgmsg" aria-live="polite"></p>
        <div class="result" id="result" aria-live="polite">
          <span>Ihre Kennzahl für das Angebot</span>
          <b id="resNum">?</b> <b style="font-size:16px;color:var(--ink)">Wechsel pro Woche</b>
          <span id="resTxt">Tragen Sie Einheiten und Rhythmus ein.</span>
        </div>
        <p class="err" id="err1"></p>
        <div class="nav"><button type="button" class="btn primary" data-next>Weiter</button></div>
      </div>

      <div class="step" data-step="2">
        <div class="stepno">Schritt 2 von 3: Ihr Objekt</div>
        <label>Objektart
          <select name="objektart" required>
            <option value="">Bitte wählen</option>
            <option>Hotel</option>
            <option>Pension</option>
            <option>Boardinghouse / Serviced Apartments</option>
            <option>Sonstiges</option>
          </select>
        </label>
        <label>Postleitzahl des Objekts
          <input type="text" name="plz" id="plz" inputmode="numeric" pattern="[0-9]{5}" maxlength="5" autocomplete="postal-code" placeholder="z.B. 10315" required>
        </label>
        <p class="plzmsg" id="plzmsg" aria-live="polite"></p>
        <p class="err" id="err2"></p>
        <div class="nav"><button type="button" class="btn ghost back" data-back>Zurück</button><button type="button" class="btn primary" data-next>Weiter</button></div>
      </div>

      <div class="step" data-step="3">
        <div class="stepno">Schritt 3 von 3: Wie erreichen wir Sie?</div>
        <div class="row2">
          <label>Name
            <input type="text" name="name" autocomplete="name" required>
          </label>
          <label>Betrieb
            <input type="text" name="betrieb" autocomplete="organization" required>
          </label>
        </div>
        <div class="row2">
          <label>Telefon
            <input type="tel" name="telefon" autocomplete="tel" required>
          </label>
          <label>E-Mail (optional)
            <input type="email" name="email" autocomplete="email">
          </label>
        </div>
        <div class="hp" aria-hidden="true"><label>Nicht ausfüllen<input type="text" name="website" tabindex="-1" autocomplete="off"></label></div>
        <label class="check">
          <input type="checkbox" name="datenschutz" required>
          <span>Ich habe die <a href="https://www.gastro-hotelwaesche.de/impressum#datenschutz" target="_blank" rel="noopener">Datenschutzerklärung</a> gelesen und stimme der Verarbeitung meiner Angaben zur Bearbeitung meiner Anfrage zu.</span>
        </label>
        <p class="err" id="err3"></p>
        <div class="nav"><button type="button" class="btn ghost back" data-back>Zurück</button><button type="submit" class="btn accent" id="send">Angebot anfordern</button></div>
      </div>
    </form>

    <div class="success" id="ok" role="status">
      <h3>Anfrage ist raus.</h3>
      <p>Danke. Wir melden uns persönlich bei Ihnen, an Werktagen innerhalb von 24 Stunden. Wenn es eilt, rufen Sie an:</p>
      <p><a class="btn primary" href="tel:+493054907425" data-track="call">030 54907425</a></p>
    </div>

    <div class="cb" id="cbwrap">
      <details style="border:none;padding:0;margin:0;background:none">
        <summary>Lieber zurückgerufen werden?</summary>
        <form id="cb" novalidate>
          <label>Ihre Telefonnummer
            <input type="tel" name="telefon" autocomplete="tel" required>
          </label>
          <label>Wann passt es?
            <select name="zeit">
              <option>Egal, bald</option>
              <option>Vormittags</option>
              <option>Nachmittags</option>
            </select>
          </label>
          <div class="hp" aria-hidden="true"><label>Nicht ausfüllen<input type="text" name="website" tabindex="-1" autocomplete="off"></label></div>
          <p class="err" id="errcb"></p>
          <button class="btn primary" type="submit">Rückruf anfordern</button>
          <p class="note" style="margin:0">Mit dem Absenden stimmen Sie der Verarbeitung Ihrer Nummer zum Rückruf zu.</p>
        </form>
        <p class="note" id="cbok" style="display:none;font-weight:700;color:var(--ok)">Danke, wir rufen zurück.</p>
      </details>
    </div>
    <p class="micro">Kein Vertrag durch die Anfrage. Das Angebot ist unverbindlich.</p>
  </div>
</div>
<svg class="wave" viewBox="0 0 1440 48" preserveAspectRatio="none" aria-hidden="true"><path d="M0 48V22C240 2 480 40 720 26S1200 2 1440 22V48z"/></svg>
</div>

<div class="band" aria-hidden="true">
  <div class="track">
    <span>Bettwäsche</span><span>Frottee</span><span>Badvorleger</span><span>Abholung</span><span>Lieferung</span><span>Feste Termine</span><span>Ein Ansprechpartner</span>
    <span>Bettwäsche</span><span>Frottee</span><span>Badvorleger</span><span>Abholung</span><span>Lieferung</span><span>Feste Termine</span><span>Ein Ansprechpartner</span>
  </div>
</div>

<section class="facts">
<div class="wrap">
  <div class="factgrid">
    <div class="fact rv"><b>1</b><span>Ansprechpartner, der Ihren Namen kennt</span></div>
    <div class="fact rv"><b>1 Monat</b><span>Kündigungsfrist, unbefristeter Vertrag</span></div>
    <div class="fact rv"><b>3</b><span>Schritte bis zu Ihrem Angebot</span></div>
    <div class="fact rv"><b>0</b><span>Waschmaschinen, die Sie betreiben müssen</span></div>
  </div>
</div>
</section>

<!-- PROBLEM -->
<section>
<div class="wrap">
  <h2 class="rv">Wäsche frisst Zeit, die Ihre Gäste brauchen</h2>
  <div class="cards three">
    <div class="card pain rv">
      <div class="ico"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="9"/><path d="M12 7v5l3 2"/></svg></div>
      <h3>Wechseltage sind eng</h3>
      <p>Bis zum Check-in muss alles fertig sein. Wäsche im eigenen Haus bindet genau dann Personal, wenn es am Gast gebraucht wird.</p>
    </div>
    <div class="card pain rv">
      <div class="ico"><svg viewBox="0 0 24 24"><rect x="4" y="3" width="16" height="18" rx="2"/><circle cx="12" cy="13" r="4"/><path d="M8 7h.01M11 7h.01"/></svg></div>
      <h3>Eigene Maschinen laufen mit</h3>
      <p>Geräte, Strom, Wasser, Wartung und Stellfläche fallen an, auch wenn das Haus nicht voll ist.</p>
    </div>
    <div class="card pain rv">
      <div class="ico"><svg viewBox="0 0 24 24"><path d="M12 3l9 16H3z"/><path d="M12 10v4M12 17h.01"/></svg></div>
      <h3>Ein Ausfall trifft sofort</h3>
      <p>Steht die Maschine, fehlt am nächsten Morgen die Wäsche. Ein fester Partner nimmt Ihnen dieses Risiko ab.</p>
    </div>
  </div>
</div>
</section>

<!-- ABLAUF -->
<section class="alt" id="ablauf">
<div class="wrap">
  <h2 class="rv">So läuft es ab</h2>
  <div class="flow">
    <div class="s rv"><div class="n">1</div><div><h3>Sie nennen Ihren Bedarf</h3><p>Einheiten, Rhythmus, Postleitzahl. Das dauert nur wenige Minuten.</p></div></div>
    <div class="s rv"><div class="n">2</div><div><h3>Sie bekommen Ihr Angebot</h3><p>Wir kalkulieren nach Ihrer Menge und Ihrem Rhythmus und melden uns persönlich. Kein Standardpreis für alle.</p></div></div>
    <div class="s rv"><div class="n">3</div><div><h3>Wir starten mit festen Terminen</h3><p>Abholung, Waschen, Lieferung, abgestimmt auf Ihre Wechseltage.</p></div></div>
    <div class="s rv"><div class="n">4</div><div><h3>Sie behalten die Kontrolle</h3><p>Ändern sich Ihre Mengen, sprechen Sie direkt mit uns. Der Vertrag ist unbefristet, die Kündigungsfrist beträgt einen Monat.</p></div></div>
  </div>
</div>
</section>

<!-- VERGLEICH -->
<section>
<div class="wrap">
  <h2 class="rv">Selbst waschen oder auslagern?</h2>
  <p class="rv" style="color:var(--muted);max-width:60ch">Ohne Zahlen, die wir nicht belegen können. Nur das, was sich im Betrieb ändert.</p>
  <div class="cmp">
    <div class="card col bad rv">
      <h3>Wäsche im eigenen Haus</h3>
      <ul>
        <li>Maschinen, Strom, Wasser und Wartung tragen Sie selbst</li>
        <li>Personal ist am Wechseltag mit Waschen und Falten gebunden</li>
        <li>Sie brauchen Platz zum Trocknen, Falten und Lagern</li>
        <li>Fällt ein Gerät aus, müssen Sie kurzfristig improvisieren</li>
      </ul>
    </div>
    <div class="card col good rv">
      <h3>Mit unserem Wäscheservice</h3>
      <ul>
        <li>Kein Maschinenpark in Ihrem Haus</li>
        <li>Ihr Team bleibt bei Gästen und Zimmern</li>
        <li>Feste Abhol- und Liefertermine, die Sie planen können</li>
        <li>Ein Ansprechpartner, der Änderungen mit Ihnen abstimmt</li>
      </ul>
    </div>
  </div>
</div>
</section>

<!-- VERTRAG -->
<section class="alt" id="vertrag">
<div class="wrap contract">
  <div class="rv">
    <h2>Keine Knebelverträge</h2>
    <p class="big">Unbefristet. Kündigungsfrist ein Monat.</p>
    <p style="color:var(--muted)">Wir wollen Sie mit Zuverlässigkeit halten, nicht mit langer Laufzeit. Den Preis nennen wir Ihnen im Angebot.</p>
  </div>
  <div class="card honest rv">
    <h3>Wir sagen es auch, wenn es nicht passt</h3>
    <p style="margin:0;color:var(--muted)">Liegt Ihr Objekt außerhalb unseres Liefergebiets oder liegt Ihre Menge deutlich unter ca. 100 kg pro Abholung und rechnet sich für keinen von uns, sagen wir Ihnen das offen. Lieber ein ehrliches Nein als eine Zusage, die wir nicht halten.</p>
  </div>
</div>
</section>

<!-- LIEFERGEBIET -->
<section id="gebiet" class="alt">
<div class="wrap two">
  <div>
    <h2 class="rv">Wo wir für Sie unterwegs sind</h2>
    <p class="rv">Unser Sitz ist in Zielona Góra (Polen). Unser Einsatzgebiet ist Berlin und der Brandenburger Rand. Wir sagen das offen, damit Sie wissen, mit wem Sie es zu tun haben.</p>
    <div id="bezirke" class="rv" hidden></div>
    <p class="note" id="gebietnote" hidden>Tragen Sie im Formular Ihre Postleitzahl ein. Sie sehen sofort, ob sie in unserem Gebiet liegt.</p>
  </div>
  <div class="card honest rv">
    <h3>Transparent statt Versteckspiel</h3>
    <p style="margin:0;color:var(--muted)">Sie erfahren vor der Anfrage, wo wir sitzen, wo wir liefern und ab welcher Menge wir arbeiten. Was wir zu Terminen und Preisen zusagen, bekommen Sie schriftlich im Angebot.</p>
  </div>
</div>
</section>

<!-- CHECKLISTE -->
<section>
<div class="wrap">
  <h2 class="rv">7 Fragen, die Sie jedem Wäscheservice stellen sollten</h2>
  <p class="rv" style="color:var(--muted);max-width:62ch">Auch uns. Wer vergleicht, entscheidet besser. Wir beantworten Ihnen alle sieben gern im Gespräch.</p>
  <ol class="qs">
    <li class="rv">Wie verbindlich sind Abhol- und Liefertermine, und was passiert bei einer Verspätung?</li>
    <li class="rv">Wie wird meine Wäsche gekennzeichnet, damit nichts vertauscht wird?</li>
    <li class="rv">Was gilt, wenn Wäsche beschädigt wird oder verloren geht?</li>
    <li class="rv">Wie ist der Preis aufgebaut (Gewicht, Stück, Pauschale), und was kommt extra dazu?</li>
    <li class="rv">Wie lange läuft der Vertrag, und wie kündige ich?</li>
    <li class="rv">Wer ist mein Ansprechpartner, und wie schnell ist er erreichbar?</li>
    <li class="rv">Was passiert bei schwankenden Mengen, etwa in der Nebensaison?</li>
  </ol>
  <p style="margin-top:18px"><a class="btn primary" href="#anfrage" data-track="cta-checkliste">Fragen stellen: Angebot anfordern</a></p>
</div>
</section>


<!-- FAQ -->
<section id="faq">
<div class="wrap">
  <h2 class="rv">Häufige Fragen</h2>
  <details class="rv"><summary>Was kostet der Service?</summary><p>Das hängt von Menge, Rhythmus und Strecke ab. Deshalb gibt es keine Preisliste für alle. Sie bekommen ein Angebot, das zu Ihrem Haus passt.</p></details>
  <details class="rv"><summary>Wie lange bin ich gebunden?</summary><p>Der Vertrag ist unbefristet, die Kündigungsfrist beträgt einen Monat.</p></details>
  <details class="rv"><summary>Wie oft holen Sie ab?</summary><p>So oft, wie Ihre Wechseltage es verlangen. Den Rhythmus legen wir gemeinsam fest.</p></details>
  <details class="rv"><summary>Stellen Sie auch Wäsche zur Miete?</summary><p>Aktuell nicht. Wir waschen und liefern Ihre eigene Bett- und Frotteewäsche. Mietwäsche können wir derzeit nicht anbieten.</p></details>
  <details class="rv"><summary>Gibt es eine Mindestmenge?</summary><p>Wir arbeiten ab ca. 100 kg Wäsche pro Abholung. Liegen Sie darunter, fragen Sie trotzdem an. Wir sagen Ihnen ehrlich, ob es passt.</p></details>
  <details class="rv"><summary>Mit wem spreche ich?</summary><p>Mit Oliver Winkel direkt, nicht mit einer Hotline.</p></details>
</div>
</section>

<!-- ABSCHLUSS -->
<section style="padding-top:0">
<div class="wrap">
  <div class="final rv">
    <h2>Bereit für weniger Wäsche im Haus?</h2>
    <p>Rufen Sie an oder fordern Sie Ihr Angebot an.</p>
    <a class="tel" href="tel:+493054907425" data-track="call">030 54907425</a>
    <p class="note" style="color:#d5ebe4"><a href="mailto:info@gastro-hotelwaesche.de">info@gastro-hotelwaesche.de</a></p>
    <a class="btn accent" href="#anfrage" data-track="cta-final">Angebot anfordern</a>
  </div>
</div>
</section>
</main>

<footer>
  <div class="wrap">
    <p>Wäscherei Oliver Winkel · Ul. Zbożowa 13, 65-375 Zielona Góra · Einsatzgebiet Berlin und Brandenburger Rand</p>
    <p><a href="https://www.gastro-hotelwaesche.de/">Startseite</a> · <a href="https://www.gastro-hotelwaesche.de/impressum">Impressum</a> · <a href="https://www.gastro-hotelwaesche.de/impressum#datenschutz">Datenschutz</a></p>
  </div>
</footer>

<div class="stickybar">
  <a class="a1" href="#anfrage" data-track="cta-sticky">Angebot anfordern</a>
  <a class="a2" href="tel:+493054907425" data-track="call">Anrufen</a>
</div>

<script>
/*
  MESSUNG
  Ereignisse: form_step (1,2), lead_submit, callback_submit, call_click, cta_click.
  In Google Ads als Conversion anlegen: lead_submit, callback_submit, call_click.
  form_step zeigt, in welchem Schritt Leute abspringen.

  BOTSCHAFTS-TEST
  Anzeigen-URL mit ?v=zeit, ?v=termine oder ?v=vertrag. Die Seite passt die Überschrift an.
*/
(function(){
  var ENDPOINT = "/api/anfrage";

  // Liefergebiet: PLZ-Anfänge eintragen, z.B. ["10","12","13","14"]. Leer = keine PLZ-Rückmeldung.
  var GEBIET = [];
  // Bezirke/Orte, die im Abschnitt "Wo wir unterwegs sind" als Chips erscheinen, z.B. ["Mitte","Lichtenberg","Pankow"]
  var BEZIRKE = [];
  if(BEZIRKE.length){
    var bz = document.getElementById("bezirke");
    BEZIRKE.forEach(function(n){ var c = document.createElement("span"); c.className="chip"; c.textContent=n; bz.appendChild(c); });
    bz.hidden = false;
  }
  if(GEBIET.length){ document.getElementById("gebietnote").hidden = false; }

  // Ehrliche Knappheit: nur ausfüllen, wenn sie stimmt, z.B. "Aktuell nehmen wir neue Kunden in Berlin-Nordost auf."
  var KAPAZITAET = "";
  if(KAPAZITAET){ var k = document.getElementById("kap"); k.textContent = KAPAZITAET; k.hidden = false; }

  var V = {
    zeit:{h:"Kein Waschen mehr im Haus",s:"Wir holen Ihre Bett- und Frotteewäsche ab, waschen sie gewerblich und liefern zurück. Ihr Team hat Zeit für die Gäste."},
    termine:{h:"Feste Termine für Ihre Hotelwäsche",s:"Abholung und Lieferung nach Ihrem Wechselrhythmus. Mit einem Ansprechpartner, der erreichbar ist."},
    vertrag:{h:"Wäscheservice ohne lange Bindung",s:"Unbefristeter Vertrag, ein Monat Kündigungsfrist. Angebot nach Ihrer Menge, ohne Preisliste für alle."}
  };
  var params = new URLSearchParams(location.search);
  var v = params.get("v");
  if(v && V[v]){
    document.getElementById("headline").textContent = V[v].h;
    document.getElementById("subline").textContent = V[v].s;
  }

  // Persönlicher Link: ?ref=Name des Betriebs. Nur als Text eingesetzt, nie als HTML.
  var ref = params.get("ref");
  if(ref){
    ref = ref.replace(/[<>]/g,"").slice(0,60).trim();
    if(ref){ var rl = document.getElementById("refline"); rl.textContent = "Angebot vorbereitet für: " + ref; rl.hidden = false; }
  }

  function track(name, p){
    try{
      if(window.gtag){ window.gtag("event", name, p || {}); }
      if(window.dataLayer){ window.dataLayer.push(Object.assign({event:name}, p||{})); }
    }catch(e){}
  }
  document.querySelectorAll('[data-track="call"]').forEach(function(a){
    a.addEventListener("click", function(){ track("call_click"); });
  });
  document.querySelectorAll('[data-track^="cta"]').forEach(function(a){
    a.addEventListener("click", function(){ track("cta_click", {where:a.getAttribute("data-track")}); });
  });

  // Einblenden beim Scrollen
  var rv = document.querySelectorAll(".rv");
  if("IntersectionObserver" in window){
    var io = new IntersectionObserver(function(es){
      es.forEach(function(e){ if(e.isIntersecting){ e.target.classList.add("in"); io.unobserve(e.target); } });
    },{threshold:.12});
    rv.forEach(function(el){ io.observe(el); });
  } else { rv.forEach(function(el){ el.classList.add("in"); }); }

  // Kennzahl live
  var ein = document.getElementById("einheiten"), rh = document.getElementById("rhythmus");
  var num = document.getElementById("resNum"), txt = document.getElementById("resTxt");
  function calc(){
    var e = parseInt(ein.value,10), r = parseInt(rh.value,10);
    if(e>0 && r>0){
      var t = e*r;
      num.textContent = t;
      txt.textContent = e + " Einheiten × " + r + " Wechsel pro Woche. Diese Zahl nutzen wir für Ihr Angebot.";
    } else {
      num.textContent = "?";
      txt.textContent = "Tragen Sie Einheiten und Rhythmus ein.";
    }
  }
  ein.addEventListener("input", calc); rh.addEventListener("change", calc);

  // Mengenhinweis
  var kg = document.getElementById("kg"), kgmsg = document.getElementById("kgmsg");
  kg.addEventListener("input", function(){
    var m = parseInt(kg.value,10);
    kgmsg.className = "plzmsg"; kgmsg.textContent = "";
    if(!(m>0)) return;
    if(m>=100){ kgmsg.textContent = "Diese Menge passt zu unserem Angebot."; kgmsg.className = "plzmsg ok"; }
    else { kgmsg.textContent = "Wir arbeiten ab ca. 100 kg pro Abholung. Fragen Sie trotzdem an, wir sagen Ihnen ehrlich, ob es passt."; kgmsg.className = "plzmsg warn"; }
    track("kg_check", {ab_100:m>=100});
  });

  // PLZ-Rückmeldung (nur aktiv, wenn GEBIET gefüllt ist)
  var plz = document.getElementById("plz"), plzmsg = document.getElementById("plzmsg");
  plz.addEventListener("input", function(){
    var val = plz.value.replace(/\D/g,"");
    plzmsg.className = "plzmsg"; plzmsg.textContent = "";
    if(!GEBIET.length || val.length!==5) return;
    var drin = GEBIET.some(function(p){ return val.indexOf(p)===0; });
    if(drin){
      plzmsg.textContent = "Diese Postleitzahl liegt in unserem Liefergebiet.";
      plzmsg.className = "plzmsg ok";
    } else {
      plzmsg.textContent = "Diese Postleitzahl liegt außerhalb unseres üblichen Gebiets. Fragen Sie trotzdem an, wir prüfen es ehrlich.";
      plzmsg.className = "plzmsg warn";
    }
    track("plz_check", {im_gebiet:drin});
  });

  // Enter im Formular geht zum nächsten Schritt
  document.getElementById("lead").addEventListener("keydown", function(e){
    if(e.key==="Enter" && e.target.tagName!=="TEXTAREA" && cur<2){
      e.preventDefault();
      form.querySelectorAll("[data-next]")[cur].click();
    }
  });

  // Schritte
  var form = document.getElementById("lead");
  var steps = [].slice.call(form.querySelectorAll(".step"));
  var bars = document.querySelectorAll(".progress i");
  var cur = 0;
  function show(i){
    cur = i;
    steps.forEach(function(s,k){ s.classList.toggle("active", k===i); });
    bars.forEach(function(b,k){ b.classList.toggle("on", k<=i); });
  }
  function validStep(i){
    var fields = steps[i].querySelectorAll("input[required],select[required]");
    var msg = document.getElementById("err"+(i+1));
    for(var k=0;k<fields.length;k++){
      if(!fields[k].checkValidity()){
        msg.textContent = "Bitte " + (fields[k].type==="checkbox" ? "der Datenschutzerklärung zustimmen." : "dieses Feld ausfüllen: " + (fields[k].closest("label")? fields[k].closest("label").firstChild.textContent.trim() : "") + ".");
        fields[k].focus();
        return false;
      }
    }
    msg.textContent = "";
    return true;
  }
  form.querySelectorAll("[data-next]").forEach(function(b){
    b.addEventListener("click", function(){
      if(!validStep(cur)) return;
      track("form_step", {step:cur+1});
      show(cur+1);
    });
  });
  form.querySelectorAll("[data-back]").forEach(function(b){
    b.addEventListener("click", function(){ show(cur-1); });
  });

  function payload(f, typ){
    var d = new FormData(f);
    d.append("typ", typ);
    ["v","ref","utm_source","utm_medium","utm_campaign","utm_term","gclid"].forEach(function(k){
      if(params.get(k)) d.append(k, params.get(k));
    });
    if(typ==="angebot"){
      var t = parseInt(ein.value,10)*parseInt(rh.value,10);
      if(t>0) d.append("wechsel_pro_woche", String(t));
    }
    return d;
  }
  function post(d){
    return fetch(ENDPOINT, {method:"POST", body:d}).then(function(r){ if(!r.ok) throw new Error("http"); return r; });
  }

  form.addEventListener("submit", function(e){
    e.preventDefault();
    if(form.website.value) return;
    if(!validStep(2)) return;
    var btn = document.getElementById("send"), msg = document.getElementById("err3");
    btn.disabled = true; btn.textContent = "Wird gesendet";
    post(payload(form,"angebot")).then(function(){
      track("lead_submit", {objektart:form.objektart.value, kg:parseInt(kg.value,10)||0, wechsel:parseInt(ein.value,10)*parseInt(rh.value,10)});
      form.style.display="none";
      document.querySelector(".progress").style.display="none";
      document.getElementById("ok").classList.add("show");
    }).catch(function(){
      btn.disabled = false; btn.textContent = "Angebot anfordern";
      msg.textContent = "Das Senden hat nicht geklappt. Bitte rufen Sie an: 030 54907425.";
    });
  });

  var cb = document.getElementById("cb");
  cb.addEventListener("submit", function(e){
    e.preventDefault();
    if(cb.website.value) return;
    var msg = document.getElementById("errcb");
    if(!cb.telefon.checkValidity() || cb.telefon.value.replace(/\D/g,"").length<6){
      msg.textContent = "Bitte eine gültige Telefonnummer eintragen."; cb.telefon.focus(); return;
    }
    msg.textContent = "";
    post(payload(cb,"rueckruf")).then(function(){
      track("callback_submit");
      cb.style.display="none";
      document.getElementById("cbok").style.display="block";
    }).catch(function(){
      msg.textContent = "Das Senden hat nicht geklappt. Bitte rufen Sie an: 030 54907425.";
    });
  });
})();
</script>
</body>
</html>
