1function scrollBusinesskontoFinderIntoView() { 2 var finder = document.getElementById('businesskonto-finder'); 3 if (!finder) return; 4 5 var target = finder.querySelector('.section-header') || finder; 6 var nav = document.getElementById('site-nav'); 7 var navHeight = nav ? nav.getBoundingClientRect().height : 72; 8 var breathingRoom = window.matchMedia('(max-width: 700px)').matches ? 18 : 28; 9 var targetTop = target.getBoundingClientRect().top + window.pageYOffset; 10 11 window.scrollTo({ 12 top: Math.max(0, targetTop - navHeight - breathingRoom), 13 behavior: 'smooth' 14 }); 15} 16 17(function() { 18var heroFinder = document.querySelector('[data-hero-finder]'); 19if (!heroFinder) return; 20 21var hQ1 = null; 22var hContinueBtn = heroFinder.querySelector('[data-hero-action="continue"]'); 23 24function setHeroProgressSelected() { 25 var dot1 = heroFinder.querySelector('[data-hero-step-dot="1"]'); 26 var dot2 = heroFinder.querySelector('[data-hero-step-dot="2"]'); 27 var line1 = heroFinder.querySelector('[data-hero-step-line="1"]'); 28 if (!dot1 || !dot2 || !line1) return; 29 30 dot1.classList.remove('is-active'); 31 dot1.classList.add('is-done'); 32 line1.classList.add('is-done'); 33 dot2.classList.add('is-active'); 34} 35 36function handOffToMainFinder() { 37 if (!hQ1) return; 38 39 document.dispatchEvent(new CustomEvent('firmendo:heroFinderSelected', { 40 detail: { q1: hQ1 } 41 })); 42 43 var mainFinder = document.getElementById('businesskonto-finder'); 44 if (mainFinder) scrollBusinesskontoFinderIntoView(); 45} 46 47heroFinder.addEventListener('click', function(event) { 48 var q1Button = event.target.closest('[data-hero-q1]'); 49 if (q1Button) { 50 hQ1 = q1Button.dataset.heroQ1; 51 heroFinder.querySelectorAll('[data-hero-q1]').forEach(function(btn) { 52 btn.classList.toggle('is-selected', btn === q1Button); 53 }); 54 hContinueBtn.disabled = false; 55 setHeroProgressSelected(); 56 handOffToMainFinder(); 57 return; 58 } 59 60 var actionButton = event.target.closest('[data-hero-action="continue"]'); 61 if (actionButton) handOffToMainFinder(); 62}); 63})(); 64 65(function() { 66var fQ1 = null, fQ2 = null; 67var fQ1FromHero = false; 68var fLogos = { 69 'Finom': '../images/mini-logos/finom.svg', 70 'Kontist': '../images/mini-logos/kontist.png', 71 'Holvi': '../images/mini-logos/holvi.webp', 72 'FYRST': '../images/mini-logos/fyrst.svg', 73 'Qonto': '../images/mini-logos/qonto.png', 74 'Vivid Business':'../images/mini-logos/vivid-money.png' 75}; 76var fQ1Labels = { 77 einzelunternehmer: 'Freelancer / Selbstständig', 78 gruender: 'Gründer / Startup', 79 gmbh: 'GmbH oder UG', 80 teams: 'Team / Unternehmen' 81}; 82var fDB = { 83 einzelunternehmer: { 84 kostenlos: [ 85 { name:'Finom', tag:'Konto & Buchhaltung in einer App', pros:['Solo-Tarif dauerhaft kostenlos','Sofort-IBAN in wenigen Minuten','Rechnungsstellung inklusive'], price:'Solo-Tarif kostenlos', affiliate:'https://finom.co/?ref=firmendo', review:'/finom-geschaeftskonto/', top:true }, 86 { name:'Kontist', tag:'Speziell für Selbstständige', pros:['Steuervorauszahlungen automatisch berechnet','IBAN sofort â Konto in 8 Minuten','Visa Business Debitkarte inklusive'], price:'Kostenlos im Free-Tarif', affiliate:'https://kontist.com/?ref=firmendo', review:'/kontist-geschaeftskonto/', top:false } 87 ], 88 buchhaltung: [ 89 { name:'Finom', tag:'Konto & Buchhaltung in einer App', pros:['DATEV & Lexoffice-Integration','Rechnungsstellung inklusive','Sofort-IBAN in wenigen Minuten'], price:'Solo-Tarif kostenlos', affiliate:'https://finom.co/?ref=firmendo', review:'/finom-geschaeftskonto/', top:true }, 90 { name:'Kontist', tag:'Automatische Steuerberechnung', pros:['DATEV & Lexoffice inklusive','Steuervorauszahlungen automatisch','Visa Business Debitkarte'], price:'Kostenlos im Free-Tarif', affiliate:'https://kontist.com/?ref=firmendo', review:'/kontist-geschaeftskonto/', top:false } 91 ], 92 komplett: [ 93 { name:'Finom', tag:'Konto & Buchhaltung in einer App', pros:['Rechnungsstellung inklusive','DATEV & Lexoffice-Integration','Sofort-IBAN in wenigen Minuten'], price:'Solo-Tarif kostenlos', affiliate:'https://finom.co/?ref=firmendo', review:'/finom-geschaeftskonto/', top:true }, 94 { name:'Holvi', tag:'All-in-One für Selbstständige', pros:['Buchhaltung & Belege integriert','Rechnungsstellung aus dem Konto','Mehrere Währungen möglich'], price:'Kostenlos im Flex-Tarif', affiliate:'https://holvi.com/?ref=firmendo', review:'/h
94olvi-geschaeftskonto/', top:false } 95 ], 96 cashback: [ 97 { name:'Finom', tag:'1 % Cashback auf Kartenzahlungen', pros:['1 % Cashback ab Basic-Tarif','Visa Business Karte inklusive','Sofort-IBAN in wenigen Minuten'], price:'Solo kostenlos · Basic ab 10,99 â¬/Monat', affiliate:'https://finom.co/?ref=firmendo', review:'/finom-geschaeftskonto/', top:true }, 98 { name:'Kontist', tag:'Visa Business Debitkarte', pros:['Visa Business Debitkarte','Steuerberechnung automatisch','IBAN sofort verfügbar'], price:'Kostenlos im Free-Tarif', affiliate:'https://kontist.com/?ref=firmendo', review:'/kontist-geschaeftskonto/', top:false } 99 ] 100 }, 101 gruender: { 102 kostenlos: [ 103 { name:'FYRST', tag:'Deutsche Bank Tochter â 1. Jahr gratis', pros:['1. Jahr komplett kostenlos','Deutsches IBAN & Bankgarantie','DATEV-Schnittstelle inklusive'], price:'Gratis im 1. Jahr', affiliate:'https://www.fyrst.de/?ref=firmendo', review:'/fyrst-geschaeftskonto/', top:true }, 104 { name:'Finom', tag:'Sofort startklar für Gründer', pros:['Solo-Tarif dauerhaft kostenlos','Sofort-IBAN in wenigen Minuten','Rechnungsstellung inklusive'], price:'Solo-Tarif kostenlos', affiliate:'https://finom.co/?ref=firmendo', review:'/finom-geschaeftskonto/', top:false } 105 ], 106 buchhaltung: [ 107 { name:'FYRST', tag:'DATEV & Buchhaltungs-Integration', pros:['DATEV-Schnittstelle inklusive','Deutsche-Bank-Infrastruktur','Online + Filiale kombinierbar'], price:'Gratis im 1. Jahr', affiliate:'https://www.fyrst.de/?ref=firmendo', review:'/fyrst-geschaeftskonto/', top:true }, 108 { name:'Finom', tag:'Buchhaltung in einer App', pros:['DATEV & Lexoffice-Integration','Rechnungsstellung inklusive','Belege erfassen & kategorisieren'], price:'Solo-Tarif kostenlos', affiliate:'https://finom.co/?ref=firmendo', review:'/finom-geschaeftskonto/', top:false } 109 ], 110 komplett: [ 111 { name:'Finom', tag:'All-in-One für Startups & Gründer', pros:['Rechnungsstellung inklusive','Buchhaltung & Belege in einer App','Sofort-IBAN in wenigen Minuten'], price:'Solo-Tarif kostenlos', affiliate:'https://finom.co/?ref=firmendo', review:'/finom-geschaeftskonto/', top:true }, 112 { name:'FYRST', tag:'Deutsch, sicher und vollständig', pros:['1. Jahr kostenlos','DATEV inklusive','Online + Filiale kombinierbar'], price:'Gratis im 1. Jahr', affiliate:'https://www.fyrst.de/?ref=firmendo', review:'/fyrst-geschaeftskonto/', top:false } 113 ], 114 cashback: [ 115 { name:'Vivid Business', tag:'Cashback & moderne Features', pros:['Cashback auf Kartenzahlungen','Unterkonten für Budgets','Virtuelle Karten verfügbar'], price:'Start-Tarif kostenlos', affiliate:'https://vivid.money/business?ref=firmendo', review:'/vivid-business/', top:true }, 116 { name:'Finom', tag:'1 % Cashback ab Basic', pros:['1 % Cashback auf Kartenzahlungen','Visa Business Karte','Sofort-IBAN in wenigen Minuten'], price:'Solo kostenlos · Basic ab 10,99 â¬/Monat', affiliate:'https://finom.co/?ref=firmendo', review:'/finom-geschaeftskonto/', top:false } 117 ] 118 }, 119 gmbh: { 120 kostenlos: [ 121 { name:'FYRST', tag:'Deutsche Bank Tochter für GmbH & UG', pros:['Stammkapital-Einzahlung möglich','Deutsche-Bank-Infrastruktur','DATEV-Schnittstelle inklusive'], price:'Ab 6 â¬/Monat für juristische Personen', affiliate:'https://www.fyrst.de/?ref=firmendo', review:'/fyrst-geschaeftskonto/', top:true }, 122 { name:'Finom', tag:'Für GmbH, UG & Startups', pros:['2 Nutzer im Basic-Tarif','1 % Cashback auf Kartenzahlungen','Sofort-IBAN in wenigen Minuten'], price:'Basic ab 10,99 â¬/Monat (zzgl. MwSt.)', affiliate:'https://finom.co/?ref=firmendo', review:'/finom-geschaeftskonto/', top:false } 123 ], 124 buchhaltung: [ 125 { name:'Qonto', tag:'DATEV-Integration für GmbH & UG', pros:['DATEV ab höheren Tarifen','Für alle deutschen Rechtsformen','Echtzeit-Benachrichtigungen'], price:'Ab 9 â¬/Monat (zzgl. MwSt.)', affiliate:'https://qonto.com/?ref=firmendo', review:'/qonto-geschaeftskonto/', top:true }, 126 { name:'FYRST', tag:'DATEV & Filiale kombinierbar', pros:['DATEV-Schnittstelle inklusive','Stammkapital-Einzahlung möglich','Online + Filiale kombinierbar'], price:'Ab 6 â¬/Monat', affiliate:'https://www.fyrst.de/?ref=firmendo', review:'/fyrst-geschaeftskonto/', top:false } 127 ], 128 komplett: [ 129 { name:'Qonto', tag:'Ideal für GmbH & UG', pros:['Stammkapital-Einzahlung möglich','Echtzeit-Benachrichtigungen','DATEV ab höheren Tarifen'], price:'Ab 9 â¬/Monat (zzgl. MwSt.)', affiliate:'https://qonto.com/?ref=firmendo', review:'/qonto-geschaeftskonto/', top:true }, 130 { name:'Finom', tag:'All-in-One für GmbH', pros:['Buchhaltung & Belege integriert','2 Nutzer im Basic-Tarif','Visa Business Karte inklusive'], price:'Basic ab 10,99 â¬/Monat (zzgl. MwSt.)', affiliate:'https://finom.co/?ref=firmendo', review:'/finom-geschaeftskonto/', top:false } 131 ], 132 cashback: [ 133 { name:'Finom', tag:'1 % Cashback für GmbH & UG', pros:['1 % Cashback auf Kartenzahlungen','2 Nutzer im Basic-Tarif inklusive','Visa Business Karte inklusive'], price:'Basic ab 10,99 â¬/Monat (zzgl. MwSt.)', affiliate:'https://finom.co/?ref=firmendo', review:'/finom-geschaeftskonto/', top:true }, 134 { name:'Qonto', tag:'Vollständig für GmbH', pros:['Stammkapital-Einzahlung möglich','DATEV-fähig','Strukturierte Kontoführung'], price:'Ab 9 â¬/Monat (zzgl. MwSt.)', affiliate:'https://qonto.com/?ref=firmendo', review:'/qonto-geschaeftskonto/', top:false } 135 ] 136 }, 137 teams: { 138 kostenlos: [ 139 { name:'Vivid Business', tag:'Flexibel für Budgets und Teams', pros:['Start-Tarif dauerhaft kostenlos','Unterkonten für Teambudgets','Virtuelle Karten verfügbar'], price:'Start-Tarif kostenlos', affiliate:'https://vivid.money/business?ref=firmendo', review:'/vivid-business/', top:true }, 140 { name:'Finom', tag:'2 Nutzer im Basic-Tarif', pros:['2 Nutzer im Basic-Tarif inklusive','1 % Cashback auf Kartenzahlungen','Echtzeit-Benachrichtigungen'], price:'Basic ab 10,99 â¬/Monat (zzgl. MwSt.)', affiliate:'https://finom.co/?ref=firmendo', review:'/finom-geschaeftskonto/', top:false } 141 ], 142 buchhaltung: [ 143 { name:'Qonto', tag:'DATEV & Teamzugänge', pros:['DATEV inklusive ab Smart-Tarif','Admin- und Teamzugänge','1 Unterkonto inklusive'], price:'Smart ab 19 â¬/Monat (zzgl. MwSt.)', affiliate:'https://qonto.com/?ref=firmendo', review:'/qonto-geschaeftskonto/', top:true }, 144 { name:'Finom', tag:'Buchhaltung für kleine Teams', pros:['DATEV & Lexoffice-Integration','Buchhaltung & Belege inklusive','2 Nutzer im Basic-Tarif'], price:'Basic ab 10,99 â¬/Monat (zzgl. MwSt.)', affiliate:'https://finom.co/?ref=firmendo', review:'/finom-geschaeftskonto/', top:false } 145 ], 146 komplett: [ 147 { name:'Qonto', tag:'Stark für strukturierte Teams', pros:['Ausgabenrichtlinien & Budgets','Admin- und Teamzugänge','DATEV inklusive ab Smart'], price:'Smart ab 19 â¬/Monat (zzgl. MwSt.)', affiliate:'https://qonto.com/?ref=firmendo', review:'/qonto-geschaeftskonto/', top:true }, 148 { name:'Vivid Business', tag:'Unterkonten & virtuelle Karten', pros:['Unterkonten für Teambudgets','Virtuelle Karten verfügbar','Start-Tarif kostenlos'], price:'Start-Tarif kostenlos', affiliate:'https://vivid.money/business?ref=firmendo', review:'/vivid-business/', top:false } 149 ], 150 cashback: [ 151 { name:'Finom', tag:'Cashback für Teams', pros:['1 % Cashback auf Kartenzahlungen','Mehrere Nutzer inklusive','Echtzeit-Benachrichtigungen'], price:'Basic ab 10,99 â¬/Monat (zzgl. MwSt.)', affiliate:'https://finom.co/?ref=firmendo', review:'/finom-geschaeftskonto/', top:true }, 152 { name:'Vivid Business', tag:'Cashback & Unterkonten', pros:['Cashback ab Prime-Tarif','Unterkonten für Budgets','Virtuelle Karten verfügbar'], price:'Start-Tarif kostenlos', affiliate:'https://vivid.money/business?ref=firmendo', review:'/vivid-business/', top:false } 153 ] 154 } 155}; 156 157function fSelectQ1(val, btn) { 158 fQ1 = val; 159 document.querySelectorAll('#fstep1 .finder-opt').forEach(function(b) { b.classList.remove('selected'); }); 160 if (btn) btn.classList.add('selected'); 161 document.getElementById('fbtn1').disabled = false;
162 document.getElementById('fresult').hidden = true; 163}; 164function fUpdateQ1Summary() { 165 var prefillNote = document.getElementById('finder-prefill-note'); 166 if (!prefillNote || !fQ1) return; 167 168 var source = prefillNote.querySelector('[data-finder-prefill-source]'); 169 var label = prefillNote.querySelector('[data-finder-prefill-label]'); 170 if (source) source.textContent = fQ1FromHero ? 'Aus der Auswahl oben übernommen' : 'Ausgewählt in Schritt 1'; 171 if (label) label.textContent = fQ1Labels[fQ1] || 'Ihre Auswahl'; 172 prefillNote.hidden = false; 173} 174function fSelectQ2(val, btn) { 175 fQ2 = val; 176 document.querySelectorAll('#fstep2 .finder-opt').forEach(function(b) { b.classList.remove('selected'); }); 177 if (btn) btn.classList.add('selected'); 178 document.getElementById('fbtn2').disabled = false; 179 document.getElementById('fresult').hidden = true; 180}; 181function fGoStep2() { 182 document.getElementById('fstep1').hidden = true; 183 var s2 = document.getElementById('fstep2'); 184 s2.hidden = false; 185 document.getElementById('fresult').hidden = true; 186 fUpdateQ1Summary(); 187 document.getElementById('fdot1').className = 'finder-step-dot done'; 188 document.getElementById('fline1').className = 'finder-step-line done'; 189 document.getElementById('fdot2').className = 'finder-step-dot active'; 190 document.getElementById('fline2').className = 'finder-step-line'; 191 document.getElementById('fdot3').className = 'finder-step-dot pending'; 192}; 193function fGoStep1() { 194 document.getElementById('fstep2').hidden = true; 195 document.getElementById('fstep1').hidden = false; 196 document.getElementById('fresult').hidden = true; 197 var prefillNote = document.getElementById('finder-prefill-note'); 198 if (prefillNote) prefillNote.hidden = true; 199 document.getElementById('fdot1').className = 'finder-step-dot active'; 200 document.getElementById('fline1').className = 'finder-step-line'; 201 document.getElementById('fdot2').className = 'finder-step-dot pending'; 202 document.getElementById('fline2').className = 'finder-step-line'; 203 document.getElementById('fdot3').className = 'finder-step-dot pending'; 204}; 205function fShowResult() { 206 if (!fQ1 || !fQ2) return; 207 var recs = fDB[fQ1][fQ2]; 208 document.getElementById('fstep2').hidden = true; 209 document.getElementById('fdot2').className = 'finder-step-dot done'; 210 document.getElementById('fline2').className = 'finder-step-line done'; 211 document.getElementById('fdot3').className = 'finder-step-dot done'; 212 var html = '<div class="finder-result-grid">'; 213 recs.forEach(function(r) { 214 var logoSrc = fLogos[r.name] || ''; 215 var logoHtml = logoSrc 216 ? '<img src="' + logoSrc + '" class="finder-result-logo" alt="' + r.name + '">' 217 : '<div class="finder-result-logo finder-result-logo-fallback">' + r.name.charAt(0) + '</div>'; 218 html += '<div class="finder-result-card' + (r.top ? ' is-top' : '') + '">'; 219 html += '<span class="finder-result-badge ' + (r.top ? 'top' : 'alt') + '">' + (r.top ? 'Top-Empfehlung' : 'Alternative') + '</span>'; 220 html += '<div class="finder-result-header">' + logoHtml + '<div><div class="finder-result-name">' + r.name + '</div><div class="finder-result-tag">' + r.tag + '</div></div></div>'; 221 html += '<ul class="finder-result-pros">' + r.pros.map(function(p) { return '<li>' + p + '</li>'; }).join('') + '</ul>'; 222 html += '<div class="finder-result-price">Preis: <strong>' + r.price + '</strong></div>'; 223 html += '<div class="finder-result-trust"><span>Redaktionell geprüft</span><span>Stand: März 2026</span><span>Kriterienbasiert</span></div>'; 224 html += '<div class="finder-result-links">'; 225 html += '<a href="' + r.affiliate + '" class="finder-link-primary" target="_blank" rel="noopener">Jetzt testen â</a>'; 226 html += '<a href="' + r.review + '" class="finder-link-secondary">Detailtest lesen</a>'; 227 html += '</div></div>'; 228 }); 229 html += '</div><button class="finder-restart" data-finder-action="restart">â Neu starten</button>'; 230 var rv = document.getElementById('fresult'); 231 rv.innerHTML = html; 232 rv.hidden = false; 233}; 234function fRestart() { 235 fQ1 = null; fQ2 = null; 236 fQ1FromHero = false;
237 document.getElementById('fresult').hidden = true; 238 document.getElementById('fstep1').hidden = false; 239 document.getElementById('fstep2').hidden = true; 240 var prefillNote = document.getElementById('finder-prefill-note'); 241 if (prefillNote) prefillNote.hidden = true; 242 document.querySelectorAll('.finder-opt').forEach(function(b) { b.classList.remove('selected'); }); 243 document.getElementById('fbtn1').disabled = true; 244 document.getElementById('fbtn2').disabled = true; 245 document.getElementById('fdot1').className = 'finder-step-dot active'; 246 document.getElementById('fdot2').className = 'finder-step-dot pending'; 247 document.getElementById('fdot3').className = 'finder-step-dot pending'; 248 document.getElementById('fline1').className = 'finder-step-line'; 249 document.getElementById('fline2').className = 'finder-step-line'; 250}; 251 252function initFinderControls() { 253 const finder = document.querySelector('.section-finder'); 254 if (!finder) return; 255 256 finder.addEventListener('click', function(event) { 257 const q1Button = event.target.closest('[data-finder-q1]'); 258 if (q1Button) { 259 fQ1FromHero = false; 260 fSelectQ1(q1Button.dataset.finderQ1, q1Button); 261 var prefillNote = document.getElementById('finder-prefill-note'); 262 if (prefillNote) prefillNote.hidden = true; 263 return; 264 } 265 266 const q2Button = event.target.closest('[data-finder-q2]'); 267 if (q2Button) { 268 fSelectQ2(q2Button.dataset.finderQ2, q2Button); 269 return; 270 } 271 272 const actionButton = event.target.closest('[data-finder-action]'); 273 if (!actionButton) return; 274 275 if (actionButton.dataset.finderAction === 'next') fGoStep2(); 276 if (actionButton.dataset.finderAction === 'back') fGoStep1(); 277 if (actionButton.dataset.finderAction === 'result') fShowResult(); 278 if (actionButton.dataset.finderAction === 'restart') fRestart(); 279 }); 280 281 document.addEventListener('firmendo:heroFinderSelected', function(event) { 282 const q1 = event.detail && event.detail.q1; 283 if (!q1) return; 284 285 const q1Button = finder.querySelector('[data-finder-q1="' + q1 + '"]'); 286 if (!q1Button) return; 287 288 fSelectQ1(q1, q1Button); 289 fQ1FromHero = true; 290 fQ2 = null; 291 finder.querySelectorAll('#fstep2 .finder-opt').forEach(function(btn) { 292 btn.classList.remove('selected'); 293 }); 294 document.getElementById('fbtn2').disabled = true; 295 fGoStep2(); 296 }); 297 298 document.addEventListener('click', function(event) { 299 const scrollLink = event.target.closest('[data-scroll-to-finder]'); 300 if (!scrollLink) return; 301 event.preventDefault(); 302 scrollBusinesskontoFinderIntoView(); 303 }); 304} 305 306initFinderControls(); 307})(); 308 309(() => { 310 function toggleFaq(btn) { 311 const item = btn.closest(".faq-item"); 312 if (!item) return; 313 314 const answer = item.querySelector(".faq-a"); 315 if (!answer) return; 316 317 const isOpen = item.classList.contains("open"); 318 319 const setFaqState = (faqItem, open) => { 320 const faqButton = faqItem.querySelector(".faq-q"); 321 const faqAnswer = faqItem.querySelector(".faq-a"); 322 if (!faqButton || !faqAnswer) return; 323 324 faqItem.classList.toggle("open", open); 325 faqButton.setAttribute("aria-expanded", open ? "true" : "false"); 326 faqAnswer.hidden = !open; 327 }; 328 329 document.querySelectorAll(".faq-item.open").forEach((openItem) => { 330 setFaqState(openItem, false); 331 }); 332 333 if (!isOpen) { 334 setFaqState(item, true); 335 } 336 } 337 338 window.FirmendoSiteShell = { 339 ...(window.FirmendoSiteShell || {}), 340 toggleFaq, 341 }; 342 343 document.querySelectorAll(".faq-q").forEach((button) => { 344 button.addEventListener("click", () => toggleFaq(button)); 345 }); 346})(); 347 348// ââ Segment card switcher ââ 349const segmentTitles = { 350 einzelunternehmer: 'Einzelunternehmer', 351 gruender: 'Gründer', 352 gmbh: 'GmbH & UG', 353 teams: 'Teams' 354}; 355 356function switchSegment(seg, btn) { 357 document.querySelectorAll('.seg-btn').forEach(b => b.classList.remove('active')); 358 if (btn) btn.classList.add('active'); 359 360 const title = segmentTitles[seg] || segmentTitles.einzelunternehmer; 361 const titleNode = document.getElementById('segment-title'); 362 if (titleNode) titleNode.textContent = title; 363 364 const container = document.getElementById('cards-container'); 365 if (!container) return; 366 367 container.querySelectorAll('[data-segment-card]').forEach(card => { 368 card.hidden = card.dataset.segmentCard !== seg; 369 }); 370} 371 372function initSegmentSwitcher() { 373 const activeButton = document.querySelector('.seg-btn.active[data-seg]') || document.querySelector('.seg-btn[data-seg]'); 374 375 document.addEventListener('click', event => { 376 const button = event.target.closest('.seg-btn[data-seg]'); 377 if (!button) return; 378 switchSegment(button.dataset.seg, button); 379 }); 380 381 if (activeButton) switchSegment(activeButton.dataset.seg, activeButton); 382} 383 384initSegmentSwitcher(); 385 386// Activate first seg-card by default + handle click toggle 387(function() { 388 const cards = document.querySelectorAll('.seg-card'); 389 if (!cards.length) return; 390 cards[0].classList.add('active'); 391 cards.forEach(card => { 392 card.addEventListener('click', function(e) { 393 cards.forEach(c => c.classList.remove('active')); 394 this.classList.add('active'); 395 }); 396 }); 397})();
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.