// ─── PODCASTVERKENNER — INGEBOUWDE SECTIE (Spraakmaker Media) ─────────────
// Tweetalig (NL/EN). Exporteert window.PodcastverkennerSection.
// Antwoord-id's zijn taalonafhankelijk, zodat wisselen van taal keuzes behoudt.
(function () {
  const WA_NUMBER = '31639559383';
  const TEL_NUMBER = '+31639559383';
  const TEL_DISPLAY = '06 39 55 93 83';

  const sec = (id, label, sub, advice) => ({ id, label, sub, advice });

  // ── NEDERLANDS ──────────────────────────────────────────────────────────
  const NL = {
    sectors: {
      bedrijf: [
        sec('fin', 'Financiën & verzekeringen', 'Banken, pensioenfondsen, fintechs', 'We hebben gemerkt dat financiële organisaties vaak verrast zijn hoe goed een podcast werkt voor employer branding en het uitleggen van complexe thema’s.'),
        sec('tech', 'Tech & innovatie', 'Software, platforms, AI', 'In tech is het tempo hoog en de aandacht schaars. Een podcast met echte inhoud onderscheidt je sneller dan nóg een blog of webinar.'),
        sec('consult', 'Consultancy & dienstverlening', 'Professionele dienstverleners', 'Voor dienstverleners is een podcast bij uitstek een vehikel voor thought leadership, mits er een scherp standpunt achter zit, geen verkapte sales.'),
        sec('retail', 'Retail, food & consumer brands', 'Merken met een breed publiek', 'Consumentmerken hebben een streepje voor: jullie hebben al een verhaal en een publiek. De kunst is het van reclame naar échte content te tillen.'),
        sec('energie', 'Energie & duurzaamheid', 'De transitie van dichtbij', 'Dit is een van de meest actieve sectoren in podcastland, de concurrentie is er ook. Positionering en onderscheidend vermogen zijn dus extra belangrijk.'),
        sec('zorg', 'Zorg & healthtech', 'Gezondheid en innovatie', 'In de zorg landen menselijke verhalen het hardst. Audio heeft daar een unieke kracht: het maakt complexe of gevoelige onderwerpen invoelbaar.')
      ],
      ngo: [
        sec('mensenrechten', 'Mensenrechten & advocacy', 'Stem geven aan een zaak', 'Audio is een krachtig middel voor advocacy: een microfoon kan een podium zijn voor wie normaal geen podium krijgt.'),
        sec('klimaat', 'Klimaat & duurzaamheid', 'Bewustwording en beweging', 'Dit is een van de meest actieve sectoren in podcastland, de concurrentie is er ook. Positionering en onderscheidend vermogen zijn dus extra belangrijk.'),
        sec('gezondheid', 'Gezondheid & welzijn', 'Mentale en fysieke gezondheid', 'Praten helpt, écht luisteren ook. We maken graag ruimte voor kwetsbare verhalen, want die komen het hardst binnen.'),
        sec('onderwijs-ngo', 'Onderwijs & ontwikkeling', 'Kennis en kansen', 'Verhalen over impact werken beter dan cijfers over impact. Een podcast laat horen wat jullie werk in de praktijk betekent.'),
        sec('cultuur', 'Kunst, cultuur & media', 'Makers en verhalen', 'De culturele sector en podcast zijn natuurlijke bondgenoten. Het draait om een herkenbare stem en een sterk verhaal, precies waar wij van houden.'),
        sec('internationaal', 'Internationale samenwerking', 'Grenzen overstijgen', 'Internationale thema’s blijven vaak abstract. Een podcast brengt ze terug naar mensen, plekken en concrete verhalen.')
      ],
      overheid: [
        sec('gemeente', 'Gemeente of provincie', 'Dichtbij de inwoner', 'Gemeenten gebruiken podcast steeds vaker als intern communicatiemiddel én als manier om inwoners te betrekken bij beleid.'),
        sec('ministerie', 'Ministerie of Rijksoverheid', 'Landelijk beleid', 'Beleid landt zelden via een persbericht. Een podcast vertaalt complexe dossiers naar verhalen die ook buiten Den Haag gehoord worden.'),
        sec('uitvoering', 'Uitvoeringsorganisatie', 'UWV, RVO, DUO en anderen', 'Uitvoeringsorganisaties bereiken enorme doelgroepen. Audio is een toegankelijke manier om uit te leggen wat anders in formele taal verdwijnt.'),
        sec('veiligheid', 'Veiligheid & justitie', 'Vertrouwen en transparantie', 'In dit domein draait alles om vertrouwen. Een podcast die open en menselijk vertelt, bouwt dat vertrouwen geloofwaardiger op dan een campagne.'),
        sec('sociaal', 'Zorg & sociale zekerheid', 'Het sociale domein', 'Hier raken beleid en mensenlevens elkaar direct. Verhalen van de werkvloer maken abstracte regelingen ineens concreet.'),
        sec('ruimte', 'Ruimte, wonen & infrastructuur', 'De fysieke leefomgeving', 'Grote ruimtelijke opgaven vragen om draagvlak. Een podcast neemt mensen mee in de afwegingen achter ingrijpende keuzes.')
      ],
      onderwijs: [
        sec('uni', 'Universiteit of hogeschool', 'Hoger onderwijs', 'Kennispodcasts groeien sterk. Een goed gemaakte podcast positioneert een instelling als thought leader in het vakgebied.'),
        sec('mbo', 'MBO-instelling', 'Praktijkgericht onderwijs', 'Voor het MBO werkt audio goed richting studenten én het werkveld. Authentieke verhalen doen het hier beter dan instituutscommunicatie.'),
        sec('onderzoek', 'Onderzoeksinstituut', 'Wetenschap en kennis', 'Onderzoek verdient meer dan een publicatie achter een paywall. Een podcast brengt jullie bevindingen naar een breder, geïnteresseerd publiek.'),
        sec('thinktank', 'Think tank of kennisplatform', 'Ideeën en debat', 'Voor een kennisplatform is podcast een natuurlijk verlengstuk: het geeft jullie ideeën een stem en een gezicht.'),
        sec('erfgoed', 'Bibliotheek of erfgoed', 'Cultureel geheugen', 'Erfgoed leeft op in verhalen. Audio is bij uitstek geschikt om collecties en geschiedenis tot leven te brengen.')
      ]
    },
    orgFallback: {
      bedrijf: 'Goed om te weten. We denken graag mee over hoe een podcast in jullie specifieke markt onderscheidend kan zijn.',
      ngo: 'Helder. Voor maatschappelijke organisaties draait het om draagvlak en geloofwaardigheid, daar richten we de podcast op in.',
      overheid: 'Dank. In de publieke sector is toegankelijkheid en vertrouwen leidend; daar stemmen we toon en format op af.',
      onderwijs: 'Mooi. Voor kennisinstellingen bouwen we graag aan autoriteit en bereik tegelijk.'
    },
    orgFallbackDefault: 'Goed om te weten, dat geeft ons meteen context voor het gesprek.',
    orgOptions: [
      { id: 'bedrijf', label: 'Bedrijf', sub: 'Van startup tot multinational', advice: 'Podcasts werken steeds vaker als langetermijn contentstrategie voor bedrijven, niet als campagne maar als kanaal. De organisaties die er het meeste uithalen, behandelen het ook zo.' },
      { id: 'ngo', label: 'NGO of non-profit', sub: 'Maatschappelijk gedreven organisaties', advice: 'Voor maatschappelijke organisaties is podcast een krachtig middel om draagvlak te bouwen en verhalen te vertellen die in reguliere media onderbelicht blijven.' },
      { id: 'overheid', label: 'Overheid of semi-overheid', sub: 'Gemeenten, ministeries, uitvoeringsorganisaties', advice: 'Overheidsorganisaties gebruiken podcast steeds meer voor interne communicatie én voor het bereiken van burgers op een toegankelijke manier.' },
      { id: 'onderwijs', label: 'Onderwijs of onderzoek', sub: 'Universiteiten, hogescholen, kennisinstituten', advice: 'Kennispodcasts en onderwijscontent groeien sterk. Een goed gemaakte podcast positioneert een instelling als thought leader in het vakgebied.' }
    ],
    scopeOptions: [
      { id: 'extern', label: 'Extern', sub: 'Voor klanten, burgers, partners of een breed publiek', advice: 'Externe podcasts vragen om een duidelijk publiek en een scherpe positionering. De vraag is niet alleen ‘wat willen we zeggen’ maar ‘waarom zouden mensen dit luisteren’.' },
      { id: 'intern', label: 'Intern', sub: 'Voor medewerkers, management of teams', advice: 'Interne podcasts zijn een van de meest onderbenutte communicatiemiddelen. Ze werken bijzonder goed voor organisaties met veel medewerkers zonder vaste werkplek, denk logistiek, zorg, onderwijs.' },
      { id: 'beide', label: 'Beide', sub: 'We willen het op twee manieren inzetten', advice: 'Dat kan, maar vraagt om een bewuste keuze: een podcast die voor iedereen is, spreekt soms niemand echt aan. We helpen jullie die balans te vinden.' }
    ],
    goalsExtern: [
      { id: 'thought', label: 'Naamsbekendheid & thought leadership', sub: 'Opvallen en gezag opbouwen' },
      { id: 'vertrouwen', label: 'Vertrouwen winnen bij een doelgroep', sub: 'Geloofwaardig worden bij wie ertoe doet' },
      { id: 'toegankelijk', label: 'Complexe thema’s toegankelijk maken', sub: 'Moeilijke stof helder vertellen' },
      { id: 'draagvlak', label: 'Draagvlak creëren', sub: 'Voor beleid, visie of verandering' },
      { id: 'employer', label: 'Talent aantrekken & employer brand', sub: 'Een aantrekkelijke werkgever zijn' },
      { id: 'community', label: 'Community verdiepen en binden', sub: 'Bestaande volgers dichterbij halen' }
    ],
    goalsIntern: [
      { id: 'cultuur', label: 'Interne cultuur & identiteit versterken', sub: 'Het wij-gevoel voeden' },
      { id: 'kennisdeling', label: 'Kennisdeling tussen teams faciliteren', sub: 'Wat de één weet, de ander laten horen' },
      { id: 'leiderschap', label: 'Leiderschap een menselijker gezicht geven', sub: 'Bestuur dichterbij brengen' },
      { id: 'strategie', label: 'Informeren over strategie of verandering', sub: 'Iedereen mee in de richting' },
      { id: 'onboarding', label: 'Onboarding & inwerken ondersteunen', sub: 'Nieuwe mensen sneller thuis laten voelen' }
    ],
    goalAdvice: {
      thought: 'Thought leadership via podcast werkt alleen als er echte inhoud is, een scherp standpunt, echte expertise. Een marketingpodcast die nergens over gaat, werkt averechts.',
      employer: 'Employer branding-podcasts zijn effectiever dan de meeste recruitmentcampagnes, mits ze authentiek zijn. Medewerkersverhalen werken beter dan CEO-monologen.',
      kennisdeling: 'Korte kennissessies van 10 à 15 minuten werken goed voor intern gebruik. Mensen luisteren ze tijdens het woon-werkverkeer of tussen afspraken door.',
      draagvlak: 'Draagvlak bouw je niet met zenden maar met luisteren. Een podcast die ook tegengeluid laat horen, overtuigt geloofwaardiger.',
      toegankelijk: 'Complexe stof toegankelijk maken is een vak apart. De truc zit in redactie vóór de opname: de juiste vragen, niet de juiste antwoorden.',
      cultuur: 'Een interne podcast is een van de meest onderbenutte cultuurmiddelen. Het werkt het best als het echt is, niet als verkapte directiecommunicatie.'
    },
    goalAdviceFallback: 'Heldere ambitie. We vertalen deze doelen straks naar een format en een redactionele aanpak die er ook echt aan bijdragen.',
    audience: [
      { id: 'breed', label: 'Breed publiek', sub: 'Iedereen met interesse in het thema', advice: 'Een ‘breed publiek’ klinkt ambitieus maar is ook het moeilijkst te bereiken. De meest succesvolle podcasts hebben een heel specifiek kernpubliek, de rest volgt vanzelf als de inhoud sterk is.' },
      { id: 'vakgenoten', label: 'Vakgenoten & professionals', sub: 'Mensen uit hetzelfde veld', advice: 'Niche-podcasts voor professionals groeien het snelst. Er is minder concurrentie en het publiek is loyaler.' },
      { id: 'beslissers', label: 'Beslissers & beleidsmakers', sub: 'Directeuren, bestuurders, politici', advice: 'Beslissers luisteren minder, maar intenser. Korte, inhoudelijk sterke afleveringen werken beter dan lange gesprekken.' },
      { id: 'burgers', label: 'Burgers of eindgebruikers', sub: 'De mensen voor wie jullie werken', advice: 'Het bereiken van eindgebruikers vraagt om hún taal, niet die van de organisatie. Dat is precies waar wij in de redactie op sturen.' },
      { id: 'medewerkers', label: 'Medewerkers', sub: 'Intern, binnen de organisatie', advice: 'Interne doelgroepen zijn dankbaar: ze zijn al betrokken. De uitdaging is om relevant te blijven en niet in zendmodus te schieten.' },
      { id: 'studenten', label: 'Studenten of jonge professionals', sub: 'Een nieuwe generatie', advice: 'Voor een jongere doelgroep telt vorm net zo zwaar als inhoud. Tempo, montage en een herkenbare stem maken het verschil.' }
    ],
    audienceFallback: 'Goed. Een scherp beeld van de luisteraar is het halve werk, daar begint elke sterke podcast.',
    formats: [
      { id: 'interview', label: 'Interviews', sub: 'Gesprekken met gasten of experts', advice: 'Het meest gekozen format, en ook dat met de meeste slechte uitvoering. Wat het onderscheidt: goede voorbereiding, redactie vóór de opname, en een presentator die echt luistert.' },
      { id: 'narratief', label: 'Verhalend / narratief', sub: 'Een verhaal dat zich ontvouwt', advice: 'Narratieve podcasts zijn het meest onderscheidend en het meest arbeidsintensief. Als het verhaal sterk genoeg is, loont het altijd.' },
      { id: 'panel', label: 'Panel of debat', sub: 'Meerdere perspectieven in één gesprek', advice: 'Een panel leeft van wrijving en regie. Zonder strakke gespreksleiding wordt het al snel rommelig, daar letten we scherp op.' },
      { id: 'solo', label: 'Solo of monoloog', sub: 'Eén stem, één standpunt', advice: 'Solo-podcasts staan of vallen met de stem en autoriteit van de presentator. Ze zijn moeilijker te produceren dan ze lijken, maar kunnen heel krachtig zijn.' },
      { id: 'kennis', label: 'Kennispodcast of how-to', sub: 'Praktisch, educatief, to the point', advice: 'Praktische kennispodcasts worden trouw beluisterd als ze één belofte waarmaken: de luisteraar gaat altijd iets bruikbaars wijzer naar buiten.' },
      { id: 'hybride', label: 'Hybride', sub: 'Een combinatie van vormen', advice: 'Een hybride vorm geeft vrijheid, maar vraagt om een duidelijke rode draad. We helpen die structuur te bewaken zodat het geen allegaartje wordt.' }
    ],
    formatFreeAdvice: 'Goed. We helpen jullie het juiste format kiezen op basis van alles wat jullie hiervoor hebben ingevuld. Dat is precies waar wij goed in zijn.',
    freq: [
      { id: 'wekelijks', label: 'Wekelijks', advice: 'Wekelijks publiceren is ambitieus en werkt, maar alleen als de redactionele pipeline staat. We raden aan klein te beginnen en op te schalen. Tweewekelijks is voor de meeste organisaties het meest houdbaar.' },
      { id: 'tweewekelijks', label: 'Tweewekelijks', advice: 'Tweewekelijks is voor de meeste organisaties het meest houdbare ritme: vaak genoeg om bij te blijven, rustig genoeg om kwaliteit te bewaken.' },
      { id: 'maandelijks', label: 'Maandelijks', advice: 'Maandelijks is prima voor een inhoudelijk zware podcast. Nadeel: luisteraars verliezen je sneller uit het oog. Overweeg een kortere, bondigere vorm als je toch wat vaker wil verschijnen.' },
      { id: 'campagne', label: 'Per campagne / seizoen', advice: 'Werken in seizoenen geeft focus en een natuurlijk evaluatiemoment. Een bewezen aanpak om te leren zonder je voor altijd vast te leggen.' },
      { id: 'freq-onzeker', label: 'Nog niet zeker', advice: 'Geen probleem. De frequentie is vaak een uitkomst van de strategie, niet het startpunt. We bepalen samen wat haalbaar en houdbaar is.' }
    ],
    duration: [
      { id: 'serie', label: 'Een afgeronde serie', sub: '6 tot 10 afleveringen', advice: 'Een serie van 6 à 8 afleveringen is een bewezen aanpak. Het geeft je ruimte om te leren, zonder dat je je voor eeuwig vastlegt.' },
      { id: 'doorlopend', label: 'Een doorlopend kanaal', sub: 'We bouwen op de lange termijn', advice: 'Goed. Dan is de vraag: hoe zorg je dat het over twee jaar nog steeds relevant en vol energie is? Daar denken we graag in mee.' },
      { id: 'seizoen', label: 'Eén seizoen, dan evalueren', sub: 'Eerst leren, dan beslissen', advice: 'Verstandig. Eén seizoen geeft genoeg data en gevoel om een onderbouwde keuze te maken over een vervolg.' },
      { id: 'dur-onzeker', label: 'Nog niet zeker', sub: 'We denken er nog over', advice: 'Prima. Of het nu een serie of een doorlopend kanaal wordt, bepalen we samen op basis van jullie doel en capaciteit.' }
    ],
    timing: [
      { id: 'asap', label: 'Zo snel mogelijk', sub: 'We willen dit nu oppakken', advice: 'Dat kan. Een goede podcast opzetten kost ons gemiddeld 4 à 6 weken van intake tot eerste opname. Als de keuzes snel worden gemaakt, is het haalbaar.' },
      { id: '1-3', label: 'Over 1 à 3 maanden', sub: 'Tijd om intern draagvlak te organiseren', advice: 'Dat is een comfortabele planning. Genoeg tijd om strategie, format en redactie goed neer te zetten voordat we de studio inlopen.' },
      { id: '3-6', label: 'Over 3 à 6 maanden', sub: 'We zijn in de oriëntatiefase', advice: 'Mooi, dan kunnen we ook de distributie en marketingstrategie goed voorbereiden. De meeste podcasts missen juist daar kansen.' },
      { id: '6plus', label: 'Over meer dan 6 maanden', sub: 'Langetermijnplanning', advice: 'Ruim op tijd. Dan kunnen we rustig bouwen aan een sterk concept en het juiste moment kiezen om te lanceren.' },
      { id: 'timing-onzeker', label: 'Nog geen idee', sub: 'De timing is open', advice: 'Geen punt. Een eerste gesprek helpt vaak al om een realistisch tijdpad te schetsen.' }
    ],
    experience: [
      { id: 'geen', label: 'Geen', sub: 'Nog nooit een podcast gemaakt of begeleid', advice: 'Goed startpunt. Juist omdat jullie nog geen gewoontes hebben opgebouwd, kunnen we het meteen goed opzetten. Geen slechte aannames om eerst te ondermijnen.' },
      { id: 'beetje', label: 'Beetje', sub: 'Rondgekeken, misschien een pilot gedaan', advice: 'De meeste organisaties zitten hier. Jullie weten genoeg om te weten dat het niet vanzelf gaat, dat is al winst.' },
      { id: 'enige', label: 'Enige', sub: 'Al een podcast gehad, maar het kan beter', advice: 'Dan kunnen we bouwen op wat werkte en snijden wat niet werkte. Breng gerust eerdere afleveringen of feedback mee naar het eerste gesprek.' },
      { id: 'veel', label: 'Veel', sub: 'We zoeken productionele ondersteuning', advice: 'Dan gaan we direct de inhoud in. We zijn benieuwd wat jullie al hebben en waar jullie tegenaan lopen.' }
    ],
    help: [
      { id: 'strategie', label: 'Advies & strategie', sub: 'Positionering, doelgroep, format, businesscase' },
      { id: 'redactie', label: 'Inhoud & redactie', sub: 'Concept, vragenlijsten, scripts, voorbereiding' },
      { id: 'opname', label: 'Opname', sub: 'Studio, techniek, begeleiding tijdens opnames' },
      { id: 'montage', label: 'Montage & nabewerking', sub: 'Editing, structuur, pacing, kwaliteitscontrole' },
      { id: 'muziek', label: 'Muziek & sounddesign', sub: 'Eigen jingles, sfeer, herkenbaar geluid' },
      { id: 'distributie', label: 'Publicatie & distributie', sub: 'Platforms, RSS, shownotes, SEO' },
      { id: 'marketing', label: 'Doorontwikkeling & marketing', sub: 'Groei, promotie, nieuwe seizoenen, analyse' }
    ],
    helpAdvice: {
      lowExp: 'Jullie gaven aan weinig ervaring te hebben, dan raden we aan ook strategie en redactie mee te nemen. Zonder die fundering haalt een goede opname niet het maximale eruit.',
      all: 'Jullie zoeken een volledige partner. Dat is precies hoe we het het liefst doen, van eerste gesprek tot laatste aflevering.',
      onlyStrategie: 'Prima. Een goed strategiegesprek kan al enorm verhelderen. We doen ook losse adviestrajecten.',
      fallback: 'Helder. We pakken precies dát op waar jullie behoefte aan hebben, niet meer, niet minder.'
    },
    meta: {
      org: { theme: 'Over jullie organisatie', title: 'Wat voor organisatie zijn jullie?', subtitle: 'Zo kunnen we onze vragen beter op jullie afstemmen.', free: 'Of beschrijf het zelf…' },
      sector: { theme: 'Over jullie organisatie', title: 'In welke sector zijn jullie actief?', subtitle: 'We werken voor organisaties in heel verschillende contexten. Dit helpt ons direct meedenken.', free: 'Of beschrijf jullie sector zelf…' },
      scope: { theme: 'Inzet & doel', title: 'Is de podcast voor intern of extern gebruik?', subtitle: 'Dit bepaalt de toon, het format en de distributie.', free: 'Of beschrijf het zelf…' },
      goals: { theme: 'Inzet & doel', title: 'Wat willen jullie bereiken met de podcast?', subtitle: 'Meerdere antwoorden mogelijk. Kies wat het best past.', free: 'Of omschrijf het zelf…' },
      audience: { theme: 'Publiek', title: 'Voor wie is de podcast bedoeld?', subtitle: 'Hoe specifieker jullie doelgroep, hoe scherper het format.', free: 'Of omschrijf het zelf…' },
      format: { theme: 'Vorm', title: 'Hebben jullie al een idee voor het format?', subtitle: 'Geen idee? Dat is prima, daar helpen we bij. Een eerste richting is al genoeg.', free: 'Bijv: een maandelijkse serie interviews met onze klanten, of een interne podcast over onze strategie voor 2026…' },
      cadence: { theme: 'Planning', title: 'Hoe vaak en hoe lang?', subtitle: 'Consistentie is het geheim van een succesvolle podcast. Wees realistisch.', freqLabel: 'Frequentie', durLabel: 'Looptijd' },
      timing: { theme: 'Planning', title: 'Wanneer wil je live gaan?', subtitle: 'Zodat we weten wat haalbaar is en hoe we het traject inrichten.' },
      experience: { theme: 'Ervaring', title: 'Hoeveel ervaring hebben jullie met podcasts?', subtitle: 'Geen schaamte voor nul, we beginnen graag bij het begin.' },
      help: { theme: 'Samenwerking', title: 'Waar willen jullie hulp bij?', subtitle: 'Meerdere antwoorden mogelijk. Jullie mogen ook alles aanvinken, wij ontzorgen graag.', free: 'Of beschrijf wat jullie nodig hebben…' }
    },
    summaryGroups: [
      { heading: 'Organisatie', keys: ['org', 'sector'] },
      { heading: 'Inzet & doel', keys: ['scope', 'goals'] },
      { heading: 'Publiek', keys: ['audience'] },
      { heading: 'Vorm & planning', keys: ['format', 'cadence', 'timing'] },
      { heading: 'Ervaring & samenwerking', keys: ['experience', 'help'] }
    ],
    qLabel: { org: 'Type organisatie', sector: 'Sector', scope: 'Intern / extern', goals: 'Doelen', audience: 'Doelgroep', format: 'Format', cadence: 'Ritme & looptijd', timing: 'Gewenste start', experience: 'Ervaring', help: 'Hulpvraag' },
    band: { eyebrow: 'Podcastverkenner', titlePre: 'Vertel ons meer over jullie ', titleItalic: 'podcast idee.', sub: 'We denken met je mee. Aan het eind krijg je een helder overzicht dat je direct met ons kunt delen.' },
    ui: {
      adviceHead: 'Even meedenken',
      notedSingular: 'ding genoteerd', notedPlural: 'dingen genoteerd',
      back: 'Terug', next: 'Verder', overview: 'Bekijk overzicht', skip: 'Sla over, ik weet het nog niet',
      summaryEyebrow: 'Jullie uitkomst', summaryPre: 'Dit is wat we van jullie weten. ', summaryItalic: 'Op basis hiervan kunnen we jullie direct goed advies geven.',
      summaryEmpty: 'Er zijn nog geen keuzes ingevuld.',
      copy: 'Kopieer overzicht', copied: '✓ Gekopieerd',
      mailT: 'Mailen', mailS: 'Met dit overzicht alvast ingevuld',
      waT: 'WhatsApp', waS: 'Stuur je overzicht direct naar ons',
      telT: 'Bellen',
      reply: 'We reageren binnen één werkdag.',
      edit: 'Antwoorden aanpassen', restart: 'Opnieuw beginnen',
      summaryHeader: 'Mijn Podcastverkenner, Spraakmaker Media', summaryClosing: 'Graag hoor ik hoe jullie hierop verder kunnen denken.', mailSubject: 'Podcastverkenner, onze uitkomst'
    }
  };

  // ── ENGLISH ─────────────────────────────────────────────────────────────
  const EN = {
    sectors: {
      bedrijf: [
        sec('fin', 'Finance & insurance', 'Banks, pension funds, fintechs', 'We’ve found that financial organisations are often surprised how well a podcast works for employer branding and explaining complex topics.'),
        sec('tech', 'Tech & innovation', 'Software, platforms, AI', 'In tech the pace is high and attention is scarce. A podcast with real substance sets you apart faster than yet another blog or webinar.'),
        sec('consult', 'Consultancy & professional services', 'Professional service firms', 'For service firms a podcast is the ideal vehicle for thought leadership, as long as there’s a sharp point of view behind it and not veiled sales.'),
        sec('retail', 'Retail, food & consumer brands', 'Brands with a broad audience', 'Consumer brands have a head start: you already have a story and an audience. The art is lifting it from advertising to genuine content.'),
        sec('energie', 'Energy & sustainability', 'The transition up close', 'This is one of the most active sectors in podcasting, and the competition is here too. Positioning and distinctiveness matter all the more.'),
        sec('zorg', 'Healthcare & healthtech', 'Health and innovation', 'In healthcare, human stories land hardest. Audio has a unique power there: it makes complex or sensitive subjects tangible.')
      ],
      ngo: [
        sec('mensenrechten', 'Human rights & advocacy', 'Giving a cause a voice', 'Audio is a powerful tool for advocacy: a microphone can be a stage for those who normally don’t get one.'),
        sec('klimaat', 'Climate & sustainability', 'Awareness and movement', 'This is one of the most active sectors in podcasting, and the competition is here too. Positioning and distinctiveness matter all the more.'),
        sec('gezondheid', 'Health & wellbeing', 'Mental and physical health', 'Talking helps, and so does really listening. We’re glad to make room for vulnerable stories, because those land hardest.'),
        sec('onderwijs-ngo', 'Education & development', 'Knowledge and opportunity', 'Stories about impact work better than figures about impact. A podcast lets people hear what your work means in practice.'),
        sec('cultuur', 'Arts, culture & media', 'Makers and stories', 'The cultural sector and podcasting are natural allies. It’s about a recognisable voice and a strong story, exactly what we love.'),
        sec('internationaal', 'International cooperation', 'Crossing borders', 'International themes often stay abstract. A podcast brings them back to people, places and concrete stories.')
      ],
      overheid: [
        sec('gemeente', 'Municipality or province', 'Close to the resident', 'Municipalities increasingly use podcasts as an internal communication tool and as a way to involve residents in policy.'),
        sec('ministerie', 'Ministry or central government', 'National policy', 'Policy rarely lands through a press release. A podcast translates complex files into stories that are heard beyond the political bubble.'),
        sec('uitvoering', 'Public service body', 'Agencies like UWV, RVO, DUO', 'Public service bodies reach huge audiences. Audio is an accessible way to explain what otherwise disappears into formal language.'),
        sec('veiligheid', 'Safety & justice', 'Trust and transparency', 'In this domain everything turns on trust. A podcast that speaks openly and humanly builds that trust more credibly than a campaign.'),
        sec('sociaal', 'Health & social security', 'The social domain', 'Here policy and people’s lives meet directly. Stories from the front line make abstract schemes suddenly concrete.'),
        sec('ruimte', 'Spatial, housing & infrastructure', 'The physical environment', 'Large spatial challenges need public support. A podcast takes people through the considerations behind far-reaching choices.')
      ],
      onderwijs: [
        sec('uni', 'University or college', 'Higher education', 'Knowledge podcasts are growing fast. A well-made podcast positions an institution as a thought leader in its field.'),
        sec('mbo', 'Vocational institution', 'Practice-based education', 'For vocational education, audio works well towards students and the field alike. Authentic stories beat institutional comms here.'),
        sec('onderzoek', 'Research institute', 'Science and knowledge', 'Research deserves more than a paper behind a paywall. A podcast brings your findings to a wider, interested audience.'),
        sec('thinktank', 'Think tank or knowledge platform', 'Ideas and debate', 'For a knowledge platform a podcast is a natural extension: it gives your ideas a voice and a face.'),
        sec('erfgoed', 'Library or heritage', 'Cultural memory', 'Heritage comes alive in stories. Audio is perfectly suited to bringing collections and history to life.')
      ]
    },
    orgFallback: {
      bedrijf: 'Good to know. We’re happy to think along about how a podcast can stand out in your specific market.',
      ngo: 'Clear. For social organisations it’s all about support and credibility, and that’s what we’ll aim the podcast at.',
      overheid: 'Thanks. In the public sector accessibility and trust lead the way; we’ll tune tone and format to that.',
      onderwijs: 'Great. For knowledge institutions we like to build authority and reach at the same time.'
    },
    orgFallbackDefault: 'Good to know, that gives us context for the conversation right away.',
    orgOptions: [
      { id: 'bedrijf', label: 'Company', sub: 'From startup to multinational', advice: 'Podcasts increasingly work as a long-term content strategy for companies, not as a campaign but as a channel. The organisations that get the most out of it treat it that way too.' },
      { id: 'ngo', label: 'NGO or non-profit', sub: 'Purpose-driven organisations', advice: 'For social organisations, podcasting is a powerful way to build support and tell stories that stay underexposed in mainstream media.' },
      { id: 'overheid', label: 'Government or semi-government', sub: 'Municipalities, ministries, public bodies', advice: 'Government organisations increasingly use podcasts for internal communication and to reach citizens in an accessible way.' },
      { id: 'onderwijs', label: 'Education or research', sub: 'Universities, colleges, knowledge institutes', advice: 'Knowledge and educational podcasts are growing fast. A well-made podcast positions an institution as a thought leader in its field.' }
    ],
    scopeOptions: [
      { id: 'extern', label: 'External', sub: 'For customers, citizens, partners or a broad audience', advice: 'External podcasts need a clear audience and sharp positioning. The question isn’t just ‘what do we want to say’ but ‘why would people listen’.' },
      { id: 'intern', label: 'Internal', sub: 'For employees, management or teams', advice: 'Internal podcasts are one of the most underused communication tools. They work especially well for organisations with many employees without a fixed workplace, think logistics, healthcare, education.' },
      { id: 'beide', label: 'Both', sub: 'We want to use it in two ways', advice: 'That’s possible, but it takes a conscious choice: a podcast that’s for everyone sometimes speaks to no one. We’ll help you find that balance.' }
    ],
    goalsExtern: [
      { id: 'thought', label: 'Build awareness & thought leadership', sub: 'Stand out and build authority' },
      { id: 'vertrouwen', label: 'Win trust with an audience', sub: 'Become credible with those who matter' },
      { id: 'toegankelijk', label: 'Make complex themes accessible', sub: 'Tell difficult material clearly' },
      { id: 'draagvlak', label: 'Create support', sub: 'For policy, vision or change' },
      { id: 'employer', label: 'Attract talent & employer brand', sub: 'Be an attractive employer' },
      { id: 'community', label: 'Deepen and bind a community', sub: 'Bring existing followers closer' }
    ],
    goalsIntern: [
      { id: 'cultuur', label: 'Strengthen internal culture & identity', sub: 'Feed the sense of belonging' },
      { id: 'kennisdeling', label: 'Enable knowledge sharing between teams', sub: 'Let what one knows reach the others' },
      { id: 'leiderschap', label: 'Give leadership a more human face', sub: 'Bring management closer' },
      { id: 'strategie', label: 'Inform about strategy or change', sub: 'Everyone aligned on direction' },
      { id: 'onboarding', label: 'Support onboarding', sub: 'Help new people settle in faster' }
    ],
    goalAdvice: {
      thought: 'Thought leadership via podcast only works if there’s real substance, a sharp point of view, genuine expertise. A marketing podcast about nothing backfires.',
      employer: 'Employer branding podcasts are more effective than most recruitment campaigns, provided they’re authentic. Employee stories work better than CEO monologues.',
      kennisdeling: 'Short knowledge sessions of 10 to 15 minutes work well internally. People listen on their commute or between meetings.',
      draagvlak: 'You don’t build support by broadcasting but by listening. A podcast that also airs counter-voices convinces more credibly.',
      toegankelijk: 'Making complex material accessible is a craft of its own. The trick is in the editing before recording: the right questions, not the right answers.',
      cultuur: 'An internal podcast is one of the most underused culture tools. It works best when it’s genuine, not veiled management comms.'
    },
    goalAdviceFallback: 'Clear ambition. We’ll translate these goals into a format and editorial approach that actually contribute to them.',
    audience: [
      { id: 'breed', label: 'Broad audience', sub: 'Anyone interested in the theme', advice: 'A ‘broad audience’ sounds ambitious but is also the hardest to reach. The most successful podcasts have a very specific core audience, the rest follows once the content is strong.' },
      { id: 'vakgenoten', label: 'Peers & professionals', sub: 'People from the same field', advice: 'Niche podcasts for professionals grow fastest. There’s less competition and the audience is more loyal.' },
      { id: 'beslissers', label: 'Decision-makers & policymakers', sub: 'Directors, executives, politicians', advice: 'Decision-makers listen less, but more intently. Short, substantive episodes work better than long conversations.' },
      { id: 'burgers', label: 'Citizens or end users', sub: 'The people you work for', advice: 'Reaching end users takes their language, not the organisation’s. That’s exactly what we steer on in the editing.' },
      { id: 'medewerkers', label: 'Employees', sub: 'Internal, within the organisation', advice: 'Internal audiences are grateful: they’re already engaged. The challenge is staying relevant and not slipping into broadcast mode.' },
      { id: 'studenten', label: 'Students or young professionals', sub: 'A new generation', advice: 'For a younger audience, form matters as much as content. Pace, editing and a recognisable voice make the difference.' }
    ],
    audienceFallback: 'Good. A sharp picture of the listener is half the work, that’s where every strong podcast begins.',
    formats: [
      { id: 'interview', label: 'Interviews', sub: 'Conversations with guests or experts', advice: 'The most chosen format, and also the one most often done badly. What sets it apart: good preparation, editing before recording, and a host who really listens.' },
      { id: 'narratief', label: 'Narrative', sub: 'A story that unfolds across episodes', advice: 'Narrative podcasts are the most distinctive and the most labour-intensive. If the story is strong enough, it always pays off.' },
      { id: 'panel', label: 'Panel or debate', sub: 'Several perspectives in one conversation', advice: 'A panel thrives on friction and direction. Without firm moderation it quickly turns messy, and that’s something we watch closely.' },
      { id: 'solo', label: 'Solo or monologue', sub: 'One voice, one point of view', advice: 'Solo podcasts stand or fall with the host’s voice and authority. They’re harder to produce than they look, but can be very powerful.' },
      { id: 'kennis', label: 'Knowledge or how-to', sub: 'Practical, educational, to the point', advice: 'Practical knowledge podcasts get loyal listeners if they keep one promise: the listener always leaves a little wiser.' },
      { id: 'hybride', label: 'Hybrid', sub: 'A combination of forms', advice: 'A hybrid form gives freedom but needs a clear through-line. We help guard that structure so it doesn’t become a hotchpotch.' }
    ],
    formatFreeAdvice: 'Good. We’ll help you choose the right format based on everything you’ve filled in so far. That’s exactly what we’re good at.',
    freq: [
      { id: 'wekelijks', label: 'Weekly', advice: 'Publishing weekly is ambitious and works, but only if the editorial pipeline is in place. We recommend starting small and scaling up. Biweekly is the most sustainable for most organisations.' },
      { id: 'tweewekelijks', label: 'Biweekly', advice: 'Biweekly is the most sustainable rhythm for most organisations: often enough to stay present, calm enough to safeguard quality.' },
      { id: 'maandelijks', label: 'Monthly', advice: 'Monthly is fine for a substantive podcast. The downside: listeners lose track of you faster. Consider a shorter, tighter form if you want to appear more often.' },
      { id: 'campagne', label: 'Per campaign / season', advice: 'Working in seasons gives focus and a natural moment to evaluate. A proven way to learn without committing forever.' },
      { id: 'freq-onzeker', label: 'Not sure yet', advice: 'No problem. Frequency is often an outcome of the strategy, not the starting point. We’ll decide together what’s feasible and sustainable.' }
    ],
    duration: [
      { id: 'serie', label: 'A finite series', sub: '6 to 10 episodes', advice: 'A series of 6 to 8 episodes is a proven approach. It gives you room to learn without locking yourself in forever.' },
      { id: 'doorlopend', label: 'An ongoing channel', sub: 'We’re building for the long term', advice: 'Good. Then the question is: how do you keep it relevant and full of energy two years from now? We’re glad to think along.' },
      { id: 'seizoen', label: 'One season, then evaluate', sub: 'Learn first, then decide', advice: 'Sensible. One season gives enough data and feel to make a well-founded choice about continuing.' },
      { id: 'dur-onzeker', label: 'Not sure yet', sub: 'We’re still thinking', advice: 'Fine. Whether it becomes a series or an ongoing channel, we’ll decide together based on your goal and capacity.' }
    ],
    timing: [
      { id: 'asap', label: 'As soon as possible', sub: 'We want to pick this up now', advice: 'That’s possible. Setting up a good podcast takes us about 4 to 6 weeks from intake to first recording. If choices are made quickly, it’s feasible.' },
      { id: '1-3', label: 'In 1 to 3 months', sub: 'Time to organise internal support', advice: 'That’s a comfortable timeline. Enough time to set up strategy, format and editorial well before we step into the studio.' },
      { id: '3-6', label: 'In 3 to 6 months', sub: 'We’re in the orientation phase', advice: 'Nice, then we can also prepare the distribution and marketing strategy properly. That’s exactly where most podcasts miss chances.' },
      { id: '6plus', label: 'In more than 6 months', sub: 'Long-term planning', advice: 'Plenty of time. Then we can calmly build a strong concept and pick the right moment to launch.' },
      { id: 'timing-onzeker', label: 'No idea yet', sub: 'The timing is open', advice: 'No problem. A first conversation often already helps to sketch a realistic timeline.' }
    ],
    experience: [
      { id: 'geen', label: 'None', sub: 'Never made or produced a podcast', advice: 'Good starting point. Precisely because you haven’t built up habits yet, we can set it up well from the start. No bad assumptions to undo first.' },
      { id: 'beetje', label: 'A little', sub: 'Looked around, maybe did a pilot', advice: 'Most organisations are here. You know enough to know it doesn’t happen by itself, and that’s already a win.' },
      { id: 'enige', label: 'Some', sub: 'Had a podcast, but want to do it better', advice: 'Then we can build on what worked and cut what didn’t. Feel free to bring earlier episodes or feedback to the first meeting.' },
      { id: 'veel', label: 'A lot', sub: 'We’re looking for production support', advice: 'Then we’ll dive straight into the content. We’re curious what you already have and where you’re running into things.' }
    ],
    help: [
      { id: 'strategie', label: 'Advice & strategy', sub: 'Positioning, audience, format, business case' },
      { id: 'redactie', label: 'Content & editorial', sub: 'Concept, question lists, scripts, preparation' },
      { id: 'opname', label: 'Recording', sub: 'Studio, technology, guidance during sessions' },
      { id: 'montage', label: 'Editing & post-production', sub: 'Editing, structure, pacing, quality control' },
      { id: 'muziek', label: 'Music & sound design', sub: 'Custom jingles, atmosphere, a recognisable sound' },
      { id: 'distributie', label: 'Publishing & distribution', sub: 'Platforms, RSS, show notes, SEO' },
      { id: 'marketing', label: 'Growth & marketing', sub: 'Promotion, new seasons, analytics' }
    ],
    helpAdvice: {
      lowExp: 'You indicated little experience, so we’d recommend bringing strategy and editorial along too. Without that foundation a good recording won’t reach its full potential.',
      all: 'You’re looking for a full partner. That’s exactly how we like to work, from first conversation to final episode.',
      onlyStrategie: 'Fine. A good strategy session can already clarify a lot. We also do stand-alone advisory projects.',
      fallback: 'Clear. We’ll pick up exactly what you need, no more, no less.'
    },
    meta: {
      org: { theme: 'About your organisation', title: 'What kind of organisation are you?', subtitle: 'So we can tailor our questions to you.', free: 'Or describe it yourself…' },
      sector: { theme: 'About your organisation', title: 'Which sector are you in?', subtitle: 'We work with organisations in very different contexts. This helps us think along right away.', free: 'Or describe your sector yourself…' },
      scope: { theme: 'Use & goal', title: 'Is the podcast for internal or external use?', subtitle: 'This determines the tone, format and distribution.', free: 'Or describe it yourself…' },
      goals: { theme: 'Use & goal', title: 'What do you want to achieve with the podcast?', subtitle: 'Multiple answers possible. Choose what fits best.', free: 'Or describe it yourself…' },
      audience: { theme: 'Audience', title: 'Who is the podcast for?', subtitle: 'The more specific your audience, the sharper the format.', free: 'Or describe it yourself…' },
      format: { theme: 'Form', title: 'Do you already have a format in mind?', subtitle: 'No idea? That’s fine, we’ll help. A first direction is enough.', free: 'E.g. a monthly series of interviews with our clients, or an internal podcast about our 2026 strategy…' },
      cadence: { theme: 'Planning', title: 'How often and how long?', subtitle: 'Consistency is the secret of a successful podcast. Be realistic.', freqLabel: 'Frequency', durLabel: 'Duration' },
      timing: { theme: 'Planning', title: 'When do you want to go live?', subtitle: 'So we know what’s feasible and how to set up the process.' },
      experience: { theme: 'Experience', title: 'How much podcast experience do you have?', subtitle: 'No shame in zero, we’re happy to start at the beginning.' },
      help: { theme: 'Collaboration', title: 'What would you like help with?', subtitle: 'Multiple answers possible. Feel free to tick everything, we’re glad to take it off your hands.', free: 'Or describe what you need…' }
    },
    summaryGroups: [
      { heading: 'Organisation', keys: ['org', 'sector'] },
      { heading: 'Use & goal', keys: ['scope', 'goals'] },
      { heading: 'Audience', keys: ['audience'] },
      { heading: 'Form & planning', keys: ['format', 'cadence', 'timing'] },
      { heading: 'Experience & collaboration', keys: ['experience', 'help'] }
    ],
    qLabel: { org: 'Organisation type', sector: 'Sector', scope: 'Internal / external', goals: 'Goals', audience: 'Audience', format: 'Format', cadence: 'Rhythm & duration', timing: 'Desired start', experience: 'Experience', help: 'Help needed' },
    band: { eyebrow: 'Podcast Explorer', titlePre: 'Tell us more about your ', titleItalic: 'podcast idea.', sub: 'We’ll think along with you. At the end you’ll get a clear overview that you can share with us directly.' },
    ui: {
      adviceHead: 'Thinking along',
      notedSingular: 'thing noted', notedPlural: 'things noted',
      back: 'Back', next: 'Continue', overview: 'View overview', skip: 'Skip, I don’t know yet',
      summaryEyebrow: 'Your outcome', summaryPre: 'This is what we know about you. ', summaryItalic: 'With this we can give you sound advice right away.',
      summaryEmpty: 'No choices filled in yet.',
      copy: 'Copy overview', copied: '✓ Copied',
      mailT: 'Email', mailS: 'Pre-filled with this overview',
      waT: 'WhatsApp', waS: 'Send your overview straight to us',
      telT: 'Call',
      reply: 'We respond within one business day.',
      edit: 'Adjust answers', restart: 'Start over',
      summaryHeader: 'My Podcast Explorer, Spraakmaker Media', summaryClosing: 'I’d love to hear how you’d take this further.', mailSubject: 'Podcast Explorer, our outcome'
    }
  };

  const PACKS = { nl: NL, en: EN };

  // ── Bouw de vragenflow uit een taalpack ─────────────────────────────────
  function buildQuestions(P) {
    return [
      { id: 'org', theme: P.meta.org.theme, type: 'single', title: P.meta.org.title, subtitle: P.meta.org.subtitle, options: P.orgOptions, freePlaceholder: P.meta.org.free },
      { id: 'sector', theme: P.meta.sector.theme, type: 'single', title: P.meta.sector.title, subtitle: P.meta.sector.subtitle,
        options: (a) => P.sectors[a.org && a.org.choice] || P.sectors.bedrijf,
        freePlaceholder: P.meta.sector.free,
        freeAdvice: (a) => P.orgFallback[a.org && a.org.choice] || P.orgFallbackDefault },
      { id: 'scope', theme: P.meta.scope.theme, type: 'single', title: P.meta.scope.title, subtitle: P.meta.scope.subtitle, options: P.scopeOptions, freePlaceholder: P.meta.scope.free },
      { id: 'goals', theme: P.meta.goals.theme, type: 'multi', title: P.meta.goals.title, subtitle: P.meta.goals.subtitle,
        options: (a) => { const s = a.scope && a.scope.choice; if (s === 'intern') return P.goalsIntern; if (s === 'beide') return [...P.goalsExtern, ...P.goalsIntern]; return P.goalsExtern; },
        freePlaceholder: P.meta.goals.free,
        adviceMulti: (sel) => { for (const k of ['thought', 'employer', 'kennisdeling', 'draagvlak', 'cultuur', 'toegankelijk']) { if (sel.includes(k) && P.goalAdvice[k]) return P.goalAdvice[k]; } return P.goalAdviceFallback; } },
      { id: 'audience', theme: P.meta.audience.theme, type: 'multi', title: P.meta.audience.title, subtitle: P.meta.audience.subtitle, options: P.audience, freePlaceholder: P.meta.audience.free,
        adviceMulti: (sel) => { const f = P.audience.find((o) => sel.includes(o.id)); return f ? f.advice : P.audienceFallback; } },
      { id: 'format', theme: P.meta.format.theme, type: 'multi', title: P.meta.format.title, subtitle: P.meta.format.subtitle, options: P.formats, freePlaceholder: P.meta.format.free,
        adviceMulti: (sel) => { const f = P.formats.find((o) => sel.includes(o.id)); return f ? f.advice : null; },
        freeAdvice: () => P.formatFreeAdvice },
      { id: 'cadence', theme: P.meta.cadence.theme, type: 'duo', title: P.meta.cadence.title, subtitle: P.meta.cadence.subtitle,
        groupA: { key: 'freq', label: P.meta.cadence.freqLabel, options: P.freq },
        groupB: { key: 'duration', label: P.meta.cadence.durLabel, options: P.duration } },
      { id: 'timing', theme: P.meta.timing.theme, type: 'single', title: P.meta.timing.title, subtitle: P.meta.timing.subtitle, options: P.timing },
      { id: 'experience', theme: P.meta.experience.theme, type: 'single', title: P.meta.experience.title, subtitle: P.meta.experience.subtitle, options: P.experience },
      { id: 'help', theme: P.meta.help.theme, type: 'multi', title: P.meta.help.title, subtitle: P.meta.help.subtitle, options: P.help, freePlaceholder: P.meta.help.free,
        adviceMulti: (sel, a) => { const exp = a.experience && a.experience.choice; if (sel.length === 1 && sel[0] === 'opname' && (exp === 'geen' || exp === 'beetje')) return P.helpAdvice.lowExp; if (sel.length >= 6) return P.helpAdvice.all; if (sel.length === 1 && sel[0] === 'strategie') return P.helpAdvice.onlyStrategie; return P.helpAdvice.fallback; } }
    ];
  }

  const resolveOptions = (q, a) => (typeof q.options === 'function' ? q.options(a) : q.options);

  // ── Componenten ─────────────────────────────────────────────────────────
  function EqMark() {
    return (<span className="pv-eq" aria-hidden="true"><span></span><span></span><span></span><span></span></span>);
  }
  function Advice({ text, head }) {
    if (!text) return null;
    return (<div className="pv-advice" role="note"><div className="pv-advice-head"><EqMark /><span>{head}</span></div><p>{text}</p></div>);
  }
  function Card({ option, selected, multi, onClick }) {
    return (
      <button type="button" className={'pv-card' + (selected ? ' is-selected' : '')} aria-pressed={selected} onClick={onClick}>
        <span className="pv-card-tick" aria-hidden="true">
          {multi ? <span className="pv-box">{selected ? '✓' : ''}</span> : <span className="pv-radio">{selected ? <span className="pv-dot"></span> : null}</span>}
        </span>
        <span className="pv-card-body">
          <span className="pv-card-label">{option.label}</span>
          {option.sub ? <span className="pv-card-sub">{option.sub}</span> : null}
        </span>
      </button>);
  }
  function FreeField({ placeholder, value, onChange }) {
    return (
      <div className="pv-free">
        <textarea rows={1} placeholder={placeholder} value={value} onChange={(e) => { onChange(e.target.value); e.target.style.height = 'auto'; e.target.style.height = e.target.scrollHeight + 'px'; }} />
      </div>);
  }
  function QuestionView({ q, answers, value, onChange, ui }) {
    const v = value || {};
    if (q.type === 'duo') {
      const setGroup = (key, id) => onChange((prev) => { const p = prev || {}; return { ...p, [key]: p[key] === id ? null : id }; });
      const advA = (q.groupA.options.find((o) => o.id === v.freq) || {}).advice;
      const advB = (q.groupB.options.find((o) => o.id === v.duration) || {}).advice;
      const advice = (v.freq && v.duration) ? (advA || advB) : null;
      return (
        <div className="pv-duo">
          {[q.groupA, q.groupB].map((g) => (
            <div className="pv-duo-group" key={g.key}>
              <p className="pv-duo-label">{g.label}</p>
              <div className="pv-cards pv-cards-tight">
                {g.options.map((o) => (<Card key={o.id} option={o} multi={false} selected={v[g.key] === o.id} onClick={() => setGroup(g.key, o.id)} />))}
              </div>
            </div>))}
          <Advice text={advice} head={ui.adviceHead} />
        </div>);
    }
    const options = resolveOptions(q, answers);
    const multi = q.type === 'multi';
    let advice = null;
    if (multi) {
      const sel = v.choices || [];
      if (sel.length && q.adviceMulti) advice = q.adviceMulti(sel, answers);
      else if (!sel.length && (v.free || '').trim() && q.freeAdvice) advice = q.freeAdvice(answers);
    } else {
      const opt = options.find((o) => o.id === v.choice);
      if (opt && opt.advice) advice = opt.advice;
      else if (!v.choice && (v.free || '').trim() && q.freeAdvice) advice = q.freeAdvice(answers);
    }
    const toggleMulti = (id) => { const sel = v.choices || []; const next = sel.includes(id) ? sel.filter((x) => x !== id) : [...sel, id]; onChange({ ...v, choices: next }); };
    const pickSingle = (id) => onChange({ ...v, choice: v.choice === id ? null : id });
    return (
      <div>
        <div className="pv-cards">
          {options.map((o) => (<Card key={o.id} option={o} multi={multi} selected={multi ? (v.choices || []).includes(o.id) : v.choice === o.id} onClick={() => multi ? toggleMulti(o.id) : pickSingle(o.id)} />))}
        </div>
        {q.freePlaceholder ? <FreeField placeholder={q.freePlaceholder} value={v.free || ''} onChange={(val) => onChange({ ...v, free: val })} /> : null}
        <Advice text={advice} head={ui.adviceHead} />
      </div>);
  }

  function labelFor(q, answers) {
    const a = answers[q.id] || {};
    if (q.type === 'duo') {
      const f = (q.groupA.options.find((o) => o.id === a.freq) || {}).label;
      const d = (q.groupB.options.find((o) => o.id === a.duration) || {}).label;
      return [f, d].filter(Boolean).join(' · ') || null;
    }
    const options = resolveOptions(q, answers);
    if (q.type === 'multi') {
      const sel = (a.choices || []).map((id) => (options.find((o) => o.id === id) || {}).label).filter(Boolean);
      const parts = [...sel];
      if ((a.free || '').trim()) parts.push('“' + a.free.trim() + '”');
      return parts.length ? parts.join(', ') : null;
    }
    const chosen = (options.find((o) => o.id === a.choice) || {}).label;
    const parts = [];
    if (chosen) parts.push(chosen);
    if ((a.free || '').trim()) parts.push('“' + a.free.trim() + '”');
    return parts.length ? parts.join(' · ') : null;
  }
  function buildSummaryText(answers, QUESTIONS, P) {
    const lines = [P.ui.summaryHeader, ''];
    QUESTIONS.forEach((q) => { const val = labelFor(q, answers); if (val) lines.push(P.qLabel[q.id] + ': ' + val); });
    lines.push('', P.ui.summaryClosing);
    return lines.join('\n');
  }
  function Summary({ answers, QUESTIONS, P, onRestart, onEdit }) {
    const ui = P.ui;
    const [copied, setCopied] = React.useState(false);
    const text = buildSummaryText(answers, QUESTIONS, P);
    const enc = encodeURIComponent(text);
    const subject = encodeURIComponent(ui.mailSubject);
    const copy = () => { navigator.clipboard && navigator.clipboard.writeText(text).then(() => { setCopied(true); setTimeout(() => setCopied(false), 2200); }); };
    const rows = P.summaryGroups.map((g) => {
      const items = g.keys.map((k) => ({ q: QUESTIONS.find((x) => x.id === k), v: labelFor(QUESTIONS.find((x) => x.id === k), answers) })).filter((it) => it.v);
      if (!items.length) return null;
      return (
        <div className="pv-sum-group" key={g.heading}>
          <h4>{g.heading}</h4>
          <dl>{items.map((it) => (<div className="pv-sum-row" key={it.q.id}><dt>{P.qLabel[it.q.id]}</dt><dd>{it.v}</dd></div>))}</dl>
        </div>);
    }).filter(Boolean);
    return (
      <div className="pv-summary">
        <div className="pv-eyebrow"><span className="pv-eyebrow-dot"></span>{ui.summaryEyebrow}</div>
        <h3 className="pv-sum-title">{ui.summaryPre}<span className="pv-accent-italic">{ui.summaryItalic}</span></h3>
        <div className="pv-sum-card">
          {rows.length ? rows : <p className="pv-sum-empty">{ui.summaryEmpty}</p>}
          <button type="button" className="pv-copy" onClick={copy}>{copied ? ui.copied : ui.copy}</button>
        </div>
        <div className="pv-contact">
          <a className="pv-contact-card" href={'mailto:info@spraakmaker.media?subject=' + subject + '&body=' + enc}><span className="pv-contact-ic" aria-hidden="true">✉</span><span className="pv-contact-t">{ui.mailT}</span><span className="pv-contact-s">{ui.mailS}</span></a>
          <a className="pv-contact-card" href={'https://wa.me/' + WA_NUMBER + '?text=' + enc} target="_blank" rel="noopener"><span className="pv-contact-ic" aria-hidden="true">✆</span><span className="pv-contact-t">{ui.waT}</span><span className="pv-contact-s">{ui.waS}</span></a>
          <a className="pv-contact-card" href={'tel:' + TEL_NUMBER}><span className="pv-contact-ic" aria-hidden="true">☏</span><span className="pv-contact-t">{ui.telT}</span><span className="pv-contact-s">{TEL_DISPLAY}</span></a>
        </div>
        <p className="pv-reply">{ui.reply}</p>
        <div className="pv-sum-foot"><button type="button" className="pv-link" onClick={onEdit}>{ui.edit}</button><span className="pv-sep">·</span><button type="button" className="pv-link" onClick={onRestart}>{ui.restart}</button></div>
      </div>);
  }

  function useReveal() {
    const ref = React.useRef(null);
    const [shown, setShown] = React.useState(false);
    React.useEffect(() => {
      const el = ref.current; if (!el) { setShown(true); return; }
      const t = setTimeout(() => setShown(true), 1600);
      const io = new IntersectionObserver((es) => { es.forEach((e) => { if (e.isIntersecting) { setShown(true); io.disconnect(); clearTimeout(t); } }); }, { rootMargin: '-8% 0px' });
      io.observe(el);
      return () => { io.disconnect(); clearTimeout(t); };
    }, []);
    return [ref, shown];
  }

  function PodcastverkennerSection({ lang }) {
    const P = PACKS[lang] || PACKS.nl;
    const ui = P.ui;
    const QUESTIONS = React.useMemo(() => buildQuestions(P), [lang]);
    const TOTAL = QUESTIONS.length;

    const [view, setView] = React.useState('quiz');
    const [step, setStep] = React.useState(0);
    const [answers, setAnswers] = React.useState({});
    const [anim, setAnim] = React.useState('in');
    const [revealRef, shown] = useReveal();
    const panelTopRef = React.useRef(null);

    const q = QUESTIONS[step];
    const val = answers[q && q.id];
    const hasAnswer = (() => { const v = val || {}; if (q.type === 'duo') return !!(v.freq && v.duration); if (q.type === 'multi') return (v.choices && v.choices.length) || (v.free || '').trim(); return !!v.choice || (v.free || '').trim(); })();

    const scrollToPanel = () => { if (panelTopRef.current) { const y = panelTopRef.current.getBoundingClientRect().top + window.scrollY - 90; window.scrollTo({ top: y, behavior: 'smooth' }); } };
    const go = (dir, target) => { setAnim('out'); setTimeout(() => { if (target === 'summary') setView('summary'); else if (target === 'quiz') setView('quiz'); else setStep((s) => Math.min(Math.max(s + dir, 0), TOTAL - 1)); setAnim('in'); scrollToPanel(); }, 180); };
    const next = () => { if (step === TOTAL - 1) go(0, 'summary'); else go(1); };
    const prev = () => { if (step > 0) go(-1); };
    const restart = () => { setAnswers({}); setStep(0); setView('quiz'); setAnim('in'); scrollToPanel(); };
    const edit = () => { setStep(0); setView('quiz'); setAnim('in'); scrollToPanel(); };

    const progress = view === 'summary' ? 1 : (step + (hasAnswer ? 1 : 0)) / TOTAL;
    const answeredCount = QUESTIONS.filter((qq) => { const v = answers[qq.id] || {}; if (qq.type === 'duo') return v.freq && v.duration; if (qq.type === 'multi') return (v.choices && v.choices.length) || (v.free || '').trim(); return v.choice || (v.free || '').trim(); }).length;

    return (
      <section id="verkenner" className="pv-section" ref={revealRef}>
        <style>{PV_CSS}</style>
        <svg className="pv-wave pv-wave-1" aria-hidden="true" viewBox="0 0 2400 180" preserveAspectRatio="none"><path d="M0,90 Q150,10 300,90 T600,90 T900,90 T1200,90 T1500,90 T1800,90 T2100,90 T2400,90" stroke="#fff" strokeWidth="2.5" fill="none" /></svg>
        <svg className="pv-wave pv-wave-2" aria-hidden="true" viewBox="0 0 2400 140" preserveAspectRatio="none"><path d="M0,70 Q200,0 400,70 T800,70 T1200,70 T1600,70 T2000,70 T2400,70" stroke="#fff" strokeWidth="2" fill="none" /></svg>

        <div className="pv-section-inner">
          <div className={'pv-band' + (shown ? ' is-in' : '')}>
            <div className="pv-eyebrow pv-eyebrow-light"><span className="pv-eyebrow-dot"></span>{P.band.eyebrow}</div>
            <h2 className="pv-band-title">{P.band.titlePre}<span className="pv-band-italic">{P.band.titleItalic}</span></h2>
            <p className="pv-band-sub">{P.band.sub}</p>
          </div>

          <div className={'pv-panel' + (shown ? ' is-in' : '')} ref={panelTopRef}>
            <div className="pv-thread" aria-hidden="true"><div className="pv-thread-fill" style={{ width: (progress * 100).toFixed(1) + '%' }}></div></div>
            <div className={'pv-stage pv-anim-' + anim}>
              {view === 'summary' ? (
                <Summary answers={answers} QUESTIONS={QUESTIONS} P={P} onRestart={restart} onEdit={edit} />
              ) : (
                <div key={q.id}>
                  <div className="pv-qhead">
                    <span className="pv-theme">{q.theme}</span>
                    {answeredCount > 0 ? <span className="pv-noted">{answeredCount} {answeredCount === 1 ? ui.notedSingular : ui.notedPlural}</span> : null}
                  </div>
                  <h3 className="pv-qtitle">{q.title}</h3>
                  <p className="pv-qsub">{q.subtitle}</p>
                  <QuestionView q={q} answers={answers} value={val} ui={ui} onChange={(v) => setAnswers((a) => ({ ...a, [q.id]: typeof v === 'function' ? v(a[q.id] || {}) : v }))} />
                  <div className="pv-nav">
                    {step > 0 ? (<button type="button" className="pv-back" onClick={prev}><span aria-hidden="true">←</span> {ui.back}</button>) : <span></span>}
                    <button type="button" className={'pv-btn pv-btn-primary' + (hasAnswer ? '' : ' is-soft')} onClick={next}>{step === TOTAL - 1 ? ui.overview : ui.next} <span aria-hidden="true">→</span></button>
                  </div>
                  {!hasAnswer ? (<p className="pv-skiphint"><button type="button" className="pv-link pv-link-quiet" onClick={next}>{ui.skip}</button></p>) : null}
                </div>
              )}
            </div>
          </div>
        </div>
      </section>);
  }

  window.PodcastverkennerSection = PodcastverkennerSection;

  // ── CSS ────────────────────────────────────────────────────────────────
  const PV_CSS = `
  .pv-section { position: relative; background: var(--accent); color: #fff; overflow: hidden; padding: clamp(80px,11vw,150px) 24px; }
  .pv-section .pv-wave { position: absolute; left: 0; width: 200%; pointer-events: none; }
  .pv-section .pv-wave-1 { top: 14%; height: 150px; opacity: 0.16; animation: pv-drift 30s linear infinite; }
  .pv-section .pv-wave-2 { bottom: 8%; height: 120px; opacity: 0.12; animation: pv-drift-rev 44s linear infinite; }
  @keyframes pv-drift { from { transform: translateX(0); } to { transform: translateX(-50%); } }
  @keyframes pv-drift-rev { from { transform: translateX(-50%); } to { transform: translateX(0); } }
  .pv-section-inner { position: relative; z-index: 2; max-width: 880px; margin: 0 auto; }

  .pv-band { text-align: center; margin-bottom: clamp(36px,5vw,56px); transition: transform .7s cubic-bezier(.2,.7,.2,1); }
  .pv-band.is-in { transform: translateY(0); }
  .pv-band:not(.is-in) { transform: translateY(18px); }
  .pv-eyebrow { display: inline-flex; align-items: center; gap: 9px; font-size: 12px; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; margin-bottom: 22px; color: var(--accent); }
  .pv-eyebrow-light { color: #fff; }
  .pv-eyebrow-dot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
  .pv-band-title { font-family: 'Plus Jakarta Sans', sans-serif; font-weight: 500; font-size: clamp(34px,6vw,66px); line-height: 1.0; letter-spacing: -.035em; color: #fff; text-wrap: balance; margin: 0 auto 22px; max-width: 16ch; }
  .pv-band-italic { font-style: italic; font-weight: 400; color: rgba(255,255,255,.62); }
  .pv-band-sub { font-size: clamp(16px,2.1vw,19px); line-height: 1.55; color: rgba(255,255,255,.82); max-width: 560px; margin: 0 auto; text-wrap: pretty; }

  .pv-panel { background: var(--bg); border-radius: 28px; padding: clamp(26px,4.5vw,52px); box-shadow: 0 50px 100px -40px rgba(0,0,0,.55); transition: transform .7s cubic-bezier(.2,.7,.2,1) .1s; }
  .pv-panel.is-in { transform: translateY(0); }
  .pv-panel:not(.is-in) { transform: translateY(26px); }
  .pv-panel .pv-eyebrow, .pv-panel .pv-theme, .pv-panel .pv-duo-label, .pv-panel .pv-advice-head, .pv-panel .pv-sum-group h4 { color: var(--accent); }

  .pv-stage { color: var(--fg); }
  .pv-accent-italic { font-style: italic; font-weight: 500; color: var(--accent); }

  .pv-thread { height: 2px; background: var(--blush-deep); border-radius: 2px; margin-bottom: clamp(32px,5vw,52px); overflow: hidden; opacity: .55; }
  .pv-thread-fill { height: 100%; background: var(--accent); border-radius: 2px; transition: width .5s cubic-bezier(.4,0,.1,1); }

  .pv-qhead { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 16px; }
  .pv-theme { font-size: 12px; font-weight: 600; letter-spacing: .12em; text-transform: uppercase; }
  .pv-noted { font-size: 12px; color: var(--muted); font-family: ui-monospace, SFMono-Regular, Menlo, monospace; white-space: nowrap; }
  .pv-qtitle { font-family: 'Plus Jakarta Sans', sans-serif; font-weight: 500; font-size: clamp(26px,4vw,42px); line-height: 1.06; letter-spacing: -.032em; color: var(--fg); text-wrap: balance; margin-bottom: 12px; }
  .pv-qsub { font-size: clamp(15px,1.9vw,18px); line-height: 1.55; color: var(--muted); max-width: 600px; text-wrap: pretty; margin-bottom: 30px; }

  .pv-cards { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
  .pv-cards-tight { gap: 10px; }
  @media (max-width: 600px) { .pv-cards { grid-template-columns: 1fr; } }
  .pv-card { display: flex; align-items: flex-start; gap: 14px; text-align: left; cursor: pointer; font-family: inherit; background: var(--card); border: 1.5px solid var(--border); border-radius: 16px; padding: 18px; transition: border-color .18s ease, background .18s ease, transform .18s ease, box-shadow .18s ease; }
  .pv-card:hover { border-color: var(--blush-deep); transform: translateY(-1px); box-shadow: 0 10px 28px -18px rgba(16,6,159,.35); }
  .pv-card.is-selected { border-color: var(--accent); background: var(--accent-light); box-shadow: 0 12px 30px -18px rgba(16,6,159,.5); }
  .pv-card-tick { flex-shrink: 0; margin-top: 1px; }
  .pv-radio, .pv-box { width: 21px; height: 21px; border-radius: 50%; border: 1.5px solid var(--blush-deep); background: #fff; display: flex; align-items: center; justify-content: center; transition: border-color .18s ease, background .18s ease; }
  .pv-box { border-radius: 6px; font-size: 13px; color: #fff; font-weight: 700; }
  .pv-card.is-selected .pv-radio { border-color: var(--accent); }
  .pv-card.is-selected .pv-box { border-color: var(--accent); background: var(--accent); }
  .pv-dot { width: 11px; height: 11px; border-radius: 50%; background: var(--accent); }
  .pv-card-body { display: flex; flex-direction: column; gap: 4px; }
  .pv-card-label { font-size: 16px; font-weight: 600; letter-spacing: -.01em; line-height: 1.25; color: var(--fg); }
  .pv-card-sub { font-size: 13.5px; color: var(--muted); line-height: 1.4; }

  .pv-duo { display: flex; flex-direction: column; gap: 30px; }
  .pv-duo-label { font-size: 12px; font-weight: 600; letter-spacing: .1em; text-transform: uppercase; margin-bottom: 14px; }

  .pv-free { margin-top: 14px; }
  .pv-free textarea { width: 100%; font-family: inherit; font-size: 15.5px; line-height: 1.5; color: var(--fg); background: transparent; border: none; border-bottom: 1.5px solid var(--border); padding: 12px 4px; resize: none; overflow: hidden; transition: border-color .2s ease; }
  .pv-free textarea::placeholder { color: var(--muted); opacity: .8; }
  .pv-free textarea:focus { outline: none; border-bottom-color: var(--accent); }

  .pv-advice { margin-top: 26px; background: var(--blush-soft); border: 1px solid var(--blush); border-radius: 16px; padding: 20px 22px; animation: pv-advice-in .42s cubic-bezier(.2,.7,.2,1) forwards; }
  .pv-advice-head { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; font-size: 11.5px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; }
  .pv-advice p { font-size: 15.5px; line-height: 1.58; color: var(--fg); text-wrap: pretty; }
  .pv-eq { display: inline-flex; align-items: flex-end; gap: 2.5px; height: 14px; }
  .pv-eq span { width: 2.5px; background: var(--accent); border-radius: 2px; animation: pv-eq 1.1s ease-in-out infinite; }
  .pv-eq span:nth-child(1) { height: 60%; animation-delay: 0s; }
  .pv-eq span:nth-child(2) { height: 100%; animation-delay: .18s; }
  .pv-eq span:nth-child(3) { height: 45%; animation-delay: .36s; }
  .pv-eq span:nth-child(4) { height: 80%; animation-delay: .12s; }
  @keyframes pv-eq { 0%,100% { transform: scaleY(.4); } 50% { transform: scaleY(1); } }

  .pv-btn { display: inline-flex; align-items: center; gap: 10px; cursor: pointer; font-family: inherit; font-size: 15px; font-weight: 600; padding: 15px 26px; border-radius: 100px; border: none; transition: transform .16s ease, box-shadow .16s ease, opacity .16s ease; }
  .pv-btn-primary { background: var(--accent); color: #fff; }
  .pv-btn-primary:hover { transform: translateY(-1px); box-shadow: 0 14px 30px -12px rgba(16,6,159,.6); }
  .pv-btn-primary.is-soft { opacity: .5; }
  .pv-btn-primary.is-soft:hover { opacity: 1; }
  .pv-nav { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-top: 34px; }
  .pv-back { background: none; border: none; cursor: pointer; font-family: inherit; font-size: 14.5px; font-weight: 500; color: var(--muted); display: inline-flex; align-items: center; gap: 8px; padding: 8px 4px; transition: color .16s ease; }
  .pv-back:hover { color: var(--accent); }
  .pv-skiphint { margin-top: 16px; text-align: right; }
  .pv-link { background: none; border: none; cursor: pointer; font-family: inherit; color: var(--accent); font-size: 14px; font-weight: 500; text-decoration: underline; text-underline-offset: 3px; text-decoration-color: var(--blush-deep); }
  .pv-link:hover { text-decoration-color: var(--accent); }
  .pv-link-quiet { color: var(--muted); font-size: 13.5px; }

  .pv-sum-title { font-family: 'Plus Jakarta Sans', sans-serif; font-weight: 500; font-size: clamp(24px,3.6vw,38px); line-height: 1.12; letter-spacing: -.03em; color: var(--fg); text-wrap: balance; margin-bottom: 28px; max-width: 640px; }
  .pv-sum-card { background: var(--card); border: 1px solid var(--border); border-radius: 22px; padding: clamp(24px,4vw,38px); box-shadow: 0 24px 60px -36px rgba(16,6,159,.4); }
  .pv-sum-group { padding: 18px 0; border-top: 1px solid var(--blush); }
  .pv-sum-group:first-child { padding-top: 0; border-top: none; }
  .pv-sum-group h4 { font-size: 12px; font-weight: 700; letter-spacing: .1em; text-transform: uppercase; margin-bottom: 14px; }
  .pv-sum-row { display: grid; grid-template-columns: 160px 1fr; gap: 16px; padding: 7px 0; }
  @media (max-width: 560px) { .pv-sum-row { grid-template-columns: 1fr; gap: 2px; } }
  .pv-sum-row dt { font-size: 14px; color: var(--muted); }
  .pv-sum-row dd { font-size: 15.5px; font-weight: 500; line-height: 1.45; color: var(--fg); text-wrap: pretty; }
  .pv-sum-empty { color: var(--muted); }
  .pv-copy { margin-top: 22px; background: var(--blush-soft); border: 1px solid var(--blush); color: var(--accent); font-family: inherit; font-size: 13.5px; font-weight: 600; padding: 10px 18px; border-radius: 100px; cursor: pointer; transition: background .16s ease; white-space: nowrap; }
  .pv-copy:hover { background: var(--accent-light); }
  .pv-contact { display: grid; grid-template-columns: repeat(3,1fr); gap: 12px; margin-top: 28px; }
  @media (max-width: 600px) { .pv-contact { grid-template-columns: 1fr; } }
  .pv-contact-card { display: flex; flex-direction: column; gap: 4px; text-decoration: none; background: var(--card); border: 1.5px solid var(--border); border-radius: 16px; padding: 20px; color: var(--fg); transition: border-color .18s ease, transform .18s ease, box-shadow .18s ease; }
  .pv-contact-card:hover { border-color: var(--accent); transform: translateY(-2px); box-shadow: 0 16px 36px -20px rgba(16,6,159,.5); }
  .pv-contact-ic { width: 38px; height: 38px; border-radius: 50%; background: var(--accent-light); color: var(--accent); display: flex; align-items: center; justify-content: center; font-size: 18px; margin-bottom: 8px; }
  .pv-contact-t { font-family: 'Plus Jakarta Sans', sans-serif; font-size: 17px; font-weight: 600; letter-spacing: -.01em; }
  .pv-contact-s { font-size: 13px; color: var(--muted); line-height: 1.4; }
  .pv-reply { margin-top: 18px; font-size: 14px; color: var(--muted); text-align: center; }
  .pv-sum-foot { margin-top: 30px; text-align: center; display: flex; align-items: center; justify-content: center; gap: 12px; }
  .pv-sep { color: var(--blush-deep); }

  .pv-anim-in { animation: pv-q-in .4s cubic-bezier(.2,.7,.2,1) forwards; }
  .pv-anim-out { opacity: 0; transform: translateY(-8px); transition: opacity .18s ease, transform .18s ease; }
  @keyframes pv-q-in { from { transform: translateY(14px); } to { transform: translateY(0); } }
  @keyframes pv-advice-in { from { transform: translateY(8px); } to { transform: translateY(0); } }

  @media (prefers-reduced-motion: reduce) {
    .pv-section .pv-wave, .pv-eq span, .pv-advice, .pv-anim-in { animation: none !important; }
    .pv-band, .pv-panel { transition: none !important; opacity: 1 !important; transform: none !important; }
    .pv-anim-out { transition: none; }
  }
  `;
})();
