Formular für Versicherungsangebote

Angebot anfragen. Das Formular erfasst den gewünschten Versicherungsschutz, keine Krankengeschichte.

Dieses Formular ist kein Versicherungsvertrag und keine rechtsverbindliche Schadensmeldung. Senden Sie nur, was für ein Angebot oder die Erfassung der Anfrage nötig ist. Gesundheitsdaten sind nach der DSGVO besondere Kategorien personenbezogener Daten – lassen Sie sie weg, sofern die Anfrage ohne sie bearbeitet werden kann.

Vorschau

Versicherungsschutz

Kontakt

Details

Einwilligung

Formularcode

HTML
<!doctype html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Formular für Versicherungsangebote</title>
<style>
  body { font-family: "Segoe UI", sans-serif; color: #12263a; margin: 0; background: #fff; }
  main { max-width: 640px; margin: 0 auto; padding: 32px 20px 64px; }
  h1 { font-size: 28px; font-weight: 650; letter-spacing: -0.02em; line-height: 1.2; }
  h2 { font-size: 18px; margin: 18px 0 0; }
  p { line-height: 1.5; }
  form { display: grid; gap: 14px; position: relative; }
  .field { display: grid; gap: 6px; }
  label span, .check span { font-size: 14px; }
  input, select, textarea { font: inherit; color: inherit; padding: 10px 12px; border: 1px solid #b4bdce; border-radius: 8px; width: 100%; box-sizing: border-box; background: #fff; }
  textarea { min-height: 96px; }
  .check { display: flex; gap: 8px; align-items: flex-start; }
  .check input { width: auto; margin-top: 4px; }
  button { background: #3c4ad8; color: #fff; border: 0; border-radius: 8px; padding: 12px 18px; font: inherit; cursor: pointer; }
  .note { background: #fff6eb; padding: 12px 14px; border-radius: 8px; }
  form [data-show-if] { display: none; }
form:has(select[name="currently_insured"] option[value="yes"]:checked) [data-show-if="currently_insured"][data-show-equals="yes"] { display: grid; }
</style>
</head>
<body>
<main>
<h1 data-i18n="title">Formular für Versicherungsangebote</h1>
<p data-i18n="lede">Angebot anfragen. Das Formular erfasst den gewünschten Versicherungsschutz, keine Krankengeschichte.</p>
<p class="note" data-i18n="disclaimer">Dieses Formular ist kein Versicherungsvertrag und keine rechtsverbindliche Schadensmeldung. Senden Sie nur, was für ein Angebot oder die Erfassung der Anfrage nötig ist. Gesundheitsdaten sind nach der DSGVO besondere Kategorien personenbezogener Daten – lassen Sie sie weg, sofern die Anfrage ohne sie bearbeitet werden kann.</p>

<form id="fg-form" action="https://formgong.com/submit" method="POST" enctype="multipart/form-data" data-sitekey="" data-lang="de">
<input type="hidden" name="access_key" value="fk_your_access_key">
<input type="hidden" name="_lang" value="de">
<div aria-hidden="true" style="position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden"><label>Leave this field empty<input name="botcheck" tabindex="-1" autocomplete="off"></label></div>
<section><h2 data-i18n="section.cover">Cover</h2>
<div class="field"><label for="fg-cover_type"><span data-i18n="cover_type">What should the quote cover?</span></label><select id="fg-cover_type" name="cover_type" required><option value="">—</option><option value="auto" data-i18n="cover_type.auto">Car</option><option value="home" data-i18n="cover_type.home">Home</option><option value="travel" data-i18n="cover_type.travel">Travel</option><option value="business" data-i18n="cover_type.business">Business</option></select></div>
<div class="field"><label for="fg-city"><span data-i18n="city">City</span></label><input id="fg-city" name="city" type="text" required maxlength="80" autocomplete="address-level2"></div>
<div class="field"><label for="fg-start_date"><span data-i18n="start_date">Cover from</span></label><input id="fg-start_date" name="start_date" type="date" required></div></section>
<section><h2 data-i18n="section.contact">Contact</h2>
<div class="field"><label for="fg-name"><span data-i18n="name">Name</span></label><input id="fg-name" name="name" type="text" required maxlength="80" autocomplete="name"></div>
<div class="field"><label for="fg-email"><span data-i18n="email">Email</span></label><input id="fg-email" name="email" type="email" required maxlength="120" autocomplete="email"></div>
<div class="field"><label for="fg-phone"><span data-i18n="phone">Phone</span></label><input id="fg-phone" name="phone" type="tel" required maxlength="40" autocomplete="tel"></div></section>
<section><h2 data-i18n="section.details">Details</h2>
<div class="field"><label for="fg-currently_insured"><span data-i18n="currently_insured">Do you already have this cover?</span></label><select id="fg-currently_insured" name="currently_insured" required><option value="">—</option><option value="yes" data-i18n="currently_insured.yes">Yes</option><option value="no" data-i18n="currently_insured.no">No</option></select></div>
<div class="field" data-show-if="currently_insured" data-show-equals="yes"><label for="fg-insurer_name"><span data-i18n="insurer_name">Current insurer</span></label><input id="fg-insurer_name" name="insurer_name" type="text" maxlength="80" autocomplete="name"></div>
<div class="field"><label for="fg-details"><span data-i18n="details">What should the quote include?</span></label><textarea id="fg-details" name="details" required maxlength="800"></textarea></div></section>
<section><h2 data-i18n="section.consent">Consent</h2>
<div class="field"><label class="check"><input id="fg-consent_contact" name="consent_contact" type="checkbox" value="yes" required><span data-i18n="consent_contact">I agree to be contacted about this request.</span></label></div>
<div class="field"><label class="check"><input id="fg-consent_privacy" name="consent_privacy" type="checkbox" value="yes" required><span data-i18n="consent_privacy">I agree that these answers are stored so the request can be handled.</span></label></div></section>
<!-- Set data-sitekey on this form to YOUR_TURNSTILE_SITE_KEY. Required for attachments. -->
<div data-turnstile></div>
<button type="submit" data-i18n="submit">Senden</button>
<p data-status role="status"></p>
</form>
</main>
<script type="application/json" id="fg-labels">{"uk":{"title":"Форма запиту страхової пропозиції","lede":"Запит пропозиції. Форма збирає вид покриття, а не медичну історію.","submit":"Надіслати","thanks":"Надіслано. Дякуємо.","file_too_big":"До 3 файлів, по 5 MiB, разом до 10 MiB.","error":"Не вдалося надіслати. Спробуйте ще раз.","disclaimer":"Ця форма не є договором страхування і не є юридичним записом про випадок. Надсилайте лише те, що потрібно для розрахунку чи реєстрації заявки. Дані про здоров'я — особлива категорія за GDPR: не додавайте їх, якщо без них заявку можна обробити.","section.cover":"Покриття","cover_type":"Що має покривати пропозиція?","cover_type.auto":"Авто","cover_type.home":"Житло","cover_type.travel":"Подорож","cover_type.business":"Бізнес","city":"Місто","start_date":"Початок покриття","section.contact":"Контакт","name":"Ім'я","email":"Електронна пошта","phone":"Телефон","section.details":"Деталі","currently_insured":"Це покриття вже є?","currently_insured.yes":"Так","currently_insured.no":"Ні","insurer_name":"Поточний страховик","details":"Що включити в пропозицію?","section.consent":"Згода","consent_contact":"Погоджуюсь, щоб зі мною зв'язалися щодо цієї заявки.","consent_privacy":"Погоджуюсь, що ці відповіді зберігаються, щоб заявку можна було обробити."},"en":{"title":"Insurance quote form","lede":"Ask for a quote. The form collects the cover you want, not a medical history.","submit":"Send","thanks":"Sent. Thank you.","file_too_big":"Up to 3 files, 5 MiB each and 10 MiB combined.","error":"Could not send. Please try again.","disclaimer":"This form is not an insurance contract or a legal record of a claim. Send only what is needed to quote or register the request. Health details are special-category data under the GDPR — leave them out unless the request cannot be handled without them.","section.cover":"Cover","cover_type":"What should the quote cover?","cover_type.auto":"Car","cover_type.home":"Home","cover_type.travel":"Travel","cover_type.business":"Business","city":"City","start_date":"Cover from","section.contact":"Contact","name":"Name","email":"Email","phone":"Phone","section.details":"Details","currently_insured":"Do you already have this cover?","currently_insured.yes":"Yes","currently_insured.no":"No","insurer_name":"Current insurer","details":"What should the quote include?","section.consent":"Consent","consent_contact":"I agree to be contacted about this request.","consent_privacy":"I agree that these answers are stored so the request can be handled."},"pl":{"title":"Formularz zapytania o ofertę ubezpieczenia","lede":"Zapytanie o ofertę. Formularz zbiera rodzaj ochrony, nie wywiad zdrowotny.","submit":"Wyślij","thanks":"Wysłano. Dziękujemy.","file_too_big":"Do 3 plików, po 5 MiB, łącznie 10 MiB.","error":"Nie udało się wysłać. Spróbuj ponownie.","disclaimer":"Ten formularz nie jest umową ubezpieczenia ani prawnym zapisem szkody. Podaj tylko to, co jest potrzebne do wyceny lub rejestracji zgłoszenia. Dane o zdrowiu to szczególna kategoria w RODO — pomiń je, jeśli zgłoszenie da się obsłużyć bez nich.","section.cover":"Ochrona","cover_type":"Czego ma dotyczyć oferta?","cover_type.auto":"Samochód","cover_type.home":"Dom","cover_type.travel":"Podróż","cover_type.business":"Firma","city":"Miasto","start_date":"Ochrona od","section.contact":"Kontakt","name":"Imię","email":"E-mail","phone":"Telefon","section.details":"Szczegóły","currently_insured":"Czy masz już takie ubezpieczenie?","currently_insured.yes":"Tak","currently_insured.no":"Nie","insurer_name":"Obecny ubezpieczyciel","details":"Co oferta ma uwzględnić?","section.consent":"Zgoda","consent_contact":"Zgadzam się na kontakt w sprawie tego zgłoszenia.","consent_privacy":"Zgadzam się, aby te odpowiedzi zostały zapisane w celu obsługi zgłoszenia."},"tr":{"title":"Sigorta teklif formu","lede":"Teklif isteyin. Form istediğiniz teminatı toplar, sağlık geçmişini değil.","submit":"Gönder","thanks":"Gönderildi. Teşekkürler.","file_too_big":"En fazla 3 dosya, dosya başına 5 MiB, toplam 10 MiB.","error":"Gönderilemedi. Lütfen tekrar deneyin.","disclaimer":"Bu form bir sigorta sözleşmesi ya da hasarın yasal kaydı değildir. Teklif veya kayıt için gereken kadarını gönderin. Sağlık verisi GDPR'de özel niteliklidir; talep onsuz işlenebiliyorsa eklemeyin.","section.cover":"Teminat","cover_type":"Teklif neyi kapsasın?","cover_type.auto":"Araç","cover_type.home":"Konut","cover_type.travel":"Seyahat","cover_type.business":"İşletme","city":"Şehir","start_date":"Teminat başlangıcı","section.contact":"İletişim","name":"Ad","email":"E-posta","phone":"Telefon","section.details":"Ayrıntılar","currently_insured":"Bu teminatınız var mı?","currently_insured.yes":"Evet","currently_insured.no":"Hayır","insurer_name":"Mevcut sigortacı","details":"Teklif neyi içersin?","section.consent":"Onay","consent_contact":"Bu talep hakkında benimle iletişime geçilmesini kabul ediyorum.","consent_privacy":"Bu yanıtların talebin işlenmesi için saklanmasını kabul ediyorum."},"ar":{"title":"نموذج طلب عرض سعر تأمين","lede":"اطلب عرض سعر. يجمع النموذج نوع التغطية التي تريدها، لا تاريخًا طبيًا.","submit":"إرسال","thanks":"تم الإرسال. شكرًا لك.","file_too_big":"حتى 3 ملفات، 5 MiB لكل ملف و10 MiB إجمالًا.","error":"تعذّر الإرسال. يُرجى المحاولة مرة أخرى.","disclaimer":"هذا النموذج ليس عقد تأمين ولا سجلاً قانونياً لمطالبة. أرسل فقط ما هو ضروري لتقديم عرض أسعار أو تسجيل الطلب. تعتبر التفاصيل الصحية بيانات من فئة خاصة بموجب اللائحة العامة لحماية البيانات (GDPR) — استبعدها ما لم يكن من المستحيل معالجة الطلب بدونها.","section.cover":"التغطية","cover_type":"ما الذي يجب أن يغطيه العرض؟","cover_type.auto":"سيارة","cover_type.home":"منزل","cover_type.travel":"سفر","cover_type.business":"أعمال","city":"المدينة","start_date":"بداية التغطية","section.contact":"التواصل","name":"الاسم","email":"البريد الإلكتروني","phone":"الهاتف","section.details":"التفاصيل","currently_insured":"هل لديك هذه التغطية بالفعل؟","currently_insured.yes":"نعم","currently_insured.no":"لا","insurer_name":"شركة التأمين الحالية","details":"ما الذي يجب أن يتضمنه العرض؟","section.consent":"الموافقة","consent_contact":"أوافق على التواصل معي بخصوص هذا الطلب.","consent_privacy":"أوافق على حفظ هذه الإجابات لمعالجة الطلب."},"he":{"title":"טופס בקשת הצעת ביטוח","lede":"בקשו הצעת מחיר. הטופס אוסף את הכיסוי הרצוי, לא היסטוריה רפואית.","submit":"שליחה","thanks":"נשלח. תודה.","file_too_big":"עד 3 קבצים, 5 MiB לכל קובץ ו-10 MiB בסך הכול.","error":"השליחה נכשלה. נסו שוב.","disclaimer":"הטופס הזה אינו חוזה ביטוח ואינו תיעוד משפטי של תביעה. שלחו רק את מה שנדרש להצעת מחיר או לרישום הפנייה. נתוני בריאות הם קטגוריה מיוחדת לפי ה-GDPR — אל תוסיפו אותם אם אפשר לטפל בפנייה בלעדיהם.","section.cover":"כיסוי","cover_type":"מה ההצעה צריכה לכסות?","cover_type.auto":"רכב","cover_type.home":"דירה","cover_type.travel":"נסיעות","cover_type.business":"עסק","city":"עיר","start_date":"כיסוי החל מ-","section.contact":"פרטי קשר","name":"שם","email":"אימייל","phone":"טלפון","section.details":"פרטים","currently_insured":"האם כבר יש לך כיסוי כזה?","currently_insured.yes":"כן","currently_insured.no":"לא","insurer_name":"המבטח הנוכחי","details":"מה לכלול בהצעה?","section.consent":"הסכמה","consent_contact":"אני מסכים/ה שייצרו איתי קשר בנוגע לפנייה זו.","consent_privacy":"אני מסכים/ה שהתשובות יישמרו לצורך טיפול בפנייה."},"es":{"title":"Formulario de presupuesto de seguro","lede":"Pide un presupuesto. El formulario recoge la cobertura que quieres, no un historial médico.","submit":"Enviar","thanks":"Enviado. Gracias.","file_too_big":"Hasta 3 archivos, 5 MiB cada uno y 10 MiB en total.","error":"No se pudo enviar. Inténtalo de nuevo.","disclaimer":"Este formulario no es un contrato de seguro ni un registro legal del siniestro. Envía solo lo necesario para la cotización o para registrar la solicitud. Los datos de salud son una categoría especial en el RGPD: no los incluyas si la solicitud puede tramitarse sin ellos.","section.cover":"Cobertura","cover_type":"¿Qué debe cubrir el presupuesto?","cover_type.auto":"Coche","cover_type.home":"Hogar","cover_type.travel":"Viaje","cover_type.business":"Empresa","city":"Ciudad","start_date":"Cobertura desde","section.contact":"Contacto","name":"Nombre","email":"Correo electrónico","phone":"Teléfono","section.details":"Detalles","currently_insured":"¿Ya tienes esta cobertura?","currently_insured.yes":"Sí","currently_insured.no":"No","insurer_name":"Aseguradora actual","details":"¿Qué debe incluir el presupuesto?","section.consent":"Consentimiento","consent_contact":"Acepto que me contacten sobre esta solicitud.","consent_privacy":"Acepto que estas respuestas se guarden para tramitar la solicitud."},"fr":{"title":"Formulaire de devis d’assurance","lede":"Demandez un devis. Le formulaire recueille la couverture souhaitée, pas des antécédents médicaux.","submit":"Envoyer","thanks":"Envoyé. Merci.","file_too_big":"Jusqu’à 3 fichiers, 5 Mio chacun et 10 Mio au total.","error":"Envoi impossible. Veuillez réessayer.","disclaimer":"Ce formulaire n’est pas un contrat d’assurance ni un enregistrement juridique du sinistre. N’envoyez que ce qui est nécessaire pour un devis ou pour enregistrer la demande. Les données de santé sont une catégorie particulière au sens du RGPD : ne les ajoutez pas si la demande peut être traitée sans elles.","section.cover":"Couverture","cover_type":"Que doit couvrir le devis ?","cover_type.auto":"Auto","cover_type.home":"Habitation","cover_type.travel":"Voyage","cover_type.business":"Entreprise","city":"Ville","start_date":"Couverture à partir du","section.contact":"Contact","name":"Nom","email":"E-mail","phone":"Téléphone","section.details":"Détails","currently_insured":"Avez-vous déjà cette couverture ?","currently_insured.yes":"Oui","currently_insured.no":"Non","insurer_name":"Assureur actuel","details":"Que doit inclure le devis ?","section.consent":"Consentement","consent_contact":"J’accepte d’être contacté au sujet de cette demande.","consent_privacy":"J’accepte que ces réponses soient conservées pour traiter la demande."},"pt":{"title":"Formulário de pedido de cotação de seguro","lede":"Peça uma cotação. O formulário recolhe a cobertura pretendida, não um historial clínico.","submit":"Enviar","thanks":"Enviado. Obrigado.","file_too_big":"Até 3 ficheiros, 5 MiB cada e 10 MiB no total.","error":"Não foi possível enviar. Tente novamente.","disclaimer":"Este formulário não é um contrato de seguro nem um registo legal do sinistro. Envie apenas o que for preciso para a cotação ou para registar o pedido. Os dados de saúde são uma categoria especial no RGPD — não os inclua se o pedido puder ser tratado sem eles.","section.cover":"Cobertura","cover_type":"O que deve cobrir a cotação?","cover_type.auto":"Automóvel","cover_type.home":"Habitação","cover_type.travel":"Viagem","cover_type.business":"Empresa","city":"Cidade","start_date":"Cobertura a partir de","section.contact":"Contacto","name":"Nome","email":"Email","phone":"Telefone","section.details":"Detalhes","currently_insured":"Já tem esta cobertura?","currently_insured.yes":"Sim","currently_insured.no":"Não","insurer_name":"Seguradora atual","details":"O que deve incluir a cotação?","section.consent":"Consentimento","consent_contact":"Aceito ser contactado sobre este pedido.","consent_privacy":"Aceito que estas respostas sejam guardadas para tratar o pedido."},"hi":{"title":"बीमा कोटेशन फ़ॉर्म","lede":"कोटेशन माँगें। फ़ॉर्म आपकी चाही गई कवरेज पूछता है, मेडिकल इतिहास नहीं।","submit":"भेजें","thanks":"भेज दिया गया। धन्यवाद।","file_too_big":"अधिकतम 3 फ़ाइलें, हर फ़ाइल 5 MiB तक और कुल 10 MiB।","error":"भेजा नहीं जा सका। कृपया फिर से कोशिश करें।","disclaimer":"यह फ़ॉर्म बीमा अनुबंध या दावे का कानूनी रिकॉर्ड नहीं है। कोटेशन या अनुरोध दर्ज करने के लिए जितना ज़रूरी हो उतना ही भेजें। स्वास्थ्य डेटा GDPR में विशेष श्रेणी है — अगर अनुरोध उसके बिना हो सकता है तो उसे न जोड़ें।","section.cover":"कवरेज","cover_type":"कोटेशन में क्या कवर हो?","cover_type.auto":"कार","cover_type.home":"घर","cover_type.travel":"यात्रा","cover_type.business":"व्यवसाय","city":"शहर","start_date":"कवरेज कब से","section.contact":"संपर्क","name":"नाम","email":"ईमेल","phone":"फ़ोन","section.details":"विवरण","currently_insured":"क्या आपके पास यह कवरेज पहले से है?","currently_insured.yes":"हाँ","currently_insured.no":"नहीं","insurer_name":"मौजूदा बीमा कंपनी","details":"कोटेशन में क्या शामिल हो?","section.consent":"सहमति","consent_contact":"मैं इस अनुरोध के बारे में संपर्क किए जाने के लिए सहमत हूँ।","consent_privacy":"मैं सहमत हूँ कि अनुरोध पर काम करने के लिए ये जवाब सहेजे जाएँ।"},"ja":{"title":"保険見積もりフォーム","lede":"見積もりを依頼します。フォームでは希望する補償内容をうかがい、病歴は求めません。","submit":"送信","thanks":"送信しました。ありがとうございます。","file_too_big":"ファイルは3つまで、1つ5 MiB、合計10 MiBまでです。","error":"送信できませんでした。もう一度お試しください。","disclaimer":"このフォームは、保険契約や請求に関する法的記録ではありません。見積もりやリクエストの登録に必要な情報のみを送信してください。健康に関する情報は、GDPRにおける特別カテゴリーのデータに該当します。その情報なしではリクエストを処理できない場合を除き、記載しないでください。","section.cover":"補償","cover_type":"見積もりの対象","cover_type.auto":"自動車","cover_type.home":"住宅","cover_type.travel":"旅行","cover_type.business":"事業","city":"市区町村","start_date":"補償開始日","section.contact":"連絡先","name":"お名前","email":"メールアドレス","phone":"電話番号","section.details":"詳細","currently_insured":"すでにこの補償に加入していますか?","currently_insured.yes":"はい","currently_insured.no":"いいえ","insurer_name":"現在の保険会社","details":"見積もりに含める内容","section.consent":"同意","consent_contact":"このお問い合わせについて連絡を受けることに同意します。","consent_privacy":"お問い合わせへの対応のため、これらの回答が保存されることに同意します。"},"de":{"title":"Formular für Versicherungsangebote","lede":"Angebot anfragen. Das Formular erfasst den gewünschten Versicherungsschutz, keine Krankengeschichte.","submit":"Senden","thanks":"Gesendet. Vielen Dank.","file_too_big":"Bis zu 3 Dateien, je 5 MiB und insgesamt 10 MiB.","error":"Senden fehlgeschlagen. Bitte versuchen Sie es erneut.","disclaimer":"Dieses Formular ist kein Versicherungsvertrag und keine rechtsverbindliche Schadensmeldung. Senden Sie nur, was für ein Angebot oder die Erfassung der Anfrage nötig ist. Gesundheitsdaten sind nach der DSGVO besondere Kategorien personenbezogener Daten – lassen Sie sie weg, sofern die Anfrage ohne sie bearbeitet werden kann.","section.cover":"Versicherungsschutz","cover_type":"Wofür möchten Sie ein Angebot?","cover_type.auto":"Kfz","cover_type.home":"Wohngebäude/Hausrat","cover_type.travel":"Reise","cover_type.business":"Gewerbe","city":"Stadt","start_date":"Versicherungsbeginn","section.contact":"Kontakt","name":"Name","email":"E-Mail","phone":"Telefon","section.details":"Details","currently_insured":"Haben Sie diese Versicherung bereits?","currently_insured.yes":"Ja","currently_insured.no":"Nein","insurer_name":"Aktueller Versicherer","details":"Was sollte das Angebot enthalten?","section.consent":"Einwilligung","consent_contact":"Ich bin damit einverstanden, bezüglich dieser Anfrage kontaktiert zu werden.","consent_privacy":"Ich stimme zu, dass diese Antworten gespeichert werden, damit die Anfrage bearbeitet werden kann."}}</script>
<script>
function mountCaptcha(node, siteKey) {
  if (!node || !siteKey) return () => {};
  let disposed = false;
  let widget;
  function render() {
    if (disposed || !window.turnstile) return;
    window.turnstile.ready(() => {
      if (disposed) return;
      widget = window.turnstile.render(node, { sitekey: siteKey, language: node.dataset.language || document.documentElement.lang || "auto" });
      node.dataset.widgetId = widget;
    });
  }
  if (window.turnstile) render();
  else {
    let script = document.querySelector('script[src^="https://challenges.cloudflare.com/turnstile/v0/api.js"]');
    if (!script) {
      script = document.createElement("script");
      script.src = "https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit";
      script.async = true;
      document.head.appendChild(script);
    }
    script.addEventListener("load", render, { once: true });
  }
  return () => { disposed = true; if (widget !== undefined) window.turnstile?.remove(widget); };
}
function resetCaptcha(form) {
  const widget = form.querySelector("[data-turnstile]")?.dataset.widgetId;
  if (widget !== undefined) window.turnstile?.reset(widget);
}
(function () {
  var MAX = 5242880;
  var form = document.getElementById("fg-form");
  var packNode = document.getElementById("fg-labels");
  if (!form || !packNode) return;
  var pack = JSON.parse(packNode.textContent);
  function code() {
    var q = new URLSearchParams(location.search).get("lang") || "";
    // ?lang= preview override, then the form language chosen when copying, then the page and browser.
    var raw = (q || form.getAttribute("data-lang") || document.documentElement.lang || (navigator.language || "en")).slice(0, 2).toLowerCase();
    return pack[raw] ? raw : "en";
  }
  function apply() {
    var dict = pack[code()];
    document.querySelectorAll("[data-i18n]").forEach(function (node) {
      var key = node.getAttribute("data-i18n");
      if (key && typeof dict[key] === "string") node.textContent = dict[key];
    });
  }
  apply();
  var status = form.querySelector("[data-status]");
  form.addEventListener("submit", function (event) {
    event.preventDefault();
    var dict = pack[code()];
    var body = new FormData(form);
    var files = Array.from(body.values()).filter(function (value) { return value instanceof File && value.size; });
    if (files.length > 3 || files.some(function (file) { return file.size > MAX; }) || files.reduce(function (sum,file) { return sum + file.size; },0) > 10 * 1024 * 1024) {
      if (status) status.textContent = dict.file_too_big;
      return;
    }
    var button = form.querySelector("button[type=submit]");
    if (button) button.disabled = true;
    fetch(form.action, { method: "POST", headers: { Accept: "application/json" }, body: body })
      .then(function (response) { return response.json(); }).then(function (result) {
        if (status) status.textContent = result && result.success ? dict.thanks : ((result && result.message) || dict.error);
      }).catch(function () { if (status) status.textContent = dict.error; })
      .finally(function () { if (button) button.disabled = false; resetCaptcha(form); });
  });
  mountCaptcha(form.querySelector("[data-turnstile]"), form.dataset.sitekey);

})();
</script>
</body>
</html>