// Bilingual strings — Valencian (val) + Castilian (es)
const T = {
  val: {
    nav: { info: "Informació", when: "Quan", prices: "Preus", inscribe: "Preinscripció", faq: "FAQ", contact: "Contacte", register: "Preinscriu-te" },
    hero: {
      eyebrow: "Ajuntament de Benicarló · Educació",
      title1: "Escola",
      title2: "d'Estiu",
      title3: "2026",
      lede: "Sis setmanes de jocs, platja, tallers i amistats noves al cor de Benicarló. Per a xiquets i xiquetes d'infantil 3 anys a 6é de primària.",
      ctaPrimary: "Preinscripció oberta",
      ctaSecondary: "Veure informació",
      stat1Num: "3", stat1Lbl: "Torns quinzenals",
      stat2Num: "6h", stat2Lbl: "Diàries de diversió",
      stat3Num: "2", stat3Lbl: "Centres escolars",
    },
    audience: {
      tag: "A qui s'adreça",
      title: "Per a xiquets i xiquetes de 4 a 12 anys",
      body: "L'Escola d'Estiu 2026 és per a nascuts entre els anys 2022 i 2014: els que durant el curs 2025-2026 hagen cursat entre infantil 3 anys i 6é de primària.",
      born: "Any de naixement",
      level: "Curs actual (2025-26)",
    },
    where: {
      tag: "On es fa",
      title: "Dos centres públics al cor del poble",
      body: "Les activitats es desenvolupen als patis, aules i instal·lacions esportives de dos centres educatius de Benicarló.",
      marques: "CEIP Marqués de Benicarló",
      marquesSub: "Centre principal · També acull el menjador",
      catalan: "CEIP Mestre Francesc Catalan",
      catalanSub: "Centre complementari",
      canteen: "Menjador",
    },
    when: {
      tag: "Quan es fa",
      title: "Del 29 de juny al 7 d'agost",
      body: "Sis setmanes distribuïdes en tres torns quinzenals. Pots triar un, dos o els tres torns.",
      t1: "1r torn", t1d: "29 juny — 10 juliol", t1p: 300, t1lunch: 120,
      t2: "2n torn", t2d: "13 — 24 juliol", t2p: 300, t2lunch: 120,
      t3: "3r torn", t3d: "27 juliol — 7 agost", t3p: 170, t3lunch: 120,
      mondayFriday: "De dilluns a divendres no festius",
      placesLbl: "places",
      lunchPlacesLbl: "places de menjador",
      placesIntro: "Places disponibles",
      placesNote: "Les places s'assignen per sorteig si la demanda supera l'oferta.",
    },
    schedule: {
      tag: "Horari",
      title: "Tria els trams que necessites",
      body: "Pots combinar lliurement els tres trams. El més habitual és matí complet; el cangur és opcional per a famílies matineres i el menjador inclou dinar i estona d'esbarjo.",
      cangur: "Cangur", cangurTime: "9.00 — 10.00 h",
      morning: "Matí", morningTime: "10.00 — 13.00 h",
      lunch: "Menjador", lunchTime: "13.00 — 15.00 h",
      perTurn: "per torn",
    },
    prices: {
      tag: "Preus",
      title: "Preus clars, per torn",
      body: "Cada tram es paga per torn complet (dues setmanes). No hi ha matrícula.",
      cangur: "Cangur",
      cangurSlot: "1 h diària · matí prompte",
      morning: "Matí",
      morningSlot: "3 h diàries · nucli del dia",
      lunch: "Menjador",
      lunchSlot: "2 h diàries · dinar inclòs",
      mostPopular: "Més triat",
      bullets: {
        cangur: ["Obertura anticipada a les 9.00 h", "Joc lliure i desdejuni propi", "Vigilància educativa"],
        morning: ["Tallers creatius i esportius", "Sortides a la piscina i platja", "Monitors titulats"],
        lunch: ["Dinar ecològic i equilibrat", "Temps d'esbarjo i descans", "Al CEIP Marqués de Benicarló"],
      },
      bonif: "Famílies nombroses residents a Benicarló: bonificació del preu per al tercer i quart fill/a inscrit.",
    },
    how: {
      tag: "Com preinscriure's",
      title: "Tres passes per a formalitzar la plaça",
      step1T: "Preinscripció en línia",
      step1D: "Ompli el formulari d'aquesta mateixa pàgina entre l'11 i el 15 de maig.",
      step1W: "11 — 15 de maig",
      step2T: "Preinscripció presencial",
      step2D: "Al Departament d'Educació de l'Ajuntament de Benicarló — C/ Major núm. 32 (UP). Horari de 9.00 a 14.00 h.",
      step2W: "14 de maig · 9 — 14 h",
      step3T: "Matriculació i confirmació",
      step3D: "Comunicació de places per correu electrònic, pagament i enviament del justificant. Vegeu el calendari complet a sota.",
      step3W: "20 — 25 de maig",
    },
    enrol: {
      tag: "Calendari de matriculació",
      title: "El procés, dia a dia",
      body: "Després del període de preinscripció, aquestes són les dates clau per a confirmar la plaça. És imprescindible que el correu electrònic indicat al formulari siga correcte.",
      blocks: [
        {
          when: "14 de maig · 9.00 — 14.00 h",
          title: "Preinscripcions presencials",
          body: "Al Departament d'Educació de l'Ajuntament de Benicarló (C/ Major núm. 32 — “UP”), per a famílies que prefereixen tramitar-ho presencialment.",
          tag: "Presencial",
        },
        {
          when: "20 de maig · matí",
          title: "1a comunicació de places acceptades",
          body: "Es comunicaran per correu electrònic les primeres places acceptades. A les persones en llista d'espera, se'ls notificarà la seua situació; si posteriorment hi ha vacants, se'ls informarà per correu.",
          tag: "Correu electrònic",
        },
        {
          when: "21 — 25 de maig",
          title: "Pagament i justificant",
          body: "Les famílies amb plaça han de fer el pagament i enviar el justificant per correu a estiubenicarlo@gmail.com dins d'aquest mateix termini.",
          tag: "Pagament",
          email: "estiubenicarlo@gmail.com",
        },
        {
          when: "A partir del 26 de maig",
          title: "Vacants per a la llista d'espera",
          body: "En cas d'haver places vacants, es comunicarà per ordre de registre i es repetirà el procés de pagament i justificant.",
          tag: "Vacants",
        },
      ],
      warn: "Les persones que no formalitzen el pagament i no envien el justificant dins del termini perdran la plaça assignada i no tindran dret a reclamar-la.",
    },
    faq: {
      tag: "Preguntes freqüents",
      title: "Tot allò que vols saber",
      items: [
        { q: "Quants torns puc triar?", a: "Pots triar un, dos o els tres torns. També pots combinar els horaris (cangur, matí, menjador) de forma independent per a cada torn." },
        { q: "Què inclou el menjador?", a: "Dinar complet amb menú equilibrat, temps d'esbarjo i descans. El menjador es realitza al CEIP Marqués de Benicarló." },
        { q: "Com funciona la bonificació per família nombrosa?", a: "Les famílies nombroses residents a Benicarló tenen bonificació en el preu per al tercer i quart fill/a inscrit. Cal indicar-ho en el formulari i acreditar-ho en el moment de la matrícula." },
        { q: "Què passa si hi ha més preinscripcions que places?", a: "Es realitza un sorteig públic que estableix l'ordre de matrícula. Totes les famílies reben confirmació per correu electrònic." },
        { q: "Hi ha menjar adaptat per a al·lèrgies?", a: "Sí. Indica qualsevol al·lèrgia, intolerància o necessitat mèdica en la fase de matriculació i l'empresa del menjador adaptarà el menú." },
        { q: "Els xiquets van a la platja?", a: "Sí, però sols amb l'alumnat de Primària es programen sortides setmanals. Caldrà signar les autoritzacions corresponents abans de l'inici del torn. No amb Infantil." },
      ],
    },
    form: {
      tag: "Formulari",
      title: "Preinscripció en línia",
      body: "Empleneu totes les dades. La preinscripció no garanteix plaça — l'assignació es fa per sorteig si la demanda supera l'oferta.",
      s1: "Dades del/de la participant",
      s1d: "Informació bàsica del/de la participant",
      s1Sibling: "Dades del germà/germana",
      s1SiblingD: "Informació bàsica d'un altre fill/a a preinscriure",
      s2: "Pare, mare o tutor/a",
      s2d: "Persona de referència per a les comunicacions",
      s3: "Centre, torns i serveis (per cada participant)",
      s3d: "Cada participant pot tenir centre, torns i serveis diferents",
      s4: "Necessitats educatives",
      s4d: "Aquesta informació és orientativa per a l'organització dels grups",
      s5: "Observacions",
      s5d: "Qualsevol informació addicional",
      childFirstName: "Nom del/de la participant",
      childFirstNameHint: "Nom (o noms compostos)",
      childLastName: "Cognoms del/de la participant",
      childLastNameHint: "Primer i segon cognom",
      birthDate: "Data de naixement",
      course: "Curs escolar 2025-26",
      gender: "Gènere",
      address: "Adreça postal",
      city: "Població",
      zip: "Codi postal",
      parentFirstName: "Nom del pare/mare/tutor/a",
      parentLastName1: "Primer cognom",
      parentLastName2: "Segon cognom",
      dni: "DNI / NIE",
      phone: "Telèfon",
      phone2: "Telèfon alternatiu (opcional)",
      email: "Correu electrònic",
      emailConfirm: "Confirma el correu electrònic",
      emailConfirmHint: "Escriu de nou el correu per a verificar que coincideix",
      emailMismatch: "Els correus no coincideixen",
      dniHint: "DNI (8 dígits + lletra), NIE (X/Y/Z + 7 dígits + lletra) o passaport internacional",
      dniInvalid: "Format no vàlid (DNI / NIE / passaport)",
      phoneHint: "9 dígits, comença per 6, 7, 8 o 9",
      phoneInvalid: "Telèfon no vàlid (cal 9 dígits)",
      center: "Centre preferit",
      centerAlt: "Accepteu plaça al centre alternatiu si no hi ha al preferit?",
      modalityLabel: "Modalitat per a aquest torn (si hi ha més d'un germà/a amb aquest torn)",
      modalityJoint: "Conjunta — tots els germans/es al mateix centre",
      modalityPartial: "Parcial — cada germà/a pot anar a un centre diferent",
      modalityNote: "La modalitat només afecta si hi ha diversos germans/es preinscrits en aquest torn.",
      turnsLabel: "Torns que sol·licita",
      hoursLabel: "Serveis per a cada torn triat",
      addSibling: "Vols preinscriure un germà/germana?",
      addSiblingBtn: "＋ Afegir germà/germana",
      removeSibling: "Eliminar este participant",
      siblingN: "Participant #",
      large: "Família nombrosa resident a Benicarló (per a la fase de matriculació)",
      nee: "Necessitats educatives especials diagnosticades",
      neeDetail: "Detalls (opcional, només si vols compartir-los ara)",
      neeDetailHint: "Aquesta informació és orientativa. Els detalls clínics es demanaran en la fase de matriculació.",
      consent: "He llegit i accepte la política de protecció de dades i les bases de l'Escola d'Estiu 2026.",
      obs: "Observacions",
      required: "obligatori",
      submit: "Enviar preinscripció",
      reset: "Netejar",
      saved: "Preinscripció desada correctament. Reviseu el correu indicat.",
      errors: "Revisa els camps marcats",
      lopdShort: "Tractem les vostres dades segons el RGPD. Responsable: Ajuntament de Benicarló. Finalitat: gestionar la preinscripció i posterior matriculació a l'Escola d'Estiu 2026. Drets: accés, rectificació, supressió i oposició escrivint a dpd@ajuntamentdebenicarlo.org.",
      lopdLink: "Veure política completa",
      lopdTitle: "Política de protecció de dades · Escola d'Estiu Benicarló 2026",
      lopdFull: [
        "**Responsable del tractament:** Ajuntament de Benicarló · Carrer de Ferreres Bretó, 10 · 12580 Benicarló · CIF P-1202700-E.",
        "**Delegat de Protecció de Dades:** dpd@ajuntamentdebenicarlo.org",
        "**Finalitat:** Gestionar la preinscripció, sorteig, matriculació i comunicació amb les famílies de l'Escola d'Estiu 2026, així com els recordatoris de pagament i les notificacions relatives a beques i ajudes.",
        "**Base legal:** Compliment d'una missió d'interès públic (art. 6.1.e RGPD), execució d'un contracte (art. 6.1.b RGPD) en el cas dels participants confirmats i consentiment de l'interessat per a comunicacions complementàries (art. 6.1.a RGPD).",
        "**Destinataris:** Les vostres dades no seran cedides a tercers excepte obligació legal. Es comuniquen al proveïdor de servei de correu electrònic Resend (Estats Units, amb les garanties adequades segons les Clàusules Contractuals Tipus de la Comissió Europea) únicament per a l'enviament dels correus relacionats amb el procés.",
        "**Conservació:** Les dades es conservaran durant la duració del procés i, posteriorment, durant els terminis previstos legalment per a la gestió administrativa municipal (5 anys per defecte, salvant obligacions específiques).",
        "**Drets:** Podeu exercir els drets d'accés, rectificació, supressió, oposició, limitació, portabilitat i a no ser objecte de decisions automatitzades, escrivint al delegat de protecció de dades.",
        "**Reclamació:** Si considereu que el tractament no s'ajusta a la normativa, podeu presentar reclamació davant l'Agència Espanyola de Protecció de Dades (www.aepd.es).",
      ],
      placesDisclaimer: "L'enviament d'aquest formulari no garanteix plaça. En cas d'excés de demanda es realitzarà sorteig públic.",
      genders: ["Xiqueta", "Xiquet", "Altres / preferisc no dir-ho"],
      courses: ["Infantil 3 anys", "Infantil 4 anys", "Infantil 5 anys", "1r Primària", "2n Primària", "3r Primària", "4t Primària", "5é Primària", "6é Primària"],
      centers: ["CEIP Marqués de Benicarló", "CEIP Mestre Francesc Catalan"],
    },
    summary: {
      title: "Resum de la preinscripció",
      muted: "El preu s'actualitza mentre empleneu el formulari",
      empty: "Selecciona torns i serveis per a cada participant",
      total: "Total estimat",
      note: "Preu orientatiu. La bonificació del 3r i 4t germà/a s'aplica automàticament. La quota definitiva es comunicarà amb la matriculació.",
      bonifApplied: "Bonificació 3r/4t germà/a aplicada (−50%)",
      turnX: "Torn",
      childN: "Participant",
    },
    admin: {
      title: "Preinscripcions registrades (demo local)",
      sub: "Dades desades en aquest navegador (localStorage). Es perdran quan connectem amb Supabase.",
      export: "Exportar CSV",
      clear: "Esborrar totes",
      close: "Tancar",
      empty: "Encara no hi ha cap preinscripció",
      emptyD: "Les preinscripcions de prova apareixeran ací",
      cols: ["Data", "Participant", "Naix.", "Curs", "Tutor/a", "Telèfon", "Email", "Centre", "Torns", "Serveis", "Família", "Total", ""],
      clearConfirm: "Vols esborrar totes les preinscripcions de prova? Aquesta acció no es pot desfer.",
      cleared: "Preinscripcions esborrades",
    },
    fab: "Veure preinscripcions",
    footer: {
      addr: "Carrer de Ferreres Bretó, 10 · 12580 Benicarló",
      phone: "Tel. 964 470 050 · Fax 964 475 908",
      web: "www.ajuntamentdebenicarlo.org",
      dept: "Regidoria d'Educació",
      linksT: "Enllaços",
      contactT: "Contacte",
      copy: "© 2026 Ajuntament de Benicarló · Tots els drets reservats",
      lopdT: "Protecció de dades",
      lopdBody: "En compliment del Reglament (UE) 2016/679 (RGPD) i la LOPDGDD 3/2018, l'Ajuntament de Benicarló, com a responsable del tractament, informa que les dades facilitades es tractaran amb la finalitat exclusiva de gestionar la preinscripció, la matriculació, l'assistència i la facturació de l'Escola d'Estiu 2026. La base jurídica és el consentiment de la persona interessada i l'execució del servei. Les dades es conservaran durant el temps legalment establit i no se cediran a tercers excepte obligació legal o als proveïdors estrictament necessaris per a la prestació del servei (monitors i empresa de càtering). Podeu exercir els drets d'accés, rectificació, supressió, oposició, limitació i portabilitat dirigint-vos per escrit a l'Ajuntament de Benicarló o al delegat de protecció de dades a dpd@ajuntamentdebenicarlo.org. També podeu reclamar davant l'AEPD (www.aepd.es).",
      lopdLink: "Política de privacitat completa",
    },
    months: ["gen", "feb", "mar", "abr", "mai", "jun", "jul", "ago", "set", "oct", "nov", "des"],
  },

  es: {
    nav: { info: "Información", when: "Cuándo", prices: "Precios", inscribe: "Preinscripción", faq: "FAQ", contact: "Contacto", register: "Preinscríbete" },
    hero: {
      eyebrow: "Ayuntamiento de Benicarló · Educación",
      title1: "Escuela",
      title2: "de Verano",
      title3: "2026",
      lede: "Seis semanas de juegos, playa, talleres y nuevas amistades en el corazón de Benicarló. Para niños y niñas de infantil 3 años a 6º de primaria.",
      ctaPrimary: "Preinscripción abierta",
      ctaSecondary: "Ver información",
      stat1Num: "3", stat1Lbl: "Turnos quincenales",
      stat2Num: "6h", stat2Lbl: "Diarias de diversión",
      stat3Num: "2", stat3Lbl: "Centros escolares",
    },
    audience: {
      tag: "A quién se dirige",
      title: "Para niños y niñas de 4 a 12 años",
      body: "La Escuela de Verano 2026 es para nacidos entre los años 2022 y 2014: los que durante el curso 2025-2026 hayan cursado entre infantil 3 años y 6º de primaria.",
      born: "Año de nacimiento",
      level: "Curso actual (2025-26)",
    },
    where: {
      tag: "Dónde se hace",
      title: "Dos centros públicos en el corazón del pueblo",
      body: "Las actividades se desarrollan en los patios, aulas e instalaciones deportivas de dos centros educativos de Benicarló.",
      marques: "CEIP Marqués de Benicarló",
      marquesSub: "Centro principal · También acoge el comedor",
      catalan: "CEIP Mestre Francesc Catalan",
      catalanSub: "Centro complementario",
      canteen: "Comedor",
    },
    when: {
      tag: "Cuándo se hace",
      title: "Del 29 de junio al 7 de agosto",
      body: "Seis semanas distribuidas en tres turnos quincenales. Puedes elegir uno, dos o los tres turnos.",
      t1: "1er turno", t1d: "29 junio — 10 julio", t1p: 300, t1lunch: 120,
      t2: "2º turno", t2d: "13 — 24 julio", t2p: 300, t2lunch: 120,
      t3: "3er turno", t3d: "27 julio — 7 agosto", t3p: 170, t3lunch: 120,
      mondayFriday: "De lunes a viernes no festivos",
      placesLbl: "plazas",
      lunchPlacesLbl: "plazas de comedor",
      placesIntro: "Plazas disponibles",
      placesNote: "Las plazas se asignan por sorteo si la demanda supera la oferta.",
    },
    schedule: {
      tag: "Horario",
      title: "Elige los tramos que necesites",
      body: "Puedes combinar libremente los tres tramos. Lo más habitual es mañana completa; el canguro es opcional para familias madrugadoras y el comedor incluye comida y rato de recreo.",
      cangur: "Canguro", cangurTime: "9.00 — 10.00 h",
      morning: "Mañana", morningTime: "10.00 — 13.00 h",
      lunch: "Comedor", lunchTime: "13.00 — 15.00 h",
      perTurn: "por turno",
    },
    prices: {
      tag: "Precios",
      title: "Precios claros, por turno",
      body: "Cada tramo se paga por turno completo (dos semanas). No hay matrícula.",
      cangur: "Canguro",
      cangurSlot: "1 h diaria · mañana temprano",
      morning: "Mañana",
      morningSlot: "3 h diarias · núcleo del día",
      lunch: "Comedor",
      lunchSlot: "2 h diarias · comida incluida",
      mostPopular: "Más elegido",
      bullets: {
        cangur: ["Apertura anticipada a las 9.00 h", "Juego libre y desayuno propio", "Vigilancia educativa"],
        morning: ["Talleres creativos y deportivos", "Salidas a la piscina y playa", "Monitores titulados"],
        lunch: ["Comida ecológica y equilibrada", "Tiempo de recreo y descanso", "En el CEIP Marqués de Benicarló"],
      },
      bonif: "Familias numerosas residentes en Benicarló: bonificación del precio para el tercer y cuarto hijo/a inscrito.",
    },
    how: {
      tag: "Cómo preinscribirse",
      title: "Tres pasos para formalizar la plaza",
      step1T: "Preinscripción online",
      step1D: "Rellena el formulario de esta misma página entre el 11 y el 15 de mayo.",
      step1W: "11 — 15 de mayo",
      step2T: "Preinscripción presencial",
      step2D: "En el Departamento de Educación del Ayuntamiento de Benicarló — C/ Major núm. 32 (UP). Horario de 9.00 a 14.00 h.",
      step2W: "14 de mayo · 9 — 14 h",
      step3T: "Matriculación y confirmación",
      step3D: "Comunicación de plazas por correo electrónico, pago y envío del justificante. Consulta el calendario completo abajo.",
      step3W: "20 — 25 de mayo",
    },
    enrol: {
      tag: "Calendario de matriculación",
      title: "El proceso, día a día",
      body: "Tras el periodo de preinscripción, estas son las fechas clave para confirmar la plaza. Es imprescindible que el correo electrónico indicado en el formulario sea correcto.",
      blocks: [
        {
          when: "14 de mayo · 9.00 — 14.00 h",
          title: "Preinscripciones presenciales",
          body: "En el Departamento de Educación del Ayuntamiento de Benicarló (C/ Major núm. 32 — “UP”), para familias que prefieran tramitarlo de forma presencial.",
          tag: "Presencial",
        },
        {
          when: "20 de mayo · mañana",
          title: "1ª comunicación de plazas aceptadas",
          body: "Se comunicarán por correo electrónico las primeras plazas aceptadas. A las personas en lista de espera se les notificará su situación; si posteriormente hay vacantes, se les informará por correo.",
          tag: "Correo electrónico",
        },
        {
          when: "21 — 25 de mayo",
          title: "Pago y justificante",
          body: "Las familias con plaza deben realizar el pago y enviar el justificante por correo a estiubenicarlo@gmail.com dentro de este mismo plazo.",
          tag: "Pago",
          email: "estiubenicarlo@gmail.com",
        },
        {
          when: "A partir del 26 de mayo",
          title: "Vacantes para la lista de espera",
          body: "En caso de haber plazas vacantes, se comunicará por orden de registro y se repetirá el proceso de pago y justificante.",
          tag: "Vacantes",
        },
      ],
      warn: "Las personas que no formalicen el pago y no envíen el justificante dentro del plazo perderán la plaza asignada y no tendrán derecho a reclamarla.",
    },
    faq: {
      tag: "Preguntas frecuentes",
      title: "Todo lo que quieres saber",
      items: [
        { q: "¿Cuántos turnos puedo elegir?", a: "Puedes elegir uno, dos o los tres turnos. También puedes combinar los horarios (canguro, mañana, comedor) de forma independiente para cada turno." },
        { q: "¿Qué incluye el comedor?", a: "Comida completa con menú equilibrado, tiempo de recreo y descanso. El comedor se realiza en el CEIP Marqués de Benicarló." },
        { q: "¿Cómo funciona la bonificación por familia numerosa?", a: "Las familias numerosas residentes en Benicarló tienen bonificación en el precio para el tercer y cuarto hijo/a inscrito. Hay que indicarlo en el formulario y acreditarlo en el momento de la matrícula." },
        { q: "¿Qué pasa si hay más preinscripciones que plazas?", a: "Se realiza un sorteo público que establece el orden de matrícula. Todas las familias reciben confirmación por correo electrónico." },
        { q: "¿Hay comida adaptada para alergias?", a: "Sí. Indica cualquier alergia, intolerancia o necesidad médica en la fase de matriculación y la empresa del comedor adaptará el menú." },
        { q: "¿Los niños van a la playa?", a: "Sí, pero solo con el alumnado de Primaria se programan salidas semanales. Deberán firmarse las autorizaciones correspondientes antes del inicio del turno. No con Infantil." },
      ],
    },
    form: {
      tag: "Formulario",
      title: "Preinscripción online",
      body: "Rellenad todos los datos. La preinscripción no garantiza plaza — la asignación se hace por sorteo si la demanda supera la oferta.",
      s1: "Datos del/de la participante",
      s1d: "Información básica del/de la participante",
      s1Sibling: "Datos del hermano/hermana",
      s1SiblingD: "Información básica de otro hijo/a a preinscribir",
      s2: "Padre, madre o tutor/a",
      s2d: "Persona de referencia para las comunicaciones",
      s3: "Centro, turnos y servicios (por cada participante)",
      s3d: "Cada participante puede tener centro, turnos y servicios diferentes",
      s4: "Necesidades educativas",
      s4d: "Esta información es orientativa para la organización de los grupos",
      s5: "Observaciones",
      s5d: "Cualquier información adicional",
      childFirstName: "Nombre del/de la participante",
      childFirstNameHint: "Nombre (o nombres compuestos)",
      childLastName: "Apellidos del/de la participante",
      childLastNameHint: "Primer y segundo apellido",
      birthDate: "Fecha de nacimiento",
      course: "Curso escolar 2025-26",
      gender: "Género",
      address: "Dirección postal",
      city: "Población",
      zip: "Código postal",
      parentFirstName: "Nombre del padre/madre/tutor/a",
      parentLastName1: "Primer apellido",
      parentLastName2: "Segundo apellido",
      dni: "DNI / NIE",
      phone: "Teléfono",
      phone2: "Teléfono alternativo (opcional)",
      email: "Correo electrónico",
      emailConfirm: "Confirma el correo electrónico",
      emailConfirmHint: "Escribe de nuevo el correo para verificar que coincide",
      emailMismatch: "Los correos no coinciden",
      dniHint: "DNI (8 dígitos + letra), NIE (X/Y/Z + 7 dígitos + letra) o pasaporte internacional",
      dniInvalid: "Formato no válido (DNI / NIE / pasaporte)",
      phoneHint: "9 dígitos, empieza por 6, 7, 8 o 9",
      phoneInvalid: "Teléfono no válido (deben ser 9 dígitos)",
      center: "Centro preferido",
      centerAlt: "¿Aceptáis plaza en el centro alternativo si no hay en el preferido?",
      modalityLabel: "Modalidad para este turno (si hay más de un hermano/a en este turno)",
      modalityJoint: "Conjunta — todos los hermanos/as al mismo centro",
      modalityPartial: "Parcial — cada hermano/a puede ir a un centro distinto",
      modalityNote: "La modalidad solo afecta si hay varios hermanos/as preinscritos en este turno.",
      turnsLabel: "Turnos que solicita",
      hoursLabel: "Servicios para cada turno elegido",
      addSibling: "¿Quieres preinscribir un hermano/hermana?",
      addSiblingBtn: "＋ Añadir hermano/hermana",
      removeSibling: "Eliminar este participante",
      siblingN: "Participante #",
      large: "Familia numerosa residente en Benicarló (para la fase de matriculación)",
      nee: "Necesidades educativas especiales diagnosticadas",
      neeDetail: "Detalles (opcional, solo si quieres compartirlos ahora)",
      neeDetailHint: "Esta información es orientativa. Los detalles clínicos se pedirán en la fase de matriculación.",
      consent: "He leído y acepto la política de protección de datos y las bases de la Escuela de Verano 2026.",
      obs: "Observaciones",
      required: "obligatorio",
      submit: "Enviar preinscripción",
      reset: "Limpiar",
      saved: "Preinscripción guardada correctamente. Revisa el correo indicado.",
      errors: "Revisa los campos marcados",
      lopdShort: "Tratamos sus datos conforme al RGPD. Responsable: Ayuntamiento de Benicarló. Finalidad: gestionar la preinscripción y posterior matriculación a la Escuela de Verano 2026. Derechos: acceso, rectificación, supresión y oposición escribiendo a dpd@ajuntamentdebenicarlo.org.",
      lopdLink: "Ver política completa",
      lopdTitle: "Política de protección de datos · Escola d'Estiu Benicarló 2026",
      lopdFull: [
        "**Responsable del tratamiento:** Ayuntamiento de Benicarló · Carrer de Ferreres Bretó, 10 · 12580 Benicarló · CIF P-1202700-E.",
        "**Delegado de Protección de Datos:** dpd@ajuntamentdebenicarlo.org",
        "**Finalidad:** Gestionar la preinscripción, sorteo, matriculación y comunicación con las familias de la Escuela de Verano 2026, así como los recordatorios de pago y las notificaciones relativas a becas y ayudas.",
        "**Base legal:** Cumplimiento de una misión de interés público (art. 6.1.e RGPD), ejecución de un contrato (art. 6.1.b RGPD) en el caso de los participantes confirmados y consentimiento del interesado para comunicaciones complementarias (art. 6.1.a RGPD).",
        "**Destinatarios:** Sus datos no serán cedidos a terceros salvo obligación legal. Se comunican al proveedor de servicio de correo electrónico Resend (Estados Unidos, con las garantías adecuadas según las Cláusulas Contractuales Tipo de la Comisión Europea) únicamente para el envío de los correos relacionados con el proceso.",
        "**Conservación:** Los datos se conservarán durante la duración del proceso y, posteriormente, durante los plazos previstos legalmente para la gestión administrativa municipal (5 años por defecto, salvo obligaciones específicas).",
        "**Derechos:** Puede ejercer los derechos de acceso, rectificación, supresión, oposición, limitación, portabilidad y a no ser objeto de decisiones automatizadas, escribiendo al delegado de protección de datos.",
        "**Reclamación:** Si considera que el tratamiento no se ajusta a la normativa, puede presentar reclamación ante la Agencia Española de Protección de Datos (www.aepd.es).",
      ],
      placesDisclaimer: "El envío de este formulario no garantiza plaza. En caso de exceso de demanda se realizará sorteo público.",
      genders: ["Niña", "Niño", "Otro / prefiero no decirlo"],
      courses: ["Infantil 3 años", "Infantil 4 años", "Infantil 5 años", "1º Primaria", "2º Primaria", "3º Primaria", "4º Primaria", "5º Primaria", "6º Primaria"],
      centers: ["CEIP Marqués de Benicarló", "CEIP Mestre Francesc Catalan"],
    },
    summary: {
      title: "Resumen de la preinscripción",
      muted: "El precio se actualiza mientras rellenáis el formulario",
      empty: "Selecciona turnos y servicios para cada participante",
      total: "Total estimado",
      note: "Precio orientativo. La bonificación del 3er y 4º hermano/a se aplica automáticamente. La cuota definitiva se comunicará con la matriculación.",
      bonifApplied: "Bonificación 3er/4º hermano/a aplicada (−50%)",
      turnX: "Turno",
      childN: "Participante",
    },
    admin: {
      title: "Preinscripciones registradas (demo local)",
      sub: "Datos guardados en este navegador (localStorage). Se perderán cuando conectemos con Supabase.",
      export: "Exportar CSV",
      clear: "Borrar todas",
      close: "Cerrar",
      empty: "Aún no hay ninguna preinscripción",
      emptyD: "Las preinscripciones de prueba aparecerán aquí",
      cols: ["Fecha", "Participante", "Nac.", "Curso", "Tutor/a", "Teléfono", "Email", "Centro", "Turnos", "Servicios", "Familia", "Total", ""],
      clearConfirm: "¿Borrar todas las preinscripciones de prueba? Esta acción no se puede deshacer.",
      cleared: "Preinscripciones borradas",
    },
    fab: "Ver preinscripciones",
    footer: {
      addr: "Calle de Ferreres Bretó, 10 · 12580 Benicarló",
      phone: "Tel. 964 470 050 · Fax 964 475 908",
      web: "www.ajuntamentdebenicarlo.org",
      dept: "Concejalía de Educación",
      linksT: "Enlaces",
      contactT: "Contacto",
      copy: "© 2026 Ayuntamiento de Benicarló · Todos los derechos reservados",
      lopdT: "Protección de datos",
      lopdBody: "En cumplimiento del Reglamento (UE) 2016/679 (RGPD) y la LOPDGDD 3/2018, el Ayuntamiento de Benicarló, como responsable del tratamiento, informa de que los datos facilitados se tratarán con la finalidad exclusiva de gestionar la preinscripción, la matriculación, la asistencia y la facturación de la Escuela de Verano 2026. La base jurídica es el consentimiento del interesado y la ejecución del servicio. Los datos se conservarán durante el tiempo legalmente establecido y no se cederán a terceros salvo obligación legal o a los proveedores estrictamente necesarios para la prestación del servicio (monitores y empresa de catering). Puede ejercer los derechos de acceso, rectificación, supresión, oposición, limitación y portabilidad dirigiéndose por escrito al Ayuntamiento de Benicarló o al delegado de protección de datos en dpd@ajuntamentdebenicarlo.org. También puede reclamar ante la AEPD (www.aepd.es).",
      lopdLink: "Política de privacidad completa",
    },
    months: ["ene", "feb", "mar", "abr", "may", "jun", "jul", "ago", "sep", "oct", "nov", "dic"],
  },
};

