{"id":6977,"date":"2026-06-27T22:06:10","date_gmt":"2026-06-27T22:06:10","guid":{"rendered":"https:\/\/clubfreestylebjj.com\/?page_id=6977"},"modified":"2026-07-13T07:59:22","modified_gmt":"2026-07-13T07:59:22","slug":"mujeres-bjj-madrid","status":"publish","type":"page","link":"https:\/\/clubfreestylebjj.com\/index.php\/mujeres-bjj-madrid\/","title":{"rendered":"Mujeres y BJJ Madrid"},"content":{"rendered":"\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\" style=\"--fs-hero-bg:url('https:\/\/clubfreestylebjj.com\/wp-content\/uploads\/2026\/06\/club-free-style-bjj-mujeres_seguridad-01-img-20251001-222251.jpg')\"><div class=\"fs-wrap\"><div class=\"fs-breadcrumb\">Mujeres y BJJ<\/div><h1>Entrenar tambi\u00e9n es cuidarte.<\/h1><p>Jiu-Jitsu para mujeres adultas, adolescentes, madres y principiantes que quieren seguridad, fuerza, calma y confianza.<\/p><div class=\"fs-actions\"><a class=\"fs-btn fs-gold\" href=\"https:\/\/wa.me\/34681990446\">Hablar por WhatsApp<\/a><a class=\"fs-btn fs-ghost\" href=\"mailto:info@clubfreestylebjj.com?subject=Clase%20de%20prueba%20mujeres%20BJJ\">Enviar email<\/a><\/div><\/div><\/section>\n<section class=\"fs-section\"><div class=\"fs-wrap fs-split\"><div class=\"fs-media fs-wide\"><img decoding=\"async\" src=\"https:\/\/clubfreestylebjj.com\/wp-content\/uploads\/2026\/06\/club-free-style-bjj-mujeres-hero-ultra-2200x1300-1.jpg\" alt=\"Mujeres del Club Free Style BJJ compitiendo y entrenando\"><\/div><div><h2>Empiezas desde donde estes.<\/h2><p>No hace falta estar en forma, tener experiencia ni venir con una personalidad dura. La clase de prueba sirve para escuchar, moverte, entender el ambiente y comprobar si este entrenamiento encaja contigo.<\/p><div class=\"fs-list\"><div><strong>Seguridad personal:<\/strong> aprender distancia, equilibrio, control y salidas basicas sin depender de la fuerza bruta.<\/div><div><strong>Confianza corporal:<\/strong> notar que tu cuerpo responde, que puedes respirar bajo presion y que puedes resolver con calma.<\/div><div><strong>Comunidad:<\/strong> entrenar acompa&ntilde;ada, con respeto y con progresi\u00f3n real, sin prisas ni comparaci\u00f3nes absurdas.<\/div><\/div><\/div><\/div><\/section>\n<section class=\"fs-section fs-band\"><div class=\"fs-wrap\"><h2>Mujeres de todas las edades.<\/h2><p>El BJJ es util para una adolescente que necesita confianza, para una adulta que quiere volver a moverse, para una madre que busca tiempo propio y para una mujer que nunca piso un tatami pero quiere aprender defensa personal de verdad.<\/p><div class=\"fs-grid\" style=\"margin-top:30px\"><article class=\"fs-panel\"><h3>Principiantes<\/h3><p>Primera clase guiada, explicaci\u00f3n de normas basicas y ejercicios adaptados para entrar sin miedo.<\/p><\/article><article class=\"fs-panel\"><h3>Defensa personal<\/h3><p>Trabajo de base, escapes, control de distancia y decisiones simples para ganar seguridad progresiva.<\/p><\/article><article class=\"fs-panel\"><h3>Competici\u00f3n y reto<\/h3><p>Para quien quiera avanzar mas, el club acompa&ntilde;a con preparaci\u00f3n t\u00e9cnica, criterio y objetivos realistas.<\/p><\/article><\/div><\/div><\/section>\n<section class=\"fs-section\"><div class=\"fs-wrap fs-split\"><div><h2>Una prueba sin compromiso y sin presion.<\/h2><p>Ven a probar, pregunta lo que necesites y decide con calma. Si prefieres venir acompa&ntilde;ada o hablar antes con secretar\u00eda, puedes escribir por WhatsApp o email. Los tiempos de seguimiento seran moderados: el objetivo es ayudarte, no agobiarte.<\/p><div class=\"fs-note\">La clase puede ser mixta o adaptada al grupo disponible. Secretar\u00eda te orientara al horario mas adecuado seg\u00fan edad, experiencia y disponibilidad.<\/div><div class=\"fs-actions\"><a class=\"fs-btn fs-gold\" href=\"mailto:info@clubfreestylebjj.com\">Enviar email<\/a><a class=\"fs-btn fs-light\" href=\"https:\/\/wa.me\/34681990446\">Hablar por WhatsApp<\/a><\/div><\/div><div class=\"fs-media fs-wide\"><img decoding=\"async\" src=\"https:\/\/clubfreestylebjj.com\/wp-content\/uploads\/2026\/06\/club-free-style-bjj-mujeres-participacion-1600x1000-1.jpg\" alt=\"Mujeres participando en competicion de Jiu-Jitsu brasile&ntilde;o\"><\/div><\/div><\/section>\n<section class=\"fs-section fs-band\"><div class=\"fs-wrap fs-split\"><div class=\"fs-media fs-wide\"><img decoding=\"async\" src=\"https:\/\/clubfreestylebjj.com\/wp-content\/uploads\/2026\/06\/club-free-style-bjj-mujeres-confianza-1600x1000-1.jpg\" alt=\"Mujer del club observando y participando en el tatami\"><\/div><div><h2>La fuerza tambi\u00e9n se aprende.<\/h2><p>Muchas mujeres llegan pensando que no tienen suficiente fuerza, edad o experiencia. El Jiu-Jitsu ense&ntilde;a justo lo contrario: posici\u00f3n, palancas, calma, t\u00e9cnica y constancia. No entrenas para parecer invencible; entrenas para sentirte mas capaz.<\/p><div class=\"fs-actions\"><a class=\"fs-btn fs-light\" href=\"https:\/\/wa.me\/34681990446\">Hablar por WhatsApp<\/a><a class=\"fs-btn fs-ghost\" href=\"https:\/\/clubfreestylebjj.com\/index.php\/clases-adultos-bjj-madrid\/\">Ver clases de adultos<\/a><\/div><\/div><\/div><\/section><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&ntilde;o 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&#038;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\">&copy; 2026 Club Free Style BJJ<\/div>\n<\/footer>\n<\/div>\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\": [\"Extraescolar lunes y mi\u00e9rcoles 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\",\"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\": [\"Grupo 1 Lunes y mi\u00e9rcoles 17:15-18:45\",\"Grupo 2 Martes y jueves 17:15-18:45\",\"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\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 Mujeres y BJJ Entrenar tambi\u00e9n es cuidarte. Jiu-Jitsu para mujeres adultas, adolescentes, madres y principiantes que quieren seguridad, fuerza, calma y confianza. Hablar por WhatsAppEnviar email Empiezas desde donde estes. No hace falta estar en forma, tener&#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-6977","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/clubfreestylebjj.com\/index.php\/wp-json\/wp\/v2\/pages\/6977","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=6977"}],"version-history":[{"count":0,"href":"https:\/\/clubfreestylebjj.com\/index.php\/wp-json\/wp\/v2\/pages\/6977\/revisions"}],"wp:attachment":[{"href":"https:\/\/clubfreestylebjj.com\/index.php\/wp-json\/wp\/v2\/media?parent=6977"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}