{"id":5178,"date":"2025-08-06T15:27:14","date_gmt":"2025-08-06T20:27:14","guid":{"rendered":"https:\/\/itishoemath.com\/?p=5178"},"modified":"2025-10-17T10:18:46","modified_gmt":"2025-10-17T15:18:46","slug":"0125-subir-de-nivel-o-quedarse-atascado-auto-maximizar","status":"publish","type":"post","link":"https:\/\/itishoemath.com\/es_es\/0125-subir-de-nivel-o-quedarse-atascado-auto-maximizar\/","title":{"rendered":"Subir de nivel o quedarse estancado: Auto-Maximize"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"5178\" class=\"elementor elementor-5178\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-97dd7a3 e-flex e-con-boxed e-con e-parent\" data-id=\"97dd7a3\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ce1c704 elementor-widget elementor-widget-html\" data-id=\"ce1c704\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h4>El sistema de automaximizaci\u00f3n que todo hombre necesita ver<\/h4>\n\n\u00bfListo para mejorar tu juego de citas y toda tu vida? Este es Self-Maximize, un mapa mental brutalmente honesto que me llev\u00f3 de ser gorda, arruinada e invisible a ser un \"ocho\" con opciones que la mayor\u00eda de los hombres...<!--preview--> s\u00f3lo sue\u00f1an. Pero, aqu\u00ed est\u00e1 la parte que nadie quiere admitir: la mayor\u00eda de los hombres (y mujeres) fracasan porque ignoran la retroalimentaci\u00f3n que la vida les est\u00e1 gritando.\n<br><br>\nTodo el mundo habla de \"ser uno mismo\" o de \"ser amable\". Error. Las citas modernas son implacables. Si no mejoras activamente -f\u00edsica, moda, confianza y forma de actuar- te quedar\u00e1s estancado, repitiendo sin cesar los mismos errores. \u00bfQuieres saber por qu\u00e9 sigues en la misma liga de citas? Te describo los 7 pasos para ascender r\u00e1pidamente, adem\u00e1s de todos los errores de novato que siguen cometiendo chicos y chicas.\n<br><br>\nLo sorprendente es que casi todos los hombres subestiman cu\u00e1nto valoran las mujeres la apariencia y la presencia, mientras que las mujeres no se dan cuenta de que su propia \"categor\u00eda de citas\" apenas se mueve por mucho que lo intenten. Lo desmenuzo todo: la lista de comprobaci\u00f3n, la mentalidad, c\u00f3mo construir el poder, c\u00f3mo convertirse realmente en lo que el sexo opuesto quiere. Deja de culpar a la suerte. Empieza a maximizarte a ti mismo.\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8858505 elementor-widget elementor-widget-html\" data-id=\"8858505\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<p> <\/p>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4860eef elementor-widget elementor-widget-html\" data-id=\"4860eef\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- CSV for video links and summaries -->\n<!-- Header: Not Translated -->\n<script id=\"video-data-header\" type=\"text\/plain\">\ntime|stop|tab|title|description\n<\/script>\n<div id=\"tp-translatable-strings2\"\n     style=\"color:#000101; background:#000101; width:100vw; height:auto; position:static; z-index:1; font-size:1px;\">\n<pre id=\"video-data-rows\">\n0|56|Introducci\u00f3n|Mapa Mental de Auto-Maximizaci\u00f3n|Se presenta un mapa mental para ayudar a los individuos a reflexionar sobre s\u00ed mismos y mejorarse a s\u00ed mismos, particularmente en t\u00e9rminos de valor en el mercado de citas, basado en el viaje personal del creador desde un valor autopercibido bajo a uno alto.  \n56|120|Teor\u00eda|Teor\u00eda Integral y Conciencia|El enfoque de auto-maximizaci\u00f3n se basa en parte en la Teor\u00eda Integral, simplificada para su uso pr\u00e1ctico, y enfatiza el poder de la conciencia y el cambio de la propia mente y acciones para lograr mejores resultados en la vida.  \n120|197|Proceso|Retroalimentaci\u00f3n y cambio consciente|El mapa del proceso se explica como un flujo que va de los deseos a los comportamientos y a la retroalimentaci\u00f3n del entorno, destacando d\u00f3nde suele fallar la gente al no adaptar sus acciones en funci\u00f3n de los resultados.  \n197|284|Conciencia|La importancia de la conciencia|Se critica el pensamiento de baja conciencia, especialmente en lo que se refiere al derecho o egocentrismo en las relaciones, y la necesidad de considerar lo que el mundo quiere de ti.  \n284|436|Ejemplos|Ejemplos de resistencia a la retroalimentaci\u00f3n|Varios ejemplos de la vida real ilustran c\u00f3mo la gente fracasa en la consecuci\u00f3n de sus deseos al ignorar la retroalimentaci\u00f3n y negarse a cambiar sus pensamientos o comportamientos.  \n436|564|Lista de control|Zonas y reflexi\u00f3n diaria|Se proporciona una lista de control y un mapa de siete secciones para fomentar la reflexi\u00f3n diaria y el ajuste consciente en todas las \u00e1reas de la vida, especialmente cuando los resultados son insatisfactorios.  \n564|789|Cuerpo|Mejora f\u00edsica para hombres|Se dan consejos pr\u00e1cticos para que los hombres se centren en la forma f\u00edsica, la moda, el arreglo personal y la postura como pasos fundamentales para aumentar el atractivo y el \u00e9xito.  \n789|974|Masculinidad|Masculinidad, poder y confianza|Se explica la importancia del poder, el estatus, la competencia y la confianza, con consejos sobre c\u00f3mo cultivar estos rasgos y por qu\u00e9 son importantes en contextos sociales y rom\u00e1nticos.  \n974|1175|Inversi\u00f3n|Valor e inversi\u00f3n en las relaciones|Se anima a los hombres a invertir valor, tiempo y atenci\u00f3n en las relaciones, comprendiendo la importancia de la cercan\u00eda emocional, la presentabilidad, la lealtad y el compartir recursos.  \n1175|1295|Mujeres|Auto-maximizaci\u00f3n para mujeres|Se discuten los retos y limitaciones a los que se enfrentan las mujeres en la auto-maximizaci\u00f3n, enfatizando la primac\u00eda de la apariencia y la dificultad de compensarla mediante el esfuerzo u otros rasgos.  \n1295|1435|Personalidad|Personalidad y din\u00e1mica de las relaciones|Se destaca el papel de la personalidad, la positividad, el apoyo y la salud emocional en la formaci\u00f3n de relaciones, con advertencias contra el autosabotaje y la carga emocional.  \n1435|1448|Conclusi\u00f3n|Resumen y est\u00edmulo|El v\u00eddeo concluye con un resumen del mapa de auto-maximizaci\u00f3n y el est\u00edmulo a utilizarlo para la autorreflexi\u00f3n continua y el crecimiento personal.\n\n<\/pre>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d08897e elementor-widget elementor-widget-html\" data-id=\"d08897e\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<div id=\"tp-translatable-strings5\"\n     style=\"color:#000101; background:#000101; width:100vw; height:auto; position:static; z-index:1; font-size:1px;\">\n<span id=\"hiddenText\">\n0.0 Esto es Self-Maximize, un mapa mental dise\u00f1ado para ayudarte a auto-reflexionar y auto-mejorarte, especialmente en lo que se refiere a tu valor en el mercado de las citas.\n11.0 Estoy cualificado para hablar de esto porque una vez pas\u00e9 de ser un \"cuatro\" a un \"ocho\" perdiendo 45 kilos, poni\u00e9ndome en forma, aprendiendo a vestirme, eliminando inseguridades, trabajando las habilidades sociales y mud\u00e1ndome al otro lado del pa\u00eds para perseguir mis sue\u00f1os.\n44,0 Empec\u00e9 este canal en las redes sociales, que ahora tiene millones de visitas y me apoya despu\u00e9s de s\u00f3lo siete meses.\n50,0 Lograr estas cosas me transform\u00f3 de un perdedor total en alguien con grandes opciones.\n56.0 Self-Maximize se basa parcialmente en la teor\u00eda integral, pero hice mi propia versi\u00f3n para facilitar la comprensi\u00f3n.\n65.0 El patrocinador, Shortform, te ayuda a digerir libros y art\u00edculos r\u00e1pidamente, con res\u00famenes y ejercicios.\n108.0 Para maximizarte a ti mismo, presta atenci\u00f3n a estas siete cosas en tu vida.\n111.0 Si sabes lo que quieres y puedes cambiar tu mente y tus acciones, tu mundo empezar\u00e1 a darte mejores resultados.\n120.0 El mapa es un diagrama de flujo que muestra c\u00f3mo los deseos se convierten en pensamientos y luego en comportamientos, que influyen en tu entorno y en tu vida.\n195.0 La mayor\u00eda de las personas fracasan porque no reflexionan sobre la retroalimentaci\u00f3n y cambian sus acciones, as\u00ed que este mapa te anima a pensar en lo que quieres y d\u00f3nde conseguirlo antes de actuar.\n215.0 Cada secci\u00f3n del mapa contiene preguntas y ejercicios para ayudarte a aumentar tu conciencia.\n225.0 La conciencia es importante porque mucha gente tiene una mentalidad egoc\u00e9ntrica de baja conciencia, como esperar gustar a los dem\u00e1s sin motivo o negarse a aportar valor.\n260.0 Mucha gente quiere cosas pero nunca piensa en lo que el mundo quiere de ellos o en c\u00f3mo podr\u00edan proporcion\u00e1rselo.\n266.0 En resumen, maximizarse a uno mismo significa no centrarse s\u00f3lo en las propias necesidades: convertirse en lo que los dem\u00e1s buscan y buscar personas dispuestas a ser eso para uno.\n286.0 No puedes hacer que le gustes a la gente; s\u00f3lo tienes que ser lo que les gusta.\n293.0 Por ejemplo, me puse en forma pero no gan\u00e9 mucho dinero hasta hace poco, as\u00ed que las mujeres entraban y sal\u00edan de mi vida: ten\u00eda rasgos atractivos pero no fiables.\n319,0 Otro ejemplo: Ten\u00eda un amigo ruso que quer\u00eda perder su acento pero no segu\u00eda las indicaciones, as\u00ed que nunca cambi\u00f3.\n349,0 Un admirador vino a pedirme consejo sobre por qu\u00e9 la gente pensaba que era \"fruy\", pero desestim\u00f3 todas las sugerencias y mantuvo el problema.\n379.0 Conoc\u00ed a una chica que se quejaba de que los hombres en Tinder eran demasiado atrevidos, pero su perfil estaba lleno de fotos en bikini y no quiso aceptar los comentarios.\n401.0 En todos estos casos, la gente quer\u00eda algo pero se resist\u00eda a cambiar su comportamiento, por lo que segu\u00edan obteniendo los mismos resultados.\n420.0 El mapa y la lista de comprobaci\u00f3n est\u00e1n aqu\u00ed para recordarte que no hagas eso: piensa en las siete secciones cada d\u00eda, tanto si consigues lo que quieres como si no.\n436.0 Si tienes un problema, averigua qu\u00e9 es lo que tienes que cambiar de ti mismo.\n444.0 Cuando creo contenido, pienso en lo que quiero que haga y a qui\u00e9n se lo voy a mostrar, y luego lo ajusto en funci\u00f3n de los comentarios.\n460.0 Este proceso de autodise\u00f1o se aplica a todos los aspectos de la vida.\n464.0 Puedes descargarte el mapa gratis o comprar el paquete; piensa en \u00e9l como una mini sesi\u00f3n de coaching personal.\n474.0 Preg\u00fantese: \u00bfQu\u00e9 estoy haciendo que llene estas casillas para la persona que estoy buscando?\n480.0 Esta es mi lista de lo que los hombres y mujeres promedio necesitan mejorar; podr\u00eda hacer videos para cada \u00e1rea.\n487.0 \"S\u00e9 amable\" y \"s\u00e9 t\u00fa mismo\" son los peores consejos para los hombres modernos; la mayor\u00eda necesita empezar por el cuerpo y la masculinidad.\n501.0 El aspecto m\u00e1s importante de la atracci\u00f3n es el f\u00edsico: hay que estar en forma, vestir bien, actuar correctamente y cuidarse.\n520,0 No tengo fotos del antes, pero ponerme en forma me hizo pasar de una categor\u00eda de mujeres a otra.\n533,0 La mayor\u00eda de los hombres subestiman lo mucho que les gusta a las mujeres tener un buen cuerpo: probablemente m\u00e1s que a los hombres.\n541.0 Despu\u00e9s de cambiar de mentalidad, dieta y ejercicio, mis mismos comportamientos obtuvieron resultados mucho mejores con las mismas mujeres.\n557.0 Esta lista de comprobaci\u00f3n son mis notas sobre lo que probablemente necesitas mejorar primero.\n564.0 Estar en forma es s\u00faper importante; si lo est\u00e1s ignorando, deja de hacerlo.\n575.0 La mayor\u00eda de los hombres deber\u00edan desarrollar m\u00fasculo y perder grasa: a las mujeres les encanta que est\u00e9s fuerte.\n582.0 Lo siguiente es la moda: si te vistes mal, piensa en c\u00f3mo te ven los dem\u00e1s.\n590.0 V\u00edstete adecuadamente para lo que haces; aseg\u00farate de que tu ropa te queda bien y combina.\n621.0 Expresivo significa a\u00f1adir un toque de tu propia personalidad -encuentra lo que funciona para ti, pero no te sabotees con \"camisas de idiota\" o \"gafas de autista\".\n654.0 Ten en cuenta lo que muestras a la gente, c\u00f3mo reaccionan y qu\u00e9 puedes cambiar.\n664.0 Los modales importan: p\u00e1rate derecho, habla como un hombre y deja de hacer cosas asquerosas o molestas.\n676.0 Tuve un cliente alto e inteligente que era demasiado excitable y hablaba demasiado r\u00e1pido; a las chicas no les gusta eso.\n694.0 Otro tipo hablaba con una inflexi\u00f3n hacia arriba; cuando lo arregl\u00f3, las cosas mejoraron.\n698,0 Utilic\u00e9 una c\u00e1mara para comprobar mi postura y la correg\u00ed.\n705.0 El aseo personal necesita su propio v\u00eddeo, pero el corte de pelo y el vello facial deben adaptarse a la cara.\n731.0 La higiene es fundamental: no dejes nada al azar, como hacen las mujeres.\n761.0 Cada vez que salgas, d\u00fachate, p\u00e9inate, cep\u00edllate los dientes, ponte ropa limpia, usa desodorante y lleva chicle.\n771.0 Si no haces eso, probablemente hueles mal, y por eso puede que no le gustes a la gente.\n779.0 Si te pones en forma, te vistes bien, te mantienes erguido, hablas con seguridad y te mantienes fresco, resolver\u00e1s muchos problemas.\n793.0 Ahora bien, masculinidad, competencia y confianza: una vez que tienes buen aspecto y hueles bien, tienes que actuar como un hombre.\n803,0 El poder es un afrodis\u00edaco: tu capacidad para hacer que las cosas sucedan o para impedir que sucedan.\n818.0 Hoy en d\u00eda, los hombres no pueden conseguir poder a trav\u00e9s del dinero tan f\u00e1cilmente, pero el dinero sigue siendo importante.\n837.0 El poder consiste en hacer que las cosas salgan como uno quiere. Para m\u00e1s informaci\u00f3n, lea \"Las 48 leyes del poder\".\n850.0 Cuando puse en pr\u00e1ctica estos principios, la gente empez\u00f3 a darme lo que quer\u00eda.\n857.0 El estatus, el respeto, la importancia y el dominio forman parte de la jerarqu\u00eda: las mujeres no quieren hombres de estatus bajo.\n866.0 Si no puedes llegar a la cima de un grupo, busca un grupo donde s\u00ed puedas.\n873.0 Las mujeres dicen que quieren igualdad, pero siguen jerarquizando a los hombres.\n880.0 Con estatus, har\u00e1s que los d\u00e9biles se sientan inseguros y tendr\u00e1s amigos poderosos.\n885.0 Ser un lobo solitario o simplemente un buen tipo no te llevar\u00e1 a ninguna parte.\n890.0 Habilidades: s\u00e9 bueno en algo que ella valore; a las mujeres les gusta esto m\u00e1s que ser bueno en videojuegos.\n902.0 No cuentes con habilidades de nicho para ser atractivo; apela a lo que la mayor\u00eda de las mujeres quiere.\n918.0 Para tener confianza, ten marco y presencia; marco significa decidir lo que va a pasar y atenerse a ello, pero tambi\u00e9n aportarle lo que ella quiere.\n930.0 No puedes limitarte a mandonearla, tienes que mejorar su vida sin ped\u00edrselo siempre.\n941.0 La presencia es el grado en que te haces notar en las interacciones; una mala presencia es estar cohibido o aislado en tu propio mundo.\n957.0 Los hombres de alto estatus proyectan confianza y hacen que las cosas sucedan, mostrando a las mujeres que las cosas buenas suceder\u00e1n si ellos est\u00e1n cerca.\n966.0 La masculinidad consiste en crear lo que quieres, evitar lo que no quieres y demostrar que eres el tipo que \"hace que las cosas sucedan\".\n974.0 \u00c9se es el eje del \"chico malo\": parecer bueno y hacer que ocurran cosas buenas.\n978.0 Una vez que eres popular, tienes que tratar bien a las mujeres para conservarlas: invierte valor, ten buen aspecto, haz que ella se vea bien y adapta tu vida a sus necesidades.\n992.0 La \"galaxia de bonos\" son todas las peque\u00f1as cosas que tienes o que te ocurren, no necesariamente qui\u00e9n eres.\n999.0 La inversi\u00f3n es todo lo que le das: tiempo, dinero, atenci\u00f3n, energ\u00eda.\n1016,0 La atenci\u00f3n son los elogios y el aprecio: haz que se sienta como una estrella.\n1030.0 El dinero importa: cuanto m\u00e1s tenga, m\u00e1s se quedar\u00e1.\n1040.0 La energ\u00eda es el empuje que le das a la relaci\u00f3n; no puedes estar siempre ocupado y esperar que funcione.\n1052.0 La cercan\u00eda emocional significa compartir cosas profundas, no ser d\u00e9bil ni llorar.\n1070.0 La presentabilidad es tu reputaci\u00f3n y lo bien que la haces quedar, como la versi\u00f3n buena del estatus.\n1081.0 El estatus es lo mucho que la gente te necesita para tener poder; la presentabilidad es lo simp\u00e1tico que eres; lo mejor es tener ambas cosas, pero es mejor que te teman a que te quieran si no puedes ser ambas cosas.\n1115.0 La lealtad es lo mucho que ella cree que est\u00e1s guardando tu inversi\u00f3n para ella; no te aferres a viejas relaciones.\n1133.0 Conc\u00e9ntrate en ella en el presente; no quiere verte invirtiendo en otras chicas.\n1140.0 La galaxia de la bonificaci\u00f3n tiene que ver con cosas a las que tienes acceso, como d\u00f3nde vives, que puede importar mucho a las mujeres.\n1159.0 Los hombres pueden hacer mucho para maximizarse a s\u00ed mismos: tener mejor aspecto, hacer que las cosas sucedan y compartir tus cosas.\n1175.0 Para las mujeres, maximizarse a s\u00ed mismas es m\u00e1s dif\u00edcil: la mayor\u00eda de las cosas que pueden hacer los hombres no dan puntos a las mujeres, por lo que el feminismo no funciona de la misma manera.\n1204.0 Para las mujeres, el aspecto es lo m\u00e1s importante; tu aspecto pone un l\u00edmite duro a la categor\u00eda en la que te colocan los hombres.\n1223.0 Los hombres pueden compensar su aspecto con esfuerzo; las mujeres, por lo general, no.\n1232.0 Cada hombre valora las cosas de forma diferente, pero si un hombre piensa que eres un cuatro, nunca pasar\u00e1s de ah\u00ed, hagas lo que hagas.\n1255.0 Las mujeres deber\u00edan empezar con hombres que les gusten y luego descartar a los que no les gusten, en lugar de perseguir a hombres que nunca se esforzar\u00e1n.\n1267.0 Perseguir a los hombres equivocados mantiene a las mujeres estancadas durante a\u00f1os sin posibilidad de salir de esa categor\u00eda.\n1274.0 La modestia es importante para las mujeres; la moda no suele ser un problema a menos que est\u00e9s semidesnuda en p\u00fablico.\n1282.0 Para los hombres, la lealtad consiste en invertir; para las mujeres, la pureza consiste en reservar tu cuerpo para \u00e9l.\n1292.0 Tu cuerpo es la parte m\u00e1s importante de la atracci\u00f3n, pero tu personalidad es la parte m\u00e1s importante para formar una relaci\u00f3n.\n1298.0 Ser interesante significa tener algo m\u00e1s que ofrecer que la apariencia o el maquillaje; la mayor\u00eda de las mujeres no pueden salirse con la suya sin aportar nada m\u00e1s.\n1323.0 Las mujeres no necesitan necesariamente habilidades, pero deben ser capaces de hablar de cosas que les gusten a los hombres.\n1334.0 Ser positiva importa: muchas mujeres modernas creen que es admirable ser dif\u00edcil, pero eso es autosabotaje.\n1354.0 La mayor\u00eda de los hogares tienen dos ingresos; madura y as\u00famelo.\n1372.0 El apoyo es esencial; tratar a tu hombre como si no lo mereciera es autosabotaje.\n1393.0 Las mujeres modernas creen que negar el apoyo es fuerte, pero en realidad es lo que buscan los hombres.\n1402.0 Muchas mujeres descargan el da\u00f1o emocional de relaciones pasadas en sus nuevas parejas y se niegan a asumir su responsabilidad.\n1414.0 No ignore estas cosas: utilice el mapa para autorreflexionar.\n1421.0 La pureza se mide por la probabilidad de que ocurra algo como el enga\u00f1o: el material de esposa no tiene que ver con lo que llevas puesto, y nadie quiere que su mujer vista de forma provocativa.\n1438.0 Te he dado un mapa de lo que busca la gente, un mapa de tus deseos y decisiones, y una estructura para empezar a cambiarlos.\n1446.0 Estoy impaciente por ver mis comentarios.\n<\/span>\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-eddabf7 elementor-widget elementor-widget-html\" data-id=\"eddabf7\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<script>\n\/\/ 1. Define which video to play for each language:\nconst videoMap = {\n    en: { type: \"youtube\", id: \"hREY1FJmqpU\" },\n  es: { type: \"youtube\", id: \"kAkkFQETsEs\" }, \n  fr: { type: \"youtube\", id: \"rowR1J6xNa0\" },\n  ja: { type: \"youtube\", id: \"haI7s5qzBOA\" },\n  pt: { type: \"youtube\", id: \"8tOKVbmlJ6Y\" } \n};\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-a010ab1 e-flex e-con-boxed e-con e-parent\" data-id=\"a010ab1\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4c437ca elementor-widget elementor-widget-template\" data-id=\"4c437ca\" data-element_type=\"widget\" data-widget_type=\"template.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-template\">\n\t\t\t\t\t<div data-elementor-type=\"section\" data-elementor-id=\"3172\" class=\"elementor elementor-3172\" data-elementor-post-type=\"elementor_library\">\n\t\t\t<div class=\"elementor-element elementor-element-7079b43 e-flex e-con-boxed e-con e-parent\" data-id=\"7079b43\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-800d60f elementor-widget elementor-widget-html\" data-id=\"800d60f\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\n#simplified-transcript-note {\n  display: none !important;\n}\n<\/style>\n<div id=\"simplified-transcript-note\">Las traducciones y la transcripci\u00f3n simplificada se basan en traducciones del material original, localizadas en varios idiomas. Desarrollado por PeakCreatorRoyalty.com bajo licencia con <span>h<\/span>oe_math.<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3a02ec9 elementor-widget elementor-widget-html\" data-id=\"3a02ec9\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<script>\n  \/\/ Auto-hide translation block after page load\n  window.addEventListener('DOMContentLoaded', function() {\n    for (let i = 1; i <= 5; i++) {\n      document.querySelectorAll(`[id$=\"${i}\"]`).forEach(el => {\n        el.style.display = 'none';\n      });\n    }\n  });\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f2f7b1d elementor-widget elementor-widget-html\" data-id=\"f2f7b1d\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\n  h3 {\n    margin-left: 0px; \/* Adjust as needed *\/\n    \/* Optionally add: *\/\n    text-align: left;  \n  }\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e3ade12 elementor-widget elementor-widget-html\" data-id=\"e3ade12\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- VIDEO PLAYER CONTAINER -->\n<div id=\"videoPlayerContainer\" style=\"max-width: 800px; margin: auto; text-align: center;\">\n  <!-- Video player is injected here -->\n<\/div>\n\n<!-- SCROLLING TABS & CHAPTER DETAILS -->\n<div style=\"max-width: 1000px; margin: 32px auto 0 auto;\">\n  <div id=\"chapterTabs\" class=\"chapter-tabs-scroll\">\n    <!-- Tabs will be generated by JavaScript -->\n  <\/div>\n  <!-- div id=\"chapterPlayPause\" style=\"margin:1em 0 0.5em 0;\">\n  <\/div -->\n  <div id=\"chapterPanel\" class=\"chapter-panel\">\n    <!-- Chapter text will appear here  -->\n  <\/div>\n<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-928f586 elementor-widget elementor-widget-html\" data-id=\"928f586\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- NO TOUCH Scripts -->\n<!-- Video script v1.0 -->\n<!--[wpcode id=\"1824\"] -->\n\n<script src=\"https:\/\/cdn.jsdelivr.net\/npm\/hls.js@latest\"><\/script> <!-- Include HLS.js -->\r\n\r\n<style>\r\n  .half-br {\r\n    display: block;\r\n    height: 1px;\r\n    width: 100%;\r\n    border: none;\r\n    margin: 0;\r\n    padding: 0;\r\n  }\r\n<\/style>\r\n\r\n<script>\r\n\r\nlet currentChapterIdx = 0;\r\n\t\r\nfunction getCurrentLang() {\r\n  return document.documentElement.lang ? document.documentElement.lang.substring(0,2) : 'en';\r\n}\r\n\r\n\/\/ function waitTranslate(ms=1000) {\r\n\/\/   const end = Date.now() + ms; \/\/ 100 milliseconds = 1\/10 second\r\n\/\/   while (Date.now() < end) {\r\n\/\/     \/\/ Busy-wait: blocks the main thread!\r\n\/\/   }\r\n\/\/ }\r\n\r\n\/\/ const lang = getCurrentLang();\r\n\/\/ if (lang !== \"en\") {\r\n\/\/   var marker = document.getElementById('language-marker');\r\n\/\/   if (marker) {\r\n\/\/     \/\/ You can check for known translations of the phrase\r\n\/\/     var currentLangPhrase = marker.textContent.trim();\r\n\/\/ \r\n\/\/     \/\/ Example for English vs French\r\n\/\/     if (currentLangPhrase === \"Currently English language.\") {\r\n\/\/       console.log(\"Miss, translation in progress to '\/\"+lang+\"\/', 3 second delay.\")\r\n\/\/       waitTranslate(ms=3000);\r\n\/\/     } else {\r\n\/\/       console.log(\"Hit, pre-translated page in '\/\"+lang+\"\/'.\")\r\n\/\/     }\r\n\/\/   }\r\n\/\/ } else {\r\n\/\/   console.log(\"English, no translation needed.\")\r\n\/\/ }\r\n\r\n\/* ====== CONFIGURATION SECTION ====== *\/\r\n\/\/ const BUNNY_VIDEO_LIBRARY_ID = \"vz-c02c9ec9-42b.b-cdn.net\"; \/\/ Replace with your actual Bunny Video Library ID\r\nconst BUNNY_VIDEO_LIBRARY_ID = \"vz-d8eb6cfe-1f7.b-cdn.net\"; \/\/ Replace with your actual Bunny Video Library ID\r\n\r\n\/\/ 1. Define which video to play for each language:\r\n\/\/const videoMap = {\r\n\/\/  en: { type: \"youtube\", id: \"wWrsW76bG88\" },\r\n\/\/  fr: { type: \"bunny\", id: \"fc57904c-7f56-4b36-8d13-d1d715b82e81\" }, \/\/ This is the VIDEO ID\r\n\/\/  de: { type: \"bunny\", id: \"YOUR_GERMAN_VIDEO_ID\" }                   \/\/ This is the VIDEO ID\r\n  \/\/ Add more: es, it, etc.\r\n\/\/};\r\n\r\n\/\/ 2. Define chapters for each language:\r\nfunction parseCSVFromHeaderRows(headerText, rowsText) {\r\n  const headers = headerText.trim().split('|').map(h => h.trim());\r\n  const lines = rowsText.trim().split('\\n').filter(line => line.trim().length);\r\n\r\n  return lines.map(line => {\r\n    const values = [];\r\n    \/\/ Split by |, but don't split inside quotes (simple version assumes no | inside quotes)\r\n    \/\/ If you need to handle | inside quoted fields, regex needs to be more complex\r\n    let regex = \/(\"(?:[^\"]|\"\")*\"|'(?:[^']|'')*'|[^|]+)\/g;\r\n    let match;\r\n    while ((match = regex.exec(line))) {\r\n      let value = match[0].trim();\r\n      \/\/ Remove leading and trailing single or double quotes\r\n      value = value.replace(\/^(['\"])(.*)\\1$\/, '$2');\r\n      values.push(isNaN(value) ? value : Number(value));\r\n    }\r\n    const obj = {};\r\n    headers.forEach((h, i) => { obj[h] = values[i]; });\r\n    return obj;\r\n  });\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\/\/ Parse hiddenText into [{time: number, text: string}]\r\n\/\/ Parses lines like: 12.0 Text, or * Bullet point, or 1. Numbered item\r\nfunction parseHiddenText() {\r\n  const hiddenText = document.getElementById('hiddenText')?.textContent || '';\r\n  const lines = hiddenText.split('\\n').map(line => line.trim()).filter(Boolean);\r\n  const results = [];\r\n  let lastTime = null;\r\n\r\n  for (let line of lines) {\r\n    \/\/ Match timestamps with comma or dot\r\n    let match = \/^(\\d+(?:[.,]\\d+)?)\\s+(.*)$\/.exec(line);\r\n    if (match) {\r\n      lastTime = parseFloat(match[1].replace(',', '.'));\r\n      results.push({ time: lastTime, text: match[2] });\r\n      continue;\r\n    }\r\n    \/\/ Match bullets or numbers\r\n    match = \/^(\\*|\\-|\\d+\\.)\\s+(.*)$\/.exec(line);\r\n    if (match && lastTime !== null) {\r\n      results.push({ time: lastTime, text: line });\r\n      continue;\r\n    }\r\n    if (lastTime !== null) {\r\n      results.push({ time: lastTime, text: line });\r\n    }\r\n  }\r\n  return results;\r\n}\r\n\r\n\r\n\r\n\r\nconst hiddenTextLines = parseHiddenText(); \/\/ Global for later use\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\/\/ Get the header and rows from the DOM\r\nconst csvHeader = document.getElementById('video-data-header').textContent;\r\nconst csvRows = document.getElementById('video-data-rows').textContent;\r\n\r\nconst chapterMap = {\r\n  en: parseCSVFromHeaderRows(csvHeader, csvRows)\r\n};\r\n\r\n\/\/ List of properties to process\r\nconst properties = ['tab', 'title', 'description'];\r\n\r\n\/\/ Loop through each row in chapterMap.en\r\nchapterMap.en.forEach(row => {\r\n  properties.forEach(prop => {\r\n    const val = row[prop];\r\n    if (typeof val === 'string') {\r\n      row[prop] = val.replace(\/^[\\'\\\"]+|[\\'\\\"]+$\/g, '');\r\n    }\r\n  });\r\n});\r\n\r\n\/\/ console.log(chapterMap.en); \/\/ Output objects in browser console\r\n\r\n\r\n\/* ====== END CONFIGURATION ====== *\/\r\n\r\n\/* ----- Global Player Variables ----- *\/\r\nlet ytPlayer, ytReady = false, stopTimer = null;\r\nlet hlsInstance = null; \/\/ To store the HLS.js instance\r\nlet html5VideoElement = null; \/\/ To store the HTML5 video element for Bunny\r\n\r\n\r\n\/* ----- Player and Chapters Logic ----- *\/\r\nfunction cleanupPlayers() {\r\n    \/\/ Clear existing stop timer\r\n    if (stopTimer) {\r\n        clearInterval(stopTimer);\r\n        stopTimer = null;\r\n    }\r\n\r\n    \/\/ Cleanup YouTube Player\r\n    if (ytPlayer && typeof ytPlayer.destroy === 'function') {\r\n        ytPlayer.destroy();\r\n    }\r\n    ytPlayer = null;\r\n    ytReady = false;\r\n\r\n    \/\/ Cleanup HLS.js Player\r\n    if (hlsInstance) {\r\n        hlsInstance.destroy();\r\n        hlsInstance = null;\r\n    }\r\n    html5VideoElement = null; \/\/ Clear reference\r\n\r\n    \/\/ Clear the container\r\n    const container = document.getElementById('videoPlayerContainer');\r\n    if (container) container.innerHTML = \"\";\r\n}\r\n\r\nfunction setVideoPlayer(langObj) {\r\n  cleanupPlayers(); \/\/ Ensure previous players are cleaned up\r\n\r\n  const container = document.getElementById('videoPlayerContainer');\r\n  if (!container) return;\r\n\r\n  if (langObj.type === \"youtube\") {\r\n    container.innerHTML = `<div style=\"position: relative; width: 100%; padding-top: 56.25%;\">\r\n<iframe id=\"myVideo\" style=\"position: absolute;  top: 0; left: 0; width: 100%; height: 100%;\" \r\n            src=\"https:\/\/www.youtube.com\/embed\/${langObj.id}?enablejsapi=1&rel=0&origin=${window.location.origin}\"\r\n            frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\"\r\n            allowfullscreen><\/iframe><\/div>`;\r\n    \/\/ YT API will be loaded\/re-initialized later\r\n  } else if (langObj.type === \"bunny\") {\r\n    const bunnyStreamUrl = `https:\/\/${BUNNY_VIDEO_LIBRARY_ID}\/${langObj.id}\/playlist.m3u8`;\r\n    container.innerHTML = `<video id=\"myVideo\" width=\"100%\" height=\"390\" controls playsinline poster=\"https:\/\/itishoemath.com\/wp-content\/uploads\/2025\/05\/UCsEPI9OwGEw5Lm0E7Paq62g_0003_wWrsW76bG88_en.jpg\"><\/video>`;\r\n    html5VideoElement = document.getElementById('myVideo'); \/\/ Get the new video element\r\n\r\n\tif (html5VideoElement) {\r\n        html5VideoElement.addEventListener('play', () => renderPlayPauseButton(currentChapterIdx));\r\n        html5VideoElement.addEventListener('pause', () => renderPlayPauseButton(currentChapterIdx));\r\n    }\r\n\r\n\t  \r\n    if (Hls.isSupported()) {\r\n        hlsInstance = new Hls();\r\n        hlsInstance.loadSource(bunnyStreamUrl);\r\n        hlsInstance.attachMedia(html5VideoElement);\r\n        hlsInstance.on(Hls.Events.MANIFEST_PARSED, function() {\r\n            \/\/ console.log(\"Bunny HLS: Manifest parsed and video ready.\");\r\n            \/\/ html5VideoElement.play(); \/\/ Optional: Autoplay (mind browser restrictions)\r\n        });\r\n        hlsInstance.on(Hls.Events.ERROR, function(event, data) {\r\n            \/\/ console.error('Bunny HLS Error:', data);\r\n            if (data.fatal) {\r\n                switch(data.type) {\r\n                    case Hls.ErrorTypes.NETWORK_ERROR: hlsInstance.startLoad(); break;\r\n                    case Hls.ErrorTypes.MEDIA_ERROR: hlsInstance.recoverMediaError(); break;\r\n                    default: hlsInstance.destroy(); break;\r\n                }\r\n            }\r\n        });\r\n    } else if (html5VideoElement.canPlayType('application\/vnd.apple.mpegurl')) {\r\n        \/\/ Native HLS support (e.g., Safari)\r\n        html5VideoElement.src = bunnyStreamUrl;\r\n        html5VideoElement.addEventListener('loadedmetadata', function() {\r\n            \/\/ console.log('Bunny Native HLS: Metadata loaded.');\r\n        });\r\n    } else {\r\n        \/\/ console.error('HLS is not supported in this browser for Bunny.net video.');\r\n        container.innerHTML = '<p>Sorry, HLS video playback is not supported in your browser.<\/p>';\r\n    }\r\n  }\r\n}\r\n\r\nfunction renderTabs(activeIdx, chapters) {\r\n  const tabRow = document.getElementById('chapterTabs');\r\n  tabRow.innerHTML = chapters.map((ch, i) =>\r\n    `<button class=\"chapter-tab${i === activeIdx ? \" active\" : \"\"}\" onclick=\"showChapter(${i})\">${ch.tab}<\/button>`\r\n  ).join('');\r\n}\r\n\r\n\r\n\r\n\t\r\nfunction renderPlayPauseButton(idx) {\r\n  const lang = getCurrentLang();\r\n  const chapters = chapterMap['en'];\r\n  const ch = chapters[idx];\r\n  if (!ch) return \"\";\r\n\r\n  let isPlaying = false;\r\n  const videoObj = videoMap[lang] || videoMap['en'];\r\n\r\n  if (videoObj.type === \"youtube\" && ytPlayer && ytReady) {\r\n    isPlaying = ytPlayer.getPlayerState && ytPlayer.getPlayerState() === 1;\r\n  } else if (videoObj.type === \"bunny\" && html5VideoElement) {\r\n    isPlaying = !html5VideoElement.paused;\r\n  }\r\n\r\n  const buttonLabel = isPlaying ? \"Pause\" : \"Play\";\r\n  const buttonIcon = isPlaying ? \"\u23f8\" : \"\u25b6\ufe0f\";\r\n\r\n  const btnHtml = `<button id=\"playPauseBtn\" style=\"padding:0.5em 1em;font-size:1em;border-radius:6px;background: #0F3F91;color:#fff;border:none;cursor:pointer;margin-bottom:1em;transition: background 0.2s;display: block;\">\r\n      ${buttonIcon} ${buttonLabel}\r\n    <\/button>`;\r\n\r\n  const container = document.getElementById('playPauseContainer');\r\n  if (container) {\r\n    container.innerHTML = btnHtml;\r\n    const playPauseBtn = document.getElementById('playPauseBtn');\r\n    if (playPauseBtn) {\r\n      playPauseBtn.onclick = function() {\r\n        let isPlayingNow = false;\r\n        if (videoObj.type === \"youtube\" && ytPlayer && ytReady) {\r\n          isPlayingNow = ytPlayer.getPlayerState && ytPlayer.getPlayerState() === 1;\r\n          ytPlayer.seekTo(ch.time, true);\r\n          if (isPlayingNow) {\r\n            ytPlayer.pauseVideo();\r\n          } else {\r\n            ytPlayer.playVideo();\r\n          }\r\n        } else if (videoObj.type === \"bunny\" && html5VideoElement) {\r\n          isPlayingNow = !html5VideoElement.paused;\r\n          html5VideoElement.currentTime = ch.time;\r\n          if (isPlayingNow) {\r\n            html5VideoElement.pause();\r\n          } else {\r\n            html5VideoElement.play();\r\n          }\r\n        }\r\n        \/\/ No manual re-render here!\r\n      };\r\n    }\r\n  }\r\n}\r\n\r\n\r\nfunction formatTranscriptBlock(lines) {\r\n  let prevTime = null;\r\n  let out = [];\r\n  for (let i = 0; i < lines.length; i++) {\r\n    const { time, text } = lines[i];\r\n    \/\/ Convert seconds to MM:SS\r\n    const min = Math.floor(time \/ 60);\r\n    const sec = Math.floor(time % 60);\r\n    const mmss = `${min}:${sec.toString().padStart(2, '0')}`;\r\n    if (time !== prevTime) {\r\n      out.push(`<br><b><span style=\"color:#FFF\">${mmss}<\/span><\/b> ${text}`);\r\n    } else {\r\n      out.push(text);\r\n    }\r\n    prevTime = time;\r\n  }\r\n  return out.join('<br>');\r\n}\r\n\r\n\r\n\r\n\r\nfunction renderPanel(idx) {\r\n  const lang = getCurrentLang();\r\n\r\n  const simplifiedLabel = document.getElementById('simplified-transcript-label')?.textContent || \"\";\r\n  const simplifiedNote = document.getElementById('simplified-transcript-note')?.textContent || \"Note: ...\";\r\n\r\n  const chapters = chapterMap['en'];\r\n  const ch = chapters[idx];\r\n  if (!ch) {\r\n      console.error(`Chapter index ${idx} not found for language ${lang}.`);\r\n      return;\r\n  }\r\n\r\n  \/\/ --- Find hiddenText lines within this chapter's time range ---\r\n  const linesInRangeArr = hiddenTextLines\r\n    .filter(line => line.time >= ch.time && line.time < ch.stop);\r\n\r\n  const transcriptHTML = formatTranscriptBlock(linesInRangeArr);\r\n\r\n  let extra = \"\";\r\n  if (linesInRangeArr.length) {\r\n    extra = `\r\n      <br><br>\r\n      <!--span style=\"display:block;margin-top:1em;margin-bottom:0.25em;font-weight:bold\">${simplifiedLabel}<\/span-->\r\n      <span style=\"color:#f5f5f5;font-size:100%\">${transcriptHTML}<\/span>\r\n      <br>\r\n      <span style=\"display:block;margin-top:0.75em;font-size:75%;color:#00C2C2;\">\r\n        <br>${simplifiedNote}\r\n      <\/span>\r\n    `;\r\n  }\r\n\r\n  \/\/ Insert the Play\/Pause button at the very top of the panel\r\n  const playPauseButton = renderPlayPauseButton(idx);\r\n\r\n  document.getElementById('chapterPanel').innerHTML =\r\n    `<h3 style=\"margin-top:0;color:#fff\">${ch.title}<\/h3>\r\n     <div id=\"playPauseContainer\" style=\"margin-bottom:1em\"><\/div>\r\n     <p style=\"margin-bottom:0;color:#fff\">${ch.description}${extra}<\/p>`;\r\n\r\n  renderPlayPauseButton(idx);\r\n  renderTabs(idx, chapters);\r\n\r\n  \/\/ Attach the event handler after the button is inserted\r\n  const playPauseBtn = document.getElementById('playPauseBtn');\r\n  if (playPauseBtn) {\r\n    playPauseBtn.onclick = function() {\r\n      const videoObj = videoMap[lang] || videoMap['en'];\r\n      let isPlaying = false;\r\n      if (videoObj.type === \"youtube\" && ytPlayer && ytReady) {\r\n        isPlaying = ytPlayer.getPlayerState && ytPlayer.getPlayerState() === 1;\r\n        ytPlayer.seekTo(ch.time, true);\r\n        if (isPlaying) {\r\n          ytPlayer.pauseVideo();\r\n        } else {\r\n          ytPlayer.playVideo();\r\n        }\r\n      } else if (videoObj.type === \"bunny\" && html5VideoElement) {\r\n        isPlaying = !html5VideoElement.paused;\r\n        html5VideoElement.currentTime = ch.time;\r\n        if (isPlaying) {\r\n          html5VideoElement.pause();\r\n        } else {\r\n          html5VideoElement.play();\r\n        }\r\n      }\r\n      \/\/ Optionally update button after action\r\n      \/\/ setTimeout(() => renderPanel(idx), 300);\r\n    };\r\n  }\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\nwindow.showChapter = function(idx) {\r\n  currentChapterIdx = idx;\r\n\r\n  const lang = getCurrentLang();\r\n  \/\/ const chapters = chapterMap[lang] || chapterMap['en']; \/\/ Fallback to 'en'   \r\n  \/\/ will switch for video but NOT for text (translatepress will accomplish)\r\n  const chapters = chapterMap['en']; \/\/ Fallback to 'en' chapters\r\n  const chapterData = chapters[idx];\r\n\r\n  if (!chapterData) {\r\n      console.error(`Chapter data for index ${idx} not found.`);\r\n      return;\r\n  }\r\n  renderPanel(idx); \/\/ Update panel and tabs\r\n\r\n  \/\/ Scroll tab into view\r\n  const buttons = document.getElementsByClassName('chapter-tab');\r\n  if (buttons[idx]) buttons[idx].scrollIntoView({ behavior: 'smooth', inline: 'center', block: 'nearest' });\r\n\r\n  const videoObj = videoMap[lang] || videoMap['en'];\r\n\r\n  \/\/ Clear previous stop timer\r\n  if (stopTimer) clearInterval(stopTimer);\r\n\r\n  if (videoObj.type === \"youtube\") {\r\n    if (ytReady && ytPlayer && typeof ytPlayer.seekTo === 'function') {\r\n      ytPlayer.seekTo(chapterData.time, true);\r\n      ytPlayer.playVideo();\r\n      \r\n    } else {\r\n        console.warn(\"YouTube player not ready or seekTo not available.\");\r\n    }\r\n  } else if (videoObj.type === \"bunny\" && html5VideoElement) {\r\n    html5VideoElement.currentTime = chapterData.time;\r\n    html5VideoElement.play().catch(e => console.warn(\"Autoplay after seek prevented:\", e));\r\n  }\r\n};\r\n\r\nfunction reInitChaptersAndPlayer() {\r\n  const lang = getCurrentLang();\r\n  const videoObj = videoMap[lang] || videoMap['en']; \/\/ Fallback to 'en' video\r\n\r\n  if (!videoObj) {\r\n      console.error(`No video configuration found for language: ${lang} or fallback 'en'.`);\r\n      return;\r\n  }\r\n\r\n  setVideoPlayer(videoObj); \/\/ This now also cleans up old players\r\n\r\n  \/\/ Short delay to ensure DOM is updated, especially for iframe\r\n  setTimeout(function(){\r\n    renderPanel(0); \/\/ Render first chapter panel\r\n    if (videoObj.type === \"youtube\") {\r\n      \/\/ Load or re-initialize YT API for new iframe\r\n      if (typeof YT === 'undefined' || !YT.Player) { \/\/ Check if YT object or YT.Player is undefined\r\n        var tag = document.createElement('script');\r\n        tag.src = \"https:\/\/www.youtube.com\/iframe_api\";\r\n        var firstScriptTag = document.getElementsByTagName('script')[0];\r\n        firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\r\n      } else {\r\n        \/\/ If API is loaded, re-initialize player for the new iframe if needed\r\n        onYouTubeIframeAPIReady();\r\n      }\r\n    }\r\n  }, 100); \/\/ Reduced delay, might need adjustment\r\n}\r\n\r\n\/* ----- YT API Bootstrapping ----- *\/\r\n\/\/ This global function is called by the YouTube Iframe API script\r\nwindow.onYouTubeIframeAPIReady = function() {\r\n  const iframe = document.getElementById('myVideo');\r\n  if (iframe && iframe.tagName === 'IFRAME' && !ytPlayer) { \/\/ Ensure it's an iframe and player not already set\r\n    \/\/ console.log(\"onYouTubeIframeAPIReady called, initializing YT Player.\");\r\n    ytPlayer = new YT.Player('myVideo', {\r\n      events: {\r\n        'onReady': function(event) {\r\n          ytReady = true;\r\n          \/\/ console.log(\"YouTube Player Ready.\");\r\n          \/\/ If a chapter was clicked before YT was ready, try to apply it now.\r\n          \/\/ This requires knowing the current chapter index, which might need to be stored.\r\n          \/\/ For simplicity, we'll assume the user might click a chapter again or it starts at 0.\r\n        },\r\n        'onStateChange': function(event) {\r\n\t\t\t\/\/ 1 = playing, 2 = paused\r\n\t\t\trenderPlayPauseButton(currentChapterIdx); \/\/ currentChapterIdx should be tracked globally\r\n\t\t}\r\n      }\r\n    });\r\n  } else if (iframe && iframe.tagName === 'IFRAME' && ytPlayer && typeof ytPlayer.destroy === 'function') {\r\n    \/\/ This case handles if the API is reloaded or if reInit is called and iframe exists\r\n    \/\/ It's a bit tricky; ideally, we destroy and recreate fully.\r\n    \/\/ The cleanupPlayers function should handle most of this.\r\n    \/\/ console.log(\"onYouTubeIframeAPIReady called, player might exist. Attempting to re-bind if necessary.\");\r\n  }\r\n};\r\n\r\n\/* ----- Event Hooks ----- *\/\r\ndocument.addEventListener('DOMContentLoaded', function() {\r\n    if (document.getElementById('videoPlayerContainer')) { \/\/ Only run if the container exists\r\n        reInitChaptersAndPlayer();\r\n\r\n\t\t\r\n\r\n\r\n    }\r\n});\r\n\/\/ TranslatePress fires this event on language change\r\ndocument.addEventListener('trp_language_changed', function() {\r\n    if (document.getElementById('videoPlayerContainer')) { \/\/ Only run if the container exists\r\n        reInitChaptersAndPlayer();\r\n\t\t\r\n\r\n    }\r\n});\r\n\r\n<\/script>\r\n\r\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-40859b7 elementor-widget elementor-widget-html\" data-id=\"40859b7\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\n\/* Your existing CSS is good, no changes needed unless you want to refine *\/\n.chapter-tabs-scroll {\n  display: flex;\n  overflow-x: auto;\n  gap: 10px;\n  margin-bottom: 18px;\n  scrollbar-width: thin;\n  scrollbar-color: #a0aec0 #f7fafc; \/* For Firefox *\/\n  -webkit-overflow-scrolling: touch;\n  padding-bottom: 5px; \/* To make scrollbar visible without cutting content *\/\n  border-radius: 8px; \/* Optional: if you want rounded corners for the scroll area *\/\n}\n\/* Webkit Scrollbar Styles *\/\n.chapter-tabs-scroll::-webkit-scrollbar {\n  height: 7px;\n}\n.chapter-tabs-scroll::-webkit-scrollbar-track {\n  background: #111; \/* Or a lighter color if preferred *\/\n  border-radius: 4px;\n}\n.chapter-tabs-scroll::-webkit-scrollbar-thumb {\n  background: #333; \/* Or a contrasting color *\/\n  border-radius: 4px;\n}\n.chapter-tab {\n  white-space: nowrap;\n  border: none;\n  background: #222; \/* Darker tab background *\/\n  color: #fff;\n  font-size: 1.1em;\n  padding: 8px 22px;\n  border-radius: 999px; \/* Pill shape *\/\n  cursor: pointer;\n  transition: background 0.2s, color 0.2s, font-weight 0.2s, box-shadow 0.2s;\n  margin-bottom: 0; \/* Ensure no extra space below tabs if they wrap *\/\n  outline: none; \/* Remove default focus outline if you have custom focus styles *\/\n  margin-right: 0; \/* Reset if previously set for spacing between items *\/\n}\n.chapter-tab.active,\n.chapter-tab:hover {\n  background: #e0e7ff; \/* Light blue for active\/hover *\/\n  color: #111; \/* Dark text for active\/hover *\/\n  font-weight: bold;\n  box-shadow: 0 2px 8px #dbeafe66; \/* Softer shadow *\/\n}\n.chapter-panel {\n  background: rgba(20,20,20,0.88); \/* Semi-transparent dark background *\/\n  border-radius: 8px;\n  box-shadow: 0 2px 6px #111; \/* Subtle shadow *\/\n  padding: 20px 24px;\n  min-height: 80px; \/* Ensure panel has some height even if description is short *\/\n  transition: box-shadow 0.3s; \/* Smooth shadow transition on hover (if any) *\/\n}\n\/* Add a class for the video player container if you want to target its children more easily *\/\n#videoPlayerContainer video { \/* Ensure video tag fits container *\/\n    display: block; \/* Removes extra space below if it's inline *\/\n}\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e4bc449 e-flex e-con-boxed e-con e-parent\" data-id=\"e4bc449\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-fdce02d e-con-full e-flex e-con e-child\" data-id=\"fdce02d\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6160f3a elementor-widget elementor-widget-shortcode\" data-id=\"6160f3a\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\"><!-- Post Page Mid Roll -->\r\n<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ea60902 elementor-widget elementor-widget-html\" data-id=\"ea60902\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- 4. NO TOUCH Scripts -->\n<!-- ImageID_4 HTML external scripts to call + JS -->\n<!-- script src=\"https:\/\/code.jquery.com\/jquery-3.7.1.min.js\"><\/script -->\r\n<script>\r\njQuery(document).ready(function ($) {\r\n\r\n  \/\/ --- IMAGE HOTSPOTS AND BUTTONS INIT ---\r\n  $('.hotspot-block').each(function () {\r\n    const $block = $(this);\r\n    const id = $block.data('id');\r\n    const $image = $block.find(`.main-image[data-id=\"${id}\"]`);\r\n    const $container = $block.find('.hotspot-container');\r\n    const $buttons = $block.find('.hotspot-buttons');\r\n    const imageUrl = imageMap[id];\r\n\r\n\r\n\t\r\n    const csvRaw = $(`pre#hotspot-data-${id}`).text().trim();\r\n\r\n    const activeNumbers = [];\r\n    $block.data('activeNumbers', activeNumbers);\r\n\r\n    if (!imageUrl) return;\r\n    $image.attr('src', imageUrl);\r\n\r\n    $image.on('load', function () {\r\n      const imgWidth = $image[0].naturalWidth;\r\n      const imgHeight = $image[0].naturalHeight;\r\n\r\n      \/\/ --- Simple Pipe-Delimited Parse ---\r\n\tconst lines = csvRaw.split('\\n').map(line => line.trim()).filter(Boolean);\r\n\tif (lines.length < 2) return;\r\n\t\/\/ Optionally check header here if you want\r\n\tconst data = lines.slice(1).map(line => {\r\n\t  \/\/ Split by pipe instead of comma, but allow pipes in the text field (by joining the rest)\r\n\t  const parts = line.split('|');\r\n\t  const order = parts[0] ? parts[0].trim() : '';\r\n\t  const x_px = parts[1] ? parts[1].trim() : '';\r\n\t  const y_px = parts[2] ? parts[2].trim() : '';\r\n\t  const direction = parts[3] ? parts[3].trim() : '';\r\n\t  const text = parts.length > 4 ? parts.slice(4).join('|').trim() : '';\r\n\t  return { order, x_px, y_px, direction, text };\r\n\t});\r\n\r\n\t\/\/ console.log('Parsed data:', data);\r\n\r\n\r\n      data.forEach(row => {\r\n        const number = String($.trim(row.order));\r\n        const xPx = parseFloat(row.x_px);\r\n        const yPx = parseFloat(row.y_px);\r\n        const dir = (row.direction || \"A\").trim().toUpperCase();\r\n        const text = $.trim(row.text);\r\n        const leftPercent = (xPx \/ imgWidth) * 100;\r\n        const topPercent = (yPx \/ imgHeight) * 100;\r\n\r\n        const tooltipClass = {\r\n          A: 'tooltip-above',\r\n          B: 'tooltip-below',\r\n          L: 'tooltip-left',\r\n          R: 'tooltip-right'\r\n        }[dir] || 'tooltip-above';\r\n\r\n        \/\/ Tooltip text present in DOM for TranslatePress!\r\n        const formattedText = `${number}. ` + text.replace(\/\\n\/g, '<br>');\r\n        const $hotspot = $(`\r\n          <div class=\"hotspot ${tooltipClass}\" data-number=\"${number}\">\r\n            <span class=\"hotspot-number\">${number}<\/span>\r\n            <span class=\"hotspot-tooltip\" style=\"display:none;\">${formattedText}<\/span>\r\n          <\/div>\r\n        `).css({\r\n          left: `${leftPercent}%`,\r\n          top: `${topPercent}%`,\r\n          transform: 'translate(-50%, -50%)',\r\n          position: 'absolute'\r\n        });\r\n\r\n        $container.append($hotspot);\r\n        $buttons.append(`<button class=\"hotspot-btn\" data-number=\"${number}\">${number}<\/button>`);\r\n      });\r\n    });\r\n  });\r\n\r\n  \/\/ --- STYLE UPDATE FUNCTION ---\r\nfunction updateStyles($block) {\r\n  const active = $block.data('activeNumbers') || [];\r\n  $block.find('.hotspot').each(function () {\r\n    const num = String($(this).data('number'));\r\n    const $tooltip = $(this).find('.hotspot-tooltip');\r\n    if (active.includes(num)) {\r\n      $(this).addClass('enlarged active');\r\n      $tooltip.show(); \/\/ <-- Show tooltip!\r\n    } else {\r\n      $(this).removeClass('enlarged active');\r\n      $tooltip.hide(); \/\/ <-- Hide tooltip!\r\n    }\r\n  });\r\n  $block.find('.hotspot-btn').each(function () {\r\n    const num = String($(this).data('number'));\r\n    $(this)\r\n      .toggleClass('highlight', active.includes(num))\r\n      .toggleClass('enlarged', active.includes(num));\r\n  });\r\n}\r\n\r\n\r\n  \/\/ --- HOTSPOT\/BUTTON CLICK ---\r\n  $(document).on('click', '.hotspot, .hotspot-btn', function (e) {\r\n    e.preventDefault();\r\n    const $clicked = $(e.target).closest('.hotspot, .hotspot-btn');\r\n    const num = String($clicked.data('number'));\r\n    const $block = $clicked.closest('.hotspot-block');\r\n    let active = $block.data('activeNumbers') || [];\r\n\r\n    const wasActive = active.includes(num);\r\n\r\n    \/\/ Clear Hide if checked\r\n    const $hide = $block.find('.hide-numbers-toggle');\r\n    if ($hide.is(':checked')) {\r\n      $hide.prop('checked', false).trigger('change');\r\n    }\r\n\r\n    if (wasActive) {\r\n      active = active.filter(n => n !== num);\r\n    } else {\r\n      active = [num]; \/\/ Only one active at a time\r\n    }\r\n    $block.data('activeNumbers', active);\r\n    updateStyles($block);\r\n\r\n    \/\/ Uncheck \"Show all\" if not all hotspots are active\r\n    const allNums = $block.find('.hotspot').map((_, el) => String($(el).data('number'))).get();\r\n    const $toggle = $block.find('.show-all-toggle');\r\n    const isAllActive = allNums.every(n => active.includes(n));\r\n    $toggle.prop('checked', isAllActive);\r\n  });\r\n\r\n  \/\/ --- SHOW ALL \/ HIDE MUTUAL EXCLUSIVITY AND BEHAVIOR ---\r\n  $(document).on('change', '.show-all-toggle', function() {\r\n    const id = $(this).data('id');\r\n    const $block = $(`.hotspot-block[data-id=\"${id}\"]`);\r\n    const $hide = $block.find('.hide-numbers-toggle');\r\n    const $hotspots = $block.find('.hotspot');\r\n    const allNums = $hotspots.map((_, el) => String($(el).data('number'))).get();\r\n\r\n    \/\/ Mutually exclusive: uncheck Hide if Show All is checked\r\n    if ($(this).is(':checked')) {\r\n      if ($hide.is(':checked')) {\r\n        $hide.prop('checked', false).trigger('change');\r\n      }\r\n      $block.data('activeNumbers', allNums);\r\n    } else {\r\n      $block.data('activeNumbers', []);\r\n    }\r\n\r\n    updateStyles($block);\r\n  });\r\n\r\n  \/\/ Hide handler\r\n  $(document).on('change', '.hide-numbers-toggle', function() {\r\n    const id = $(this).data('id');\r\n    const $block = $(`.hotspot-block[data-id=\"${id}\"]`);\r\n    const $showAll = $block.find('.show-all-toggle');\r\n    const $hotspots = $block.find('.hotspot');\r\n    const checked = $(this).is(':checked');\r\n\r\n    \/\/ Mutually exclusive: uncheck Show All if Hide is checked\r\n    if (checked && $showAll.is(':checked')) {\r\n      $showAll.prop('checked', false).trigger('change');\r\n    }\r\n\r\n    if (checked) {\r\n      $hotspots.hide();\r\n      $block.find('.enlarged, .active').removeClass('enlarged active');\r\n    } else {\r\n      $hotspots.show();\r\n    }\r\n  });\r\n\r\n  \/\/ --- CLICKING OUTSIDE CLEARS EVERYTHING ---\r\n  $(document).on('click', function (e) {\r\n    const $target = $(e.target);\r\n    const $block = $target.closest('.hotspot-block');\r\n    $('.hotspot-block').each(function () {\r\n      const $thisBlock = $(this);\r\n      if (!$block.length || !$block.is(this)) {\r\n        $thisBlock.data('activeNumbers', []);\r\n        $thisBlock.find('.show-all-toggle').prop('checked', false);\r\n        updateStyles($thisBlock);\r\n      }\r\n    });\r\n  });\r\n\r\n});\r\n<\/script>\r\n \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>El sistema Self-Maximize que todo hombre necesita ver \u00bfEst\u00e1s listo para subir de nivel en tu juego de citas y en toda tu vida? Este es Self-Maximize, un mapa mental brutalmente honesto que me llev\u00f3 de ser gorda, arruinada e invisible a un \"ocho\" con opciones con las que la mayor\u00eda de los hombres s\u00f3lo sue\u00f1an. Pero, aqu\u00ed est\u00e1 la parte que nadie quiere admitir: la mayor\u00eda de los hombres (y [...]<\/p>","protected":false},"author":6,"featured_media":5250,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[134,140,100,143],"tags":[127,126,129,128],"class_list":["post-5178","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dating-dynamics","category-levels","category-free-newsletter-insider-exclusives","category-self-maximize","tag-es","tag-fr","tag-ja","tag-pt"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/itishoemath.com\/es_es\/wp-json\/wp\/v2\/posts\/5178","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itishoemath.com\/es_es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itishoemath.com\/es_es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itishoemath.com\/es_es\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/itishoemath.com\/es_es\/wp-json\/wp\/v2\/comments?post=5178"}],"version-history":[{"count":19,"href":"https:\/\/itishoemath.com\/es_es\/wp-json\/wp\/v2\/posts\/5178\/revisions"}],"predecessor-version":[{"id":5762,"href":"https:\/\/itishoemath.com\/es_es\/wp-json\/wp\/v2\/posts\/5178\/revisions\/5762"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/itishoemath.com\/es_es\/wp-json\/wp\/v2\/media\/5250"}],"wp:attachment":[{"href":"https:\/\/itishoemath.com\/es_es\/wp-json\/wp\/v2\/media?parent=5178"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itishoemath.com\/es_es\/wp-json\/wp\/v2\/categories?post=5178"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itishoemath.com\/es_es\/wp-json\/wp\/v2\/tags?post=5178"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}