window.T = T;

// =====================================================================
// Overrides loader — pulls custom texts from Supabase (public.text_overrides)
// and merges them into T at runtime so master can edit any string from the panel.
// Called once at app startup, before React mount, if Supabase is configured.
// =====================================================================
window.applyTextOverrides = function(rows) {
  if (!rows || !rows.length) return;
  for (const row of rows) {
    const lang = row.lang;
    const path = (row.key || '').split('.');
    if (!T[lang] || path.length === 0) continue;
    let node = T[lang];
    for (let i = 0; i < path.length - 1; i++) {
      const seg = path[i];
      const idx = /^\d+$/.test(seg) ? parseInt(seg, 10) : seg;
      const next = node[idx];
      if (typeof next !== 'object' || next === null) { node = null; break; }
      node = next;
    }
    if (node == null) continue;
    const last = path[path.length - 1];
    const lastIdx = /^\d+$/.test(last) ? parseInt(last, 10) : last;
    if (typeof node[lastIdx] === 'string') {
      node[lastIdx] = row.value;
    }
  }
};

// Sections excluded from the master text editor (deprecated or non-public)
const SKIP_SECTIONS = new Set(['admin', 'fab', 'months']);
// Keys whose deep contents are skipped because they're filled with example/lorem data
// rather than user-facing copy.
const SKIP_LEAF_KEYS = new Set(['placesIntro', 'placesNote', 'placesLbl', 'lunchPlacesLbl']);

