{"id":6974,"date":"2026-06-27T22:06:10","date_gmt":"2026-06-27T22:06:10","guid":{"rendered":"https:\/\/clubfreestylebjj.com\/?page_id=6974"},"modified":"2026-07-14T08:57:47","modified_gmt":"2026-07-14T08:57:47","slug":"san-buenaventura","status":"publish","type":"page","link":"https:\/\/clubfreestylebjj.com\/index.php\/san-buenaventura\/","title":{"rendered":"Colegio San Buenaventura &#8211; BJJ octubre 2026"},"content":{"rendered":"\n\n\n<div class=\"fsbjj\"><header class=\"fs-header-v3\">\n  <div class=\"fs-header-v3-inner\">\n    <a class=\"fs-header-v3-brand\" href=\"https:\/\/clubfreestylebjj.com\/\">\n      <img decoding=\"async\" src=\"https:\/\/clubfreestylebjj.com\/wp-content\/uploads\/2026\/06\/club-free-style-bjj-logo-dark-nav-transparent-1000.png\" alt=\"Club Free Style BJJ\">\n      <span>Club Free Style BJJ<\/span>\n    <\/a>\n    <details class=\"fs-header-v3-menu\">\n      <summary><span class=\"fs-header-v3-bars\" aria-hidden=\"true\"><i><\/i><i><\/i><i><\/i><\/span><span>Menu<\/span><\/summary>\n      <nav class=\"fs-header-v3-panel\" aria-label=\"Menu principal\">\n        <a href=\"https:\/\/clubfreestylebjj.com\/\">Inicio<\/a>\n        <details class=\"fs-header-v3-branch\">\n          <summary>Clases<\/summary>\n          <span class=\"fs-header-v3-label\">Colegios<\/span>\n          <a href=\"https:\/\/clubfreestylebjj.com\/index.php\/salesianos-paseo\/\">Salesianos Paseo<\/a>\n          <a href=\"https:\/\/clubfreestylebjj.com\/index.php\/san-buenaventura\/\">San Buenaventura<\/a>\n        <\/details>\n        <details class=\"fs-header-v3-branch\">\n          <summary>Proyecto<\/summary>\n          <a href=\"https:\/\/clubfreestylebjj.com\/index.php\/liga-escolar-bjj\/\">Liga escolar<\/a>\n        <\/details>\n        <a href=\"https:\/\/clubfreestylebjj.com\/index.php\/campeonatos\/\">Campeonatos<\/a>\n        <a href=\"https:\/\/clubfreestylebjj.com\/index.php\/tienda\/\">Tienda<\/a>\n        <a href=\"https:\/\/clubfreestylebjj.com\/index.php\/contacto\/\">Contacto<\/a>\n      <\/nav>\n    <\/details>\n  <\/div>\n<\/header>\n<div class=\"fs-header-v3-spacer\" aria-hidden=\"true\"><\/div><section class=\"fs-page-hero fs-schedule-hero\" id=\"horarios-san-buenaventura\"><div class=\"fs-wrap\"><div class=\"fs-schedule-board\" aria-label=\"Hoja de horarios San Buenaventura\"><div class=\"fs-schedule-grid fs-weekday-only\"><div class=\"fs-schedule-time\">Etapa<\/div><div class=\"fs-schedule-day\">Primaria<\/div><div class=\"fs-schedule-day\">ESO<\/div><div class=\"fs-schedule-day\">Bachiller<\/div><div class=\"fs-schedule-day\">Centro<\/div><div class=\"fs-schedule-day\">Secretar\u00eda<\/div><div class=\"fs-schedule-time\">Octubre<br>2026<\/div><a class=\"fs-schedule-link is-school\" href=\"#primaria-san-buenaventura\"><span>Primaria<\/span><strong>Por confirmar<\/strong><small>Extraescolar con recogida en comedor<\/small><strong class=\"fs-schedule-price\">60\u20ac<\/strong><\/a><a class=\"fs-schedule-link is-school\" href=\"#eso-san-buenaventura\"><span>ESO<\/span><strong>Por confirmar<\/strong><small>Continuidad t\u00e9cnica y disciplina positiva<\/small><strong class=\"fs-schedule-price\">60\u20ac<\/strong><\/a><a class=\"fs-schedule-link is-school\" href=\"#bachiller-san-buenaventura\"><span>Bachiller<\/span><strong>Por confirmar<\/strong><small>Autonomia, criterio y responsabilidad<\/small><strong class=\"fs-schedule-price\">60\u20ac<\/strong><\/a><a class=\"fs-schedule-link is-pending\" href=\"#instalaciones-san-buenaventura\"><span>Instalaci\u00f3nes<\/span><strong>Tatami<\/strong><small>Sala, vestuarios y accesos del centro<\/small><strong class=\"fs-schedule-price\">60\u20ac<\/strong><\/a><a class=\"fs-schedule-link is-open\" href=\"#descuentos-secretaria-san-buenaventura\"><span>Condici\u00f3nes<\/span><strong>Secretar\u00eda<\/strong><small>Plazas y descuentos sin publicar precios<\/small><strong class=\"fs-schedule-price\">60\u20ac<\/strong><\/a><\/div><div class=\"fs-schedule-mobile\" aria-label=\"San Buenaventura en formato movil\"><div class=\"fs-schedule-mobile-hour-head\">Octubre 2026<\/div><div class=\"fs-schedule-mobile-row\"><div class=\"fs-schedule-mobile-time\">Etapas<\/div><div class=\"fs-schedule-mobile-list\"><a class=\"fs-schedule-link fs-schedule-mobile-card is-school\" href=\"#primaria-san-buenaventura\"><span>Primaria<\/span><strong>Extraescolar<\/strong><small>Recogida en comedor y base motriz<\/small><strong class=\"fs-schedule-price\">60\u20ac<\/strong><\/a><a class=\"fs-schedule-link fs-schedule-mobile-card is-school\" href=\"#eso-san-buenaventura\"><span>ESO<\/span><strong>Continuidad t\u00e9cnica<\/strong><small>Confianza, defensa personal y disciplina positiva<\/small><strong class=\"fs-schedule-price\">60\u20ac<\/strong><\/a><a class=\"fs-schedule-link fs-schedule-mobile-card is-school\" href=\"#bachiller-san-buenaventura\"><span>Bachiller<\/span><strong>Autonomia y criterio<\/strong><small>Entrenamiento con responsabilidad<\/small><strong class=\"fs-schedule-price\">60\u20ac<\/strong><\/a><\/div><\/div><div class=\"fs-schedule-mobile-row\"><div class=\"fs-schedule-mobile-time\">Centro<\/div><div class=\"fs-schedule-mobile-list\"><a class=\"fs-schedule-link fs-schedule-mobile-card is-pending\" href=\"#instalaciones-san-buenaventura\"><span>Instalaci\u00f3nes<\/span><strong>Tatami y vestuarios<\/strong><small>Informaci\u00f3n del colegio antes de reservar<\/small><strong class=\"fs-schedule-price\">60\u20ac<\/strong><\/a><a class=\"fs-schedule-link fs-schedule-mobile-card is-open\" href=\"#descuentos-secretaria-san-buenaventura\"><span>Secretar\u00eda<\/span><strong>Condici\u00f3nes y descuentos<\/strong><small>Sin publicar precios ni confirmar plazas automaticas<\/small><strong class=\"fs-schedule-price\">60\u20ac<\/strong><\/a><\/div><\/div><\/div><\/div><\/div><\/section>\n<section class=\"fs-section fs-adult-card-section\" id=\"etapas-san-buenaventura\"><div class=\"fs-wrap\"><div class=\"fs-adult-card-head\"><div class=\"fs-breadcrumb\">San Buenaventura<\/div><h2>Grupos y horarios San Buenaventura.<\/h2><p>Proyecto previsto para octubre de 2026. La informaci\u00f3n se ordena por etapa para que cada familia entienda el funcionamiento antes de reservar: primaria, ESO, Bachiller, instalaci\u00f3nes, descuentos y contacto con secretar\u00eda.<\/p><\/div><div class=\"fs-adult-card-grid\">\n<article class=\"fs-adult-result-card\" id=\"primaria-san-buenaventura\"><div class=\"fs-adult-cover\"><img decoding=\"async\" src=\"https:\/\/clubfreestylebjj.com\/wp-content\/uploads\/2026\/06\/club-free-style-bjj-sanbuenaventura-tatami-ultra-2400x1500-1.webp\" alt=\"Tatami Colegio San Buenaventura\"><span class=\"fs-adult-cover-tag\">Primaria<\/span><\/div><div class=\"fs-adult-card-body\"><h3>Primaria extraescolar con recogida en comedor.<\/h3><div class=\"fs-adult-meta-line\"><b>Centro<\/b><span>Colegio San Buenaventura<\/span><\/div><div class=\"fs-adult-meta-line\"><b>Estado<\/b><span>Horarios por confirmar<\/span><\/div><p>Grupo escolar para construir base motriz, respeto, autocontrol, seguridad corporal y habitos de tatami con lenguaje adaptado a la edad.<\/p><div class=\"fs-adult-tags\"><span class=\"fs-adult-tag gold\">Primaria<\/span><span class=\"fs-adult-tag\">Comedor<\/span><span class=\"fs-adult-tag\">Octubre 2026<\/span><\/div><div class=\"fs-adult-card-actions\"><a class=\"fs-btn fs-gold\" href=\"https:\/\/wa.me\/34681990446\">Reservar clase de prueba<\/a><\/div><\/div><\/article>\n<article class=\"fs-adult-result-card\" id=\"eso-san-buenaventura\"><div class=\"fs-adult-cover\"><img decoding=\"async\" src=\"https:\/\/clubfreestylebjj.com\/wp-content\/uploads\/2026\/06\/club-free-style-bjj-sanbuenaventura-tatami-wide-ultra-2200x1375-1.webp\" alt=\"Sala de tatami San Buenaventura\"><span class=\"fs-adult-cover-tag\">ESO<\/span><\/div><div class=\"fs-adult-card-body\"><h3>ESO: continuidad t\u00e9cnica y disciplina positiva.<\/h3><div class=\"fs-adult-meta-line\"><b>Centro<\/b><span>Colegio San Buenaventura<\/span><\/div><div class=\"fs-adult-meta-line\"><b>Estado<\/b><span>Horarios por confirmar<\/span><\/div><p>Etapa para adolescentes que necesitan estructura, confianza, defensa personal, movilidad y progresi\u00f3n sin prisa, con seguimiento real.<\/p><div class=\"fs-adult-tags\"><span class=\"fs-adult-tag gold\">ESO<\/span><span class=\"fs-adult-tag\">Continuidad<\/span><span class=\"fs-adult-tag\">Proyecto<\/span><\/div><div class=\"fs-adult-card-actions\"><a class=\"fs-btn fs-gold\" href=\"https:\/\/wa.me\/34681990446\">Reservar clase de prueba<\/a><\/div><\/div><\/article>\n<article class=\"fs-adult-result-card\" id=\"bachiller-san-buenaventura\"><div class=\"fs-adult-cover\"><img decoding=\"async\" src=\"https:\/\/clubfreestylebjj.com\/wp-content\/uploads\/2026\/06\/club-free-style-bjj-sanbuenaventura-vestuarios-ultra-2200x1375-1.webp\" alt=\"Vestuarios San Buenaventura\"><span class=\"fs-adult-cover-tag\">Bachiller<\/span><\/div><div class=\"fs-adult-card-body\"><h3>Bachiller: autonomia, criterio y responsabilidad.<\/h3><div class=\"fs-adult-meta-line\"><b>Centro<\/b><span>Colegio San Buenaventura<\/span><\/div><div class=\"fs-adult-meta-line\"><b>Estado<\/b><span>Horarios por confirmar<\/span><\/div><p>Trabajo orientado a consolidar t\u00e9cnica, toma de decisiones, autocuidado y una relaci\u00f3n sana con el esfuerzo y la seguridad del grupo.<\/p><div class=\"fs-adult-tags\"><span class=\"fs-adult-tag gold\">Bachiller<\/span><span class=\"fs-adult-tag\">Autonomia<\/span><span class=\"fs-adult-tag\">Criterio<\/span><\/div><div class=\"fs-adult-card-actions\"><a class=\"fs-btn fs-gold\" href=\"https:\/\/wa.me\/34681990446\">Reservar clase de prueba<\/a><\/div><\/div><\/article>\n<article class=\"fs-adult-result-card\" id=\"instalaciones-san-buenaventura\"><div class=\"fs-adult-cover\"><img decoding=\"async\" src=\"https:\/\/clubfreestylebjj.com\/wp-content\/uploads\/2026\/06\/club-free-style-bjj-sanbuenaventura-vestuarios-wide-ultra-2200x1375-1.webp\" alt=\"Instalaciones Colegio San Buenaventura\"><span class=\"fs-adult-cover-tag\">Instalaci\u00f3nes<\/span><\/div><div class=\"fs-adult-card-body\"><h3>Tatami, vestuarios y accesos del centro.<\/h3><div class=\"fs-adult-meta-line\"><b>Centro<\/b><span>Colegio San Buenaventura<\/span><\/div><div class=\"fs-adult-meta-line\"><b>Funci\u00f3n<\/b><span>Organizar llegada y salida<\/span><\/div><p>La comunicaci\u00f3n del proyecto se apoya en imagenes reales del centro para que las familias preparen accesos, tiempos y funcionamiento antes de la actividad.<\/p><div class=\"fs-adult-tags\"><span class=\"fs-adult-tag gold\">Tatami<\/span><span class=\"fs-adult-tag\">Vestuarios<\/span><span class=\"fs-adult-tag\">Accesos<\/span><\/div><div class=\"fs-adult-card-actions\"><a class=\"fs-btn fs-gold\" href=\"https:\/\/wa.me\/34681990446\">Reservar clase de prueba<\/a><\/div><\/div><\/article>\n<\/div><\/div><\/section>\n<section class=\"fs-section fs-band\" id=\"descuentos-secretaria-san-buenaventura\"><div class=\"fs-wrap\"><div class=\"fs-breadcrumb\">Descuentos<\/div><h2>Condici\u00f3nes claras antes de reservar.<\/h2><p>San Buenaventura se organiza como proyecto escolar progresivo. Los descuentos, plazas, recogida en comedor y compatibilidad por etapa se revisan con secretar\u00eda antes de confirmar cualquier reserva. No publicamos precios para evitar errores.<\/p><div class=\"fs-grid fs-two\" style=\"margin-top:30px\"><article class=\"fs-card\"><span class=\"fs-tag\">Familias<\/span><h3>Descuento familiar<\/h3><p>Se valida cuando entrenan varios integrantes de la misma familia en primer grado, siempre con plazas disponibles y confirmaci\u00f3n previa.<\/p><\/article><article class=\"fs-card\"><span class=\"fs-tag\">Centro educativo<\/span><h3>Descuento colegio<\/h3><p>Se revisa para empleados del centro y familiares directos cuando el colegio confirme las condici\u00f3nes definitivas del programa.<\/p><\/article><\/div><div class=\"fs-note\" style=\"margin-top:28px\">La solicitud no implica matr\u00edcula ni pago. Secretar\u00eda contactara de forma moderada para resolver dudas y confirmar pasos cuando el colegio cierre la informaci\u00f3n definitiva.<\/div><\/div><\/section>\n\n\n\n<footer class=\"fs-footer\">\n  <div class=\"fs-wrap\">\n    <div>\n      <strong>Club Free Style BJJ<\/strong><br>\n      <span class=\"fs-muted\">Jiu-Jitsu brasile\u00f1o en Madrid para adultos, familias y colegios.<\/span>\n    <\/div>\n    <div>\n      <a href=\"tel:+34681990446\">+34 681 990 446<\/a><br>\n      <a href=\"mailto:info@clubfreestylebjj.com\">Enviar email<\/a>\n    <\/div>\n    <div>\n      <strong>Redes y mapa<\/strong><br>\n      <span class=\"fs-muted\">Canales p\u00fablicos de la escuela y perfil de Google Maps.<\/span>\n      <div class=\"fs-social\">\n        <a href=\"https:\/\/www.facebook.com\/people\/Escuela-de-Jiu-Jitsu-Brasile%C3%B1o-Puerta-del-Angel\/100090128777293\/\" target=\"_blank\" rel=\"noopener\">Facebook<\/a>\n        <a href=\"https:\/\/www.instagram.com\/explore\/locations\/462536300569539\/escuela-de-jiu-jitsu-brasileno-puerta-del-angel\/\" target=\"_blank\" rel=\"noopener\">Instagram<\/a>\n        <a href=\"https:\/\/www.google.com\/maps\/search\/?api=1&amp;query=Escuela+de+Jiu-Jitsu+Brasile%C3%B1o+Puerta+del+Angel+Calle+Cabello+Lapiedra+4+Madrid\" target=\"_blank\" rel=\"noopener\">Google Maps<\/a>\n      <\/div>\n    <\/div>\n  <\/div>\n  <div class=\"fs-footer-credit\">\u00a9 2026 Club Free Style BJJ<\/div>\n<\/footer>\n<\/div>\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n<script>\n(function(){\n  if (window.__fsContactRoutingV3Ordered) return;\n  window.__fsContactRoutingV3Ordered = true;\n  var phone = \"34681990446\";\n  var programs = {\n    \"Salesianos Paseo\": [\"Primaria extraescolar lunes y mi\u00e9rcoles de 17:00 a 18:30 - recogida en comedor\",\"Primaria extraescolar martes y jueves de 17:00 a 18:30 - recogida en comedor\",\"Infantiles martes y jueves de 17:45 a 19:15\",\"ESO y Bachiller lunes a viernes 18:30-20:00 y 21:00-22:30 - GI y No-Gi\",\"ESO y Bachiller lunes, mi\u00e9rcoles y viernes 18:30-20:00 - GI\",\"ESO y Bachiller lunes, mi\u00e9rcoles y viernes 21:00-22:30 - GI\",\"ESO y Bachiller martes y jueves 18:30-20:00 - GI\",\"ESO y Bachiller martes y jueves 21:00-22:30 - NOGI\",\"Adultos clases ilimitadas lunes a viernes 18:30-20:00 y 21:00-22:30 - GI y No-Gi\",\"Adultos Lunes, mi\u00e9rcoles y viernes 18:30-20:00 - GI\",\"Adultos Lunes, mi\u00e9rcoles y viernes 21:00-22:30 - GI\",\"Adultos Martes y jueves 18:30-20:00 - GI\",\"Adultos Martes y jueves 21:00-22:30 - NOGI\",\"Bono flexible 10 clases - disponibilidad con secretar\u00eda\"],\n    \"San Buenaventura\": [\"Primaria extraescolar - grupo escolar pendiente de confirmaci\u00f3n\",\"ESO - grupo escolar pendiente de confirmaci\u00f3n\",\"Bachiller - grupo escolar pendiente de confirmaci\u00f3n\",\"Lista de familias interesadas - pendiente de confirmaci\u00f3n\"],\n    \"Nuevo colegio interesado\": [\"Presentar proyecto al centro\",\"Solicitar informaci\u00f3n para familias\",\"Coordinar reunion con direcci\u00f3n o AMPA\"]\n  };\n  function fsCleanText(v){\n    v = String(v || \"\");\n    var out = \"\";\n    var lastSpace = false;\n    for (var i=0;i<v.length;i++){\n      var code = v.charCodeAt(i);\n      var ch = v.charAt(i);\n      var isSpace = false;\n      if (code === 9) isSpace = true;\n      if (code === 10) isSpace = true;\n      if (code === 13) isSpace = true;\n      if (code === 32) isSpace = true;\n      if (code === 160) isSpace = true;\n      if (isSpace) {\n        if (!lastSpace) out += \" \";\n        lastSpace = true;\n      } else {\n        out += ch;\n        lastSpace = false;\n      }\n    }\n    return out.trim();\n  }\n  function textOf(el){ return el ? fsCleanText(el.innerText || el.textContent || \"\") : \"\"; }\n  function isContactLink(link){\n    if (!link) return false;\n    var href = link.getAttribute(\"href\") || \"\";\n    var text = textOf(link).toLowerCase();\n    if (href.indexOf(\"wa.me\/\") !== -1) return true;\n    if (href.indexOf(\"api.whatsapp.com\") !== -1) return true;\n    if (href.indexOf(\"mailto:\") === 0) return true;\n    if (text.indexOf(\"whatsapp\") !== -1) return true;\n    return false;\n  }\n  function field(form,name){ return form.querySelector('[name=\"' + name + '\"]'); }\n  function wrap(form,name){ var el = field(form,name); return el ? el.closest(\"label\") : null; }\n  function value(form,name){ var el = field(form,name); if (!el) return \"\"; if (el.type === \"checkbox\") return el.checked ? el.value : \"\"; return (el.value || \"\").trim(); }\n  function hasValue(form,name){ return value(form,name) !== \"\"; }\n  function isDateField(el){\n    if (!el) return false;\n    if (el.name === \"fecha_nacimiento\") return true;\n    if (el.name === \"fecha_nacimiento_menor\") return true;\n    if (el.name.indexOf(\"fecha_nacimiento_menor_\") === 0) return true;\n    return false;\n  }\n  function validDateParts(day,month,year){\n    var cy = (new Date()).getFullYear();\n    if (!day) return false;\n    if (!month) return false;\n    if (!year) return false;\n    if (year < 1900) return false;\n    if (year > cy) return false;\n    if (month < 1) return false;\n    if (month > 12) return false;\n    if (day < 1) return false;\n    if (day > 31) return false;\n    return true;\n  }\n  function onlyDigits(v){ return String(v || \"\").replace(\/[^0-9]\/g,\"\"); }\n  function dateDigitsForInput(v){\n    v = String(v || \"\").trim();\n    if (v.length === 10) {\n      if (v.charAt(4) === \"-\") {\n        if (v.charAt(7) === \"-\") {\n          return onlyDigits(v.slice(8,10) + v.slice(5,7) + v.slice(0,4)).slice(0,8);\n        }\n      }\n    }\n    return onlyDigits(v).slice(0,8);\n  }\n  function dateCaretPosition(value,digitCount){\n    if (digitCount <= 0) return 0;\n    var seen = 0;\n    for (var i=0;i<value.length;i++){\n      if (\/[0-9]\/.test(value.charAt(i))) seen++;\n      if (seen >= digitCount) return i + 1;\n    }\n    return value.length;\n  }\n  function dateDigitCountBefore(value,pos){\n    value = String(value || \"\");\n    var limit = Math.max(0, pos || 0);\n    var count = 0;\n    for (var i=0;i<value.length;i++){\n      if (i >= limit) break;\n      if (\/[0-9]\/.test(value.charAt(i))) count++;\n    }\n    return count;\n  }\n  function formatDateInput(el){\n    if (!isDateField(el)) return;\n    var before = String(el.value || \"\");\n    var digitCursor = dateDigitCountBefore(before, el.selectionStart || before.length);\n    var d = dateDigitsForInput(before);\n    var next = d;\n    if (d.length > 2) next = d.slice(0,2) + \"\/\" + d.slice(2);\n    if (d.length > 4) next = d.slice(0,2) + \"\/\" + d.slice(2,4) + \"\/\" + d.slice(4);\n    if (before !== next) {\n      el.value = next;\n      try {\n        var pos = dateCaretPosition(next,digitCursor);\n        el.setSelectionRange(pos,pos);\n      } catch(error) {}\n    }\n  }\n  function isCompleteDate(v){\n    v = String(v || \"\").trim();\n    if (v.length === 10) {\n      if (v.charAt(4) === \"-\") {\n        if (v.charAt(7) === \"-\") {\n          return validDateParts(parseInt(v.slice(8,10),10), parseInt(v.slice(5,7),10), parseInt(v.slice(0,4),10));\n        }\n      }\n    }\n    var d = onlyDigits(v);\n    if (d.length !== 8) return false;\n    return validDateParts(parseInt(d.slice(0,2),10), parseInt(d.slice(2,4),10), parseInt(d.slice(4,8),10));\n  }\n  function ready(form,name){ var el = field(form,name); if (!el) return true; if (isDateField(el)) return isCompleteDate(el.value || \"\"); if (el.type === \"checkbox\") return el.checked; return hasValue(form,name); }\n  function show(el,on){ if (!el) return; if (on) el.classList.remove(\"fs-hidden-step\"); else el.classList.add(\"fs-hidden-step\"); }\n  function setLabel(form,name,text){ var w = wrap(form,name); if (!w) return; var nodes = Array.from(w.childNodes); for (var i=0;i<nodes.length;i++){ if (nodes[i].nodeType === 3) { nodes[i].nodeValue = text; return; } } w.insertBefore(document.createTextNode(text), w.firstChild); }\n  function fillOptions(select,items,placeholder){ if (!select) return; var current = select.value; select.innerHTML = \"\"; var first = document.createElement(\"option\"); first.value = \"\"; first.textContent = placeholder || \"Elegir opcion\"; select.appendChild(first); for (var i=0;i<items.length;i++){ var opt = document.createElement(\"option\"); opt.value = items[i]; opt.textContent = items[i]; select.appendChild(opt); } select.value = current; }\n  function modeOf(form){\n    var interest = value(form,\"tipo_interesado\");\n    if (interest === \"Quiero clases para mi\") return \"self\";\n    if (interest === \"Busco clases para mi hijo\/a\") return \"child\";\n    if (interest === \"Represento a un centro interesado\") return \"center\";\n    return \"\";\n  }\n  var adultCenters = [\"Salesianos Paseo\"];\n  var childCenters = [\"Salesianos Paseo\",\"San Buenaventura\"];\n  var adultPrograms = {\"Salesianos Paseo\":[\"Adultos clases ilimitadas lunes a viernes 18:30-20:00 y 21:00-22:30 - GI y No-Gi\",\"Adultos Lunes, miercoles y viernes 18:30-20:00 - GI\",\"Adultos Lunes, miercoles y viernes 21:00-22:30 - GI\",\"Adultos Martes y jueves 18:30-20:00 - GI\",\"Adultos Martes y jueves 21:00-22:30 - NOGI\",\"Bono flexible 10 clases - disponibilidad con secretaria\"]};\n  var childPrograms = {\"Salesianos Paseo\":[\"Extraescolar lunes y miercoles de 17:00 a 18:30 - recogida en comedor\",\"Extraescolar martes y jueves de 17:00 a 18:30 - recogida en comedor\",\"Infantiles martes y jueves de 17:45 a 19:15\"],\"San Buenaventura\":[\"Grupo 1 Lunes y miercoles 17:15-18:45\",\"Grupo 2 Martes y jueves 17:15-18:45\",\"Lista de familias interesadas - pendiente de confirmacion\"]};\n  function populateCenters(form,mode){\n    var select = field(form,\"centro\");\n    if (!select) return;\n    if (mode === \"self\") { fillOptions(select,adultCenters,\"Elegir centro\"); return; }\n    if (mode === \"child\") { fillOptions(select,childCenters,\"Elegir centro\"); return; }\n  }\n  function populatePrograms(form){\n    var center = value(form,\"centro\"); var select = field(form,\"programa\"); var mode = modeOf(form); var source = programs;\n    if (mode === \"self\") source = adultPrograms;\n    if (mode === \"child\") source = childPrograms;\n    var list = source[center] || [];\n    fillOptions(select,list,\"Elegir programa\");\n  }\n  function visibleField(el){ if (!el) return false; if (el.disabled) return false; if (el.type === \"hidden\") return false; var w = el.closest(\"label\") || el.closest(\".fs-minor-group\") || el; if (getComputedStyle(w).display === \"none\") return false; return true; }\n  function focusField(el){ if (!el) return; if (el.focus) el.focus({preventScroll:true}); var form = el.closest(\".fs-contact-form\"); if (!form) return; var target = el.closest(\"label\") || el.closest(\".fs-minor-group\") || el; var top = target.offsetTop - Math.max(22, form.clientHeight * 0.52); form.scrollTo({top:Math.max(0,top),behavior:\"smooth\"}); }\n  function nextField(form,el){ var all = Array.from(form.querySelectorAll(\"select,input,textarea,button.fs-add-minor\")); all = all.filter(visibleField); var idx = all.indexOf(el); if (idx < 0) return null; return all[idx + 1] || null; }\n  function orderedNames(mode){\n    if (mode === \"self\") return [\"tipo_interesado\",\"responsable\",\"fecha_nacimiento\",\"mayor_edad\",\"genero\",\"centro\",\"programa\",\"experiencia_bjj\",\"cinturon_bjj\",\"tiempo_bjj\",\"limitaciones_fisicas\",\"detalle_limitaciones\",\"email\",\"telefono\",\"preferencia\",\"mensaje\",\"consentimiento\"];\n    if (mode === \"child\") return [\"tipo_interesado\",\"responsable\",\"relacion_tutor\",\"fecha_nacimiento\",\"mayor_edad\",\"alumno_1\",\"fecha_nacimiento_menor\",\"genero\",\"experiencia_bjj_menor_1\",\"cinturon_bjj_menor_1\",\"tiempo_bjj_menor_1\",\"limitaciones_fisicas_menor_1\",\"detalle_limitaciones_menor_1\",\"add_minor\",\"centro\",\"programa\",\"email\",\"telefono\",\"preferencia\",\"mensaje\",\"consentimiento\"];\n    if (mode === \"center\") return [\"tipo_interesado\",\"responsable\",\"fecha_nacimiento\",\"mayor_edad\",\"nombre_centro\",\"link_centro\",\"puesto_centro\",\"interes_centro\",\"preferencia\",\"mensaje\",\"consentimiento\"];\n    return [\"tipo_interesado\"];\n  }\n  function shouldInclude(form,name,mode){\n    if (name === \"relacion_tutor\") return mode === \"child\";\n    if (name.indexOf(\"cinturon_bjj_menor_\") === 0) { var s1 = name.replace(\"cinturon_bjj_menor_\",\"\"); return value(form,\"experiencia_bjj_menor_\" + s1) === \"Si\"; }\n    if (name.indexOf(\"tiempo_bjj_menor_\") === 0) { var s2 = name.replace(\"tiempo_bjj_menor_\",\"\"); if (value(form,\"experiencia_bjj_menor_\" + s2) !== \"Si\") return false; return hasValue(form,\"cinturon_bjj_menor_\" + s2); }\n    if (name.indexOf(\"detalle_limitaciones_menor_\") === 0) { var s3 = name.replace(\"detalle_limitaciones_menor_\",\"\"); return value(form,\"limitaciones_fisicas_menor_\" + s3) === \"Si\"; }\n    if (name === \"cinturon_bjj\") return value(form,\"experiencia_bjj\") === \"Si\";\n    if (name === \"tiempo_bjj\") return shouldInclude(form,\"cinturon_bjj\",mode) ? hasValue(form,\"cinturon_bjj\") : false;\n    if (name === \"detalle_limitaciones\") return value(form,\"limitaciones_fisicas\") === \"Si\";\n    if (name === \"add_minor\") return mode === \"child\";\n    return true;\n  }\n  function previousReady(form,order,index,mode){\n    for (var i=0;i<index;i++){\n      var prev = order[i];\n      if (!shouldInclude(form,prev,mode)) continue;\n      if (prev === \"add_minor\") continue;\n      if (!ready(form,prev)) return false;\n    }\n    return true;\n  }\n  function showByOrder(form,mode){\n    var names = [\"responsable\",\"relacion_tutor\",\"fecha_nacimiento\",\"mayor_edad\",\"genero\",\"centro\",\"programa\",\"experiencia_bjj\",\"cinturon_bjj\",\"tiempo_bjj\",\"limitaciones_fisicas\",\"detalle_limitaciones\",\"email\",\"telefono\",\"preferencia\",\"mensaje\",\"consentimiento\",\"alumno_1\",\"fecha_nacimiento_menor\",\"experiencia_bjj_menor_1\",\"cinturon_bjj_menor_1\",\"tiempo_bjj_menor_1\",\"limitaciones_fisicas_menor_1\",\"detalle_limitaciones_menor_1\",\"nombre_centro\",\"link_centro\",\"puesto_centro\",\"interes_centro\"];\n    for (var n=0;n<names.length;n++) show(wrap(form,names[n]),false);\n    show(form.querySelector(\".fs-add-minor\"),false); show(form.querySelector(\".fs-contact-actions\"),false);\n    var order = orderedNames(mode);\n    for (var i=0;i<order.length;i++){\n      var name = order[i]; if (!shouldInclude(form,name,mode)) continue; var on = previousReady(form,order,i,mode); if (name === \"add_minor\") show(form.querySelector(\".fs-add-minor\"),on); else show(wrap(form,name),on);\n    }\n    var canActions = previousReady(form,order,order.length,mode); show(form.querySelector(\".fs-contact-actions\"),canActions);\n    var submit = form.querySelector(\".fs-contact-submit\"); if (submit) submit.disabled = !ready(form,\"consentimiento\");\n  }\n  function refreshMinorDetails(form,mode){\n    var items = Array.from(form.querySelectorAll('[name^=\"experiencia_bjj_menor_\"]'));\n    for (var i=0;i<items.length;i++){\n      var suffix = items[i].name.replace(\"experiencia_bjj_menor_\",\"\");\n      var childMode = mode === \"child\";\n      var showBelt = false;\n      if (childMode) showBelt = value(form,\"experiencia_bjj_menor_\" + suffix) === \"Si\";\n      show(wrap(form,\"cinturon_bjj_menor_\" + suffix),showBelt);\n      var showTime = false;\n      if (showBelt) showTime = hasValue(form,\"cinturon_bjj_menor_\" + suffix);\n      show(wrap(form,\"tiempo_bjj_menor_\" + suffix),showTime);\n      var showDetail = false;\n      if (childMode) showDetail = value(form,\"limitaciones_fisicas_menor_\" + suffix) === \"Si\";\n      show(wrap(form,\"detalle_limitaciones_menor_\" + suffix),showDetail);\n    }\n  }\n  function refresh(form){\n    var interest = value(form,\"tipo_interesado\"); var mode = \"\";\n    if (interest === \"Quiero clases para mi\") mode = \"self\";\n    if (interest === \"Busco clases para mi hijo\/a\") mode = \"child\";\n    if (interest === \"Represento a un centro interesado\") mode = \"center\";\n    setLabel(form,\"responsable\", mode === \"child\" ? \"Nombre padre\/madre tutor\" : (mode === \"center\" ? \"Nombre y apellidos completos\" : \"Nombre y apellidos\"));\n    setLabel(form,\"fecha_nacimiento\", \"Fecha de nacimiento\"); populateCenters(form,mode); populatePrograms(form); showByOrder(form,mode); refreshMinorDetails(form,mode);\n  }\n  function addMinor(form){\n    var box = form.querySelector(\".fs-extra-minors\");\n    if (!box) return;\n    var count = box.querySelectorAll(\".fs-minor-group\").length + 2;\n    if (count > 5) return;\n    var group = document.createElement(\"div\");\n    group.className = \"fs-minor-group\";\n    group.innerHTML = '<label>Nombre y apellidos del menor ' + count + '<input name=\"alumno_' + count + '\" autocomplete=\"off\"><\/label><label>Fecha de nacimiento del menor ' + count + '<input type=\"text\" inputmode=\"numeric\" placeholder=\"dd\/mm\/aaaa\" maxlength=\"10\" name=\"fecha_nacimiento_menor_' + count + '\" autocomplete=\"bday\"><\/label><label>Genero del menor ' + count + '<select name=\"genero_menor_' + count + '\"><option value=\"\">Elegir opci\u00f3n<\/option><option>Masculino<\/option><option>Femenino<\/option><\/select><\/label><label>Experiencia previa BJJ del menor ' + count + '<select name=\"experiencia_bjj_menor_' + count + '\"><option value=\"\">Elegir opci\u00f3n<\/option><option>Si<\/option><option>No<\/option><\/select><\/label><label>Color del cinturon del menor ' + count + '<select name=\"cinturon_bjj_menor_' + count + '\"><option value=\"\">Elegir color<\/option><option>Blanco<\/option><option>Gris blanco<\/option><option>Gris<\/option><option>Gris negro<\/option><option>Amarillo blanco<\/option><option>Amarillo<\/option><option>Amarillo negro<\/option><option>Naranja blanco<\/option><option>Naranja<\/option><option>Naranja negro<\/option><option>Verde blanco<\/option><option>Verde<\/option><option>Verde negro<\/option><option>Azul<\/option><option>Morado<\/option><option>Marron<\/option><option>Negro<\/option><\/select><\/label><label>Tiempo total de experiencia del menor ' + count + '<input name=\"tiempo_bjj_menor_' + count + '\" autocomplete=\"off\"><\/label><label>Limitaci\u00f3nes o condici\u00f3nes fisicas del menor ' + count + '<select name=\"limitaciones_fisicas_menor_' + count + '\"><option value=\"\">Elegir opci\u00f3n<\/option><option>Si<\/option><option>No<\/option><\/select><\/label><label>Detalle de limitaci\u00f3n o condici\u00f3n del menor ' + count + '<input name=\"detalle_limitaciones_menor_' + count + '\"><\/label>';\n    box.appendChild(group);\n    refresh(form);\n    focusField(group.querySelector('input'));\n  }\n  function buildModal(){\n    var old = document.querySelector(\".fs-contact-modal\"); if (old) old.remove();\n    var modal = document.createElement(\"div\"); modal.className = \"fs-contact-modal\";\n    modal.innerHTML = '<div class=\"fs-contact-dialog\" role=\"dialog\" aria-modal=\"true\"><div class=\"fs-contact-head\"><div><h2>Formulario de contacto<\/h2><p>Rellena los datos y prepararemos el mensaje para WhatsApp.<\/p><\/div><button class=\"fs-contact-close\" type=\"button\" aria-label=\"Cerrar\">\u00d7<\/button><\/div><form class=\"fs-contact-form\" autocomplete=\"on\"><input type=\"hidden\" name=\"origen\" value=\"web-club-free-style-bjj\"><label>Interesado<select name=\"tipo_interesado\" required><option value=\"\">Elegir opci\u00f3n<\/option><option>Quiero clases para mi<\/option><option>Busco clases para mi hijo\/a<\/option><option>Represento a un centro interesado<\/option><\/select><\/label><label>Nombre y apellidos<input name=\"responsable\" autocomplete=\"name\"><\/label><label>Indica si eres padre, madre o tutor legal<select name=\"relacion_tutor\"><option value=\"\">Elegir opci\u00f3n<\/option><option>Padre<\/option><option>Madre<\/option><option>Tutor legal<\/option><\/select><\/label><label>Fecha de nacimiento<input type=\"text\" inputmode=\"numeric\" placeholder=\"dd\/mm\/aaaa\" maxlength=\"10\" name=\"fecha_nacimiento\" autocomplete=\"bday\"><\/label><label>Confirmo que soy mayor de edad<input type=\"checkbox\" name=\"mayor_edad\" value=\"confirmado\"><\/label><label>Nombre y apellidos del menor<input name=\"alumno_1\" autocomplete=\"off\"><\/label><label>Fecha de nacimiento del menor<input type=\"text\" inputmode=\"numeric\" placeholder=\"dd\/mm\/aaaa\" maxlength=\"10\" name=\"fecha_nacimiento_menor\" autocomplete=\"bday\"><\/label><label>Genero<select name=\"genero\"><option value=\"\">Elegir opci\u00f3n<\/option><option>Masculino<\/option><option>Femenino<\/option><\/select><\/label><label>Experiencia previa BJJ del menor<select name=\"experiencia_bjj_menor_1\"><option value=\"\">Elegir opci\u00f3n<\/option><option>Si<\/option><option>No<\/option><\/select><\/label><label>Color del cinturon del menor<select name=\"cinturon_bjj_menor_1\"><option value=\"\">Elegir color<\/option><option>Blanco<\/option><option>Gris blanco<\/option><option>Gris<\/option><option>Gris negro<\/option><option>Amarillo blanco<\/option><option>Amarillo<\/option><option>Amarillo negro<\/option><option>Naranja blanco<\/option><option>Naranja<\/option><option>Naranja negro<\/option><option>Verde blanco<\/option><option>Verde<\/option><option>Verde negro<\/option><option>Azul<\/option><option>Morado<\/option><option>Marron<\/option><option>Negro<\/option><\/select><\/label><label>Tiempo total de experiencia del menor<input name=\"tiempo_bjj_menor_1\" autocomplete=\"off\"><\/label><label>Limitaci\u00f3nes o condici\u00f3nes fisicas del menor<select name=\"limitaciones_fisicas_menor_1\"><option value=\"\">Elegir opci\u00f3n<\/option><option>Si<\/option><option>No<\/option><\/select><\/label><label>Detalle de limitaci\u00f3n o condici\u00f3n del menor<input name=\"detalle_limitaciones_menor_1\"><\/label><button class=\"fs-add-minor\" type=\"button\">A\u00f1adir otro menor<\/button><div class=\"fs-extra-minors\"><\/div><label>Centro<select name=\"centro\"><option value=\"\">Elegir centro<\/option><option>Salesianos Paseo<\/option><option>San Buenaventura<\/option><\/select><\/label><label>Programas de inter\u00e9s<select name=\"programa\"><option value=\"\">Elegir programa<\/option><\/select><\/label><label>Experiencia previa BJJ<select name=\"experiencia_bjj\"><option value=\"\">Elegir opci\u00f3n<\/option><option>Si<\/option><option>No<\/option><\/select><\/label><label>Color del cinturon<select name=\"cinturon_bjj\"><option value=\"\">Elegir color<\/option><option>Blanco<\/option><option>Azul<\/option><option>Morado<\/option><option>Marron<\/option><option>Negro<\/option><\/select><\/label><label>Tiempo total de experiencia<input name=\"tiempo_bjj\" autocomplete=\"off\"><\/label><label>Limitaci\u00f3nes o condici\u00f3nes fisicas<select name=\"limitaciones_fisicas\"><option value=\"\">Elegir opci\u00f3n<\/option><option>Si<\/option><option>No<\/option><\/select><\/label><label>Detalle de limitaci\u00f3n o condici\u00f3n<input name=\"detalle_limitaciones\"><\/label><label>Email<input type=\"email\" name=\"email\" autocomplete=\"email\"><\/label><label>Telefono<input name=\"telefono\" autocomplete=\"tel\"><\/label><label>Nombre del centro representado<input name=\"nombre_centro\"><\/label><label>link del centro interesado<input name=\"link_centro\" inputmode=\"url\" autocomplete=\"url\"><\/label><label>Puesto ocupado en el centro<select name=\"puesto_centro\"><option value=\"\">Elegir opci\u00f3n<\/option><option>Director<\/option><option>Coordinador de deportes<\/option><option>Profesor<\/option><option>Otro<\/option><\/select><\/label><label>Te interesa<select name=\"interes_centro\"><option value=\"\">Elegir opci\u00f3n<\/option><option>Marcar una cita con los representantes del club<\/option><option>Recibir informaci\u00f3n del proyecto<\/option><\/select><\/label><label>Como quieres que se pongan en contacto contigo<select name=\"preferencia\"><option value=\"\">Elegir opci\u00f3n<\/option><option>WhatsApp<\/option><option>Llamada<\/option><option>Email<\/option><\/select><\/label><label>Mensaje<textarea name=\"mensaje\"><\/textarea><\/label><label class=\"fs-contact-check\">Acepto que el club use estos datos solo para responder a esta solicitud. La documentaci\u00f3n de matr\u00edcula se pedira mas adelante por canal privado, no en este primer formulario p\u00fablico.<input type=\"checkbox\" name=\"consentimiento\" value=\"aceptado\"><\/label><div class=\"fs-contact-actions\"><button class=\"fs-contact-cancel\" type=\"button\">Cancelar<\/button><button class=\"fs-contact-submit\" type=\"submit\" disabled>Enviar WhatsApp<\/button><\/div><\/form><\/div>';\n    document.body.appendChild(modal); var form = modal.querySelector(\"form\"); Array.from(form.querySelectorAll(\"input,select,textarea\")).forEach(function(el){ if (el.type === \"checkbox\") el.checked = false; else if (el.type !== \"hidden\") el.value = \"\"; });\n    form.addEventListener(\"input\",function(e){ var el = e.target; if (!el) return; if (isDateField(el)) formatDateInput(el); refresh(form); },true);\n    form.addEventListener(\"change\",function(e){ refresh(form); if (ready(form,e.target.name)) { var nf = nextField(form,e.target); if (nf) focusField(nf); else if (visibleField(e.target)) focusField(e.target); } else if (visibleField(e.target)) focusField(e.target); },true);\n    form.addEventListener(\"focusout\",function(e){ refresh(form); },true);\n    form.addEventListener(\"keydown\",function(e){ var el = e.target; if (!el) return; if (e.key !== \"Tab\") { if (e.key !== \"Enter\") return; } if (isDateField(el)) { if (!isCompleteDate(el.value || \"\")) { e.preventDefault(); focusField(el); return; } } if (!ready(form,el.name)) return; refresh(form); var next = nextField(form,el); if (next) { e.preventDefault(); focusField(next); } },true);\n    form.querySelector(\".fs-add-minor\").addEventListener(\"click\",function(){ addMinor(form); });\n    form.addEventListener(\"submit\",function(e){\n      e.preventDefault();\n      if (!ready(form,\"consentimiento\")) return;\n      if (form.dataset.fsSubmitLocked === \"1\") return;\n      form.dataset.fsSubmitLocked = \"1\";\n      window.setTimeout(function(){ form.dataset.fsSubmitLocked = \"\"; },3500);\n      function clean(v){ return fsCleanText(v); }\n      function fieldValue(name){ return clean(value(form,name)); }\n      function fsStripGeneratedRequest(v){ var msg = clean(v); var marker = \"Solicitud Club Free Style BJJ\"; var pos = msg.indexOf(marker); if (pos > -1) msg = clean(msg.slice(0,pos)); return msg; }\n      function safeMessage(){ return fsStripGeneratedRequest(fieldValue(\"mensaje\")); }\n      function fsDedupeRequestBody(v){ var text = String(v || \"\").trim(); var marker = \"Solicitud Club Free Style BJJ\"; var first = text.indexOf(marker); if (first > -1) { var second = text.indexOf(marker, first + marker.length); if (second > -1) text = String(text.slice(0,second)).trim(); } return text; }\n      function formatDate(v){\n        v = clean(v);\n        if (v.length === 10 && v.charAt(4) === \"-\" && v.charAt(7) === \"-\") return v;\n        var d = String(v || \"\").replace(\/[^0-9]\/g,\"\");\n        if (d.length === 8) return d.slice(4,8) + \"-\" + d.slice(2,4) + \"-\" + d.slice(0,2);\n        return v;\n      }\n      function programLabel(v){ v = clean(v); if (v.indexOf(\" - \") !== -1) return v.split(\" - \")[0]; return v; }\n      function selfGenderLine(v){ return v === \"Femenino\" ? \"\ud83d\ude4e\u200d\u2640\ufe0f *Genero:* Mujer\" : \"\ud83d\ude4e\u200d\u2642\ufe0f *Genero:* Hombre\"; }\n      function childGenderLine(n,v){ return (v === \"Femenino\" ? \"\ud83d\udc67\" : \"\ud83d\udc66\") + \"*Genero menor \" + n + \"* : \" + clean(v); }\n      function expIcon(v){ return v === \"No\" ? \"\ud83d\udfe5\" : \"\ud83d\udfe9\"; }\n      function addLine(lines,label,name){ var v = fieldValue(name); if (v) lines.push(label + v); }\n      var lines = [];\n      var tipo = fieldValue(\"tipo_interesado\");\n      if (tipo === \"Quiero clases para mi\") {\n        lines.push(\"\ud83d\udccb *_Solicitud Club Free Style BJJ_*\");\n        lines.push(\"\ud83d\udcdd *Interesado:* Clases para mi\");\n        lines.push(\"\u2049\ufe0f *Tipo de consulta:* Clase de prueba\");\n        lines.push(\"\ud83c\udfeb *Centro:* \" + fieldValue(\"centro\"));\n        lines.push(\"\ud83d\udcc6\u23f1\ufe0f *Programa de inter\u00e9s:* \" + programLabel(fieldValue(\"programa\")));\n        lines.push(\"\ud83d\udcac *Preferencia de contacto:* \" + fieldValue(\"preferencia\"));\n        lines.push(\"\ud83d\udcdd *Nombre y apellidos:* \" + fieldValue(\"responsable\") + \" _\" + String.fromCharCode(92) + \"_ *Mayor de edad:* \" + fieldValue(\"mayor_edad\"));\n        lines.push(\"\ud83d\udc23 *Fecha de nacimiento:* \" + formatDate(fieldValue(\"fecha_nacimiento\")));\n        lines.push(selfGenderLine(fieldValue(\"genero\")));\n        lines.push(expIcon(fieldValue(\"experiencia_bjj\")) + \" *Experiencia previa BJJ:* \" + fieldValue(\"experiencia_bjj\"));\n        if (fieldValue(\"experiencia_bjj\") === \"Si\") {\n          if (fieldValue(\"cinturon_bjj\")) lines.push(\"\ud83e\udd4b *Color de cinturon:* \" + fieldValue(\"cinturon_bjj\"));\n          if (fieldValue(\"tiempo_bjj\")) lines.push(\"\ud83d\udcc6 *Tiempo de experiencia:* \" + fieldValue(\"tiempo_bjj\"));\n        }\n        lines.push(\"\ud83e\ude7c *Limitaci\u00f3nes o condici\u00f3nes especiales:* \" + fieldValue(\"limitaciones_fisicas\"));\n        if (fieldValue(\"limitaciones_fisicas\") === \"Si\") { if (fieldValue(\"detalle_limitaciones\")) lines.push(\"\ud83d\udcdd *Detalle de limitaci\u00f3n o condici\u00f3n:* \" + fieldValue(\"detalle_limitaciones\")); }\n        lines.push(\"\ud83d\udce7 *Email:* \" + fieldValue(\"email\"));\n        lines.push(\"\ud83d\udcde *Telefono:* \" + fieldValue(\"telefono\"));\n        lines.push(\"\ud83d\udce8 *Mensaje:* \" + safeMessage());\n      } else if (tipo === \"Busco clases para mi hijo\/a\") {\n        lines.push(\"\ud83d\udccb *Solicitud Club Free Style BJJ*\");\n        lines.push(\"\ud83d\udcdd *Interesado:* Clases para mi hijo\/a\");\n        var rel = fieldValue(\"relacion_tutor\");\n        lines.push(\"\ud83d\udcdd *Nombre padre\/madre tutor* _(\" + (rel || \"indicar si es padre, madre o tutor legal\") + \")_ *:* \" + fieldValue(\"responsable\"));\n        lines.push(\"\ud83d\udc23 *Fecha de nacimiento padre\/madre tutor:* \" + formatDate(fieldValue(\"fecha_nacimiento\")));\n        lines.push(\"*Mayor de edad:* \" + fieldValue(\"mayor_edad\"));\n        for (var m=1;m<=5;m++) {\n          var alumnoName = \"alumno_\" + m;\n          if (!fieldValue(alumnoName)) continue;\n          lines.push(\"\ud83e\uddd2 *Menor \" + m + \":* \" + fieldValue(alumnoName));\n          lines.push(\"\ud83d\udc23 *Fecha de nacimiento menor \" + m + \":* \" + formatDate(fieldValue(m === 1 ? \"fecha_nacimiento_menor\" : \"fecha_nacimiento_menor_\" + m)));\n          lines.push(childGenderLine(m, fieldValue(m === 1 ? \"genero\" : \"genero_menor_\" + m)));\n          var expName = \"experiencia_bjj_menor_\" + m;\n          lines.push(expIcon(fieldValue(expName)) + \" *Experiencia BJJ menor \" + m + \":* \" + fieldValue(expName));\n          if (fieldValue(expName) === \"Si\") {\n            if (fieldValue(\"cinturon_bjj_menor_\" + m)) lines.push(\"\ud83e\udd4b *Color de cinturon menor \" + m + \":* \" + fieldValue(\"cinturon_bjj_menor_\" + m));\n            if (fieldValue(\"tiempo_bjj_menor_\" + m)) lines.push(\"\ud83d\udcc6 *Tiempo de experiencia menor \" + m + \":* \" + fieldValue(\"tiempo_bjj_menor_\" + m));\n          }\n          var limName = \"limitaciones_fisicas_menor_\" + m;\n          lines.push(\"\ud83e\ude7c *Limitaciones menor \" + m + \":* \" + fieldValue(limName));\n          if (fieldValue(limName) === \"Si\") { if (fieldValue(\"detalle_limitaciones_menor_\" + m)) lines.push(\"\ud83d\udcdd *Detalle limitacion menor \" + m + \":* \" + fieldValue(\"detalle_limitaciones_menor_\" + m)); }\n        }\n        lines.push(\"\ud83c\udfeb *Centro:* \" + fieldValue(\"centro\"));\n        lines.push(\"\ud83d\udcc6\u23f1\ufe0f *Programa de interes:* \" + fieldValue(\"programa\"));\n        lines.push(\"\ud83d\udce7 *Email:* \" + fieldValue(\"email\"));\n        lines.push(\"\ud83d\udcde *Telefono:* \" + fieldValue(\"telefono\"));\n        lines.push(\"\ud83d\udcac *Preferencia de contacto:* \" + fieldValue(\"preferencia\"));\n        lines.push(\"\ud83d\udce8 *Mensaje:* \" + safeMessage());\n      } else if (tipo === \"Represento a un centro interesado\") {\n        lines.push(\"\ud83d\udccb *Solicitud Club Free Style BJJ*\");\n        lines.push(\"\ud83d\udcdd *Interesado:* Represento a un centro interesado\");\n        lines.push(\"\ud83d\udcdd *Nombre:* \" + fieldValue(\"responsable\"));\n        lines.push(\"\ud83d\udc23 *Fecha de nacimiento:* \" + formatDate(fieldValue(\"fecha_nacimiento\")));\n        lines.push(\"*Mayor de edad:* \" + fieldValue(\"mayor_edad\"));\n        lines.push(\"\ud83d\udcac *Preferencia de contacto:* \" + fieldValue(\"preferencia\"));\n        lines.push(\"\ud83c\udfeb *Centro representado:* \" + fieldValue(\"nombre_centro\"));\n        lines.push(\"\ud83c\udf10 *link del centro interesado:* \" + (fieldValue(\"link_centro\") || \"(rellenar informacion)\"));\n        lines.push(\"\ud83d\udc64 *Puesto:* \" + fieldValue(\"puesto_centro\"));\n        lines.push(\"\u2049\ufe0f *Interes:* \" + fieldValue(\"interes_centro\"));\n        lines.push(\"\ud83d\udce8 *Mensaje:* \" + safeMessage());\n      }\n      var sep = String.fromCharCode(38);\n      var body = fsDedupeRequestBody(lines.join(String.fromCharCode(10)));\n      var fsNow = Date.now ? Date.now() : new Date().getTime();\n      if (window.__fsLastContactMessage === body) {\n        if (fsNow - (window.__fsLastContactAt || 0) < 3500) return;\n      }\n      window.__fsLastContactMessage = body;\n      window.__fsLastContactAt = fsNow;\n      var submitMode = form.getAttribute(\"data-fs-submit-mode\") || \"whatsapp\";\n      if (submitMode === \"email\") {\n        window.location.href = \"mailto:info@clubfreestylebjj.com?subject=\" + encodeURIComponent(\"Solicitud Club Free Style BJJ\") + sep + \"body=\" + encodeURIComponent(body);\n      } else {\n        window.location.href = \"whatsapp:\/\/send?phone=\" + phone + sep + \"text=\" + encodeURIComponent(body);\n      }\n    });\n    modal.querySelector(\".fs-contact-close\").addEventListener(\"click\",function(){ modal.removeAttribute(\"open\"); }); modal.querySelector(\".fs-contact-cancel\").addEventListener(\"click\",function(){ modal.removeAttribute(\"open\"); }); refresh(form); return modal;\n  }\n  function openModal(link){ var modal = buildModal(); var form = modal.querySelector(\"form\"); var href = link ? (link.getAttribute(\"href\") || \"\") : \"\"; var emailMode = href.indexOf(\"mailto:\") === 0; if (form) { form.setAttribute(\"data-fs-submit-mode\", emailMode ? \"email\" : \"whatsapp\"); var pref = field(form,\"preferencia\"); if (emailMode) { if (pref) pref.value = \"Email\"; } } var submit = modal.querySelector(\".fs-contact-submit\"); if (submit) submit.textContent = emailMode ? \"Enviar email\" : \"Enviar WhatsApp\"; var desc = modal.querySelector(\".fs-contact-head p\"); if (desc) desc.textContent = emailMode ? \"Rellena los datos y prepararemos el email.\" : \"Rellena los datos y prepararemos el mensaje para WhatsApp.\"; modal.setAttribute(\"open\",\"\"); focusField(field(modal,\"tipo_interesado\")); }\n  document.addEventListener(\"click\",function(e){ var link = e.target.closest ? e.target.closest(\"a[href]\") : null; if (!isContactLink(link)) return; e.preventDefault(); e.stopImmediatePropagation(); openModal(link); },true);\n})();\n<\/script>\n\n\n\n\n\n<!-- fs-championships-fit-clean-v1 -->\n\n\n<!-- fs-global-media-text-autofit-v1 -->\n<script id=\"fs-merge-round2-js-v1\">\n(function(){\n  \"use strict\";\n\n  \/* origen: c636990249 - interacciones globales genericas:\n     - abre\/cierra el menu flotante (.fs-floating-menu) y sus ramas (.fs-menu-branch)\n     - flechas de carrusel (.fs-prev \/ .fs-next dentro de [data-carousel])\n     - motor del buscador de campeonatos (#buscador-campeonatos), lee sus datos de un\n       <script id=\"fs-cs-data\"> JSON embebido POR PAGINA -- el motor es generico, el\n       dato vive aparte, por lo que no hay riesgo de mezclar contenido entre paginas *\/\n  if (!window.__fsGlobalInteractionsSafeV2) {\n    window.__fsGlobalInteractionsSafeV2 = true;\n\n    document.addEventListener(\"click\", function(event){\n      var summary = event.target && event.target.closest ? event.target.closest(\".fs-floating-menu > summary\") : null;\n      if (summary) {\n        var menu = summary.parentElement;\n        if (menu && menu.tagName === \"DETAILS\") {\n          event.preventDefault();\n          menu.open = !menu.open;\n        }\n        return;\n      }\n      var branchSummary = event.target && event.target.closest ? event.target.closest(\".fs-menu-branch > summary\") : null;\n      if (branchSummary) {\n        var branch = branchSummary.parentElement;\n        if (branch && branch.tagName === \"DETAILS\") {\n          event.preventDefault();\n          event.stopPropagation();\n          branch.open = !branch.open;\n        }\n        return;\n      }\n      var prev = event.target && event.target.closest ? event.target.closest(\"[data-carousel] .fs-prev\") : null;\n      var next = event.target && event.target.closest ? event.target.closest(\"[data-carousel] .fs-next\") : null;\n      if (!prev && !next) return;\n      var carousel = (prev || next).closest(\"[data-carousel]\");\n      var track = carousel && carousel.querySelector(\".fs-carousel-track\");\n      var slides = carousel ? carousel.querySelectorAll(\".fs-carousel-slide\") : [];\n      if (!track || !slides.length) return;\n      event.preventDefault();\n      event.stopPropagation();\n      var index = Number(carousel.dataset.fsSafeIndex || \"0\") || 0;\n      index = (index + (next ? 1 : -1) + slides.length) % slides.length;\n      carousel.dataset.fsSafeIndex = String(index);\n      track.style.transform = \"translateX(\" + (-index * 100) + \"%)\";\n    }, false);\n\n    function bootChampionshipSearch(){\n      var root = document.getElementById(\"buscador-campeonatos\");\n      if (!root || root.dataset.fsSafeSearch === \"true\") return;\n      var dataEl = document.getElementById(\"fs-cs-data\");\n      var grid = root.querySelector(\"[data-grid]\");\n      var pages = root.querySelector(\"[data-pages]\");\n      var count = root.querySelector(\"[data-count]\");\n      var pageState = root.querySelector(\"[data-page-state]\");\n      var empty = root.querySelector(\"[data-empty]\");\n      var loading = root.querySelector(\"[data-loading]\");\n      if (!dataEl || !grid || !pages) return;\n      var raw;\n      try { raw = JSON.parse(dataEl.textContent || \"{}\"); } catch(error) { return; }\n      var orgs = raw.orgs || {};\n      var today = new Date();\n      today = new Date(today.getFullYear(), today.getMonth(), today.getDate());\n      function mapEvents(list){\n        return (list || []).map(function(x){\n          var org = orgs[x[3]] || [x[3], x[2]];\n          return {t:x[0]||\"\",u:x[1]||\"#\",img:x[2]||\"\",org:x[3]||\"\",on:org[0]||x[3]||\"\",logo:org[1]||\"\",cc:x[4]||\"\",cn:x[5]||\"\",city:x[6]||\"\",prov:x[7]||\"\",loc:x[8]||\"\",start:x[9]||\"\",date:x[10]||\"\",days:x[11],status:x[12]||\"\",type:x[13]||\"\",pk:x[14]||\"unknown\",prize:x[15]||\"\",color:x[16]||\"#111\"};\n        });\n      }\n      var events = mapEvents(raw.events);\n      var fsCsFullLoadState = 0;\n      function ensureFullThenRender(){\n        if (fsCsFullLoadState === 2 || !raw.fullDataUrl) { render(); return; }\n        if (fsCsFullLoadState === 1) return;\n        fsCsFullLoadState = 1;\n        if (loading) loading.style.display = \"\";\n        fetch(raw.fullDataUrl).then(function(r){ return r.text(); }).then(function(text){\n          var fullData = JSON.parse(text);\n          if (fullData.orgs) { Object.keys(fullData.orgs).forEach(function(k){ orgs[k] = fullData.orgs[k]; }); }\n          events = mapEvents(fullData.events);\n          fsCsFullLoadState = 2;\n          render();\n        }).catch(function(){ fsCsFullLoadState = 0; render(); });\n      }\n      var filters = {q:root.querySelector('[data-filter=\"q\"]'),org:root.querySelector('[data-filter=\"org\"]'),country:root.querySelector('[data-filter=\"country\"]'),province:root.querySelector('[data-filter=\"province\"]'),city:root.querySelector('[data-filter=\"city\"]'),type:root.querySelector('[data-filter=\"type\"]'),prize:root.querySelector('[data-filter=\"prize\"]'),sort:root.querySelector('[data-filter=\"sort\"]')};\n      var state = {status:\"upcoming\",page:1,pageSize:24};\n      function norm(v){return String(v||\"\").toLowerCase().normalize(\"NFD\").replace(new RegExp(\"[\" + String.fromCharCode(92) + \"u0300-\" + String.fromCharCode(92) + \"u036f]\", \"g\"), \"\").replace(new RegExp(String.fromCharCode(92) + \"s+\", \"g\"), \" \").trim();}\n      function esc(v){return String(v==null?\"\":v).replace(\/[&<>\"']\/g,function(c){return {\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#039;\"}[c];});}\n      function val(k){return filters[k]?filters[k].value:\"\";}\n      function actual(e){var p=String(e.start||\"\").split(\"-\");if(p.length===3){var d=new Date(Number(p[0]),Number(p[1])-1,Number(p[2]));return d<today?\"past\":\"upcoming\";}return e.status||\"upcoming\";}\n      function match(e){var q=norm(val(\"q\"));var text=norm([e.t,e.on,e.cn,e.cc,e.city,e.prov,e.loc,e.type,e.prize,e.pk].join(\" \"));var org=val(\"org\"),country=val(\"country\"),province=val(\"province\"),city=val(\"city\"),type=val(\"type\"),prizeVal=val(\"prize\");if(actual(e)!==state.status)return false;if(q ? text.indexOf(q)===-1 : false)return false;if(org ? e.org!==org : false)return false;if(country ? norm([e.cc,e.cn].join(\" \")).indexOf(norm(country))===-1 : false)return false;if(province ? norm(e.prov).indexOf(norm(province))===-1 : false)return false;if(city ? norm(e.city).indexOf(norm(city))===-1 : false)return false;if(type ? norm(e.type).indexOf(norm(type))===-1 : false)return false;if(prizeVal ? e.pk!==prizeVal : false)return false;return true;}\n      function sorted(list){var mode=val(\"sort\");return list.slice().sort(function(a,b){if(mode===\"name\")return a.t.localeCompare(b.t);if(mode===\"city\")return (a.city||a.loc).localeCompare(b.city||b.loc);if(mode===\"federation\")return (a.on||\"\").localeCompare(b.on||\"\");var at=a.start?Date.parse(a.start):8640000000000000,bt=b.start?Date.parse(b.start):8640000000000000;return state.status===\"past\"?bt-at:at-bt;});}\n      function days(e){if(e.days===\"\"||e.days==null||isNaN(Number(e.days)))return \"Fecha por confirmar\";var n=Number(e.days);if(actual(e)===\"past\")return Math.abs(n)+\" dias\";if(n===0)return \"hoy\";if(n===1)return \"1 dia\";return n+\" dias\";}\n      function prize(e){return e.prize || (e.pk===\"ranking\"?\"Ranking oficial. Premios no publicados en el resumen.\":\"Premios no publicados en el resumen oficial.\");}\n\n      function card(e){var img=e.img||e.logo||\"\";var logo=!e.img||e.img===e.logo;var bg=(logo ? e.color : false)?' style=\"background:linear-gradient(135deg,'+esc(e.color)+',#111)\"':\"\";return '<a class=\"fs-cs-event-card\" href=\"'+esc(e.u)+'\" target=\"_blank\" rel=\"noopener\"><div class=\"fs-cs-cover '+(logo?'is-logo':'')+'\"'+bg+'><img decoding=\"async\" loading=\"lazy\" src=\"'+esc(img)+'\" alt=\"'+esc(e.t)+'\"><span class=\"fs-cs-cover-tag\">'+esc(e.on)+'<\/span><\/div><div class=\"fs-cs-event-body\"><h3>'+esc(e.t)+'<\/h3><div class=\"fs-cs-meta-line\"><span class=\"fs-cs-country\">'+esc(e.cc||\"--\")+'<\/span><span>'+esc(e.loc||e.city||e.cn||\"Evento oficial\")+'<\/span><\/div><div class=\"fs-cs-tags\"><span class=\"fs-cs-tag gold\">'+esc(actual(e)===\"past\"?\"Pasado\":\"Pr\u00f3ximo\")+'<\/span><span class=\"fs-cs-tag\">'+esc(e.type||\"Evento\")+'<\/span><\/div><div class=\"fs-cs-prize\"><b>Premio<\/b>'+esc(prize(e))+'<\/div><div class=\"fs-cs-date-row\"><span>'+esc(e.date||e.start||\"Fecha oficial\")+'<\/span><span class=\"fs-cs-days\">'+esc(days(e))+'<\/span><\/div><\/div><\/a>';}\n      function renderPages(totalPages){pages.innerHTML=\"\";if(totalPages<=1)return;function add(label,page,active,disabled){var b=document.createElement(\"button\");b.type=\"button\";b.textContent=label;b.disabled=!!disabled;if(active)b.className=\"is-active\";b.addEventListener(\"click\",function(e){e.preventDefault();state.page=page;render();});pages.appendChild(b);}add(\"Anterior\",Math.max(1,state.page-1),false,state.page===1);var start=Math.max(1,state.page-2),end=Math.min(totalPages,start+4);start=Math.max(1,end-4);for(var i=start;i<=end;i++)add(String(i),i,i===state.page,false);add(\"Siguiente\",Math.min(totalPages,state.page+1),false,state.page===totalPages);}\n      function render(){var list=sorted(events.filter(match));var total=list.length;var totalPages=Math.max(1,Math.ceil(total\/state.pageSize));if(state.page>totalPages)state.page=totalPages;grid.innerHTML=list.slice((state.page-1)*state.pageSize,state.page*state.pageSize).map(card).join(\"\");if(count)count.textContent=total+(total===1?\" evento encontrado\":\" eventos encontrados\");if(pageState)pageState.textContent=total?\"P\u00e1gina \"+state.page+\" de \"+totalPages:\"\";if(empty)empty.classList.toggle(\"is-visible\",total===0);if(loading)loading.style.display=\"none\";renderPages(totalPages);}\n      root.querySelectorAll(\"[data-status]\").forEach(function(b){b.addEventListener(\"click\",function(e){e.preventDefault();state.status=b.getAttribute(\"data-status\")||\"upcoming\";state.page=1;root.querySelectorAll(\"[data-status]\").forEach(function(x){x.classList.toggle(\"is-active\",x===b);});render();});});\n      Object.keys(filters).forEach(function(k){if(!filters[k])return;filters[k].addEventListener(\"input\",function(){state.page=1;ensureFullThenRender();});filters[k].addEventListener(\"change\",function(){state.page=1;ensureFullThenRender();});});\n      var reset=root.querySelector(\"[data-reset]\");if(reset)reset.addEventListener(\"click\",function(e){e.preventDefault();Object.keys(filters).forEach(function(k){if(filters[k])filters[k].value=\"\";});state.page=1;render();});\n      root.querySelectorAll(\"[data-quick]\").forEach(function(b){b.addEventListener(\"click\",function(e){e.preventDefault();if(filters.country)filters.country.value=b.getAttribute(\"data-quick\")===\"ES\"?\"ES\":\"\";if(filters.province)filters.province.value=\"\";if(filters.city)filters.city.value=\"\";state.page=1;render();});});\n      root.querySelectorAll(\"[data-quick-city]\").forEach(function(b){b.addEventListener(\"click\",function(e){e.preventDefault();if(filters.q)filters.q.value=b.getAttribute(\"data-quick-city\")||\"\";state.page=1;ensureFullThenRender();});});\n      root.dataset.fsSafeSearch = \"true\";\n      render();\n    }\n    if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", bootChampionshipSearch);\n    else bootChampionshipSearch();\n    window.addEventListener(\"load\", bootChampionshipSearch, {once:true});\n  }\n\n  \/* origen: 635a90b87b - scroll suave a anclas de horarios (.fs-schedule-link[href^=\"#\"]) *\/\n  (function scheduleAnchors(){\n    function init(){\n      document.querySelectorAll('.fs-schedule-link[href^=\"#\"]').forEach(function(link){\n        if(link.dataset.fsScheduleReady==='1')return;\n        link.dataset.fsScheduleReady='1';\n        link.addEventListener('click',function(e){\n          var target=document.querySelector(link.getAttribute('href'));\n          if(!target)return;\n          e.preventDefault();\n          target.scrollIntoView({behavior:'smooth',block:'start'});\n          try{history.pushState(null,'',link.getAttribute('href'));}catch(err){}\n        });\n      });\n    }\n    if(document.readyState==='loading')document.addEventListener('DOMContentLoaded',init);\n    else init();\n  })();\n\n  \/* origen: 893dcfc3ae - garantiza que .fs-contact-actions \/ .fs-contact-choice queden al\n     final del formulario de contacto (evita que el reordenado dinamico del formulario los\n     deje en medio) *\/\n  if (!window.__fsContactFormFooterEnforcerSafe) {\n    window.__fsContactFormFooterEnforcerSafe = true;\n    function placeFooter(form){\n      if (!form || !form.querySelectorAll) return;\n      var actions = form.querySelector(\".fs-contact-actions\") || form.querySelector(\".fs-actions\");\n      var choice = form.querySelector(\".fs-contact-choice\");\n      if (actions && actions.parentNode === form && actions.nextElementSibling && actions.nextElementSibling !== choice) {\n        form.appendChild(actions);\n      }\n      if (choice && choice.parentNode === form && choice.nextElementSibling) {\n        form.appendChild(choice);\n      }\n    }\n    function scanFooters(){\n      document.querySelectorAll(\"form.fs-contact-form, .fs-contact-modal form, .fs-form-disclosure form, .fsbjj form.fs-form\").forEach(placeFooter);\n    }\n    document.addEventListener(\"change\", function(event){\n      var form = event.target && event.target.closest ? event.target.closest(\"form\") : null;\n      if (form) window.setTimeout(function(){ placeFooter(form); }, 40);\n    }, true);\n    if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", scanFooters);\n    else scanFooters();\n    window.addEventListener(\"load\", scanFooters, {once:true});\n  }\n\n  \/* origen: e186ccec01 - texto\/estado del boton de envio segun modo (WhatsApp vs email) y\n     segun si el checkbox de consentimiento esta marcado. Respeta la botonera de eleccion\n     (.fs-contact-choice) -- NO la oculta ni la fuerza, Marcelo confirmo que debe conservarse. *\/\n  if (!window.__fsSubmitModeLabelFix) {\n    window.__fsSubmitModeLabelFix = true;\n    function fixSubmitLabels(){\n      document.querySelectorAll('form.fs-contact-form, .fs-contact-modal form').forEach(function(form){\n        var submit = form.querySelector('.fs-contact-submit');\n        if (!submit) return;\n        var emailMode = form.getAttribute('data-fs-submit-mode') === 'email';\n        submit.textContent = emailMode ? 'Enviar email' : 'Enviar WhatsApp';\n        var consent = form.querySelector('[name=\"consentimiento\"]');\n        if (consent) {\n          submit.disabled = !consent.checked;\n          submit.setAttribute('aria-disabled', submit.disabled ? 'true' : 'false');\n        }\n      });\n    }\n    document.addEventListener('click', function(){ setTimeout(fixSubmitLabels, 90); }, true);\n    document.addEventListener('change', fixSubmitLabels, true);\n    document.addEventListener('input', fixSubmitLabels, true);\n    if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', fixSubmitLabels);\n    else fixSubmitLabels();\n    window.addEventListener('load', fixSubmitLabels, { once:true });\n  }\n\n  \/* origen: ee8c24a4c8 - envuelve formularios .fsbjj form.fs-form en un <details> colapsable\n     (no toca los que ya viven dentro de .fs-form-disclosure) *\/\n  if (!window.__fsCollapsibleFormsReady) {\n    window.__fsCollapsibleFormsReady = true;\n    function titleFor(form){\n      var section = form.closest(\"section\");\n      var heading = section && section.querySelector(\"h2,h3\");\n      var submit = form.querySelector('button[type=\"submit\"],input[type=\"submit\"]');\n      var text = heading ? heading.textContent.trim() : \"\";\n      if (!text && submit) text = submit.textContent || submit.value || \"\";\n      return text || \"Formulario\";\n    }\n    function makeCollapsible(){\n      document.querySelectorAll(\".fsbjj form.fs-form\").forEach(function(form){\n        if (form.dataset.fsCollapsibleReady === \"true\") return;\n        if (form.closest(\".fs-form-disclosure\")) return;\n        form.dataset.fsCollapsibleReady = \"true\";\n        var details = document.createElement(\"details\");\n        details.className = \"fs-form-disclosure\";\n        var summary = document.createElement(\"summary\");\n        summary.textContent = titleFor(form);\n        form.parentNode.insertBefore(details, form);\n        details.appendChild(summary);\n        details.appendChild(form);\n      });\n    }\n    if (document.readyState === \"loading\") document.addEventListener(\"DOMContentLoaded\", makeCollapsible);\n    else makeCollapsible();\n    window.addEventListener(\"load\", makeCollapsible, {once:true});\n  }\n\n  \/* origen: 59f89a4f69 - recorta el credito de Kadence en el footer nativo despues del guion *\/\n  (function trimKadenceCredit(){\n    function trimKadenceCreditAfterDash(){\n      document.querySelectorAll('.site-footer .footer-html-inner p, .site-footer .site-info p').forEach(function(item){\n        var text = (item.textContent || '').replace(new RegExp(String.fromCharCode(92) + \"s+\", \"g\"), \" \").trim();\n        if (!text.includes('Club Free Style BJJ') || !text.includes(' - ')) return;\n        item.textContent = text.split(' - ')[0].trim();\n      });\n    }\n    trimKadenceCreditAfterDash();\n    document.addEventListener('DOMContentLoaded', trimKadenceCreditAfterDash);\n    window.addEventListener('load', trimKadenceCreditAfterDash);\n  })();\n\n})();\n\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Club Free Style BJJ Menu Inicio Clases Colegios Salesianos Paseo San Buenaventura Proyecto Liga escolar Campeonatos Tienda Contacto Etapa Primaria ESO Bachiller Centro Secretar\u00eda Octubre2026 PrimariaPor confirmarExtraescolar con recogida en comedor60\u20acESOPor confirmarContinuidad t\u00e9cnica y disciplina positiva60\u20acBachillerPor confirmarAutonomia, criterio y responsabilidad60\u20acInstalaci\u00f3nesTatamiSala, vestuarios y accesos del centro60\u20acCondici\u00f3nesSecretar\u00edaPlazas y descuentos sin publicar precios60\u20ac Octubre 2026 Etapas PrimariaExtraescolarRecogida en&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-6974","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/clubfreestylebjj.com\/index.php\/wp-json\/wp\/v2\/pages\/6974","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/clubfreestylebjj.com\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/clubfreestylebjj.com\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/clubfreestylebjj.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/clubfreestylebjj.com\/index.php\/wp-json\/wp\/v2\/comments?post=6974"}],"version-history":[{"count":0,"href":"https:\/\/clubfreestylebjj.com\/index.php\/wp-json\/wp\/v2\/pages\/6974\/revisions"}],"wp:attachment":[{"href":"https:\/\/clubfreestylebjj.com\/index.php\/wp-json\/wp\/v2\/media?parent=6974"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}