{"id":3573,"date":"2025-08-27T11:53:59","date_gmt":"2025-08-27T16:53:59","guid":{"rendered":"https:\/\/itishoemath.com\/?p=3573"},"modified":"2025-10-17T10:18:46","modified_gmt":"2025-10-17T15:18:46","slug":"manos-de-pajaro","status":"publish","type":"post","link":"https:\/\/itishoemath.com\/es_es\/manos-de-pajaro\/","title":{"rendered":"Manos de p\u00e1jaro"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"3573\" class=\"elementor elementor-3573\" 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-c4dae98 elementor-widget elementor-widget-text-editor\" data-id=\"c4dae98\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h4><strong>Manos de p\u00e1jaro = \u00bfPoder social?<\/strong><\/h4>\nEn este v\u00eddeo, <span>h<\/span>oe_math rastrea con humor el auge del gesto de las \"manos de p\u00e1jaro\" -en el que las mujeres en TikTok utilizan movimientos puntiagudos y de picoteo con las manos- hasta tendencias m\u00e1s amplias en la influencia social, el comportamiento en grupo y el lenguaje corporal. Explica el significado psicol\u00f3gico de estos gestos, c\u00f3mo reflejan luchas m\u00e1s profundas por el poder, la aceptaci\u00f3n y el estatus, y los relaciona con los cambios sociales en las citas, las din\u00e1micas en el lugar de trabajo y el activismo en l\u00ednea. El v\u00eddeo relaciona el lenguaje corporal con<!--preview--> t\u00e1cticas de negociaci\u00f3n colectiva, la lealtad de grupo y las trampas de la unidad social performativa, a la vez que proporciona consejos pr\u00e1cticos para reconocer cu\u00e1ndo est\u00e1s siendo manipulado o presionado por las narrativas populares.\t\t\t\t\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\n<!-- Header: Not Translated -->\n<script id=\"video-data-header\" type=\"text\/plain\">\ntime|stop|tab|title|description\n<\/script>\n\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|25|Or\u00edgenes|Or\u00edgenes de la decadencia|El debate comienza culpando con humor de la decadencia de Estados Unidos al aumento de mujeres que utilizan gestos de \"manos de p\u00e1jaro\" en las redes sociales, sugiriendo que estos comportamientos son sintom\u00e1ticos de problemas sociales m\u00e1s profundos.\n25|71|Historia|Historia del poder femenino|Una mirada retrospectiva a las actitudes hist\u00f3ricas hacia la agresividad femenina y c\u00f3mo se castigaba a las mujeres por rega\u00f1ar, contrastando con la libertad actual de las mujeres para expresarse.\n71|155|Gestos|Significado de los gestos con las manos|Se explica en detalle el significado de varios gestos con las manos, especialmente las \"manos de p\u00e1jaro\" que se ven en TikTok, destacando su uso inconsciente y lo que indican sobre las intenciones y el estado de \u00e1nimo del hablante.\n155|210|Difusi\u00f3nSocial|Difusi\u00f3n de comportamientos sociales|La narraci\u00f3n explora c\u00f3mo estos gestos y comportamientos se difunden en la sociedad, especialmente entre las mujeres, y su papel en la din\u00e1mica de grupo y las negociaciones.\n210|293|Din\u00e1micasDeGrupo|Negociaci\u00f3nGrupal Femenina|El contenido analiza c\u00f3mo las mujeres se apoyan mutuamente mediante estrategias de negociaci\u00f3n colectiva, a menudo inflando la autoestima de las dem\u00e1s y excluyendo a las disidentes, especialmente en entornos profesionales.\n293|356|Poder|Cuestiones de poder y control|Se argumenta que estos comportamientos tienen que ver, en \u00faltima instancia, con la obtenci\u00f3n de poder y control, demostr\u00e1ndose la lealtad al grupo mediante la mentira colectiva y la manipulaci\u00f3n de las normas sociales.\n356|496|Consecuencias|Consecuencias para las relaciones|El segmento final analiza las consecuencias sociales m\u00e1s amplias de estas tendencias, incluyendo el deterioro de las relaciones entre hombres y mujeres, la p\u00e9rdida de respeto y el aumento de la divisi\u00f3n social, concluyendo con el consejo de resistirse a estas presiones colectivas.\n<\/pre>\n\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-9265a2c elementor-widget elementor-widget-html\" data-id=\"9265a2c\" 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<!-- 2.1. MOD Image CSV -->\n<!-- 1st image, update this\n     ImageID_3 image data locations and text -->\n<div id=\"tp-translatable-strings3\"\n     style=\"color:#000101; background:#000101; width:100vw; height:auto; position:static; z-index:1; font-size:1px;\">\n<!-- CSV for image1  style=\"display:none;\" -->\n<pre id=\"hotspot-data-image1\">\n<span class=\"notranslate\">order|x_px|y_px|Izquierda_Derecha_Arriba_Bajo|text\n1|163|692|R|<span class=\"translate\">\u00bfDeber\u00eda llevar spray para osos o spray para hombres?<\/span>\n2|816|594|A|<span class=\"translate\">Muchas mujeres dicen que preferir\u00edan toparse con un oso. \u00a1Suena m\u00e1s seguro!<\/span>\n3|816|713|A|<span class=\"translate\">Pero, \u00bfpor qu\u00e9? En una ciudad, las mujeres se cruzan con cientos de hombres extra\u00f1os cada d\u00eda.<\/span>\n4|16|159|R|<span class=\"translate\"><span>h<\/span>oe_math hace los c\u00e1lculos: los osos son al menos 10 veces m\u00e1s peligrosos.\n<\/span>\n5|399|148|R|<span class=\"translate\">Entonces, \u00bfcu\u00e1l es la verdadera raz\u00f3n? Decir \"el hombre\" podr\u00eda ser un movimiento de poder, para dar a entender que son m\u00e1s peligrosos que los osos.<\/span>\n6|399|287|L|<span class=\"translate\">Otra forma de imponer la idea de que los hombres son la amenaza... \u00a1y deben ser controlados! Suena a lenguaje de \"Recursos Humanos\".<\/span>\n<\/span>\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-53abaad elementor-widget elementor-widget-html\" data-id=\"53abaad\" 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<!-- 2.2. OPTIONAL 2nd Image CSV -->\n<!-- 2nd image, update this, else delete\n     ImageID_3 image data locations and text -->\n\n<div id=\"tp-translatable-strings4\"\n     style=\"color:#000101; background:#000101; width:100vw; height:auto; position:static; z-index:1; font-size:1px;\">\n<pre id=\"hotspot-data-image2\">\n<span class=\"notranslate\">order|x_px|y_px|Izquierda_Derecha_Arriba_Bajo|text\n1|278|90|R|<span class=\"translate\">A lo largo de la historia, las mujeres han buscado hombres que pudieran \"proveer\".<\/span>\n2|612|127|B|<span class=\"translate\">As\u00ed que los hombres trabajaban duro para mantener a sus esposas e hijos. En consecuencia, sol\u00edan ganar m\u00e1s.<\/span>\n3|294|188|L|<span class=\"translate\">Los defensores de la igualdad salarial dijeron que esto no estaba bien. \u00bfPor qu\u00e9 ganan m\u00e1s los hombres?<\/span>\n4|296|318|R|<span class=\"translate\">Las Mujeres por la Igualdad Salarial exigieron al gobierno que interviniera y obligara a la igualdad salarial.<\/span>\n5|515|449|R|<span class=\"translate\">Ahora muchos hombres no pueden ser un proveedor superior. Por lo tanto, la fecha de \"s\u00f3lo para reunirse para tomar un caf\u00e9\".<\/span>\n6|229|439|L|<span class=\"translate\">Ahora muchas mujeres est\u00e1n confundidas porque ya no pueden \"encontrar proveedores\" y est\u00e1n \"subiendo el list\u00f3n\".<\/span>\n<\/span>\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-1417dae elementor-widget elementor-widget-html\" data-id=\"1417dae\" 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<!-- 1. MOD Image Links -->\n<!-- ImageID_5 image urls -->\n\n<script>\n  const imageMap = {\n    image1: \"https:\/\/itishoemath.com\/wp-content\/uploads\/2025\/06\/Bear-Man-Woods-Which.jpg\",\n    image2: \"\"\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-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 Oye, estas \"deportaciones masivas\" van a ayudar a los verdaderos estadounidenses, \u00bfverdad?\n1 Te voy a parar ah\u00ed mismo: seguro que te est\u00e1s preguntando c\u00f3mo ha llegado Am\u00e9rica hasta aqu\u00ed.\n6 Bueno, todo comenz\u00f3 con \"manos de p\u00e1jaro\". As\u00ed es.\n9 Estados Unidos se fue directamente al garete en cuanto empez\u00f3 a dejar que las mujeres malhumoradas e insatisfechas (de un tres a un seis) hicieran esos gestitos de co\u00f1azo en TikTok.\n14 S\u00e9 que parece una locura, pero volvamos al principio. Ver\u00e1s, hace mucho tiempo la gente sol\u00eda entender que las mujeres tambi\u00e9n eran violentas.\n29 Un hombre simplemente sale a la calle y te da un pu\u00f1etazo en la nariz, pero las mujeres son peque\u00f1as y d\u00e9biles, as\u00ed que se limitan a mentir sobre que son v\u00edctimas hasta que alguien lo hace por ellas.\n38 Eso hace que todos los simios salgan de la nada y cumplan sus \u00f3rdenes como bichos. Antes entend\u00edamos esto, y a las mujeres rega\u00f1onas tambi\u00e9n se las castigaba por otras cosas.\n49 Esto se llama la brida del rega\u00f1\u00f3n: hace que no pueda hablar. Una locura, \u00bfverdad? Pero hoy en d\u00eda, las mujeres pueden hacer lo que quieran, cuando quieran. Y si lo se\u00f1alas, \u00bfadivina qu\u00e9? Eres el malo. Dime que no es una locura.\n64 \u00bfQu\u00e9 tiene que ver todo esto con las manos de p\u00e1jaro? Todo.\n71 Muy bien, eso fue divertido. Finalmente consegu\u00ed que Ableton funcionara de nuevo. De todos modos, el Podcast Whatever pregunt\u00f3: \"\u00bfPor qu\u00e9 siempre hacen lo de las manos?\" refiri\u00e9ndose a este peque\u00f1o gesto de gallina que las chicas han estado haciendo con sus manos. Pens\u00e9 en traeros la respuesta.\n84 Aqu\u00ed est\u00e1: lo de la mano que hacen las chicas de TikTok es que las manos est\u00e1n cerradas y apuntan hacia ti. Significa: \"Ser\u00e1 mejor que me escuches. Te estoy diciendo que esto es lo que crees ahora\".\n93 Cuando te lo se\u00f1alas a ti mismo, te sale lo del beso del chef italiano: \"Oh, te lo estoy diciendo, esto es as\u00ed... mira lo que he hecho aqu\u00ed. Lo hice inconscientemente\". Eso es: \"Esto est\u00e1 tan bueno, deber\u00edas probarlo\".\n110 Manos cerradas por aqu\u00ed: \"Estoy seguro de lo que digo y recibo tus necesidades. Deber\u00edas probar esto, es genial\".\n118 Esto tambi\u00e9n se usa en las discusiones italianas. Lo que hace Trump es la doble mano abierta, y las mueve mucho: \"Te estoy escuchando, entiendo tus necesidades\".\n130 Cuando las manos est\u00e1n abiertas hacia uno mismo, significa: \"Esc\u00fachame, te lo ruego\". Nunca har\u00edas esto con eso.\n141 As\u00ed que las se\u00f1ales de las manos... no son nada. Son inconscientes. Si dejas que tus manos hagan lo que quieran mientras hablas, en cierto modo hablar\u00e1n por ti.\n155 El hecho de que todas las chicas de TikTok est\u00e9n haciendo esto es una mala se\u00f1al. Significa que est\u00e1n al final de su cuerda, en mi opini\u00f3n, y s\u00f3lo dicen: \"Haz lo que quiera, haz lo que quiera\".\n162 As\u00ed es como las mujeres est\u00e1n haciendo, supongo. Y, s\u00ed, son las mujeres. Siempre son las mujeres las que caen primero, son las m\u00e1s susceptibles al cambio social.\n174 Pero estas cosas siempre se extienden. Hace 20 a\u00f1os, todo el mundo dec\u00eda: \"No conozcas a nadie por Internet\", y ahora es lo \u00fanico que hacemos. As\u00ed que esto podr\u00eda seguir un patr\u00f3n similar.\n182 Le\u00ed un poco sobre el lenguaje corporal en Shortform, es un gran recurso para complementar lo que est\u00e9s aprendiendo. Tienes que prestar atenci\u00f3n a lo que hace la gente cuando habla, y Shortform puede ayudarte.\n191 (patrocinio\/anuncio) Consigue 20% con mi enlace.\n193 Este es mi gr\u00e1fico \"Qui\u00e9n es un 10\". Explica por qu\u00e9 las mujeres que no son dieces siempre dicen que lo son. Tambi\u00e9n habl\u00e9 de esto en el gr\u00e1fico est\u00e1ndar del delirio femenino: as\u00ed es como hablan en p\u00fablico: todo el mundo es perfecto. Y as\u00ed es como hablan en privado: ellas y sus mejores amigas est\u00e1n en lo m\u00e1s alto y todas las dem\u00e1s son basura.\n210 Es una estrategia de negociaci\u00f3n colectiva. La forma en que funciona es que las mids y las submids siempre se est\u00e1n gaseando unas a otras y excusando su comportamiento, porque esa es la \u00fanica forma en que pueden competir con las mujeres de arriba, que tambi\u00e9n tienen que fingir que todo el mundo es guapo o de lo contrario no consiguen estar en el peque\u00f1o grupo de apoyo.\n230 Eso no suele importar hasta que todas trabajan en recursos humanos. Cuando est\u00e1n en un grupo unificado, controlan el acceso a todo, especialmente cuando convencen a los hombres de que les sigan el juego como si fueran a conseguir algo por hacerlo. (Nunca lo consiguen.)\n244 La raz\u00f3n por la que esto es tan peligroso -y sol\u00edamos tirarles fruta podrida por hacerlo- es que el grupo de la mano s\u00f3lo funciona cuando mienten.\n253 As\u00ed es como demuestras lealtad al grupo: dices mentiras rid\u00edculas, porque cuanto m\u00e1s grande es la mentira, m\u00e1s est\u00e1s demostrando que dir\u00e1s cualquier cosa para que te incluyan. Es una muestra de sumisi\u00f3n.\n265 Por eso es tan repugnante cuando lo hacen los hombres, y por eso ahora todo est\u00e1 tan patas arriba.\n269 Porque cuando las mujeres consiguen el poder, no se limitan a decir: \"Soy mejor que t\u00fa en tu trabajo\", como har\u00eda un hombre (y normalmente no es cierto). En vez de eso, dicen cosas como: \"Los beb\u00e9s tambi\u00e9n pueden ser pilotos\".\n282 Porque si eso es cierto, significa que todo el mundo deber\u00eda ser aceptado en todas partes, aunque no sea lo bastante bueno. Y con \"en todas partes\" se refieren s\u00f3lo a los mejores lugares, que es lo mismo que decir \"soy un 10\".\n296 \u00bfVes c\u00f3mo est\u00e1 todo conectado? Hacer una demanda y luego mentir colectivamente para justificarla. \"Soy un 10\" significa: \"Soy material matrimonial para cualquiera. Me deber\u00edan pagar lo mismo que a alguien que realmente puede hacer el trabajo. No importa lo que yo haga, importa lo que me paguen, aunque no me lo est\u00e9 ganando, y otro puede compensar lo que yo no hago, aunque no reciba nada.\"\n324 As\u00ed que votan para conseguirlo, aunque no se lo ganen. Y entonces, cuando consiguen igual o m\u00e1s, se creen mejores que t\u00fa, lo que te hace \"asqueroso\", y entonces todas las mujeres buscan a unos pocos hombres, y entonces nadie se casa ni tiene hijos, y todos se odian.\n339 Por eso quiero que busques cosas como las manos de p\u00e1jaro. Se trata de dar instrucciones: \"Esto es lo que creemos ahora\", y est\u00e1n tratando de hacerte simp\u00e1tico-y no puedes hacerlo, porque pierdes. Todos perdemos.\n352 Las manos de p\u00e1jaro son un signo de desesperaci\u00f3n. No tienes que ser en\u00e9rgico si realmente tienes el control.\n359 As\u00ed que cuando ves a las mujeres haciendo esto, est\u00e1n diciendo: \"Esto es con lo que tienes que estar de acuerdo, o no est\u00e1s en el club-y no quieres estar en el club.\"\n366 Aqu\u00ed tienes un avance de mi nuevo gr\u00e1fico de niveles: este es m\u00e1s f\u00e1cil de leer. Pronto habr\u00e1 v\u00eddeo.\n372 Las manos de p\u00e1jaro vienen de este nivel-intentan controlarte para conseguir poder.\n376 Aqu\u00ed hay algunos ejemplos: Hombres respondiendo a la \"epidemia del hombre picado\".\n380 Las chicas est\u00e1n dando el mismo tipo de energ\u00eda que el tipo de hombre que te coquetear\u00eda y, cuando lo rechazas, dir\u00eda: \"Oh bueno, no eres tan lindo de todos modos\".\n389 Aqu\u00ed est\u00e1 la chica-de la que est\u00e1 hablando, como, esa es una chica mona.\n393 As\u00ed es como van a ser las cosas. Quiero compartir mis pensamientos sobre esta cosa de la epidemia del hombre picado, pero aqu\u00ed est\u00e1 la cosa:\n398 La mayor\u00eda de los hombres por ah\u00ed no est\u00e1n poniendo ning\u00fan esfuerzo en hacerse parecer atractivos a las mujeres. Puedo ver el atractivo de la gente objetivamente, y aunque no me atraigan personalmente, puedo reconocer cuando alguien es atractivo.\n413 F\u00edjate en el picoteo excesivo: est\u00e1 diciendo: \"Cr\u00e9eme, cr\u00e9eme\", aunque en el fondo sabe que no ver\u00eda a esos tipos tan asquerosos si no fuera por el desequilibrio de poder causado por su propio comportamiento.\n419 Este era activismo pol\u00edtico, y ella sabe que est\u00e1 llena de \u00e9l. \"Si ver familias destrozadas no apela a tu humanidad, d\u00e9jame intentar apelar a ti econ\u00f3micamente, porque estas deportaciones masivas del ICE son malas para la econom\u00eda\".\n438 \u00bfNo es esa la cara de la persuasi\u00f3n? \u00bfNo quieres creer todo lo que dice?\n442 Aqu\u00ed hay otra muy r\u00e1pida: los hombres siempre se quejan de que las mujeres est\u00e1n constantemente rega\u00f1ando. A lo mejor ella no est\u00e1 rega\u00f1ando y es s\u00f3lo que t\u00fa sigues haciendo lo mismo una y otra vez. Una mujer no quiere estar en la posici\u00f3n de actuar como tu madre. No te pongas en la situaci\u00f3n de actuar como su hijo.\n455 Es un buen consejo en una relaci\u00f3n. Pero a escala de toda la sociedad, has votado por la igualdad, lo que hace que veas a los hombres como ni\u00f1os. No s\u00e9 si puedes hacer los c\u00e1lculos: las mujeres tienen que respetar a los hombres o no les gustamos, y est\u00e1n eliminando colectivamente las cosas que les hacen respetarnos.\n470 As\u00ed que los problemas no son todos culpa de los hombres. Es como si todas las mujeres a la vez dijeran: \"\u00bfPor qu\u00e9 tienes que respirar tan fuerte?\".\n478 As\u00ed que tienes que vigilar el lenguaje corporal. Manos de p\u00e1jaro no siempre significa que est\u00e9 equivocada, pero s\u00ed que te est\u00e1 hablando mal.\n485 De nuevo, mira c\u00f3mo esto no concuerda: \"\u00a1Dios m\u00edo, has conseguido el trabajo! Estoy tan orgullosa de ti\".\n491 La \u00fanica forma de salir de este l\u00edo es no escuchar m\u00e1s estas mentiras.\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: \"B3e5v3zQlpI\" },\n  es: { type: \"youtube\", id: \"XSV1Xc9Ddas\"},  \n  fr: { type: \"youtube\", id: \"ZdC1xyaO5bw\" }, \n  ja: { type: \"youtube\", id: \"cOwPSDHO1GY\"},\n  pt: { type: \"youtube\", id: \"pfLSZI7xQK8\"},   \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 pa-display-conditions-yes e-flex e-con-boxed e-con e-parent\" data-id=\"e4bc449\" data-element_type=\"container\" data-settings=\"{&quot;pa_display_conditions_switcher&quot;:&quot;yes&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7e49f44 elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile elementor-widget elementor-widget-template\" data-id=\"7e49f44\" 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=\"3491\" class=\"elementor elementor-3491\" data-elementor-post-type=\"elementor_library\">\n\t\t\t<div class=\"elementor-element elementor-element-f38bb46 e-flex e-con-boxed e-con e-parent\" data-id=\"f38bb46\" 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-8baae73 elementor-widget elementor-widget-shortcode\" data-id=\"8baae73\" 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-77ae7ae elementor-widget elementor-widget-heading\" data-id=\"77ae7ae\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Obras maestras interactivas<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-efd0efb elementor-widget elementor-widget-html\" data-id=\"efd0efb\" 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<!-- 3.1 CSS and 1st Image HTML -->\n<!-- ImageID_1 CSS -->\n\n<style class=\"wpcode-css-snippet\"><style>\r\n\r\n.hotspot-block,\r\n.hotspot,\r\n.hotspot-tooltip,\r\n.hotspot-btn {\r\n  font-family: \"HM Saira-VariableFont_wdth,wght\", sans-serif;\r\n}\r\n\r\n.hotspot-block {\r\n  position: relative;\r\n  margin: 40px auto;\r\n  max-width: 1280px;\r\n}\r\n\r\n.hotspot-controls {\r\n  margin-bottom: 15px;\r\n  display: flex;\r\n  justify-content: center;\r\n  flex-wrap: wrap;\r\n  gap: 15px;\r\n  align-items: center;\r\n  position: relative;\r\n  z-index: 10;\r\n}\r\n\r\n.hotspot-container {\r\n  position: absolute;\r\n  top: 0;\r\n  left: 0;\r\n  width: 100%;\r\n  height: 100%;\r\n  pointer-events: none;\r\n  z-index: 2000;\r\n}\r\n\r\n.main-image {\r\n  width: 100%;\r\n  display: block;\r\n}\r\n\r\n.hotspot {\r\n  overflow: visible;\r\n  width: 36px;\r\n  height: 36px;\r\n  background: #007BFF;\r\n  color: white;\r\n  font-size: 16px;\r\n  border-radius: 50%;\r\n  text-align: center;\r\n  line-height: 36px;\r\n  font-weight: bold;\r\n  cursor: pointer;\r\n  transition: transform 0.4s, background 0.3s;\r\n  position: absolute;\r\n  pointer-events: auto;\r\n}\r\n\r\n.hotspot.enlarged {\r\n  transform: scale(1.18);\r\n  background: red;\r\n}\r\n\r\n.hotspot:hover {\r\n  transform: scale(1.18);\r\n}\r\n\r\n\/* ----------- TOOLTIP: Modern Approach ----------- *\/\r\n.hotspot-tooltip {\r\n  display: none;\r\n  position: absolute;\r\n  left: 50%;\r\n  top: auto; \/* default, will be set by direction *\/\r\n  bottom: auto;\r\n  max-width: 300px;\r\n  min-width: 0;\r\n  width: max-content; \/* will grow up to max-width, shrink for short items *\/\r\n  white-space: normal;\r\n  word-break: break-word;\r\n  padding: 10px 16px;\r\n  background: rgba(20, 20, 30, 0.92);\r\n  color: #fff;\r\n  font-size: 15px;\r\n  border-radius: 10px;\r\n  box-shadow: 0 6px 16px rgba(0,0,0,0.13);\r\n  z-index: 5000;\r\n  line-height: 1.5;\r\n  text-align: left;\r\n  border: 2px solid red;\r\n  box-sizing: border-box;\r\n  transform: translateX(-50%);\r\n}\r\n\r\n\r\n\r\n\r\n\r\n\r\n\/* Tooltip direction and placement *\/\r\n.tooltip-above .hotspot-tooltip {\r\n  left: 50%;\r\n  bottom: 110%;\r\n  transform: translateX(-50%);\r\n  margin-bottom: 10px;\r\n}\r\n.tooltip-below .hotspot-tooltip {\r\n  left: 50%;\r\n  top: 110%;\r\n  transform: translateX(-50%);\r\n  margin-top: 10px;\r\n}\r\n.tooltip-left .hotspot-tooltip {\r\n  right: 110%;          \/* Puts tooltip fully to the left of the hotspot, with a gap *\/\r\n  top: 50%;\r\n  left: auto;           \/* Prevent any left property conflict *\/\r\n  transform: translateY(-50%);\r\n  margin-right: 10px;   \/* Space between tooltip and hotspot *\/\r\n  margin-left: 0;\r\n}\r\n\r\n.tooltip-right .hotspot-tooltip {\r\n  left: 110%;\r\n  top: 50%;\r\n  transform: translateY(-50%);\r\n  margin-left: 10px;\r\n}\r\n\r\n\/* Tooltip shown on enlarged\/active hotspot *\/\r\n.hotspot.enlarged .hotspot-tooltip,\r\n.hotspot.active .hotspot-tooltip,\r\n.hotspot.show-all .hotspot-tooltip {\r\n  display: block;\r\n}\r\n\r\n\/* ----------- Button styling ----------- *\/\r\n.hotspot-btn {\r\n  width: 36px;\r\n  height: 36px;\r\n  border-radius: 50%;\r\n  font-size: 16px;\r\n  background: #007BFF;\r\n  color: white;\r\n  font-weight: bold;\r\n  border: none;\r\n  cursor: pointer;\r\n  transition: background 0.2s, transform 0.2s;\r\n  position: relative;\r\n  display: flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  line-height: 1;\r\n  padding: 0;\r\n}\r\n\r\n.hotspot-btn.highlight {\r\n  background: red;\r\n}\r\n\r\n.hotspot-btn.enlarged {\r\n  transform: scale(1.18);\r\n}\r\n\r\n.hotspot-btn:hover {\r\n  background: #0056b3;\r\n}\r\n\r\n\/* Mobile responsive adjustments *\/\r\n@media (max-width: 600px) {\r\n  .hotspot {\r\n    width: 22px;\r\n    height: 22px;\r\n    font-size: 12px;\r\n    line-height: 22px;\r\n  }\r\n\r\n  .hotspot-btn {\r\n    width: 28px;\r\n    height: 28px;\r\n    font-size: 13px;\r\n  }\r\n\r\n    .hotspot-tooltip {\r\n    padding: 6px 8px;\r\n    font-size: 0.9em;\r\n  font-weight: normal;\r\n    max-width: 250px;\r\n    min-width: 120px;\r\n    width: auto;\r\n  }\r\n}\r\n<\/style><\/style>\n\n<!-- 1st image, keep this\n     ImageID_2 HTML -->\n\n<!-- Image Block 1 -->\n\n<div class=\"hotspot-block\" data-id=\"image1\" style=\"max-width:1280px; margin:40px auto; position:relative;\">\n\n  <!-- Buttons and Checkbox ABOVE the Image -->\n  <div class=\"hotspot-controls\" data-id=\"image1\" style=\"margin-bottom:15px; display:flex; justify-content:center; flex-wrap:wrap; gap:15px; align-items:center; position:relative; z-index:10;\">\n    <div class=\"hotspot-buttons\" style=\"display:flex; gap:10px; flex-wrap:wrap;\"><\/div>\n    <label style=\"font-family:sans-serif; font-size:14px;\">\n      <input type=\"checkbox\" class=\"show-all-toggle\" data-id=\"image1\" style=\"margin-right:5px;\">\n      Todos\n    <\/label>\n    <label style=\"font-family: sans-serif; font-size: 14px;\">\n       <input type=\"checkbox\" class=\"hide-numbers-toggle\" data-id=\"image1\" style=\"margin-left: 12px; margin-right: 5px;\">\n       Ocultar\n    <\/label>\n  <\/div>\n\n  <!-- Image and Hotspot container -->\n  <div style=\"position: relative;\">\n    <img decoding=\"async\" class=\"main-image\" data-id=\"image1\" src=\"\" style=\"width:100%; display:block;\">\n    \n    <!-- Hotspot container positioned absolutely over the image -->\n    <div class=\"hotspot-container\" style=\"position:absolute; top:0; left:0; width:100%; height:100%; pointer-events:none; z-index:2000;\">\n      <!-- Hotspots injected by JS here -->\n    <\/div>\n  <\/div>\n\n<\/div>\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6671c31 elementor-widget elementor-widget-html\" data-id=\"6671c31\" 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\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\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>Manos de p\u00e1jaro = \u00bfPoder social? En este v\u00eddeo, hoe_math traza con humor el auge del gesto de las \"manos de p\u00e1jaro\" -en el que las mujeres en TikTok utilizan movimientos puntiagudos y de picoteo con las manos- hasta tendencias m\u00e1s amplias en la influencia social, el comportamiento en grupo y el lenguaje corporal. Explica el significado psicol\u00f3gico de estos gestos, c\u00f3mo reflejan luchas m\u00e1s profundas por el poder, la aceptaci\u00f3n y el estatus, [...].<\/p>","protected":false},"author":6,"featured_media":3575,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[131,106,100,130,108],"tags":[127,126,129,128],"class_list":["post-3573","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-body-language","category-gender-roles","category-free-newsletter-insider-exclusives","category-recent","category-social-commentary","tag-es","tag-fr","tag-ja","tag-pt"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/itishoemath.com\/es_es\/wp-json\/wp\/v2\/posts\/3573","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=3573"}],"version-history":[{"count":61,"href":"https:\/\/itishoemath.com\/es_es\/wp-json\/wp\/v2\/posts\/3573\/revisions"}],"predecessor-version":[{"id":5765,"href":"https:\/\/itishoemath.com\/es_es\/wp-json\/wp\/v2\/posts\/3573\/revisions\/5765"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/itishoemath.com\/es_es\/wp-json\/wp\/v2\/media\/3575"}],"wp:attachment":[{"href":"https:\/\/itishoemath.com\/es_es\/wp-json\/wp\/v2\/media?parent=3573"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itishoemath.com\/es_es\/wp-json\/wp\/v2\/categories?post=3573"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itishoemath.com\/es_es\/wp-json\/wp\/v2\/tags?post=3573"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}