// Generate a flat list of all editable string paths in T (val side, leaf strings only)
// Now also expands arrays of strings ('prices.bullets.cangur.0', 'prices.bullets.cangur.1', ...)
// and arrays of objects ('faq.items.0.q', 'faq.items.0.a', ...).
window.flattenTextKeys = function() {
  const out = [];
  const walk = (obj, prefix) => {
    for (const k of Object.keys(obj)) {
      if (!prefix && SKIP_SECTIONS.has(k)) continue;
      const path = prefix ? `${prefix}.${k}` : k;
      const v = obj[k];
      if (typeof v === 'string') {
        out.push(path);
      } else if (Array.isArray(v)) {
        v.forEach((item, i) => {
          const itemPath = `${path}.${i}`;
          if (typeof item === 'string') {
            out.push(itemPath);
          } else if (typeof item === 'object' && item !== null) {
            walk(item, itemPath);
          }
        });
      } else if (typeof v === 'object' && v !== null) {
        walk(v, path);
      }
    }
  };
  walk(T.val, '');
  return out;
};

window.getTextAt = function(lang, path) {
  const segs = (path || '').split('.');
  let node = T[lang];
  for (const s of segs) {
    if (node == null) return '';
    // numeric segments index into arrays
    const idx = /^\d+$/.test(s) ? parseInt(s, 10) : s;
    node = node[idx];
  }
  return typeof node === 'string' ? node : '';
};
