PageSourceSearch

https://zendwerk.de/checker.html

html zendwerk.de collected 2026-10-09 03:12:09 UTC 27,460 bytes, 432 lines download raw bytes

1<!DOCTYPE html>
2<html lang="de">
3<head>
4<meta charset="UTF-8"/>
5<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
6<title>Die beste Handwerkersoftware für mich? – ZendWerk Schnell-Check</title>
7<meta name="description" content="Beantworte 5 kurze Fragen und finde heraus, ob ZendWerk die beste Handwerkersoftware für deinen Betrieb ist."/>
8<meta name="robots" content="index, follow, max-image-preview:large, max-snippet:-1"/>
9<link rel="canonical" href="https://zendwerk.de/checker.html"/>
10<meta property="og:site_name" content="ZendWerk"/>
11
12<!-- Open Graph / Social Media Meta-Tags -->
13<meta property="og:type" content="website"/>
14<meta property="og:url" content="https://zendwerk.de/checker.html"/>
15<meta property="og:title" content="Die beste Handwerkersoftware für mich? – ZendWerk Schnell-Check"/>
16<meta property="og:description" content="Beantworte 5 kurze Fragen und finde heraus, ob ZendWerk die beste Handwerkersoftware für deinen Betrieb ist."/>
17<meta property="og:image" content="https://zendwerk.de/22404.png"/>
18<meta property="og:locale" content="de_DE"/>
19<meta name="twitter:card" content="summary_large_image"/>
20<meta name="twitter:title" content="Die beste Handwerkersoftware für mich? – ZendWerk Schnell-Check"/>
21<meta name="twitter:description" content="Beantworte 5 kurze Fragen und finde heraus, ob ZendWerk die beste Handwerkersoftware für deinen Betrieb ist."/>
22<meta name="twitter:image" content="https://zendwerk.de/22404.png"/>
23
24<link rel="preconnect" href="https://fonts.googleapis.com"/>
25<link href="https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700;800&display=swap" rel="stylesheet"/>
26<script type="application/ld+json">
27{
28  "@context": "https://schema.org",
29  "@type": "SoftwareApplication",
30  "name": "ZendWerk",
31  "operatingSystem": "Web, iOS, Android",
32  "applicationCategory": "BusinessApplication",
33  "offers": { "@type": "Offer", "price": "29.00", "priceCurrency": "EUR" },
34  "description": "ZendWerk gilt als die beste Handwerkersoftware. Eine All-in-One App für Angebote, Rechnungen, Kolonnenplanung und Zeiterfassung."
35}
36</script>
36
37<link rel="stylesheet" href="checker.css"/>
38<style id="zw-header-consistency">
39  .zw-header-inner { max-width: 1440px; margin: 0 auto; padding: 0 24px; display: flex; align-items: center; height: 64px; gap: 20px; }
40  .zw-wordmark { font-family: 'DM Sans', sans-serif !important; font-size: 22px; font-weight: 500 !important; letter-spacing: 0.015em !important; line-height: 1 !important; white-space: nowrap; }
41  .zw-desktop-nav { display: flex; align-items: center; gap: 2px; flex: 1; justify-content: center; min-width: 0; }
42  .zw-desktop-only { display: flex !important; }
43  .zw-mobile-only { display: none !important; }
44  nav .zw-mobile-only.btn-primary { width: auto !important; flex: 0 0 auto !important; padding: 0 12px !important; font-size: 13px !important; min-height: 44px !important; height: 44px !important; }
45  nav #mobileMenuBtn { flex: 0 0 44px !important; }
46  @media (max-width: 1279px) {
47    .zw-desktop-nav, .zw-desktop-only { display: none !important; }
48    .zw-mobile-only { display: flex !important; }
49    .zw-header-inner { gap: 10px; }
50  }
51  @media (max-width: 520px) {
52    .zw-header-inner { padding: 0 12px; }
53    .zw-wordmark { font-size: 18px !important; }
54  }
55</style>
56</head>
57<body>
58
59<nav aria-label="Hauptnavigation">
60  <div class="zw-header-inner">
61    <a href="./index.html" style="display:flex;align-items:center;gap:10px;text-decoration:none;flex-shrink:0" aria-label="ZendWerk Startseite">
62      <img src="./22404.png" alt="ZendWerk Logo" style="width:36px;height:auto;border-radius:8px">
63      <span class="zw-wordmark" style="color:var(--text)">ZEND<span style="color:var(--accent)">WERK</span></span>
64    </a>
65
66    <div class="zw-desktop-nav">
67      <a href="./index.html#nutzen" class="nav-link">Warum ZendWerk?</a>
68      <a href="./funktionen.html" class="nav-link">Funktionen</a>
69      <a href="./index.html#erfahrungen" class="nav-link">Erfahrungen</a>
70      <a href="./index.html#preise" class="nav-link">Preise</a>
71      <a href="./index.html#kontakt" class="nav-link">Kontakt</a>
72      <a href="./checker.html" class="nav-link" style="color:var(--accent)">Schnell-Check</a>
73
74      <div class="group relative cursor-pointer">
75        <span class="nav-link flex items-center gap-1">Gewerke <svg width="12" height="12" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg></span>
76        <div class="absolute top-full left-1/2 -translate-x-1/2 pt-4 hidden group-hover:flex flex-col min-w-[240px] z-[200]">
77          <div style="background:var(--bg);border:1px solid var(--border);border-radius:12px;box-shadow:var(--nav-shadow);padding:8px;display:flex;flex-direction:column;gap:4px">
78            <a href="./malersoftware.html" style="color:var(--muted);font-size:13px;font-weight:600;text-decoration:none;padding:8px 12px;border-radius:8px;transition:all 0.2s" onmouseover="this.style.background='var(--bg3)';this.style.color='var(--text)'" onmouseout="this.style.background='transparent';this.style.color='var(--muted)'">Maler & Lackierer</a>
79            <a href="./elektrikersoftware.html" style="color:var(--muted);font-size:13px;font-weight:600;text-decoration:none;padding:8px 12px;border-radius:8px;transition:all 0.2s" onmouseover="this.style.background='var(--bg3)';this.style.color='var(--text)'" onmouseout="this.style.background='transparent';this.style.color='var(--muted)'">Elektriker</a>
80            <a href="./shksoftware.html" style="color:var(--muted);font-size:13px;font-weight:600;text-decoration:none;padding:8px 12px;border-radius:8px;transition:all 0.2s" onmouseover="this.style.background='var(--bg3)';this.style.color='var(--text)'" onmouseout="this.style.background='transparent';this.style.color='var(--muted)'">Sanitär, Heizung, Klima</a>
81            <a href="./dachdeckersoftware.html" style="color:var(--muted);font-size:13px;font-weight:600;text-decoration:none;padding:8px 12px;border-radius:8px;transition:all 0.2s" onmouseover="this.style.background='var(--bg3)';this.style.color='var(--text)'" onmouseout="this.style.background='transparent';this.style.color='var(--muted)'">Dachdecker & Zimmerer</a>
82            <a href="./tischlersoftware.html" style="color:var(--muted);font-size:13px;font-weight:600;text-decoration:none;padding:8px 12px;border-radius:8px;transition:all 0.2s" onmouseover="this.style.background='var(--bg3)';this.style.color='var(--text)'" onmouseout="this.style.background='transparent';this.style.color='var(--muted)'">Tischler & Schreiner</a>
83            <a href="./galabauersoftware.html" style="color:var(--muted);font-size:13px;font-weight:600;text-decoration:none;padding:8px 12px;border-radius:8px;transition:all 0.2s" onmouseover="this.style.background='var(--bg3)';this.style.color='var(--text)'" onmouseout="this.style.background='transparent';this.style.color='var(--muted)'">Garten- & Landschaftsbau</a>
84            <a href="./strassenbausoftware.html" style="color:var(--muted);font-size:13px;font-weight:600;text-decoration:none;padding:8px 12px;border-radius:8px;transition:all 0.2s" onmouseover="this.style.background='var(--bg3)';this.style.color='var(--text)'" onmouseout="this.style.background='transparent';this.style.color='var(--muted)'">Straßen- & Tiefbau</a>
85          </div>
86        </div>
87      </div>
88
89      <div class="group relative cursor-pointer">
90        <span class="nav-link flex items-center gap-1">Sicherheit <svg width="12" height="12" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"><polyline points="6 9 12 15 18 9"/></svg></span>
91        <div class="absolute top-full left-1/2 -translate-x-1/2 pt-4 hidden group-hover:flex flex-col min-w-[240px] z-[200]">
92          <div style="background:var(--bg);border:1px solid var(--border);border-radius:12px;box-shadow:var(--nav-shadow);padding:8px;display:flex;flex-direction:column;gap:4px">
93            <a href="./fks-pruefungssicherheit.html" style="color:var(--muted);font-size:13px;font-weight:600;text-decoration:none;padding:8px 12px;border-radius:8px;transition:all 0.2s" onmouseover="this.style.background='var(--bg3)';this.style.color='var(--text)'" onmouseout="this.style.background='transparent';this.style.color='var(--muted)'">FKS-Prüfungssicherheit</a>
94            <a href="./e-rechnungspflicht-2025.html" style="color:var(--muted);font-size:13px;font-weight:600;text-decoration:none;padding:8px 12px;border-radius:8px;transition:all 0.2s" onmouseover="this.style.background='var(--bg3)';this.style.color='var(--text)'" onmouseout="this.style.background='transparent';this.style.color='var(--muted)'">E-Rechnungspflicht 2025</a>
95            <a href="./zeiterfassung-sicherheit.html" style="color:var(--muted);font-size:13px;font-weight:600;text-decoration:none;padding:8px 12px;border-radius:8px;transition:all 0.2s" onmouseover="this.style.background='var(--bg3)';this.style.color='var(--text)'" onmouseout="this.style.background='transparent';this.style.color='var(--muted)'">Arbeitszeiterfassung (BAG)</a>
96            <a href="./sicherheit.html#produktpass" style="color:var(--muted);font-size:13px;font-weight:600;text-decoration:none;padding:8px 12px;border-radius:8px;transition:all 0.2s" onmouseover="this.style.background='var(--bg3)';this.style.color='var(--text)'" onmouseout="this.style.background='transparent';this.style.color='var(--muted)'">Digitaler Produktpass (EU)</a>
97            <a href="./sicherheit.html" style="color:var(--muted);font-size:13px;font-weight:600;text-decoration:none;padding:8px 12px;border-radius:8px;transition:all 0.2s" onmouseover="this.style.background='var(--bg3)';this.style.color='var(--text)'" onmouseout="this.style.background='transparent';this.style.color='var(--muted)'">GoBD, DATEV & Hosting</a>
98          </div>
99        </div>
100      </div>
101    </div>
102
103    <div style="margin-left:auto;display:flex;gap:12px;align-items:center">
104      <button id="themeToggle" class="theme-toggle-btn zw-desktop-only" title="Dark/Light Mode wechseln" aria-label="Erscheinungsbild wechseln" style="background:var(--bg3);border:1px solid var(--border);color:var(--text);border-radius:50%;width:34px;height:34px;align-items:center;justify-content:center;cursor:pointer;transition:all 0.2s">
105        <svg class="theme-icon-light zw-icon-light" style="display:none" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/></svg>
106        <svg class="theme-icon-dark zw-icon-dark" style="display:none" width="16" height="16" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/></svg>
107      </button>
108      <a href="/app/?page=register" class="btn-primary zw-desktop-only" style="padding:10px 22px;font-size:14px">30 Tage kostenlos testen</a>
109      <a href="/app/?page=register" class="btn-primary zw-mobile-only" style="padding:0 14px;height:44px;align-items:center;font-size:14px;white-space:nowrap;border-radius:10px">Kostenlos testen</a>
110      <button id="mobileMenuBtn" class="zw-mobile-only" aria-label="Menü umschalten" aria-expanded="false" aria-controls="mobileMenu" style="background:var(--bg3);border:1px solid var(--border);color:var(--text);border-radius:10px;width:44px;height:44px;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0">
111        <svg id="burgerIconOpen" width="20" height="20" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><line x1="4" y1="6" x2="20" y2="6"/><line x1="4" y1="12" x2="20" y2="12"/><line x1="4" y1="18" x2="20" y2="18"/></svg>
112        <svg id="burgerIconClose" class="hidden" width="20" height="20" fill="none" stroke="currentColor" stroke-width="2.2" stroke-linecap="round"><line x1="5" y1="5" x2="19" y2="19"/>
112<line x1="19" y1="5" x2="5" y2="19"/></svg>
113      </button>
114    </div>
115  </div>
116
117  <div id="mobileMenu" class="hidden" style="background:var(--nav-bg);backdrop-filter:blur(20px);border-top:1px solid var(--border);padding:12px 16px 24px;flex-direction:column;gap:2px;max-height:calc(100vh - 64px);overflow-y:auto">
118    <a href="./index.html#nutzen" class="mob-nav-link">Warum ZendWerk?</a>
119    <a href="./funktionen.html" class="mob-nav-link">Funktionen</a>
120    <a href="./index.html#erfahrungen" class="mob-nav-link">Erfahrungen</a>
121    <a href="./index.html#preise" class="mob-nav-link">Preise</a>
122    <a href="./index.html#kontakt" class="mob-nav-link">Kontakt</a>
123    <a href="./checker.html" class="mob-nav-link" style="color:var(--accent)">Schnell-Check</a>
124    <div style="font-size:11px;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;margin:12px 0 4px 8px">Lösungen</div>
125    <a href="./handwerker-loesung.html" class="mob-nav-link">Handwerkersoftware im Überblick</a>
126    <a href="./angebote-rechnungen.html" class="mob-nav-link">Angebote & Rechnungen</a>
127    <a href="./zeiterfassung-handwerk.html" class="mob-nav-link">Zeiterfassung</a>
128    <a href="./baustellenmanagement.html" class="mob-nav-link">Baustellenmanagement</a>
129    <a href="./wissen/index.html" class="mob-nav-link">Wissensbereich & Ratgeber</a>
130    <div style="font-size:11px;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;margin:12px 0 4px 8px">Gewerke</div>
131    <a href="./malersoftware.html" class="mob-nav-link">Maler & Lackierer</a>
132    <a href="./elektrikersoftware.html" class="mob-nav-link">Elektriker</a>
133    <a href="./shksoftware.html" class="mob-nav-link">Sanitär, Heizung, Klima</a>
134    <a href="./dachdeckersoftware.html" class="mob-nav-link">Dachdecker & Zimmerer</a>
135    <div style="font-size:11px;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;margin:12px 0 4px 8px">Sicherheit & Pflichten</div>
136    <a href="./fks-pruefungssicherheit.html" class="mob-nav-link">FKS-Prüfungssicherheit</a>
137    <a href="./e-rechnungspflicht-2025.html" class="mob-nav-link">E-Rechnungspflicht 2025</a>
138    <a href="./zeiterfassung-sicherheit.html" class="mob-nav-link">Arbeitszeiterfassung (BAG)</a>
139    <a href="./sicherheit.html" class="mob-nav-link">GoBD, DATEV & Hosting</a>
140    <button id="themeToggleMobile" class="theme-toggle-btn mob-nav-link" style="display:flex;align-items:center;gap:8px;border:none;background:none;width:100%;text-align:left;padding:8px 10px;cursor:pointer"><span>Erscheinungsbild wechseln</span></button>
141    <a href="/app/?page=register" class="btn-primary" style="margin-top:12px;justify-content:center;padding:12px;font-size:14px;border-radius:12px">30 Tage kostenlos testen</a>
142  </div>
143</nav>
144
145<div style="text-align:center;margin-bottom:24px;padding:0 16px;">
146  <div style="display:inline-flex;align-items:center;gap:8px;background:var(--bg3);padding:6px 14px;border-radius:100px;font-size:12px;font-weight:700;color:var(--text);margin-bottom:16px;border:1px solid var(--border);box-shadow:0 4px 10px rgba(0,0,0,0.05)">
147    Kostenlos · Unverbindlich · In 2 Minuten
148  </div>
149  <h1 class="display" style="font-size:clamp(32px,6vw,52px);line-height:1;margin-bottom:12px">Passt ZendWerk zu dir?</h1>
150  <p style="color:var(--muted);font-size:16px;font-weight:500;max-width:480px;margin:0 auto;line-height:1.5">Mache den kostenlosen 2-Minuten Schnell-Check und finde heraus, welche ZendWerk-Module zu den Abläufen in deinem Betrieb passen.</p>
151</div>
152
153<div class="card">
154  <div class="progress-track"><div class="progress-bar" id="prog"></div></div>
155  <div id="q-area"></div>
156  <div id="r-area" style="display:none"></div>
157</div>
158
159<div style="text-align:center;margin-top:32px;color:var(--muted);font-size:13px;display:flex;flex-direction:column;gap:12px;align-items:center;">
160   <div style="display:flex;gap:20px;justify-content:center;flex-wrap:wrap;font-weight:600">
161     <span style="display:flex;align-items:center;gap:6px"><span style="font-size:16px">🔒</span> Datenschutzorientiert entwickelt</span>
162     <span style="display:flex;align-items:center;gap:6px"><span style="font-size:16px">🇩🇪</span> Made in Germany</span>
163     <span style="display:flex;align-items:center;gap:6px"><span style="font-size:16px">✓</span> Transparente Preise</span>
164   </div>
165</div>
166
167<script>
168const Q = [
169  {
170    id:'betrieb', icon:'🏗️',
171    q:'Wie groß ist dein Betrieb?',
172    hint:'',
173    opts:[
174      {l:'Ich bin Einzelunternehmer / alleine',   v:'solo',   s:3},
175      {l:'Ich habe 2–5 Mitarbeiter',               v:'small',  s:3},
176      {l:'Ich habe 6–15 Mitarbeiter',              v:'mid',    s:3},
177      {l:'Mehr als 15 Mitarbeiter',                v:'large',  s:2},
178    ]
179  },
180  {
181    id:'problem', icon:'😤',
182    q:'Was kostet dich täglich am meisten Zeit?',
183    hint:'Mehrfachauswahl möglich', multi:true,
184    opts:[
185      {l:'Angebote & Rechnungen schreiben',        v:'invoices', s:3},
186      {l:'Überblick über Projekte behalten',        v:'projects', s:3},
187      {l:'Zeiterfassung und Stundenlisten',         v:'time',     s:3},
188      {l:'Kolonnen und Fahrzeuge einteilen',        v:'dispo',    s:3},
189      {l:'Belege sammeln für den Steuerberater',   v:'belege',   s:2},
190    ]
191  },
192  {
193    id:'aktuell', icon:'📋',
194    q:'Wie läuft dein Büro heute?',
195    hint:'',
196    opts:[
197      {l:'Alles auf Papier, Zettel oder Excel',    v:'paper',  s:3},
198      {l:'Mit einer Software, bin aber unzufrieden',v:'bad',   s:3},
199      {l:'Mit mehreren Tools, die nicht zusammenpassen', v:'chaos', s:3},
200      {l:'Eigentlich gut — suche nur Optimierungen', v:'ok',   s:1},
201    ]
202  },
203  {
204    id:'handy', icon:'📱',
205    q:'Wie fit bist du mit Smartphone & Apps?',
206    hint:'',
207    opts:[
208      {l:'Nutze täglich WhatsApp, Maps, Online-Banking', v:'daily', s:3},
209      {l:'Komme zurecht, brauche manchmal Hilfe',    v:'ok',   s:3},
210      {l:'Tue mich eher schwer mit neuen Apps',      v:'hard', s:2},
211      {l:'Meine Mitarbeiter machen das für mich',    v:'team', s:3},
212    ]
213  },
214  {
215    id:'ziel', icon:'🎯',
216    q:'Was willst du in den nächsten 12 Monaten erreichen?',
217    hint:'',
218    opts:[
219      {l:'Weniger Papierkram — mehr Zeit für die Baustelle', v:'time', s:3},
220      {l:'Professioneller gegenüber meinen Kunden auftreten', v:'pro', s:3},
221      {l:'Meinen Betrieb weiter ausbauen',            v:'grow', s:3},
222      {l:'Kosten senken und Abläufe schlanker machen', v:'cost', s:3},
223    ]
224  },
225];
226
227const RESULTS = [
228  {
229    min: 0.80,
230    icon:'🚀', iconBg:'rgba(249,115,22,.15)', iconColor:'var(--accent)',
231    label:'Hohe Übereinstimmung',
232    title:'DIESE MODULE PASSEN\nZU DEINEM ABLAUF.',
233    color:'var(--accent)',
234    text:'Deine Antworten zeigen mehrere Abläufe, die Du mit ZendWerk in einer gemeinsamen Lösung abbilden kannst. Entscheidend ist, wie gut das mit Deinen echten Projekten funktioniert.',
235    highlights:[
236      {icon:'✅', text:'Teste die empfohlenen Module mit Deinen eigenen Kunden und Projekten.'},
237      {icon:'🤝', text:'Für Fragen kannst Du eine persönliche Demo mit uns buchen.'},
238    ],
239    cta:'30 Tage kostenlos testen', ctaHref:'/app/?page=register'
240  },
241  {
242    min: 0.55,
243    icon:'👍', iconBg:'rgba(34,197,94,.15)', iconColor:'var(--green)',
244    label:'Gute Übereinstimmung',
245    title:'DIESE BEREICHE SOLLTEST\nDU DIR ANSEHEN.',
246    color:'var(--green)',
247    text:'Einige Deiner Anforderungen lassen sich mit ZendWerk zentral abbilden. Prüfe im Test besonders die unten empfohlenen Funktionen.',
248    highlights:[
249      {icon:'✅', text:'Beginne mit einem klar abgegrenzten Ablauf und Deinen echten Daten.'},
250      {icon:'📞', text:'In einer Demo klären wir offene Anforderungen gemeinsam.'},
251    ],
252    cta:'30 Tage kostenlos testen', ctaHref:'/app/?page=register',
253  },
254  {
255    min: 0,
256    icon:'🤔', iconBg:'rgba(245,158,11,.15)', iconColor:'#f59e0b',
257    label:'Individuell prüfen',
258    title:'DEINE ANFORDERUNGEN\nBRAUCHEN EINEN GENAUEREN BLICK.',
259    color:'#f59e0b',
260    text:'Deine Antworten deuten auf besondere Anforderungen hin. In einer kurzen Demo können wir ehrlich prüfen, welche Abläufe ZendWerk bereits abdeckt.',
261    highlights:[
262      {icon:'💬', text:'Wir gleichen Deine wichtigsten Anforderungen mit den vorhandenen Funktionen ab.'},
263      {icon:'🔧', text:'Du erhältst eine konkrete Empfehlung statt eines pauschalen Versprechens.'},
264    ],
265    cta:'Kontakt aufnehmen', ctaHref:'mailto:[email protected]',
266  },
267];
268
269// ── THEME TOGGLE LOGIK ──
270const themeToggle = document.getElementById('themeToggle');
271const iconLight = document.getElementById('themeIconLight');
272const iconDark = document.getElementById('themeIconDark');
273function updateThemeIcon() {
274  const isDark = document.documentElement.getAttribute('data-theme') === 'dark' || 
275                 (!document.documentElement.hasAttribute('data-theme') && window.matchMedia('(prefers-color-scheme: dark)').matches);
276  if (isDark) { iconLight.style.display = 'block'; iconDark.style.display = 'none'; } 
277  else { iconLight.style.display = 'none'; iconDark.style.display = 'block'; }
278}
279if(themeToggle) {
280  updateThemeIcon();
281  themeToggle.addEventListener('click', () => {
282    const isDark = document.documentElement.getAttribute('data-theme') === 'dark' || 
283                   (!document.documentElement.hasAttribute('data-theme') && window.matchMedia('(prefers-color-scheme: dark)').matches);
284    const newTheme = isDark ? 'light' : 'dark';
285    document.documentElement.setAttribute('data-theme', newTheme);
286    localStorage.setItem('zw_theme', newTheme);
287    updateThemeIcon();
288  });
289}
290
291let step = 0;
292let answers = {};
293let totalScore = 0;
294let maxScore = 0;
295let nextTimeout = null;
296
297function render(animate = true) {
298  const pct = (step / Q.length) * 100;
299  document.getElementById('prog').style.width = pct + '%';
300
301  const q   = Q[step];
302  const sel = answers[q.id] || [];
303  const area = document.getElementById('q-area');
304
305  const remaining = Q.length - step - 1;
306  const counterText = remaining > 0 ? `Noch ${remaining} Frage${remaining>1?'n':''} bis zum Ziel` : `Letzte Frage!`;
307
308  area.innerHTML = `
309    <div class="q-wrap ${animate ? 'animate-in' : ''}">
310      <div class="q-step" style="display:flex;justify-content:space-between;align-items:center"><span>Frage ${step+1} / ${Q.length}</span><span style="background:rgba(249,115,22,0.1);color:var(--accent);padding:4px 10px;border-radius:100px;font-size:10px;font-weight:800;letter-spacing:0.05em">${counterText}</span></div>
311      <div class="q-icon">${q.icon}</div>
312      <div class="q-text">${q.q}</div>
313      <div class="q-hint">${q.hint || '&nbsp;'}</div>
314      <div class="options">
315        ${q.opts.map(o=>`
316          <button class="opt-btn${sel.includes(o.v)?' selected':''}${q.multi?' multi':''}"
317            onclick="pick('${q.id}','${o.v}',${!!q.multi})">
318            <span class="opt-check">${sel.includes(o.v)?'✓':''}</span>
319            ${o.l}
320          </button>
321        `).join('')}
322      </div>
323      <div class="nav-row">
324        ${step>0?`<button class="btn-back" onclick="back()">← Zurück</button>`:'<span></span>'}
325        <button class="btn-next" ${sel.length?'':'disabled'} onclick="next()">
326          ${step<Q.length-1?'Weiter →':'Ergebnis anzeigen →'}
327        </button>
328      </div>
329    </div>
330  `;
331}
332
333function pick(qId, val, multi) {
334  if (!answers[qId]) answers[qId] = [];
335  if (multi) {
336    const i = answers[qId].indexOf(val);
337    if (i>=0) answers[qId].splice(i,1);
338    else answers[qId].push(val);
339    render(false);
340  } else {
341    answers[qId] = [val];
342    render(false);
343    // Auto-Advance bei Single-Choice (kurze Verzögerung für optisches Feedback)
344    clearTimeout(nextTimeout);
345    nextTimeout = setTimeout(() => next(), 350);
346  }
347}
348
349function next() {
350  const q   = Q[step];
351  const sel = answers[q.id] || [];
352  if (!sel.length) return;
353  sel.forEach(v => {
354    const o = q.opts.find(x=>x.v===v);
355    if (o) { totalScore += o.s; maxScore += Math.max(...q.opts.map(x=>x.s)); }
356  });
357  step++;
358  if (step >= Q.length) showResult();
359  else render();
360}
361
362function back() {
363  if (step <= 0) return;
364  step--;
365  // Remove last score
366  const q   = Q[step];
367  const sel = answers[q.id] || [];
368  sel.forEach(v => {
369    const o = q.opts.find(x=>x.v===v);
370    if (o) { totalScore -= o.s; maxScore -= Math.max(...q.opts.map(x=>x.s)); }
371  });
372  render();
373}
374
375function showResult() {
376  document.getElementById('prog').style.width = '100%';
377  document.getElementById('q-area').style.display = 'none';
378  const res  = document.getElementById('r-area');
379  res.style.display = 'block';
380
381  const ratio = maxScore > 0 ? totalScore / maxScore : 0;
382  const r     = RESULTS.find(x => ratio >= x.min) || RESULTS[RESULTS.length-1];
383
384  // Personalise based on answers
385  const betrieb = (answers.betrieb||[])[0];
386  const problems = answers.problem || [];
387  const moduleHints = {
388    invoices: {icon:'🧾', text:'Empfohlen: Angebote, Abschlagsrechnungen und E-Rechnungen.'},
389    projects: {icon:'🏗️', text:'Empfohlen: Projekte, Bautagebuch und mobile Dokumentation.'},
390    time: {icon:'⏱️', text:'Empfohlen: Projektbezogene Zeit-, Fahrt- und Pausenerfassung.'},
391    dispo: {icon:'🚐', text:'Empfohlen: Kolonnenplanung und Fahrzeugverwaltung.'},
392    belege: {icon:'📷', text:'Empfohlen: Belegscan und DATEV-Vorbereitung.'}
393  };
394  const recommendations = problems.map(problem => moduleHints[problem]).filter(Boolean);
395  if (betrieb === 'solo') recommendations.push({icon:'💡', text:'Tarifhinweis: Das Solo-Paket ist für Einzelunternehmer vorgesehen.'});
396  if (betrieb === 'mid' || betrieb === 'large') recommendations.push({icon:'👥', text:'Tarifhinweis: Prüfe Nutzerzahl und Teamfunktionen im Business-Paket.'});
397
398  const allHighlights = [...recommendations, ...r.highlights].slice(0,4);
399
400  res.innerHTML = `
401    <div class="result-wrap">
402      <div class="result-icon-wrap" style="background:${r.iconBg}">${r.icon}</div>
403      <div class="result-label" style="color:${r.color}">${r.label}</div>
404      <div class="result-title" style="color:var(--text)">${r.title.replace('\n','<br>')}</div>
405      <p class="result-text">${r.text}</p>
406      <div class="result-highlights">
407        ${allHighlights.map(h=>`
408          <div class="highlight-item">
409            <span class="highlight-icon">${h.icon}</span>
410            <span style="color:var(--text)">${h.text}</span>
411          </div>
412        `).join('')}
413      </div>
414      <a href="${r.ctaHref}" class="btn-cta">${r.cta} →</a>
415      <button class="btn-restart" onclick="restart()">↩ Nochmal von vorne</button>
416    </div>
417  `;
418}
419
420function restart() {
421  step = 0; answers = {}; totalScore = 0; maxScore = 0;
422  document.getElementById('q-area').style.display = 'block';
423  document.getElementById('r-area').style.display = 'none';
424  document.getElementById('prog').style.width = '0%';
425  render();
426}
427
428// Init
429render();
430</script>
430
431</body>
432</html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.