{"id":5718,"date":"2025-09-07T13:47:14","date_gmt":"2025-09-07T18:47:14","guid":{"rendered":"https:\/\/itishoemath.com\/?p=5718"},"modified":"2025-09-07T17:36:25","modified_gmt":"2025-09-07T22:36:25","slug":"merecimento","status":"publish","type":"post","link":"https:\/\/itishoemath.com\/pt_pt\/merecimento\/","title":{"rendered":"O merecedor [Lista de n\u00edveis do drama de direita da E-Girl]"},"content":{"rendered":"<div data-elementor-type=\"wp-post\" data-elementor-id=\"5718\" class=\"elementor elementor-5718\" 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>Drama da rapariga eletr\u00f3nica de direita<\/h4>\n\nUm recente conflito no Twitter entre influenciadoras de direita \u00e9 utilizado para ilustrar os conceitos de \"fornecer\" e \"merecer\". <span>h<\/span>oe_math destaca a forma como os comportamentos de procura de aten\u00e7\u00e3o se manifestam no mundo dos influenciadores conservadores em linha. Critica a tend\u00eancia que as mulheres conservadoras t\u00eam de procurar valida\u00e7\u00e3o e recursos sem fornecer<!--preview--> valor correspondente em troca.<br><br><span>h<\/span>oe_math usa os princ\u00edpios de \"Merecer\" e \"Fornecer\" para classificar as e-girls conservadoras recentemente envolvidas na guerra do Twitter\/X do Sarah Stock Engagement. Ele incentiva os espectadores a reconhecer e a estabelecer limites contra reivindica\u00e7\u00f5es imerecidas da sua aten\u00e7\u00e3o e dos seus recursos. S\u00f3 \u00e9 preciso aprender a import\u00e2ncia de dizer N\u00c3O a quem merece e que pouco ou nada d\u00e1 em troca.\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|66|Drama|Drama do Twitter das E-Girls de Direita|\"O epis\u00f3dio come\u00e7a com um resumo de uma recente rixa no Twitter entre influenciadoras de direita, desencadeada por um an\u00fancio de noivado e que se transformou em ataques pessoais e competi\u00e7\u00e3o de status.\"\n66|180|Deserving|Conceito de merecimento explicado|\"O conceito de 'merecimento' \u00e9 introduzido, descrevendo como algumas pessoas, especialmente mulheres neste contexto, s\u00e3o vistas como esperando recursos, aten\u00e7\u00e3o ou valida\u00e7\u00e3o sem fornecer valor rec\u00edproco.\"  \n180|360|Providing|Conceito de Providing Explicado|\"A contrapartida de merecer, 'providenciar', \u00e9 explicada como contribuir ativamente com valor, seja atrav\u00e9s de a\u00e7\u00e3o, conte\u00fado ou apoio, e os problemas que surgem quando os merecedores est\u00e3o a cargo dos fornecedores.\"  \n360|540|Exemplos|Drama como um estudo de caso|\"O drama do Twitter \u00e9 dissecado como um exemplo real de merecimento versus fornecimento, mostrando como o comportamento do influenciador pode ser avaliado com base no facto de contribuir com valor ou simplesmente exigir aten\u00e7\u00e3o.\"  \n540|900|Tier_List|E-Girl Tier List Analysis|\"\u00c9 apresentada uma lista de n\u00edveis, classificando v\u00e1rias e-girls de direita com base na sua rela\u00e7\u00e3o entre fornecer e merecer, com coment\u00e1rios sobre indiv\u00edduos espec\u00edficos e as suas ac\u00e7\u00f5es online durante o drama.\"  \n900|1100|Reflex\u00e3o|Implica\u00e7\u00f5es sociais mais amplas|\"A discuss\u00e3o alarga-se para refletir sobre os perigos do comportamento de merecimento descontrolado na sociedade, a import\u00e2ncia de estabelecer limites e a necessidade de troca m\u00fatua nas rela\u00e7\u00f5es e comunidades.\"  \n1100|1168|Aconselhamento|Encorajamento para estabelecer limites|\"O epis\u00f3dio conclui encorajando os espectadores a reconhecerem o comportamento de merecimento, a defenderem os seus limites e a assegurarem-se de que se envolvem em trocas justas em vez de serem explorados por aqueles que s\u00f3 tiram.\"\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 Lamento, mas o n\u00famero de rapazes brancos de 19 anos com chap\u00e9us MAGA que me enviam mensagens sobre como preciso de encontrar Deus e me chamam de degenerado \u00e9 selvagem. Porque n\u00e3o te preocupas contigo? Eu estou a vibrar, a arrasar e a divertir-me.\n12 Drama da e-girl de direita no Twitter - se n\u00e3o viste, ainda bem. Houve uma grande luta de gatos no Twitter recentemente, o que, honestamente, \u00e9 mais uma prova de que o lugar das mulheres n\u00e3o \u00e9 na pol\u00edtica.\n27 Sarah Stock, uma jovem e bonita rapariga de direita, ficou noiva, mas em vez de a felicitarem, toda a gente teve um problema com isso. Demorou cerca de 10 minutos para que as coisas passassem de \"vou-me casar\" para o caos.\n41 Provavelmente j\u00e1 ouviu dizer que \"o pessoal \u00e9 pol\u00edtico\" - significa que as suas emo\u00e7\u00f5es moldam as suas cren\u00e7as. As emo\u00e7\u00f5es femininas, argumenta o orador, s\u00e3o como o plut\u00f3nio: precisam de ser manuseadas com cuidado ou tornar-se-\u00e3o incontrol\u00e1veis.\n55 Porque \u00e9 que vos estou a falar do drama da e-girl de direita no Twitter? Primeiro, porque d\u00e1 cliques. Em segundo lugar, \u00e9 um \u00f3timo exemplo para vos ensinar a diferen\u00e7a entre fornecer e merecer.\n73 Mesmo quando as mulheres dizem que s\u00e3o conservadoras, continuam a ser mulheres, e as mulheres s\u00e3o naturalmente \"merecedoras\". O seu padr\u00e3o \u00e9 merecer, e isso \u00e9 bom desde que estejam a receber coisas de pessoas que concordam em fornecer.\n90 O problema \u00e9 quando as pessoas merecem coisas daqueles que n\u00e3o concordam em fornecer. Isso quebra toda a cadeia - se os fornecedores n\u00e3o querem fornecer, param, e ent\u00e3o nada \u00e9 constru\u00eddo.\n113 \u00c9 por isso que os merecedores nunca podem estar no comando dos fornecedores; isso faz com que fornecer pare\u00e7a um mau neg\u00f3cio, por isso os fornecedores desistem, e n\u00e3o se pode simplesmente sair para a natureza e esperar que as coisas apare\u00e7am para n\u00f3s.\n139 Quando o merecimento est\u00e1 no comando, os homens ficam frustrados porque as mulheres come\u00e7am a merecer tudo dos homens, at\u00e9 que os homens n\u00e3o t\u00eam mais o suficiente para serem merecidos, e ent\u00e3o eles n\u00e3o se casam - ou porque n\u00e3o podem pagar, ou porque t\u00eam medo que ela mere\u00e7a a casa deles.\n163 Este drama do Twitter \u00e9 um \u00f3timo exemplo de como o merecimento funciona. As raparigas desfizeram-se umas \u00e0s outras porque algu\u00e9m ganhou um anel, o que significa \"eu mere\u00e7o aten\u00e7\u00e3o e estatuto\", mas nem todas elas forneceram realmente conte\u00fado valioso.\n185 Assim, apesar de se dizerem conservadoras, est\u00e3o a agir de forma \"merecedora\". O orador vai analisar o drama pouco a pouco e dar uma lista de n\u00edveis de e-girls de direita com base em fornecer versus merecer.\n201 A seta vermelha para cima no log\u00f3tipo de Self-Max simboliza fazer as coisas acontecerem - transformar ideias em ac\u00e7\u00f5es que moldam o seu ambiente. O objetivo do Selfmax \u00e9 ensinar-te a fazer isto.\n221 A sec\u00e7\u00e3o do ambiente \u00e9 azul porque \u00e9 da\u00ed que v\u00eam as coisas. Os merecedores querem que as coisas venham do ambiente, como o Pai Natal. O orador quer que saiba como tornar os seus desejos realidade, mas tamb\u00e9m que compreenda o que \u00e9 merecer.\n243 O orador queixa-se muito do merecimento, chamando-lhe \"ser a mesa\". \u00c9 por isso que algumas pessoas fingem ser v\u00edtimas - se algu\u00e9m nos magoa, est\u00e1 em d\u00edvida para connosco. \u00c9 por isso que tantas mulheres divorciadas alegam abuso; por vezes, significa apenas querer mais coisas.\n278 Merecer \u00e9 a raz\u00e3o da exist\u00eancia da \"zona de mist\u00e9rio\" - para esconder o merecimento. Tipo: \"Tu deves fazer o que eu quero, mesmo que eu n\u00e3o o diga\". Evolutivamente, os homens tinham de obter coisas do ambiente, as mulheres tinham de as merecer. \u00c9 por isso que todas querem ser princesas - a mais merecedora.\n316 Estas setas - fornecer e merecer - s\u00e3o basicamente masculino\/feminino, ativo\/passivo, criar\/consumir. \"Vou ter o que quero do mundo\" versus \"Mere\u00e7o o que quero do que tens\".\n329 Merecer n\u00e3o \u00e9 mau. \u00c9 suposto as mulheres e as crian\u00e7as merecerem, \u00e9 suposto os homens providenciarem. N\u00e3o se diz a uma mulher: \"Vai ca\u00e7ar o mamute sozinha\". Isso nunca aconteceu, apesar do que alguns afirmam.\n346 Os provedores s\u00f3 fornecem se se preocuparem com as pessoas a quem est\u00e3o a fornecer. O orador n\u00e3o quer que seja qualquer pessoa a merec\u00ea-los, mas, neste momento, sente que tem de pagar a quem merece infinitamente, ou a pol\u00edcia vem busc\u00e1-lo.\n361 \u00c9 preciso ser capaz de reconhecer o merecimento quando o vemos. O orador assinala-o e, ao mesmo tempo, comenta o drama das raparigas. No final do v\u00eddeo, deve ser capaz de perceber quando algu\u00e9m est\u00e1 a fornecer valor e n\u00e3o apenas a merecer a sua aten\u00e7\u00e3o.\n376 O resumo: mulheres influenciadoras de direita tiveram uma grande briga de gatas, aparentemente porque uma delas se casou. N\u00e3o se viu nenhuma raz\u00e3o mais profunda.\n393 A primeira coisa que o orador viu foi algu\u00e9m zangado por algu\u00e9m estar zangado por Sarah Stock ter ficado noiva. Tem havido tens\u00e3o entre as e-girls de direita porque s\u00e3o raparigas e odeiam-se umas \u00e0s outras. Sarah publica o seu anel; drama imediato.\n415 As respostas dividem-se em \"tinha raz\u00e3o\" e \"n\u00e3o era preciso\". Isto \u00e9 importante para identificar os merecedores, mas n\u00e3o para o discurso p\u00fablico, porque ambos conduziram a uma escalada.\n430 A chave para identificar os merecedores: esta pessoa est\u00e1 a fornecer algo de valor, ou apenas a redirecionar recursos (como a aten\u00e7\u00e3o) para si pr\u00f3pria?\n446 Num mercado, temos de fazer algo de valor e trocar por algo que outra pessoa fez e que valorizamos. Fornecer \u00e9 lutar por algo e troc\u00e1-lo; merecer \u00e9 apenas dizer: \"Quero a minha parte\".\n470 Este v\u00eddeo ajuda-o a compreender as pessoas - o orador passou 20 anos a ganhar compreens\u00e3o e agora est\u00e1 a fornec\u00ea-la a si, e voc\u00ea est\u00e1 a fornecer aten\u00e7\u00e3o (que se torna dinheiro). Isso \u00e9 uma troca; isso \u00e9 fornecer.\n499 Fornecer e merecer n\u00e3o s\u00e3o opostos; s\u00e3o como perguntar e responder. Quando o orador publica um v\u00eddeo, est\u00e1 a merecer a sua aten\u00e7\u00e3o, mas n\u00e3o tem de o ver. Merecer sem troca \u00e9 apenas querer aten\u00e7\u00e3o para nada.\n517 O merecimento s\u00f3 faz sentido se houver uma troca - por exemplo, se algu\u00e9m trabalha para ti, merece ser pago. Ou se magoar algu\u00e9m, essa pessoa merece uma indemniza\u00e7\u00e3o. Ou os nossos entes queridos merecem apoio porque os amamos e recebemos felicidade em troca.\n541 Tenha cuidado com as pessoas que merecem de si, apesar de n\u00e3o receber nada. Isso perturba os prestadores de servi\u00e7os e, por isso, ou desistem ou tentam fazer alguma coisa.\n552 A tabela de n\u00edveis \u00e9 um r\u00e1cio entre o que fornece e o que merece. Se a e-girl fornece valor, ganha pontos; se deita os outros abaixo ou pede aten\u00e7\u00e3o a troco de nada, s\u00e3o-lhe subtra\u00eddos pontos. A lista \u00e9 apenas a opini\u00e3o do orador.\n573 Quanto mais merecedoras formos, menos conservadoras podemos ser, porque estas mulheres t\u00eam carreiras baseadas no facto de n\u00e3o estarem no fundo. O merecimento aconteceu rapidamente - cerca de 10 minutos entre \"estou noiva\" e \"toda a gente menos eu \u00e9...\"\n601 Nesta altura, j\u00e1 n\u00e3o se tratava de casar; tratava-se de saber quem dormiu com quem e quem est\u00e1 falido. Foram necess\u00e1rias cerca de duas respostas para passar de \"tenho um anel\" para o caos. O drama intensificou-se e pode ainda estar a decorrer.\n628 Os espectadores tamb\u00e9m se manifestaram. As e-girls de direita com melhor pontua\u00e7\u00e3o mantiveram-se fora do drama e apenas comentaram o comportamento, n\u00e3o se envolvendo.\n644 O merecimento aconteceu no pr\u00f3prio drama. Eis o que se passou: Sarah Stock publicou o seu noivado. O orador d\u00e1 a Sarah uma classifica\u00e7\u00e3o de A com 30% de certeza - ela tem sido consistente e o orador viu um clip dela a \"estragar o dia a um rapaz\" com um facto verdadeiro mas impopular.\n688 Dizer coisas verdadeiras, mesmo quando impopulares, \u00e9 um sinal de valor. A Sarah recebe um A, n\u00e3o um S, porque a Pearl Davis fez uma afirma\u00e7\u00e3o v\u00e1lida: A Sarah colocou o seu anel para chamar a aten\u00e7\u00e3o e ficou ofendida quando foi chamada de ciclo cl\u00e1ssico da \"mulher moderna\".\n716 O orador acha que n\u00e3o h\u00e1 problema em publicar a sua alian\u00e7a de casamento, mas os influenciadores usam as suas fam\u00edlias e rela\u00e7\u00f5es para chamar a aten\u00e7\u00e3o, o que \u00e9 \"deservoso\". \u00c9 pedir para ser inclu\u00eddo por causa de quem se \u00e9, n\u00e3o pelo que se fez.\n743 Pearl recebe um A por raz\u00f5es semelhantes: drama e \"ho scaring\". Pearl salienta que as mulheres conservadoras usam a sua juventude contra si pr\u00f3prias e depois tentam \"aterrar\" aos 32 anos. Dizer as coisas como elas s\u00e3o assusta as \"gajas\", mas Pearl tem raz\u00e3o quando diz que mostrar o anel e n\u00e3o o homem pode ser um mau sinal.\n793 Na pior das hip\u00f3teses, o homem est\u00e1 apenas a pagar para a publicitar ao pr\u00f3ximo homem - o m\u00e1ximo de merecimento. N\u00e3o se pode ser conservadora e usar os homens como trampolins; isso \u00e9 apenas feminismo.\n815 Metade destas mulheres pode e vai divorciar-se dos seus maridos e usar a sua marca para fazer publicidade ao marido n\u00famero dois. O orador diz que n\u00e3o sabe dizer se a Pearl sabe alguma coisa ou n\u00e3o, mas ela parece genu\u00edna e frustrada com as mulheres.\n843 Pearl \u00e9 \u00f3ptima a apontar os truques que as mulheres fazem, mas ela pr\u00f3pria os faz e admite-o. Chama a aten\u00e7\u00e3o das mulheres para as coisas que ela faz, mas \u00e9 honesta. A P\u00e9rola obt\u00e9m um A, 90% certeza.\n860 Isabella Maria de Luca: o orador n\u00e3o a conhece, mas ela destacou-se no drama de uma forma improdutiva. Diz que n\u00e3o publica fotografias de biqu\u00edni, mas publica, afirma ter uma pureza elevada, F, 20% de certeza.\n876 Morgan Ariel: o orador nunca tinha ouvido falar dela, mas agora conhece-a por ter dito \"you give it up for free\" e outros dramas. F, 20% certeza.\n888 As tr\u00eas e-girls de direita que obtiveram um S n\u00e3o se envolveram no drama, apenas comentaram que o drama \u00e9 mau, o que \u00e9 suficiente. Shoe on Head, uma e-girl de longa data, agora mais de direita, obt\u00e9m S, 80% de certeza.\n915 Rachel Wilson, e-matron de direita, casada com Andrew Wilson, recebe S, 99% de certeza. Diz que o que faz as mulheres felizes n\u00e3o \u00e9 o que faz a civiliza\u00e7\u00e3o funcionar - o feminismo \u00e9 um merecimento sistem\u00e1tico.\n950 Leonardo Joanie pode ser a \u00fanica comediante que alguma vez disse algo verdadeiro sobre as mulheres - gozar com o drama sem se envolver. S, 85% certeza.\n963 A grande perdedora \u00e9 Emily Saves America, F, 9% certeza. O orador nunca tinha ouvido falar dela, mas ela responde \u00e0s cr\u00edticas tornando-se pessoal e deitando abaixo os outros, oferecendo apenas negatividade.\n992 Emily vive em Los Angeles, parece uma rapariga festeira e diz que est\u00e1 a vibrar, a arrasar, a festejar e a consumir drogas porque isso a faz feliz, ao mesmo tempo que insulta os seus cr\u00edticos. O orador diz que este \u00e9 um comportamento cl\u00e1ssico de merecimento.\n1037 Emily diz basicamente que n\u00e3o importa o tipo de conte\u00fado que fornece; ela merece uma rea\u00e7\u00e3o que a fa\u00e7a feliz por parte dos apoiantes. O orador pensa que ela n\u00e3o parece feliz - est\u00e1 apenas a usar a sua voz exterior para convencer toda a gente de que est\u00e1 bem.\n1064 Para todos os outros: continuem a procurar o merecimento. O orador aponta para uma imagem que mostra a rela\u00e7\u00e3o entre o fornecimento e o merecimento; quando se deixa o merecimento tomar conta, acaba por n\u00e3o sobrar nada, exceto a conta.\n1086 N\u00e3o s\u00e3o s\u00f3 as mulheres - \u00e9 qualquer pessoa que queira algo de n\u00f3s e n\u00e3o nos d\u00ea nada em troca. A sociedade ensina-nos a ter medo de dizer n\u00e3o, mas se n\u00e3o defendermos os nossos limites, ningu\u00e9m nos respeita.\n1110 Obrigado por assistir. O orador tem um novo s\u00edtio Web e os links para os livros est\u00e3o na descri\u00e7\u00e3o do v\u00eddeo.\n\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: \"KG3W-df-V-8\" },\n  es: { type: \"youtube\", id: \"G2g6SBrzuwg\" }, \n  fr: { type: \"youtube\", id: \"pM14tnA4-wA\" },\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\">As tradu\u00e7\u00f5es e a transcri\u00e7\u00e3o simplificada baseiam-se em tradu\u00e7\u00f5es do material original, localizadas em v\u00e1rias l\u00ednguas. Criado por PeakCreatorRoyalty.com sob licen\u00e7a com <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>Drama das E-Girls de Direita Um conflito recente no Twitter entre influenciadoras de direita \u00e9 utilizado para ilustrar os conceitos de \"fornecer\" e \"merecer\". hoe_math destaca a forma como os comportamentos de procura de aten\u00e7\u00e3o se manifestam no mundo dos influenciadores conservadores online. Critica a tend\u00eancia das mulheres conservadoras para procurarem valida\u00e7\u00e3o e recursos sem fornecerem o correspondente valor em troca. hoe_math usa o [...]<\/p>","protected":false},"author":6,"featured_media":5719,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[150,104,144,102,130,108,132],"tags":[127,126],"class_list":["post-5718","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-drama","category-emotional-behavior","category-marriage","category-public","category-recent","category-social-commentary","category-social-dynamics","tag-es","tag-fr"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/itishoemath.com\/pt_pt\/wp-json\/wp\/v2\/posts\/5718","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itishoemath.com\/pt_pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itishoemath.com\/pt_pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itishoemath.com\/pt_pt\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/itishoemath.com\/pt_pt\/wp-json\/wp\/v2\/comments?post=5718"}],"version-history":[{"count":27,"href":"https:\/\/itishoemath.com\/pt_pt\/wp-json\/wp\/v2\/posts\/5718\/revisions"}],"predecessor-version":[{"id":5756,"href":"https:\/\/itishoemath.com\/pt_pt\/wp-json\/wp\/v2\/posts\/5718\/revisions\/5756"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/itishoemath.com\/pt_pt\/wp-json\/wp\/v2\/media\/5719"}],"wp:attachment":[{"href":"https:\/\/itishoemath.com\/pt_pt\/wp-json\/wp\/v2\/media?parent=5718"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itishoemath.com\/pt_pt\/wp-json\/wp\/v2\/categories?post=5718"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itishoemath.com\/pt_pt\/wp-json\/wp\/v2\/tags?post=5718"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}