Formular für Arzttermine

Termin in einer Praxis vereinbaren. Das Formular fragt nach einer Uhrzeit und einem kurzen Anlass, nicht nach einer Diagnose.

Dieses Formular ist keine Patientenakte. Senden Sie keine Diagnosen, Befunde oder andere Gesundheitsangaben, die für die Anfrage nicht nötig sind. Gesundheitsdaten sind nach der DSGVO besondere Kategorien personenbezogener Daten.

Vorschau

Termin

Kontakt

Anlass

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 Arzttermine</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="visit_for"] option[value="child"]:checked) [data-show-if="visit_for"][data-show-equals="child"] { display: grid; }
</style>
</head>
<body>
<main>
<h1 data-i18n="title">Formular für Arzttermine</h1>
<p data-i18n="lede">Termin in einer Praxis vereinbaren. Das Formular fragt nach einer Uhrzeit und einem kurzen Anlass, nicht nach einer Diagnose.</p>
<p class="note" data-i18n="disclaimer">Dieses Formular ist keine Patientenakte. Senden Sie keine Diagnosen, Befunde oder andere Gesundheitsangaben, die für die Anfrage nicht nötig sind. Gesundheitsdaten sind nach der DSGVO besondere Kategorien personenbezogener Daten.</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.visit">Visit</h2>
<div class="field"><label for="fg-service"><span data-i18n="service">What do you need?</span></label><select id="fg-service" name="service" required><option value="">—</option><option value="consultation" data-i18n="service.consultation">Consultation</option><option value="follow_up" data-i18n="service.follow_up">Follow-up</option><option value="vaccination" data-i18n="service.vaccination">Vaccination</option><option value="diagnostics" data-i18n="service.diagnostics">Tests</option></select></div>
<div class="field"><label for="fg-preferred_date"><span data-i18n="preferred_date">Preferred date</span></label><input id="fg-preferred_date" name="preferred_date" type="date" required></div>
<div class="field"><label for="fg-preferred_time"><span data-i18n="preferred_time">Preferred time</span></label><select id="fg-preferred_time" name="preferred_time" required><option value="">—</option><option value="morning" data-i18n="preferred_time.morning">Morning</option><option value="afternoon" data-i18n="preferred_time.afternoon">Afternoon</option><option value="evening" data-i18n="preferred_time.evening">Evening</option></select></div>
<div class="field"><label for="fg-visit_for"><span data-i18n="visit_for">Who is the visit for?</span></label><select id="fg-visit_for" name="visit_for" required><option value="">—</option><option value="self" data-i18n="visit_for.self">Me</option><option value="child" data-i18n="visit_for.child">A child</option></select></div>
<div class="field" data-show-if="visit_for" data-show-equals="child"><label for="fg-child_name"><span data-i18n="child_name">Child's name</span></label><input id="fg-child_name" name="child_name" type="text" maxlength="80" autocomplete="name"></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" 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.reason">Reason</h2>
<div class="field"><label for="fg-reason"><span data-i18n="reason">Short reason for the visit</span></label><textarea id="fg-reason" name="reason" required maxlength="500"></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.visit":"Візит","service":"Що потрібно?","service.consultation":"Консультація","service.follow_up":"Повторний візит","service.vaccination":"Щеплення","service.diagnostics":"Обстеження","preferred_date":"Бажана дата","preferred_time":"Бажаний час","preferred_time.morning":"Ранок","preferred_time.afternoon":"День","preferred_time.evening":"Вечір","visit_for":"Для кого візит?","visit_for.self":"Для мене","visit_for.child":"Для дитини","child_name":"Ім'я дитини","section.contact":"Контакт","name":"Ім'я","email":"Електронна пошта","phone":"Телефон","section.reason":"Причина","reason":"Коротка причина візиту","section.consent":"Згода","consent_contact":"Погоджуюсь, щоб зі мною зв'язалися щодо цієї заявки.","consent_privacy":"Погоджуюсь, що ці відповіді зберігаються, щоб заявку можна було обробити."},"en":{"title":"Doctor appointment form","lede":"Book a clinic visit. The form asks for a time and a short reason, not a diagnosis.","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 a medical record. Do not send diagnoses, test results, or other health details you do not need for the request. Health data is a special category under the GDPR.","section.visit":"Visit","service":"What do you need?","service.consultation":"Consultation","service.follow_up":"Follow-up","service.vaccination":"Vaccination","service.diagnostics":"Tests","preferred_date":"Preferred date","preferred_time":"Preferred time","preferred_time.morning":"Morning","preferred_time.afternoon":"Afternoon","preferred_time.evening":"Evening","visit_for":"Who is the visit for?","visit_for.self":"Me","visit_for.child":"A child","child_name":"Child's name","section.contact":"Contact","name":"Name","email":"Email","phone":"Phone","section.reason":"Reason","reason":"Short reason for the visit","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 zapisu do lekarza","lede":"Zapis na wizytę. Formularz pyta o termin i krótki powód, nie o rozpoznanie.","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 dokumentacją medyczną. Nie wysyłaj rozpoznań, wyników badań ani innych danych o zdrowiu, które nie są potrzebne do obsługi zgłoszenia. Dane o zdrowiu to szczególna kategoria w RODO.","section.visit":"Wizyta","service":"Czego dotyczy wizyta?","service.consultation":"Konsultacja","service.follow_up":"Wizyta kontrolna","service.vaccination":"Szczepienie","service.diagnostics":"Badania","preferred_date":"Preferowana data","preferred_time":"Preferowana pora","preferred_time.morning":"Rano","preferred_time.afternoon":"Popołudnie","preferred_time.evening":"Wieczór","visit_for":"Dla kogo jest wizyta?","visit_for.self":"Dla mnie","visit_for.child":"Dla dziecka","child_name":"Imię dziecka","section.contact":"Kontakt","name":"Imię","email":"E-mail","phone":"Telefon","section.reason":"Powód","reason":"Krótki powód wizyty","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":"Doktor randevu formu","lede":"Klinik ziyareti için randevu. Form saat ve kısa bir neden sorar, tanı 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 tıbbi kayıt değildir. Tanı, tahlil sonucu veya talep için gerekmeyen başka sağlık verisi göndermeyin. Sağlık verisi GDPR'de özel nitelikli veridir.","section.visit":"Ziyaret","service":"Ne için geliyorsunuz?","service.consultation":"Muayene","service.follow_up":"Kontrol","service.vaccination":"Aşı","service.diagnostics":"Tetkik","preferred_date":"Tercih edilen tarih","preferred_time":"Tercih edilen saat","preferred_time.morning":"Sabah","preferred_time.afternoon":"Öğleden sonra","preferred_time.evening":"Akşam","visit_for":"Randevu kimin için?","visit_for.self":"Benim için","visit_for.child":"Çocuk için","child_name":"Çocuğun adı","section.contact":"İletişim","name":"Ad","email":"E-posta","phone":"Telefon","section.reason":"Neden","reason":"Ziyaretin kısa nedeni","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.visit":"الزيارة","service":"ما الذي تحتاجه؟","service.consultation":"استشارة","service.follow_up":"متابعة","service.vaccination":"تطعيم","service.diagnostics":"فحوصات","preferred_date":"التاريخ المفضل","preferred_time":"الوقت المفضل","preferred_time.morning":"صباحًا","preferred_time.afternoon":"بعد الظهر","preferred_time.evening":"مساءً","visit_for":"لمن الزيارة؟","visit_for.self":"لي","visit_for.child":"لطفل","child_name":"اسم الطفل","section.contact":"التواصل","name":"الاسم","email":"البريد الإلكتروني","phone":"الهاتف","section.reason":"السبب","reason":"سبب مختصر للزيارة","section.consent":"الموافقة","consent_contact":"أوافق على التواصل معي بخصوص هذا الطلب.","consent_privacy":"أوافق على حفظ هذه الإجابات لمعالجة الطلب."},"he":{"title":"טופס קביעת תור לרופא","lede":"קביעת ביקור במרפאה. הטופס מבקש מועד וסיבה קצרה, לא אבחנה.","submit":"שליחה","thanks":"נשלח. תודה.","file_too_big":"עד 3 קבצים, 5 MiB לכל קובץ ו-10 MiB בסך הכול.","error":"השליחה נכשלה. נסו שוב.","disclaimer":"הטופס הזה אינו רשומה רפואית. אל תשלחו אבחנות, תוצאות בדיקות או פרטי בריאות אחרים שאינם נחוצים לפנייה. נתוני בריאות הם קטגוריה מיוחדת לפי ה-GDPR.","section.visit":"ביקור","service":"במה מדובר?","service.consultation":"ייעוץ","service.follow_up":"ביקור המשך","service.vaccination":"חיסון","service.diagnostics":"בדיקות","preferred_date":"תאריך מועדף","preferred_time":"שעה מועדפת","preferred_time.morning":"בוקר","preferred_time.afternoon":"צהריים","preferred_time.evening":"ערב","visit_for":"עבור מי הביקור?","visit_for.self":"עבורי","visit_for.child":"עבור ילד","child_name":"שם הילד","section.contact":"פרטי קשר","name":"שם","email":"אימייל","phone":"טלפון","section.reason":"סיבה","reason":"סיבה קצרה לביקור","section.consent":"הסכמה","consent_contact":"אני מסכים/ה שייצרו איתי קשר בנוגע לפנייה זו.","consent_privacy":"אני מסכים/ה שהתשובות יישמרו לצורך טיפול בפנייה."},"es":{"title":"Formulario de cita médica","lede":"Reserva una visita a la clínica. El formulario pide una hora y un motivo breve, no un diagnóstico.","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 una historia clínica. No envíes diagnósticos, resultados de pruebas ni otros datos de salud que la solicitud no necesite. Los datos de salud son una categoría especial en el RGPD.","section.visit":"Visita","service":"¿Qué necesitas?","service.consultation":"Consulta","service.follow_up":"Revisión","service.vaccination":"Vacunación","service.diagnostics":"Pruebas","preferred_date":"Fecha preferida","preferred_time":"Hora preferida","preferred_time.morning":"Mañana","preferred_time.afternoon":"Tarde","preferred_time.evening":"Noche","visit_for":"¿Para quién es la visita?","visit_for.self":"Para mí","visit_for.child":"Para un niño","child_name":"Nombre del niño","section.contact":"Contacto","name":"Nombre","email":"Correo electrónico","phone":"Teléfono","section.reason":"Motivo","reason":"Motivo breve de la visita","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 rendez-vous médical","lede":"Réservez une visite à la clinique. Le formulaire demande un créneau et un motif court, pas un diagnostic.","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 dossier médical. N’envoyez pas de diagnostic, de résultat d’analyse ni d’autre donnée de santé inutile pour la demande. Les données de santé sont une catégorie particulière au sens du RGPD.","section.visit":"Visite","service":"De quoi avez-vous besoin ?","service.consultation":"Consultation","service.follow_up":"Suivi","service.vaccination":"Vaccination","service.diagnostics":"Examens","preferred_date":"Date souhaitée","preferred_time":"Moment souhaité","preferred_time.morning":"Matin","preferred_time.afternoon":"Après-midi","preferred_time.evening":"Soir","visit_for":"Pour qui est la visite ?","visit_for.self":"Pour moi","visit_for.child":"Pour un enfant","child_name":"Nom de l’enfant","section.contact":"Contact","name":"Nom","email":"E-mail","phone":"Téléphone","section.reason":"Motif","reason":"Motif court de la visite","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 marcação de consulta","lede":"Marque uma consulta na clínica. O formulário pede um horário e um motivo breve, não um diagnóstico.","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 registo clínico. Não envie diagnósticos, resultados de exames nem outros dados de saúde que não sejam necessários para o pedido. Os dados de saúde são uma categoria especial no RGPD.","section.visit":"Consulta","service":"De que precisa?","service.consultation":"Consulta","service.follow_up":"Consulta de seguimento","service.vaccination":"Vacinação","service.diagnostics":"Exames","preferred_date":"Data preferida","preferred_time":"Horário preferido","preferred_time.morning":"Manhã","preferred_time.afternoon":"Tarde","preferred_time.evening":"Noite","visit_for":"Para quem é a consulta?","visit_for.self":"Para mim","visit_for.child":"Para uma criança","child_name":"Nome da criança","section.contact":"Contacto","name":"Nome","email":"Email","phone":"Telefone","section.reason":"Motivo","reason":"Motivo breve da consulta","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.visit":"विज़िट","service":"आपको क्या चाहिए?","service.consultation":"परामर्श","service.follow_up":"फ़ॉलो-अप","service.vaccination":"टीकाकरण","service.diagnostics":"जाँचें","preferred_date":"पसंदीदा तारीख","preferred_time":"पसंदीदा समय","preferred_time.morning":"सुबह","preferred_time.afternoon":"दोपहर","preferred_time.evening":"शाम","visit_for":"विज़िट किसके लिए है?","visit_for.self":"मेरे लिए","visit_for.child":"बच्चे के लिए","child_name":"बच्चे का नाम","section.contact":"संपर्क","name":"नाम","email":"ईमेल","phone":"फ़ोन","section.reason":"कारण","reason":"विज़िट का छोटा कारण","section.consent":"सहमति","consent_contact":"मैं इस अनुरोध के बारे में संपर्क किए जाने के लिए सहमत हूँ।","consent_privacy":"मैं सहमत हूँ कि अनुरोध पर काम करने के लिए ये जवाब सहेजे जाएँ।"},"ja":{"title":"診察予約フォーム","lede":"クリニックの受診を予約します。フォームでは希望時間と簡単な理由をうかがい、診断内容は求めません。","submit":"送信","thanks":"送信しました。ありがとうございます。","file_too_big":"ファイルは3つまで、1つ5 MiB、合計10 MiBまでです。","error":"送信できませんでした。もう一度お試しください。","disclaimer":"このフォームは医療記録ではありません。依頼に必要のない診断結果、検査結果、その他の健康に関する詳細情報は送信しないでください。健康データは、GDPRにおける特別なカテゴリーに該当します。","section.visit":"受診","service":"ご用件","service.consultation":"診察","service.follow_up":"再診","service.vaccination":"予防接種","service.diagnostics":"検査","preferred_date":"希望日","preferred_time":"希望時間帯","preferred_time.morning":"午前","preferred_time.afternoon":"午後","preferred_time.evening":"夕方","visit_for":"どなたの受診ですか?","visit_for.self":"本人","visit_for.child":"子ども","child_name":"お子さまの名前","section.contact":"連絡先","name":"お名前","email":"メールアドレス","phone":"電話番号","section.reason":"理由","reason":"受診の簡単な理由","section.consent":"同意","consent_contact":"このお問い合わせについて連絡を受けることに同意します。","consent_privacy":"お問い合わせへの対応のため、これらの回答が保存されることに同意します。"},"de":{"title":"Formular für Arzttermine","lede":"Termin in einer Praxis vereinbaren. Das Formular fragt nach einer Uhrzeit und einem kurzen Anlass, nicht nach einer Diagnose.","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 keine Patientenakte. Senden Sie keine Diagnosen, Befunde oder andere Gesundheitsangaben, die für die Anfrage nicht nötig sind. Gesundheitsdaten sind nach der DSGVO besondere Kategorien personenbezogener Daten.","section.visit":"Termin","service":"Was benötigen Sie?","service.consultation":"Beratung","service.follow_up":"Kontrolltermin","service.vaccination":"Impfung","service.diagnostics":"Untersuchungen","preferred_date":"Wunschtermin","preferred_time":"Wunschuhrzeit","preferred_time.morning":"Vormittag","preferred_time.afternoon":"Nachmittag","preferred_time.evening":"Abend","visit_for":"Für wen ist der Termin?","visit_for.self":"Für mich","visit_for.child":"Für ein Kind","child_name":"Name des Kindes","section.contact":"Kontakt","name":"Name","email":"E-Mail","phone":"Telefon","section.reason":"Anlass","reason":"Kurzer Anlass des Termins","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>