{"id":6980,"date":"2026-06-27T22:06:10","date_gmt":"2026-06-27T22:06:10","guid":{"rendered":"https:\/\/clubfreestylebjj.com\/?page_id=6980"},"modified":"2026-09-19T18:17:00","modified_gmt":"2026-09-19T18:17:00","slug":"tienda","status":"publish","type":"page","link":"https:\/\/clubfreestylebjj.com\/index.php\/tienda\/","title":{"rendered":"Tienda del club"},"content":{"rendered":"<style id=\"club-design-2026\">\n:root{--club-ink:#131715;--club-paper:#f8f7f3;--club-gold:#d5b96f;--club-muted:#59605a;--club-line:#dcded7}html{scroll-behavior:smooth}body{margin:0;background:var(--club-paper)}body.page .entry-title,body.page .entry-header,body.page .site-header,body.page .site-footer,body.page .entry-hero,body.page .post-navigation{display:none!important}body.page :is(.site,.site-content,.site-container,.content-container,.content-area,.site-main,.entry,.entry-content-wrap,.entry-content,.wp-site-blocks){max-width:none!important;margin:0!important;padding:0!important;box-shadow:none!important}body.page .content-container{display:block!important}.fs-site{font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.65;background:var(--club-paper);color:var(--club-ink);overflow:clip}.fs-site *{box-sizing:border-box}.fs-site h1,.fs-site h2,.fs-site h3,.fs-site p{margin-top:0}.fs-site h1,.fs-site h2,.fs-site h3{font-family:Arial,Helvetica,sans-serif;color:inherit;font-style:normal;text-transform:none;letter-spacing:-.045em;font-weight:800;text-wrap:balance}.fs-site h1{font-size:clamp(42px,5.7vw,76px);line-height:1.02;max-width:920px;margin-bottom:26px}.fs-site h2{font-size:clamp(30px,3.7vw,48px);line-height:1.1;margin-bottom:25px}.fs-site h3{font-size:24px;line-height:1.2;margin-bottom:16px}.fs-site p{margin-bottom:22px}.fs-site a{color:inherit;text-underline-offset:5px}.fs-site img{display:block;max-width:100%;height:auto}.fs-site :is(a,button,input,select,summary):focus-visible{outline:3px solid #a78535;outline-offset:5px}.fs-site :is(button,input,select,textarea){font:inherit}.fs-site button{cursor:pointer}.fs-site [hidden]{display:none!important}.n-wrap,.fs-site :is(.fs-wrap,.wrap,.hw){width:min(1200px,calc(100% - 80px));max-width:1200px;margin:0 auto}.n-skip{position:fixed;top:-100px;left:20px;z-index:99999;background:white;color:black;padding:15px}.n-skip:focus{top:40px}.n-header{position:relative;z-index:100;background:var(--club-ink);color:#fff;border-bottom:1px solid #ffffff25}.n-nav{min-height:94px;width:min(1360px,calc(100% - 64px));margin:auto;display:flex;align-items:center;justify-content:space-between;gap:25px}.n-brand{display:flex;align-items:center;gap:12px;text-decoration:none!important;white-space:nowrap}.n-brand img{width:48px;height:48px;object-fit:contain}.n-brand span{font-size:19px;font-weight:800;letter-spacing:.04em;line-height:1.1}.n-brand b{color:var(--club-gold)}.n-brand small{display:block;font-size:9px;letter-spacing:.16em;font-weight:400;margin-top:8px;color:#bdc2ba}.n-desktop{display:flex;align-items:center;gap:25px}.n-desktop a{font-size:13px;font-weight:600;text-decoration:none!important;color:#e4e7df}.n-desktop a:hover{color:var(--club-gold)}.fs-site :is(.n-button,.fs-btn,.btn){display:inline-flex;align-items:center;justify-content:center;gap:24px;min-height:50px;padding:13px 23px;border-radius:4px;background:var(--club-gold);border:1px solid var(--club-gold);color:#151916;font-size:14px;font-weight:700;line-height:1.4;text-decoration:none;transition:background .18s,transform .18s;white-space:normal;text-align:center}.fs-site :is(.n-button,.fs-btn,.btn):hover{background:#e5cc91;transform:translateY(-2px)}.fs-site :is(.n-outline,.fs-ghost,.fs-light,.bg-gh){background:transparent;border:1px solid currentColor;color:inherit}.n-mobile-menu{display:none}.n-eyebrow,.fs-site :is(.fs-section-label,.eyebrow,.kicker,.eye,.fs-breadcrumb,.fs-sched-clean__eyebrow){display:block;font-size:11px;font-weight:700;letter-spacing:.18em;text-transform:uppercase;color:#806629;margin-bottom:22px}.n-home-hero{background:var(--club-ink);color:white;position:relative}.n-home-hero-grid{display:grid;grid-template-columns:1fr 1fr;min-height:690px;max-width:1600px;margin:auto}.n-home-copy{padding:82px max(40px,calc((100vw - 1200px)\/2)) 65px;padding-right:30px;display:flex;flex-direction:column;justify-content:center}.n-home-copy .n-eyebrow{color:var(--club-gold)}.fs-site .n-home-copy h1{font-size:clamp(56px,6.4vw,96px);line-height:.99;letter-spacing:-.065em;margin-bottom:30px}.n-home-copy h1 em{color:var(--club-gold);font-style:normal}.n-home-copy p{max-width:410px;color:#c3c9c1;font-size:17px;line-height:1.7}.n-home-photo{position:relative;min-width:0;overflow:hidden}.n-home-photo>img{width:100%;height:100%;object-fit:cover;object-position:62% center}.n-home-photo:after{content:'';position:absolute;inset:0;background:linear-gradient(90deg,#13171535,transparent 50%,#13171515)}.n-photo-caption{position:absolute;bottom:25px;left:25px;right:25px;z-index:1;color:white;font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;display:flex;justify-content:space-between;text-shadow:0 1px 6px #000}.n-actions,.fs-site :is(.fs-actions,.cta){display:flex;flex-wrap:wrap;gap:14px;align-items:center;margin-top:28px}.n-text-link{font-size:14px;font-weight:700;text-decoration:none;border-bottom:1px solid;padding:9px 0}.n-facts{background:#e8e5dc;border-bottom:1px solid var(--club-line)}.n-facts .n-wrap{display:flex;justify-content:space-between;gap:20px;padding:23px 0;font-size:11px;letter-spacing:.1em;text-transform:uppercase;font-weight:700}.n-section,.fs-site :is(section.fs-section,section.section,section.sec){padding:95px 0}.n-section-head{display:flex;align-items:end;justify-content:space-between;gap:50px;margin-bottom:38px}.n-section-head h2{margin-bottom:0;max-width:680px}.n-section-head p{max-width:350px;color:var(--club-muted);margin-bottom:0}.n-program-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:25px}.n-program{display:flex;flex-direction:column;text-decoration:none!important;border-bottom:1px solid #b4b9ad;padding-bottom:22px}.n-program-image{overflow:hidden;aspect-ratio:4\/3;background:#ddd;margin-bottom:25px}.n-program img{width:100%;height:100%;object-fit:cover;transition:transform .4s}.n-program:hover img{transform:scale(1.035)}.n-program-top{display:flex;justify-content:space-between;align-items:start;gap:18px}.n-program-top h3{font-size:27px;margin-bottom:14px}.n-program p{font-size:15px;color:var(--club-muted);margin-bottom:20px}.n-program .n-more{font-size:12px;letter-spacing:.05em;font-weight:700;margin-top:auto}.n-number{font-size:12px;color:#817145;margin-top:5px}.n-secondary-paths{display:grid;grid-template-columns:1fr 1fr;margin-top:35px;border-top:1px solid var(--club-line);border-bottom:1px solid var(--club-line)}.n-secondary-paths a{padding:23px 0;font-size:16px;text-decoration:none;font-weight:700;display:flex;justify-content:space-between;gap:20px}.n-secondary-paths a+ a{border-left:1px solid var(--club-line);padding-left:25px}.n-secondary-paths a:first-child{padding-right:25px}.n-dark{background:var(--club-ink);color:white}.n-dark .n-eyebrow{color:var(--club-gold)}.n-dark p{color:#c2c8be}.n-split{display:grid;grid-template-columns:1fr 1fr;gap:80px;align-items:center}.n-split-image{width:100%;height:520px;object-fit:cover}.n-principle{display:grid;grid-template-columns:40px 1fr;gap:15px;padding:24px 0;border-top:1px solid #ffffff25}.n-principle>span{font-size:12px;color:var(--club-gold)}.n-principle h3{font-size:22px;margin-bottom:8px}.n-principle p{font-size:15px;margin:0}.n-place{background:#e9e7df}.n-place figure{margin:0}.n-place figure img{width:100%;height:440px;object-fit:cover}.n-place figcaption{font-size:11px;text-transform:uppercase;letter-spacing:.1em;margin-top:14px;color:#5d6458}.n-steps{display:grid;grid-template-columns:repeat(3,1fr);gap:40px;margin-top:40px}.n-step{border-top:1px solid #bbc0b5;padding-top:24px}.n-step>span{font-size:36px;letter-spacing:-.05em;color:#8f773a}.n-step h3{margin-top:25px;font-size:23px}.n-step p{font-size:15px;color:var(--club-muted)}.n-faq{margin-top:26px}.n-faq details{border-top:1px solid var(--club-line);padding:22px 0}.n-faq details:last-child{border-bottom:1px solid var(--club-line)}.n-faq summary{cursor:pointer;list-style:none;font-weight:700;display:flex;justify-content:space-between;gap:20px;font-size:19px}.n-faq summary:after{content:'+';color:#806629}.n-faq details[open] summary:after{content:'\u2212'}.n-faq p{max-width:850px;color:var(--club-muted);margin:20px 0 0}.n-cta-band{background:var(--club-gold);padding:70px 0}.n-cta-band .n-wrap{display:flex;align-items:center;justify-content:space-between;gap:45px}.n-cta-band h2{font-size:clamp(35px,5vw,64px);margin-bottom:15px}.n-cta-band p{margin:0}.n-cta-band .n-button{background:var(--club-ink);color:white;border-color:var(--club-ink);flex-shrink:0}.n-footer{background:#101410;color:#c1c7be;padding:65px 0 25px}.n-footer-grid{display:grid;grid-template-columns:1.3fr 1fr 1fr 1.15fr;gap:40px}.fs-site .n-footer h2{font-size:12px;letter-spacing:.09em;text-transform:uppercase;color:white;margin-bottom:24px}.n-footer a{display:block;text-decoration:none;font-size:13px;margin-bottom:11px;overflow-wrap:anywhere}.n-footer a:hover{color:var(--club-gold)}.n-footer p{font-size:13px;line-height:1.8}.fs-site .n-footer-name{font-size:25px;font-weight:800;color:white;letter-spacing:-.02em}.n-footer-name span{display:block;font-size:12px;font-weight:400;margin-top:14px;letter-spacing:0;color:var(--club-gold)}.n-footer-bottom{display:flex;gap:25px;justify-content:space-between;border-top:1px solid #ffffff20;margin-top:45px;padding-top:24px;font-size:11px}.n-footer-bottom a{font-size:11px;margin:0}\n\/* Shared inner-page templates *\/\n.fs-site .fs-sched-clean{max-width:none;width:100%;margin:0;background:#1c241e;color:#fff;border:1px solid #ffffff25;border-radius:5px;padding:32px;box-shadow:none}.fs-site .fs-sched-clean__title{color:#fff}.fs-site .fs-sched-clean__eyebrow{color:#d5b96f}.fs-site .fs-sched-clean table{color:#fff}.fs-site .fs-sched-clean th{color:#fff;background:#ffffff10}.fs-site .fs-sched-clean__sub{color:#ccd2c8}.fs-site .fs-sched-clean td{color:#fff}\n\n.fs-site :is(.fs-page-hero,.hero):not(.n-home-hero){position:relative;background:var(--club-ink);color:white;padding:85px 0;overflow:hidden}.fs-site .fs-page-hero{background-image:linear-gradient(90deg,#131715ed,#131715bd),var(--fs-hero-bg);background-size:cover;background-position:center}.fs-site :is(.fs-page-hero,.hero) :is(p,.lead){max-width:750px;color:#d2d6ce;font-size:18px}.fs-site :is(.fs-page-hero,.hero) :is(.fs-section-label,.eye,.eyebrow,.fs-breadcrumb){color:var(--club-gold)}.fs-site .hero .split{display:grid;grid-template-columns:1.2fr 1fr;gap:60px;align-items:center}.fs-site .hero .photo img{width:100%;height:400px;object-fit:cover}.fs-site .hero>.bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;opacity:.28}.fs-site .hero .veil{position:absolute;inset:0;background:linear-gradient(90deg,#131715,transparent)}.fs-site .hero .in{position:relative}.fs-site :is(.fs-split,.why){display:grid;grid-template-columns:1fr 1fr;gap:65px;align-items:center}.fs-site :is(.fs-grid,.grid,.g3,.pil,.fs-path-grid,.fs-stage-card-grid,.fs-shop-brand-grid){display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:25px;margin-top:32px}.fs-site :is(.fs-two,.grid:has(> :last-child:nth-child(2))){grid-template-columns:repeat(2,minmax(0,1fr))}.fs-site :is(.fs-panel,.fs-card,.card,.fs-stage-card,.fs-shop-brand-card,.c,.pil>.p){border:1px solid var(--club-line);background:white;color:var(--club-ink);padding:28px;border-radius:5px;min-width:0;text-decoration:none;box-shadow:none}.fs-site :is(.card,.fs-stage-card,.fs-shop-brand-card):has(img){padding:0;overflow:hidden}.fs-site :is(.body,.bd,.fs-stage-card-body,.fs-shop-brand-body){padding:26px}.fs-site :is(.fs-panel,.fs-card,.card,.fs-stage-card) h2{font-size:28px}.fs-site :is(.card,.fs-stage-card,.fs-shop-brand-card) h3{font-size:25px}.fs-site :is(.card .img,.card .ph,.fs-stage-cover){position:relative;height:230px;background:#e4e4df;overflow:hidden}.fs-site :is(.card .img,.card .ph,.fs-stage-cover)>img{width:100%;height:100%;object-fit:cover}.fs-site .fs-logo-cover>img{object-fit:contain;padding:30px}.fs-site .fs-stage-cover-tag{position:absolute;left:15px;bottom:15px;background:var(--club-ink);color:white;padding:5px 10px;font-size:11px}.fs-site :is(.fs-tag,.tag,.fs-stage-tag){display:inline-block;color:#806629;font-size:11px;letter-spacing:.08em;font-weight:700;text-transform:uppercase;margin-bottom:14px}.fs-site .fs-stage-tags{display:flex;gap:10px;flex-wrap:wrap;margin:15px 0}.fs-site .fs-stage-tag{background:#f1eee5;padding:5px 8px;margin:0}.fs-site .fs-stage-meta-line{display:flex;gap:12px;justify-content:space-between;border-bottom:1px solid #eee;padding:9px 0;font-size:13px}.fs-site .fs-card-price{font-size:36px;color:#897036;font-weight:700;margin-bottom:20px}.fs-site :is(.fs-band,.method){background:#eeeee7}.fs-site :is(.fs-media,.photo)>img{width:100%;height:440px;object-fit:cover;border-radius:5px}.fs-site .fs-logo{height:95px;width:auto;object-fit:contain;margin-bottom:24px}.fs-site :is(.fs-list,.ck){padding-left:22px}.fs-site li{margin-bottom:12px}.fs-site :is(.fs-cta,.obj,.fin){background:var(--club-ink);color:white}.fs-site :is(.fs-cta,.obj,.fin) p{color:#c4cac0}.fs-site :is(.fs-note,.note){padding:25px;border-left:3px solid var(--club-gold);background:#eeeee6;margin-top:25px}.fs-site .fs-social{display:flex;flex-wrap:wrap;gap:20px;font-size:14px}.fs-site .fs-sched-clean__title{font-size:clamp(32px,4vw,50px);font-weight:800;line-height:1.1;letter-spacing:-.035em}.fs-site .fs-sched-clean__sub{margin:15px 0 30px;color:#d1d5cd}.fs-site .fs-sched-clean__scroll{overflow:auto;border:1px solid #ffffff35}.fs-site table{width:100%;border-collapse:collapse;font-size:14px}.fs-site th,.fs-site td{text-align:center;padding:20px 12px;border:1px solid #ffffff25;white-space:nowrap}.fs-site th{background:#ffffff10;color:white;font-weight:600}.fs-site .fs-sched-clean__rowh{text-align:left;font-weight:700}.fs-site .fs-sched-clean__pill{padding:5px 10px;background:#d5b96f;color:#131715;font-size:11px;font-weight:700;display:inline-block;border-radius:3px}.fs-site .fs-sched-clean__pill--nogi{background:#c5d5d0}.fs-site .fs-sched-clean__pill--open{background:white}.fs-site .fs-sched-clean__eyebrow{color:var(--club-gold)}.fs-site .fs-legal-card{width:min(860px,calc(100% - 60px));margin:auto;padding:70px 0}.fs-site .fs-legal-card h2{font-size:27px;margin-top:45px}.fs-site .fs-legal-card p{font-size:16px}.fs-site .fs-shop-brand-logo{height:145px;background:white;display:flex;align-items:center;justify-content:center;padding:25px}.fs-site .fs-shop-brand-logo img{max-height:90px;max-width:190px;object-fit:contain}.fs-site .fs-shop-brand-logo.is-dark{background:#151515}.fs-site .fs-shop-brand-meta{font-size:13px;border-top:1px solid #ddd;padding-top:15px}.fs-site .fs-shop-brand-meta span{display:block}.fs-site .fs-shop-brand-cta{display:block;font-size:13px;font-weight:700;margin-top:20px}.fs-site .fs-shop-brand-tag{font-size:11px;letter-spacing:.04em;color:#806629}.fs-site .fs-shop-brand-head{max-width:900px}.fs-site .n-hour-links{display:flex;flex-wrap:wrap;gap:12px;margin-top:30px}.fs-site .n-hour-links a{border:1px solid #ccc;padding:14px 18px;text-decoration:none;font-weight:700;font-size:14px}.fs-site .n-contact-grid{display:grid;grid-template-columns:1.3fr 1fr;gap:70px}.fs-site .n-contact-choice{display:block;padding:25px 0;border-top:1px solid var(--club-line);text-decoration:none}.n-contact-choice strong{font-size:24px;display:block}.n-contact-choice span{color:var(--club-muted);font-size:14px}.fs-site .n-contact-address{background:var(--club-ink);color:white;padding:38px}.fs-site .n-contact-address p{color:#c5cbc0}.fs-site .n-contact-address h2{font-size:30px}\n@media(min-width:1600px){.n-home-copy{padding-left:100px}}@media(max-width:1100px){.n-desktop{gap:15px}.n-desktop a{font-size:12px}.n-nav{gap:16px}.n-brand span{font-size:16px}.n-brand img{width:40px}.n-nav-cta{padding:12px 16px!important}.n-home-hero-grid{min-height:620px}.n-home-copy{padding-left:40px}.n-footer-grid{gap:25px}.n-footer a{font-size:12px}}@media(max-width:900px){.n-desktop{display:none}.n-mobile-menu{display:block;position:relative}.n-mobile-menu summary{list-style:none;cursor:pointer;font-size:13px;font-weight:700;display:flex;gap:15px;padding:14px;border:1px solid #ffffff35;border-radius:4px}.n-mobile-menu nav{position:absolute;right:0;top:58px;width:min(330px,calc(100vw - 40px));background:#20251f;border:1px solid #ffffff25;padding:15px;box-shadow:0 18px 40px #0004}.n-mobile-menu nav a{display:block;padding:10px 12px;border-bottom:1px solid #ffffff10;font-size:14px;text-decoration:none}.n-nav-cta{margin-left:auto}.n-wrap,.fs-site :is(.fs-wrap,.wrap,.hw){width:calc(100% - 48px)}.n-section,.fs-site :is(section.fs-section,section.section,section.sec){padding:65px 0}.n-split,.fs-site :is(.fs-split,.why){gap:35px}.n-section-head{gap:30px}.n-footer-grid{grid-template-columns:1fr 1fr;gap:35px}.n-home-copy{padding:60px 25px}.n-home-copy h1{font-size:60px!important}.fs-site :is(.fs-grid,.grid,.fs-stage-card-grid,.fs-shop-brand-grid,.fs-path-grid){grid-template-columns:repeat(2,minmax(0,1fr))}.n-home-hero-grid{min-height:590px}.n-facts .n-wrap{font-size:10px;gap:10px}.n-split-image{height:420px}.n-program-grid{gap:18px}.n-program-top h3{font-size:23px}.n-program p{font-size:14px}}\n@media(max-width:640px){.n-nav{width:calc(100% - 36px);min-height:78px;gap:12px}.n-brand span{font-size:15px}.n-brand small{font-size:8px}.n-brand img{width:34px;height:40px}.n-brand{gap:8px}.n-nav-cta{display:none!important}.n-home-hero-grid{grid-template-columns:1fr}.n-home-copy{padding:48px 24px 45px}.fs-site .n-home-copy h1{font-size:62px!important}.n-home-copy p{font-size:16px;max-width:440px}.n-home-photo{height:320px}.n-home-photo>img{object-position:center 55%}.n-photo-caption{font-size:9px;left:20px;right:20px;bottom:20px}.n-facts .n-wrap{display:grid;grid-template-columns:1fr 1fr;font-size:10px;gap:12px}.n-section-head{display:block}.n-section-head p{margin-top:22px}.n-program-grid,.n-split,.n-steps,.fs-site :is(.fs-split,.why,.hero .split,.n-contact-grid){grid-template-columns:1fr;gap:30px}.n-program-grid{gap:35px}.n-program-image{aspect-ratio:16\/10;margin-bottom:20px}.n-program-top h3{font-size:28px}.n-program p{font-size:16px}.n-secondary-paths{grid-template-columns:1fr}.n-secondary-paths a+ a{border-left:0;border-top:1px solid var(--club-line);padding-left:0}.n-secondary-paths a:first-child{padding-right:0}.n-split-image{height:350px}.n-place figure img{height:280px}.n-steps{gap:20px}.n-step h3{margin-top:10px}.n-cta-band{padding:50px 0}.n-cta-band .n-wrap{display:block}.n-cta-band .n-button{margin-top:25px}.n-footer-grid{grid-template-columns:1fr 1fr;gap:30px 20px}.n-footer-grid>div:first-child{grid-column:1\/-1}.n-footer-grid>div:last-child{grid-column:1\/-1}.n-footer-bottom{flex-wrap:wrap;gap:14px;font-size:10px}.fs-site :is(.fs-grid,.grid,.g3,.pil,.fs-path-grid,.fs-stage-card-grid,.fs-shop-brand-grid,.fs-two){grid-template-columns:1fr}.fs-site :is(.fs-page-hero,.hero):not(.n-home-hero){padding:55px 0}.fs-site h1{font-size:42px}.fs-site .hero .photo img,.fs-site .fs-media>img{height:280px}.fs-site :is(.fs-page-hero,.hero) p{font-size:16px}.fs-site .fs-sched-clean__scroll{margin-left:-8px;margin-right:-8px}.fs-site table{font-size:12px;min-width:590px}.fs-site td,.fs-site th{padding:15px 12px}.fs-site .n-contact-address{padding:25px}.n-faq summary{font-size:17px}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.fs-site *{transition:none!important;animation:none!important}}\n<\/style><div class=\"fs-site\"><a class=\"n-skip\" href=\"#club-content\">Saltar al contenido<\/a><header class=\"n-header\"><div class=\"n-nav\"><a class=\"n-brand\" href=\"\/\" aria-label=\"Club Free Style BJJ, inicio\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/clubfreestylebjj.com\/wp-content\/uploads\/2026\/06\/club-free-style-bjj-logo-dark-nav-transparent-1000.png\" width=\"48\" height=\"48\" alt=\"\"><span>FREE STYLE <b>BJJ<\/b><small>CLUB DEPORTIVO \u00b7 MADRID<\/small><\/span><\/a><nav class=\"n-desktop\" aria-label=\"Navegaci\u00f3n principal\"><a href=\"\/index.php\/programa-por-edades\/\">Programas<\/a><a href=\"\/index.php\/metodo-club-free-style-bjj\/\">El m\u00e9todo<\/a><a href=\"\/index.php\/salesianos-paseo\/\">La sede<\/a><a href=\"\/index.php\/campeonatos\/\">Campeonatos<\/a><a href=\"\/index.php\/contacto\/\">Contacto<\/a><\/nav><a class=\"n-button n-nav-cta\" href=\"\/index.php\/contacto\/\">Ven a probar <span aria-hidden=\"true\">\u2197<\/span><\/a><details class=\"n-mobile-menu\"><summary>Men\u00fa <span aria-hidden=\"true\">\uff0b<\/span><\/summary><nav aria-label=\"Navegaci\u00f3n m\u00f3vil\"><a href=\"\/index.php\/programa-por-edades\/\">Programas<\/a><a href=\"\/index.php\/metodo-club-free-style-bjj\/\">El m\u00e9todo<\/a><a href=\"\/index.php\/salesianos-paseo\/\">La sede<\/a><a href=\"\/index.php\/campeonatos\/\">Campeonatos<\/a><a href=\"\/index.php\/contacto\/\">Contacto<\/a><a href=\"\/index.php\/adultos-gi-nogi-madrid\/\">Horarios de adultos<\/a><a href=\"\/index.php\/salesianos-paseo-infantiles\/\">Infantil y Primaria<\/a><a href=\"\/index.php\/salesianos-paseo-eso-bachiller\/\">ESO y Bachiller<\/a><a href=\"\/index.php\/mujeres-bjj-madrid\/\">Mujeres y BJJ<\/a><\/nav><\/details><\/div><\/header><main id=\"club-content\"><section class=\"fs-page-hero\" style=\"--fs-hero-bg:url('https:\/\/clubfreestylebjj.com\/wp-content\/uploads\/2026\/06\/club-free-style-bjj-community-ultra-2400x1080-1.webp')\"><div class=\"fs-wrap\"><div class=\"fs-breadcrumb\">Tienda<\/div><h1>Material recomendado por el club.<\/h1><p>Marcas, kimonos, rashguards y complementos orientativos para entrenar con criterio antes de comprar.<\/p><div class=\"fs-actions\"><a class=\"fs-btn fs-gold\" href=\"mailto:info@clubfreestylebjj.com?subject=Consulta%20tienda%20Club%20Free%20Style%20BJJ\">Enviar email<\/a><a class=\"fs-btn fs-ghost\" href=\"https:\/\/wa.me\/34681990446\" target=\"_blank\" rel=\"noopener\">Hablar por WhatsApp<\/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-adults-handshake-1600x950-1.webp\" alt=\"Entrenamiento de BJJ y equipacion del club\"><\/div><div><span class=\"fs-section-label\">Confianza<\/span><h2>Primero confianza, despu\u00e9s venta.<\/h2><p>Te ayudamos a elegir qu\u00e9 necesitas para empezar, cu\u00e1ndo renovar el kimono y qu\u00e9 complementos son \u00fatiles para tu entrenamiento.<\/p><div class=\"fs-note\">Antes de comprar, consulta el material y la talla adecuados para tu grupo.<\/div><p class=\"fs-split-detail\">La selecci\u00f3n parte del uso real: material que protege, talla que permite moverse y opciones que duran m\u00e1s all\u00e1 de las primeras semanas de entrenamiento.<\/p><\/div><\/div><\/section>\n<section class=\"fs-section fs-shop-recommended-brands\" id=\"fs-shop-recommended-brands\" data-structure=\"tienda-completa\" style=\"background:#f4f0e8!important\">\n\n<div class=\"fs-wrap\">\n<div class=\"fs-shop-brand-head\">\n<div>\n<div class=\"fs-breadcrumb\">Marcas recomendadas por Club Free Style BJJ<\/div>\n<span class=\"fs-section-label\">Equipaci\u00f3n<\/span><h2 style=\"color:#111!important;text-shadow:none!important\">Equipaci\u00f3n y complementos con criterio.<\/h2>\n<\/div>\n<p style=\"color:#4d453c!important;text-shadow:none!important\">Selecci\u00f3n directa de marcas y proveedores para kimonos, rashguards, cinturones, protecciones, complementos y material de apoyo. Cada tarjeta abre la web oficial de la marca.<\/p>\n<\/div>\n<div class=\"fs-shop-brand-grid\">\n<a class=\"fs-shop-brand-card is-gold\" href=\"https:\/\/eu.tatamifightwear.com\/\" target=\"_blank\" rel=\"noopener\">\n<div class=\"fs-shop-brand-logo is-light\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/eu.tatamifightwear.com\/cdn\/shop\/files\/Tatami-T-Logo-BLACK_2.png?height=628&amp;pad_color=fff&amp;v=1664896682&amp;width=1200\" alt=\"Logo oficial Tatami Fightwear\"><\/div>\n<div class=\"fs-shop-brand-body\">\n<span class=\"fs-shop-brand-tag\">Kimonos, rashguards y ropa BJJ<\/span>\n<h3>Tatami Fightwear<\/h3>\n<p>Referencia fuerte para kimono de entrenamiento, no-gi y material t\u00e9cnico de uso diario.<\/p>\n<div class=\"fs-shop-brand-meta\"><span>Uso recomendado<\/span><strong>Gi, no-gi y equipaci\u00f3n base<\/strong><\/div>\n<span class=\"fs-shop-brand-cta\">Abrir web oficial<\/span>\n<\/div>\n<\/a>\n<a class=\"fs-shop-brand-card is-blue\" href=\"https:\/\/es.venum.com\/\" target=\"_blank\" rel=\"noopener\">\n<div class=\"fs-shop-brand-logo is-light\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/es.venum.com\/cdn\/shop\/files\/LOGO-VENUM-FULL_1_190x.png?v=1685449846\" alt=\"Logo oficial Venum\"><\/div>\n<div class=\"fs-shop-brand-body\">\n<span class=\"fs-shop-brand-tag\">Fightwear, protecciones y complementos<\/span>\n<h3>Venum<\/h3>\n<p>Buena opci\u00f3n para rashguards, ropa t\u00e9cnica, protecciones y accesorios de deportes de contacto.<\/p>\n<div class=\"fs-shop-brand-meta\"><span>Uso recomendado<\/span><strong>No-gi, striking y accesorios<\/strong><\/div>\n<span class=\"fs-shop-brand-cta\">Abrir web oficial<\/span>\n<\/div>\n<\/a>\n<a class=\"fs-shop-brand-card is-black\" href=\"https:\/\/www.buddhafightwear.com\/\" target=\"_blank\" rel=\"noopener\">\n<div class=\"fs-shop-brand-logo is-dark\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.buddhafightwear.com\/cdn\/shop\/files\/logofb_1200x1200.jpg?v=1734690101\" alt=\"Logo oficial Buddha Fightwear\"><\/div>\n<div class=\"fs-shop-brand-body\">\n<span class=\"fs-shop-brand-tag\">BJJ, MMA y deportes de contacto<\/span>\n<h3>Buddha Fightwear<\/h3>\n<p>Marca cercana con catalogo amplio para Jiu-Jitsu, MMA, boxeo y material de entrenamiento.<\/p>\n<div class=\"fs-shop-brand-meta\"><span>Uso recomendado<\/span><strong>Kimonos, guantes y protecciones<\/strong><\/div>\n<span class=\"fs-shop-brand-cta\">Abrir web oficial<\/span>\n<\/div>\n<\/a>\n<a class=\"fs-shop-brand-card is-gold\" href=\"https:\/\/nklbudo.com.es\/\" target=\"_blank\" rel=\"noopener\">\n<div class=\"fs-shop-brand-logo is-dark\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/clubfreestylebjj.com\/wp-content\/uploads\/2026\/06\/club-free-style-bjj-nkl-budo-logo-1782075295904.png\" alt=\"Logo oficial NKL Budo Shop\"><\/div>\n<div class=\"fs-shop-brand-body\">\n<span class=\"fs-shop-brand-tag\">Budo, cinturones y material base<\/span>\n<h3>NKL Budo Shop<\/h3>\n<p>Proveedor \u00fatil para primeras compras, cinturones, protecciones y material general de artes marciales.<\/p>\n<div class=\"fs-shop-brand-meta\"><span>Uso recomendado<\/span><strong>Equipaci\u00f3n inicial y reposici\u00f3n<\/strong><\/div>\n<span class=\"fs-shop-brand-cta\">Abrir web oficial<\/span>\n<\/div>\n<\/a>\n<a class=\"fs-shop-brand-card is-blue\" href=\"https:\/\/www.decathlon.es\/es\/deportes\/jiu-jitsu\/kimonos\" target=\"_blank\" rel=\"noopener\">\n<div class=\"fs-shop-brand-logo is-light\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.decathlon.media\/app\/fo-html\/vues\/commun\/img\/commun\/logo-decathlon.svg\" alt=\"Logo oficial Decathlon Jiu-Jitsu\"><\/div>\n<div class=\"fs-shop-brand-body\">\n<span class=\"fs-shop-brand-tag\">Kimonos basicos y primeras compras<\/span>\n<h3>Decathlon Jiu-Jitsu<\/h3>\n<p>Opci\u00f3n accesible para empezar, resolver necesidades basicas y comparar tallas antes de invertir mas.<\/p>\n<div class=\"fs-shop-brand-meta\"><span>Uso recomendado<\/span><strong>Inicio, familias y material sencillo<\/strong><\/div>\n<span class=\"fs-shop-brand-cta\">Abrir web oficial<\/span>\n<\/div>\n<\/a>\n<a class=\"fs-shop-brand-card is-black\" href=\"https:\/\/shoyoroll.com\/\" target=\"_blank\" rel=\"noopener\">\n<div class=\"fs-shop-brand-logo is-light\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/shoyoroll.com\/cdn\/shop\/files\/syr_logo.png?v=1715179288\" alt=\"Logo oficial Shoyoroll\"><\/div>\n<div class=\"fs-shop-brand-body\">\n<span class=\"fs-shop-brand-tag\">Kimonos premium y ediciones<\/span>\n<h3>Shoyoroll<\/h3>\n<p>Marca premium para quien busca gi cuidado, colecciones especiales y construcci\u00f3n de alto nivel.<\/p>\n<div class=\"fs-shop-brand-meta\"><span>Uso recomendado<\/span><strong>Gi premium y colecci\u00f3n<\/strong><\/div>\n<span class=\"fs-shop-brand-cta\">Abrir web oficial<\/span>\n<\/div>\n<\/a>\n<a class=\"fs-shop-brand-card is-gold\" href=\"https:\/\/kingzeurope.com\/en-eu\" target=\"_blank\" rel=\"noopener\">\n<div class=\"fs-shop-brand-logo is-light\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/kingzeurope.com\/cdn\/shop\/files\/KINGZ-EUROPE-LOGO-1_440x_d75ece65-cf15-4a5d-97be-ba6bd4423eb2.png?v=1738755446&amp;width=1280\" alt=\"Logo oficial Kingz Europe\"><\/div>\n<div class=\"fs-shop-brand-body\">\n<span class=\"fs-shop-brand-tag\">Kimonos, rashguards y gear premium<\/span>\n<h3>Kingz Europe<\/h3>\n<p>Muy buena referencia para kimonos de calidad, rashguards y equipaci\u00f3n t\u00e9cnica para entrenamiento serio.<\/p>\n<div class=\"fs-shop-brand-meta\"><span>Uso recomendado<\/span><strong>Entrenamiento constante y competici\u00f3n<\/strong><\/div>\n<span class=\"fs-shop-brand-cta\">Abrir web oficial<\/span>\n<\/div>\n<\/a>\n<a class=\"fs-shop-brand-card is-blue\" href=\"https:\/\/www.koral.com.br\/\" target=\"_blank\" rel=\"noopener\">\n<div class=\"fs-shop-brand-logo is-dark\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/images.tcdn.com.br\/img\/img_prod\/1341282\/1735217930_logogotipo_horizontal_colorido_para_fundo_preto.png\" alt=\"Logo oficial Koral Fight Co.\"><\/div>\n<div class=\"fs-shop-brand-body\">\n<span class=\"fs-shop-brand-tag\">Kimonos brasilenos y competici\u00f3n<\/span>\n<h3>Koral Fight Co.<\/h3>\n<p>Tradici\u00f3n brasilena para Jiu-Jitsu, con kimonos y equipaci\u00f3n enfocada a entrenamiento y competici\u00f3n.<\/p>\n<div class=\"fs-shop-brand-meta\"><span>Uso recomendado<\/span><strong>Gi clasico y material BJJ<\/strong><\/div>\n<span class=\"fs-shop-brand-cta\">Abrir web oficial<\/span>\n<\/div>\n<\/a>\n<a class=\"fs-shop-brand-card is-black\" href=\"https:\/\/customfighter.es\/78-jiu-jitsugrappling\" target=\"_blank\" rel=\"noopener\">\n<div class=\"fs-shop-brand-logo is-light\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/customfighter.es\/stupload\/stthemeeditor\/30ba78b0b2f03b5efcdea5cc860d8bdd.png\" alt=\"Logo oficial Custom Fighter\"><\/div>\n<div class=\"fs-shop-brand-body\">\n<span class=\"fs-shop-brand-tag\">Jiu-Jitsu, grappling y complementos<\/span>\n<h3>Custom Fighter<\/h3>\n<p>Catalogo practico para cinturones, protecciones, accesorios y material especifico de grappling.<\/p>\n<div class=\"fs-shop-brand-meta\"><span>Uso recomendado<\/span><strong>Accesorios y reposici\u00f3n<\/strong><\/div>\n<span class=\"fs-shop-brand-cta\">Abrir web oficial<\/span>\n<\/div>\n<\/a>\n<a class=\"fs-shop-brand-card is-gold\" href=\"https:\/\/www.daruma-greenstore.com\/\" target=\"_blank\" rel=\"noopener\">\n<div class=\"fs-shop-brand-logo is-light\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/clubfreestylebjj.com\/wp-content\/uploads\/2026\/06\/club-free-style-bjj-daruma-green-store-logo-1782075295904.webp\" alt=\"Logo oficial Daruma Green Store\"><\/div>\n<div class=\"fs-shop-brand-body\">\n<span class=\"fs-shop-brand-tag\">Hemp gis y material sostenible<\/span>\n<h3>Daruma Green Store<\/h3>\n<p>Opci\u00f3n sostenible para gis de canamo, rashguards de bambu y material responsable para el tatami.<\/p>\n<div class=\"fs-shop-brand-meta\"><span>Uso recomendado<\/span><strong>Compra consciente y material eco<\/strong><\/div>\n<span class=\"fs-shop-brand-cta\">Abrir web oficial<\/span>\n<\/div>\n<\/a>\n<\/div>\n<\/div>\n<\/section>\n<section class=\"fs-section fs-band\" data-structure=\"contacto-maps\"><div class=\"fs-wrap fs-split\"><div><span class=\"fs-section-label\">Contacto<\/span><h2>Contacto.<\/h2><p>Escr\u00edbenos para clase de prueba, grupos y dudas de matr\u00edcula.<\/p><div class=\"fs-actions\"><a class=\"fs-btn fs-gold\" href=\"https:\/\/wa.me\/34681990446\" target=\"_blank\" rel=\"noopener\">Hablar por WhatsApp<\/a><a class=\"fs-btn fs-ghost\" href=\"mailto:info@clubfreestylebjj.com\">Enviar email<\/a><\/div><\/div><div><h2>Maps.<\/h2><p>Consulta la ruta antes de venir al centro y confirma siempre el horario con el club.<\/p><div class=\"fs-actions\"><a class=\"fs-btn\" href=\"https:\/\/www.google.com\/maps\/place\/Club+Free+Style+BJJ+%C2%B7+Salesianos+Paseo\/@40.410431,-3.7339709,17z\/data=!3m2!4b1!5s0xd4227fd3b68dfb5:0x1e936af599d3b064!4m6!3m5!1s0xd42276a73514251:0xd20e7cc5ce40897e!8m2!3d40.410431!4d-3.7339709!16s%2Fg%2F11svnk_hv8\" target=\"_blank\" rel=\"noopener\">Abrir Google Maps<\/a><\/div><\/div><\/div><\/section><\/main><footer class=\"n-footer\"><div class=\"n-wrap n-footer-grid\"><div><a class=\"n-footer-name\" href=\"\/\">FREE STYLE BJJ<span>Un club. Muchas formas de crecer.<\/span><\/a><p>Jiu-Jitsu brasile\u00f1o en Salesianos Paseo.<br>Puerta del \u00c1ngel, Madrid.<\/p><a href=\"https:\/\/www.instagram.com\/free_style_bjj\/\" target=\"_blank\" rel=\"noopener\">Instagram \u2197<\/a><\/div><div><h2>Entrena con nosotros<\/h2><a href=\"\/index.php\/clases-adultos-bjj-madrid\/\">Adultos \u00b7 Gi y No-Gi<\/a><a href=\"\/index.php\/salesianos-paseo-infantiles\/\">Infantil y Primaria<\/a><a href=\"\/index.php\/salesianos-paseo-eso-bachiller\/\">ESO y Bachiller<\/a><a href=\"\/index.php\/mujeres-bjj-madrid\/\">Mujeres y BJJ<\/a><a href=\"\/index.php\/personal-y-familiares-salesianos-paseo\/\">Personal y familiares<\/a><\/div><div><h2>Conoce el club<\/h2><a href=\"\/index.php\/metodo-club-free-style-bjj\/\">Nuestro m\u00e9todo<\/a><a href=\"\/index.php\/faq-familias-bjj\/\">Preguntas frecuentes<\/a><a href=\"\/index.php\/seguridad-higiene-jiu-jitsu\/\">Seguridad e higiene<\/a><a href=\"\/index.php\/campeonatos\/\">Calendario de campeonatos<\/a><a href=\"\/index.php\/tienda\/\">Material para entrenar<\/a><\/div><div><h2>Nos vemos en el tatami<\/h2><p>Cabello Lapiedra 4<br>28011 Madrid<\/p><a href=\"https:\/\/www.google.com\/maps\/place\/Club+Free+Style+BJJ+%C2%B7+Salesianos+Paseo\/@40.410431,-3.7339709,17z\/data=!3m2!4b1!5s0xd4227fd3b68dfb5:0x1e936af599d3b064!4m6!3m5!1s0xd42276a73514251:0xd20e7cc5ce40897e!8m2!3d40.410431!4d-3.7339709!16s%2Fg%2F11svnk_hv8\" target=\"_blank\" rel=\"noopener\">C\u00f3mo llegar \u2197<\/a><a href=\"tel:+34681990446\">+34 681 990 446<\/a><a href=\"mailto:info@clubfreestylebjj.com\">info@clubfreestylebjj.com<\/a><\/div><\/div><div class=\"n-wrap n-footer-bottom\"><span>\u00a9 2026 Club Free Style BJJ<\/span><a href=\"\/index.php\/politica-de-privacidad\/\">Pol\u00edtica de privacidad<\/a><span>Respeto dentro y fuera del tatami.<\/span><\/div><\/footer><\/div><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 el club\"]\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\"];\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 el club\"]};\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\"]};\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><\/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><\/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>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<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>","protected":false},"excerpt":{"rendered":"<p>Equipaci\u00f3n de Jiu-Jitsu recomendada por el club: kimonos, rashguards y complementos con criterio. Marcas de confianza para entrenar mejor.<\/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":"hide","_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-6980","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/clubfreestylebjj.com\/index.php\/wp-json\/wp\/v2\/pages\/6980","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=6980"}],"version-history":[{"count":0,"href":"https:\/\/clubfreestylebjj.com\/index.php\/wp-json\/wp\/v2\/pages\/6980\/revisions"}],"wp:attachment":[{"href":"https:\/\/clubfreestylebjj.com\/index.php\/wp-json\/wp\/v2\/media?parent=6980"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}