{"id":5778,"date":"2025-10-10T07:49:47","date_gmt":"2025-10-10T12:49:47","guid":{"rendered":"https:\/\/itishoemath.com\/?p=5778"},"modified":"2025-10-10T07:52:13","modified_gmt":"2025-10-10T12:52:13","slug":"les-niveaux-eleves-de-reflexion-et-la-facon-dont-ils-ameliorent-parfois-les-choses","status":"publish","type":"post","link":"https:\/\/itishoemath.com\/fr\/les-niveaux-eleves-de-reflexion-et-la-facon-dont-ils-ameliorent-parfois-les-choses\/","title":{"rendered":"Les hauts niveaux de pens\u00e9e [et comment ils am\u00e9liorent parfois les choses]"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"5778\" class=\"elementor elementor-5778\" 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>Vous pensez \u00eatre \"\u00e9volu\u00e9\" ? D\u00e9trompez-vous - Le pi\u00e8ge des niveaux sup\u00e9rieurs<\/h4>\n\n   \nLa plupart des gens pensent que la \"conscience sup\u00e9rieure\" est synonyme de tol\u00e9rance et d'amour. <span>h<\/span>oe_math montre comment cet \u00e9tat d'esprit d\u00e9truit secr\u00e8tement les relations, la culture et l'identit\u00e9 elle-m\u00eame. Le probl\u00e8me ? Nombreux sont ceux qui restent bloqu\u00e9s dans une pens\u00e9e enfantine d\u00e9guis\u00e9e en sagesse. Dans cette vid\u00e9o, <span>h<\/span>oe_math d\u00e9compose la v\u00e9ritable hi\u00e9rarchie de la pens\u00e9e - de l'\u00e9gocentrisme \u00e0 la conscience de soi - en exposant comment l'\"inclusion\" sans limites devient le chaos. Le d\u00e9verrouillage final ? De sept \u00e0 neuf : l'acceptation, la compr\u00e9hension au niveau m\u00e9ta et la clart\u00e9 absolue dans les limites du moment - plus les limites qui tiennent vraiment et qui aident \u00e0 concevoir des communaut\u00e9s imparables. La finalit\u00e9 n'est pas l'acceptation aveugle - c'est la clart\u00e9, les limites et la conception.\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|210|Fondations|Crise de pens\u00e9e de bas niveau|D\u00e9finit les enjeux en liant les ruptures relationnelles et politiques \u00e0 une mauvaise prise de perspective, o\u00f9 le d\u00e9saccord est interpr\u00e9t\u00e9 comme de la haine et de la victimisation. Introduit l'exemple de la maison enfum\u00e9e pour montrer comment le fait de ne pas tenir compte du point de vue des autres cr\u00e9e un conflit.\n   210|480|Outils|Mission et aper\u00e7u de Self-Max|Explique l'objectif de sensibilisation \u00e0 l'aide de diagrammes et d'un outil d'intelligence artificielle qui relie le d\u00e9sir \u00e0 l'action et \u00e0 l'apprentissage. Pr\u00e9sente Level Check, y compris une version vocale, comme un moyen de mesurer et d'am\u00e9liorer son niveau actuel.\n   480|900|Perspectives|Niveaux 1 \u00e0 5 expliqu\u00e9s|Expose le raisonnement de la premi\u00e8re \u00e0 la troisi\u00e8me personne en utilisant le sc\u00e9nario p\u00e8re-fille-gar\u00e7on. Montre comment les niveaux sup\u00e9rieurs ajoutent de la clart\u00e9 en mod\u00e9lisant l'esprit et les cons\u00e9quences des autres plut\u00f4t qu'en se contentant d'ob\u00e9ir ou de se rebeller.\n   900|1140|Individualiste|Dynamique du niveau 6|D\u00e9crit une perspective \u00e0 la quatri\u00e8me personne o\u00f9 l'on peut choisir entre plusieurs soi possibles, ce qui favorise l'anticonformisme et l'inclusion. Note l'instabilit\u00e9 des options de soi sans fin et sans engagement ferme.\n   1140|1380|Paradoxe|Contradiction de l'inclusion|Montre comment \"inclure tout le monde\" \u00e9choue lorsque les groupes refusent la tol\u00e9rance r\u00e9ciproque. Met en \u00e9vidence les limites de QI et de motivation en tant que contraintes pratiques \u00e0 l'inclusion universelle.\n   1380|1680|D\u00e9tachement|\"Je ne suis pas mon esprit\"|Marque le passage au niveau sept en s\u00e9parant l'identit\u00e9 des pens\u00e9es, comme on s\u00e9pare le moi de la faim corporelle. Recadre la soci\u00e9t\u00e9 de planification autour des esprits r\u00e9els tels qu'ils sont, et non tels qu'ils \" devraient \" \u00eatre.\n   1680|1950|Les fronti\u00e8res|Tout \u00e0 sa place|Contredit le \"toussisme\" et affirme que le m\u00e9lange de normes incompatibles fait sombrer les institutions dans le chaos. Il pr\u00e9conise des espaces distincts avec des r\u00e8gles claires plut\u00f4t qu'une synth\u00e8se forc\u00e9e.\n   1950|2220|Conscience de la construction|Niveau huit de recadrage|Mod\u00e8le le fait de remarquer comment les jugements sont construits en temps r\u00e9el et de choisir des r\u00e9cits alternatifs. Met l'accent sur la libert\u00e9 de choisir des cadres d'interpr\u00e9tation avant d'agir.\n   2220|2550|Compl\u00e9tion|Niveau 9 geste|Il s'agit d'observer le choix, d'accepter et de vivre la premi\u00e8re \u00e9tape du voyage. Utilise le clich\u00e9 du sage pour mettre l'accent sur des disciplines \u00e9videntes mais oubli\u00e9es, comme le fait de commencer l\u00e0 o\u00f9 l'on est.\n   2550|2845|Application|De l'obligation au plan|Rejette l'id\u00e9e d'imposer des obligations au monde en faveur de l'acceptation, qui permet de d\u00e9finir des actions et des limites plus claires. Il se termine par un appel pratique \u00e0 utiliser des outils structur\u00e9s et \u00e0 passer \u00e0 l'\u00e9tape suivante.\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 Apr\u00e8s un rapide tour d'horizon, je lance \"PsychoMath by Homath (Levels Two)\" pour expliquer les niveaux de conscience sup\u00e9rieurs et les raisons pour lesquelles les rechercher peut se retourner contre soi.\n60 Les relations, les mariages et m\u00eame les nations se d\u00e9sagr\u00e8gent parce que trop d'adultes ne pensent plus comme des adultes.\n120 La s\u00e9rie porte sur les \"niveaux\/couches de pens\u00e9e\" : comment ils fonctionnent, pourquoi ils sont importants, pourquoi le fait de pr\u00e9tendre \u00eatre au sommet freine la croissance et comment les niveaux inf\u00e9rieurs d\u00e9clenchent des conflits.\n180 Exemple : un invit\u00e9 veut fumer dans la maison de quelqu'un d'autre ; il ne peut pas adopter le point de vue de l'h\u00f4te, il interpr\u00e8te donc le \"non\" comme de la haine ou de la m\u00e9chancet\u00e9 et d\u00e9clenche une bagarre.\n240 L'h\u00f4te saisit des perspectives multiples (\"ma maison, mes r\u00e8gles\"), une d\u00e9marche de plus haut niveau ; les personnes qui n'en sont pas capables se sentent victimes chaque fois qu'elles sont bloqu\u00e9es.\n300 Culturellement, nous attendions des adultes des comp\u00e9tences de niveau 4-5 - \"nous ne sommes pas d'accord, trouvons une solution\" - mais un grand groupe insiste aujourd'hui sur une seule bonne fa\u00e7on de faire et sur le fait de faire ce qu'ils veulent \"dans votre maison\".\n360 L'affirmation : les gens de droite peuvent mieux articuler les points de vue de la gauche que l'inverse ; un \"test de niveau\" dans la vie r\u00e9elle consiste \u00e0 demander \u00e0 votre adversaire d'expliquer vos croyances de mani\u00e8re \u00e9quitable.\n420 S'il r\u00e9pond \"Vous \u00eates mauvais\/folle\", c'est un niveau bas : vous \u00eates d\u00e9shumanis\u00e9 pour avoir \u00e9t\u00e9 en d\u00e9saccord ; il cite comme preuve de d\u00e9shumanisation les foules qui c\u00e9l\u00e8brent le mal fait \u00e0 leurs adversaires politiques.\n480 Beaucoup sont coinc\u00e9s dans le pouvoir\/contr\u00f4le et l'appartenance \u00e0 un groupe ; le fait de ne pas explorer d'autres modes de vie maintient la soci\u00e9t\u00e9 dans l'instabilit\u00e9 et le sous-d\u00e9veloppement.\n540 \u00c9nonc\u00e9 de mission : enseigner aux gens \u00e0 penser \u00e0 des niveaux plus \u00e9lev\u00e9s au moyen de diagrammes - et d'un outil de parrainage, Self-Max, qui cartographie le d\u00e9sir \u2192 l'esprit \u2192 les actions \u2192 le monde \u2192 l'apprentissage.\n600 Self-Max : fixez des objectifs, obtenez des suggestions de l'IA et faites le \"Level Check\" (maintenant avec la voix) pour rep\u00e9rer votre niveau actuel et l'\u00e9lever ; l'auteur partage ses propres 7 dans les relations, 3 dans les besoins.\n660 Enveloppe de la publicit\u00e9 : les outils vous aident \u00e0 remarquer votre esprit et \u00e0 \u00e9voluer plus rapidement - cliquez sur le lien ou visitez selfmax.ai.\n720 Nouveau tableau : la notion de \"table\/table\" - \"Qu'apportez-vous \u00e0 la table ?\" contre \"Je suis la table\" - est un raccourci pour les droits qui ignorent les besoins des autres.\n780 Trop de \"m\u00e9ritants\" drainent la valeur alors que les \"fournisseurs\" la construisent ; sa cha\u00eene utilise des clips TikTok viraux pour attirer l'attention mais vise \u00e0 \u00e9lever la r\u00e9flexion.\n840 Il change de marque pour devenir PsychoMath (psychologie + mesure, jeu de mots sur \"psychopathe\") ; Homath reste une sous-marque.\n900 Avertissement : les gens romantisent les niveaux sup\u00e9rieurs - confondant les panneaux indicateurs avec les destinations ; pr\u00e9tendre que vous y \u00eates garantit que vous ne ferez pas le travail n\u00e9cessaire pour y arriver.\n960 La croissance n\u00e9cessite une m\u00e9tacognition : La croissance passe par la m\u00e9tacognition : \"Qu'est-ce que je pense, qu'est-ce que je ressens et pourquoi ?\" - attrapez les histoires int\u00e9ress\u00e9es de votre cerveau avant de les croire.\n1020 Les mensonges les plus courants : \"Je suis toujours le gentil\", \"Je m\u00e9rite plus\" ou \"Les faits g\u00eanants doivent \u00eatre faux - laissez-moi les \u00e9liminer par le jeu des mots\".\n1080 La plupart \u00e9crivent une histoire avec les parties inf\u00e9rieures du cerveau, y croient et qualifient les dissidents de monstres ; les parties inf\u00e9rieures du cerveau sont faciles \u00e0 manipuler.\n1140 Pour s'\u00e9lever, il faut continuer \u00e0 interroger son histoire et \u00e0 absorber les perspectives des autres ; \"niveau sup\u00e9rieur\" \u2260 plus beau\/plus riche - il s'agit d'une prise de perspective plus profonde.\n1200 Exemple d'\u00e9chelle (fille, p\u00e8re, gar\u00e7on) : au niveau 5, elle se rend compte des pens\u00e9es de son p\u00e8re sur les pens\u00e9es des gar\u00e7ons - des pens\u00e9es sur les pens\u00e9es sur les pens\u00e9es.\n1260 Du bas de l'\u00e9chelle : D\u00e9sirs \u00e0 la 1\u00e8re personne (\"se faufiler quand papa ne regarde pas\"), conformit\u00e9 \u00e0 la 2\u00e8me personne (\"bonne fille\"), autonomie \u00e0 la 3\u00e8me personne (\"ses propres risques, ses propres choix\").\n1320 Adulte minimum : comprendre les cons\u00e9quences, choisir et s'approprier les r\u00e9sultats - au lieu d'entendre le p\u00e8re comme un simple contr\u00f4le.\n1380 Beaucoup de jeunes gens d'aujourd'hui sautent l'\u00e9tape de la sagesse et le regrettent plus tard ; des niveaux plus \u00e9lev\u00e9s permettent d'\u00e9viter des souffrances pr\u00e9visibles.\n1440 Il passe en revue le niveau 6 et explique pourquoi le saut 6\u21927 est culturellement crucial - les personnes de niveau 6 imaginent souvent qu'elles sont de niveau 8-9.\n1500 Niveau 6 (4e personne) : empiler une autre couche de perspectives ; effectuer des simulations multi-esprits et choisir qui \u00eatre par rapport \u00e0 elles.\n1560 Au fur et \u00e0 mesure que les perspectives se multiplient, l'identit\u00e9 devient fluide ; l'\"individualiste\" r\u00e9siste aux r\u00e8gles pour \"\u00eatre moi-m\u00eame\", se conformant parfois simplement \u00e0 l'anticonformisme.\n1620 L'inclusion \u00e9merge : \"Si je veux ma libert\u00e9, tu auras la tienne\" - mais l'inclusion se heurte \u00e0 des groupes qui la rejettent.\n1680 Contradiction fondamentale : l'inclusion de ceux qui ne sont pas inclus tol\u00e8re l'intol\u00e9rance ; on ne peut pas forcer la croissance, et les plafonds de capacit\u00e9 (y compris la r\u00e9partition du QI) existent.\n1740 Essayer de construire un monde pour l'inclusion 100% alors que beaucoup ne le feront pas est un projet Babel - la communication s'effondre.\n1800 Solution : passer au niveau 7 ; prendre du recul et constater que \"je ne suis pas mon esprit\".\n1860 Analogie : vous n'\u00eates pas votre corps ; de m\u00eame, vous n'\u00eates pas vos pens\u00e9es ou vos identit\u00e9s - ce sont des exp\u00e9riences, comme la faim, qui passent.\n1920 Voir l'esprit comme un processus en soi permet de le voir chez les autres ; on se souvient de ses propres changements de niveau \u00e0 travers le temps et on remarque que la plupart des gens ne changent pas beaucoup.\n1980 Le niveau 7 con\u00e7oit les esprits humains tels qu'ils sont : il planifie les communaut\u00e9s en fonction des dispositions r\u00e9elles, et non des souhaits.\n2040 De \"tout le monde partout\" \u00e0 \"chaque chose \u00e0 sa place\" : scripts distincts, lieux distincts, fronti\u00e8res claires ; les r\u00e8gles de la maison l'emportent sur la bouillie.\n2100 Exemple de fronti\u00e8re : il y a un endroit pour un bar gay et un endroit pour l'islam strict, mais pas le m\u00eame endroit ; quiconque entre se conforme au sc\u00e9nario de cet endroit.\n2160 Les personnes de niveau 6 interpr\u00e8tent \u00e0 tort les limites comme de l'hostilit\u00e9 ; le niveau 7 dit \"ma maison, mes r\u00e8gles\", avec des espaces pluriels plut\u00f4t qu'une uniformit\u00e9 impos\u00e9e.\n2220 Niveau 8 (conscient de la construction) : vous vous observez en train d'assembler des histoires r\u00e9elles en temps r\u00e9el et vous pouvez choisir de meilleures constructions.\n2280 Pratique : remarquez que votre histoire se r\u00e9sume \u00e0 \"chapeau d'abruti \u2192 type d'abruti\" ; suspendez-la, cherchez plus de donn\u00e9es et reconstruisez une histoire plus juste \u00e0 propos de Steve.\n2340 Self-Max vise \u00e0 guider exactement ce mouvement de \"choix de la meilleure histoire\".\n2400 Niveau 9 (6e personne, provisoire) : la conscience surveille non seulement la construction de l'histoire, mais le choix lui-m\u00eame - po\u00e9tique, subtil, difficile \u00e0 dessiner.\n2460 Le clich\u00e9 du sage : les v\u00e9rit\u00e9s \u00e9videntes sont importantes parce que nous oublions la premi\u00e8re \u00e9tape ; \"la question est la r\u00e9ponse\" une fois que vous vous engagez maintenant.\n2520 Accepter \u00e0 9 ans, ce n'est pas abandonner, c'est habiter l'\u00e9tape actuelle du voyage pour que l'action s'\u00e9claircisse.\n2580 Il se souvient des sauts pass\u00e9s entre les niveaux ; le 9 semble \u00eatre une autre transition vers une agence calme et sans agitation (l'enfant sans bonbons qui s'assoit avec la d\u00e9ception).\n2640 Citation : la compassion n'arr\u00eate pas un chien enrag\u00e9 ; la gentillesse ne change pas les ours - vous avez toujours besoin de spray anti-ours et de limites dans le monde r\u00e9el.\n2700 \"Devrait\" la r\u00e9alit\u00e9 est une \u00e9nergie de col\u00e8re ; accepter ce qui est, alors vous verrez ce qu'il faut faire ; les niveaux plus \u00e9lev\u00e9s signifient voir plus de ce qui est devant vous.\n2760 Le chemin vers le haut n'est pas un feu d'artifice mystique ; il s'agit d'\u00eatre attentif \u00e0 la fa\u00e7on dont on regarde, de moins s'\u00e9nerver, de moins forcer, de plus placer et concevoir.\n2820 Cl\u00f4ture : passer \u00e0 l'\u00e9tape concr\u00e8te suivante ; c'est ainsi que l'on grimpe - d'o\u00f9 l'utilisation de Self-Max et de Level Check pour \u00e9chafauder le travail.\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: \"YpoOf6uak-A\" },\n  es: { type: \"youtube\", id: \"\" }, \n  fr: { type: \"youtube\", id: \"\" },\n  ja: { type: \"youtube\", id: \"\" },\n  pt: { type: \"youtube\", id: \"\" } \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\">Les traductions et la transcription simplifi\u00e9e sont bas\u00e9es sur les traductions du mat\u00e9riel original, localis\u00e9 en plusieurs langues. R\u00e9alis\u00e9 par PeakCreatorRoyalty.com sous licence de <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>Vous pensez \u00eatre \"\u00e9volu\u00e9\" ? R\u00e9fl\u00e9chissez encore - Le pi\u00e8ge des niveaux sup\u00e9rieurs La plupart des gens pensent qu'une \"conscience sup\u00e9rieure\" est synonyme de tol\u00e9rance et d'amour - mais hoe_math montre comment cet \u00e9tat d'esprit d\u00e9truit secr\u00e8tement les relations, la culture et l'identit\u00e9 elle-m\u00eame. Le probl\u00e8me ? Beaucoup sont coinc\u00e9s dans une pens\u00e9e enfantine d\u00e9guis\u00e9e en sagesse. Dans cette vid\u00e9o, hoe_math d\u00e9compose la v\u00e9ritable [...]<\/p>","protected":false},"author":6,"featured_media":5782,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[140,141,102,130,103,143,142,108],"tags":[],"class_list":["post-5778","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-levels","category-psychological-development","category-public","category-recent","category-relationships","category-self-maximize","category-self-awareness","category-social-commentary"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/itishoemath.com\/fr\/wp-json\/wp\/v2\/posts\/5778","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itishoemath.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itishoemath.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itishoemath.com\/fr\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/itishoemath.com\/fr\/wp-json\/wp\/v2\/comments?post=5778"}],"version-history":[{"count":6,"href":"https:\/\/itishoemath.com\/fr\/wp-json\/wp\/v2\/posts\/5778\/revisions"}],"predecessor-version":[{"id":5785,"href":"https:\/\/itishoemath.com\/fr\/wp-json\/wp\/v2\/posts\/5778\/revisions\/5785"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/itishoemath.com\/fr\/wp-json\/wp\/v2\/media\/5782"}],"wp:attachment":[{"href":"https:\/\/itishoemath.com\/fr\/wp-json\/wp\/v2\/media?parent=5778"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itishoemath.com\/fr\/wp-json\/wp\/v2\/categories?post=5778"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itishoemath.com\/fr\/wp-json\/wp\/v2\/tags?post=5778"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}