{"id":46984,"date":"2026-09-29T14:33:47","date_gmt":"2026-09-29T14:33:47","guid":{"rendered":"https:\/\/cursos1.nead.conasems.org.br\/?page_id=46984"},"modified":"2026-10-16T13:59:55","modified_gmt":"2026-10-16T13:59:55","slug":"coordenacao-do-cuidado-disciplina-15-caso-maria-nova-proposta","status":"publish","type":"page","link":"https:\/\/cursos1.nead.conasems.org.br\/index.php\/coordenacao-do-cuidado-disciplina-15-caso-maria-nova-proposta\/","title":{"rendered":"Coordena\u00e7\u00e3o do Cuidado &#8211; Disciplina 15 &#8211; Caso Maria &#8211; Nova proposta"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"46984\" class=\"elementor elementor-46984\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-72364d7 e-con-full capa_aps_clinicalCase capa__aps__clinicalCase__mobile__img__https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/10\/Caso-Clinico-15-CapaMobile.png capa__aps__clinicalCase__mobile__center-center e-flex e-con e-parent\" data-id=\"72364d7\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-a9df376 e-con-full hidden e-flex e-con e-child\" data-id=\"a9df376\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-91dc734 e-con-full e-flex e-con e-child\" data-id=\"91dc734\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9ba5036 elementor-widget elementor-widget-text-editor\" data-id=\"9ba5036\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Caso Cl\u00ednico<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f084d1d elementor-widget__width-initial elementor-widget-mobile__width-inherit elementor-widget elementor-widget-text-editor\" data-id=\"f084d1d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Boas pr\u00e1ticas em sa\u00fade mental e APS<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-bce8a71 elementor-widget elementor-widget-spacer\" data-id=\"bce8a71\" data-element_type=\"widget\" data-widget_type=\"spacer.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-spacer\">\n\t\t\t<div class=\"elementor-spacer-inner\"><\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-ad7e939 e-grid e-con-full e-con e-child\" data-id=\"ad7e939\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-593d6ab elementor-widget__width-inherit premium-lq__none elementor-widget elementor-widget-premium-addon-button\" data-id=\"593d6ab\" data-element_type=\"widget\" data-widget_type=\"premium-addon-button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\r\n\r\n\t\t<a class=\"premium-button premium-button-none premium-btn-block premium-button-none\" href=\"#boas-vindas\">\r\n\t\t\t<div class=\"premium-button-text-icon-wrapper\">\r\n\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t<span >\r\n\t\t\t\t\t\tIniciar\t\t\t\t\t<\/span>\r\n\t\t\t\t\t\t\t<\/div>\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t<\/a>\r\n\r\n\r\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-5cdc674 elementor-widget__width-inherit nead-popup-37738 premium-lq__none elementor-widget elementor-widget-premium-addon-button\" data-id=\"5cdc674\" data-element_type=\"widget\" data-widget_type=\"premium-addon-button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\r\n\r\n\t\t<a class=\"premium-button premium-button-none premium-btn-block premium-button-none\">\r\n\t\t\t<div class=\"premium-button-text-icon-wrapper\">\r\n\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t<span >\r\n\t\t\t\t\t\tComo navegar\t\t\t\t\t<\/span>\r\n\t\t\t\t\t\t\t<\/div>\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t<\/a>\r\n\r\n\r\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5e3351d elementor-widget elementor-widget-text-editor\" data-id=\"5e3351d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Para iniciar, clique nas caixas.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c30589f elementor-widget elementor-widget-html\" data-id=\"c30589f\" 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>\nwindow.ANOTACOES_CONFIG = {\n    scope: \"coordenacao-cuidado-disciplina-17\",\n    userId: \"anonimo\",\n};\n<\/script>\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<div class=\"elementor-element elementor-element-43557f0 e-con-full e-flex e-con e-child\" data-id=\"43557f0\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-16be84b e-con-full e-flex e-con e-child\" data-id=\"16be84b\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ab5b573 elementor-widget elementor-widget-text-editor\" data-id=\"ab5b573\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Aperfei\u00e7oamento da Pr\u00e1tica em Coordena\u00e7\u00e3o do Cuidado a partir da Aten\u00e7\u00e3o Prim\u00e1ria \u00e0 Sa\u00fade \u2013 APS<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6c98908 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"6c98908\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Caso Cl\u00ednico: Maria<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-91b75cc e-con-full e-flex e-con e-child\" data-id=\"91b75cc\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1b2a38e elementor-widget elementor-widget-button\" data-id=\"1b2a38e\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"#boas-vindas\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Iniciar<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6435c8a nead-popup-48131 elementor-widget elementor-widget-button\" data-id=\"6435c8a\" data-element_type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-button-wrapper\">\n\t\t\t\t\t<a class=\"elementor-button elementor-size-sm\" role=\"button\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Como Navegar<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\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<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-aeb5945 elementor-widget elementor-widget-html\" data-id=\"aeb5945\" 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>\r\n(async () => {\r\n    \/*\r\n     * Fallback caso haja alguma diferen\u00e7a na\r\n     * ordem de carregamento do Elementor.\r\n     *\/\r\n    if (\r\n        !window.CarePlanDrawer\r\n    ) {\r\n        await new Promise(\r\n            (resolve) => {\r\n                window.addEventListener(\r\n                    \"care-plan:class-ready\",\r\n                    resolve,\r\n                    {\r\n                        once: true,\r\n                    },\r\n                );\r\n            },\r\n        );\r\n    }\r\n\r\n    const planoDeCuidado =\r\n        new CarePlanDrawer({\r\n            lessonId:\r\n                \"disciplina-15-caso-maria\",\r\n\r\n            \/*\r\n             * Tamb\u00e9m separa o localStorage.\r\n             *\/\r\n            caseId:\r\n                \"caso-maria-15\",\r\n\r\n            \/*\r\n             * No futuro, se o LMS tiver um ID\r\n             * interno do aluno, coloque-o aqui.\r\n             *\/\r\n            studentId:\r\n                \"anonimo\",\r\n\r\n            \/*\r\n             * Textos gerais espec\u00edficos desta aula.\r\n             *\/\r\n            title:\r\n                \"Anota\u00e7\u00f5es sobre o caso cl\u00ednico de Maria\",\r\n\r\n            eyebrow:\r\n                \"\",\r\n\r\n            subtitle:\r\n                \"Preencha os campos ao longo do caso. Os registros ser\u00e3o salvos, e, posteriormente, voc\u00ea poder\u00e1 us\u00e1-los para elaborar o Plano de Cuidado da paciente.\",\r\n\r\n            \/*\r\n             * Textos introdut\u00f3rios das se\u00e7\u00f5es.\r\n             *\r\n             * Eles ficam aqui porque podem mudar conforme\r\n             * paciente, g\u00eanero, caso cl\u00ednico e aula.\r\n             *\r\n             * Para outro caso, basta alterar estes textos\r\n             * sem mexer no c\u00f3digo global do drawer.\r\n             *\/\r\n            sectionDescriptions: {\r\n                \"historia-vida\":\r\n                    \"Registre viv\u00eancias e elementos relevantes para compreender o contexto de vida da paciente.\",\r\n\r\n                \"historia-familiar\":\r\n                    \"Registre aspectos familiares e socioecon\u00f4micos que influenciam as necessidades, possibilidades de cuidado e rede de apoio da paciente.\",\r\n\r\n                \"outras-informacoes\":\r\n                    \"Inclua informa\u00e7\u00f5es importantes para o cuidado da paciente que n\u00e3o tenham sido contempladas nas se\u00e7\u00f5es anteriores.\",\r\n\r\n                \"linhas-cuidado\":\r\n                    \"Organize as condi\u00e7\u00f5es de sa\u00fade, os problemas avaliados e as ofertas ou recursos que podem compor o cuidado da paciente.\",\r\n\r\n                \"planejamento\":\r\n                    \"Registre os problemas\/condi\u00e7\u00f5es avaliadas e respectivas interven\u00e7\u00f5es.\",\r\n\r\n                \"predisposicao\":\r\n                    \"Registre o comportamento atual da paciente e o est\u00e1gio de disposi\u00e7\u00e3o para realizar mudan\u00e7as.\",\r\n\r\n                \"plano-autocuidado\":\r\n                    \"Registre as a\u00e7\u00f5es de autocuidado da paciente que apoiar\u00e3o a continuidade de seu cuidado no dia a dia. Considere dimens\u00f5es como alimenta\u00e7\u00e3o, medica\u00e7\u00e3o, atividade f\u00edsica, sono e descanso, sa\u00fade mental, depend\u00eancia de subst\u00e2ncias (cigarro, \u00e1lcool, psicoativos).\",\r\n            },\r\n\r\n            \/*\r\n             * Box \"Transcri\u00e7\u00e3o dos v\u00eddeos\".\r\n             *\r\n             * O t\u00edtulo do box \u00e9 definido no c\u00f3digo global.\r\n             * Aqui ficam apenas o texto e o PDF espec\u00edficos da aula.\r\n             *\/\r\n            transcript: {\r\n                text:\r\n                    \"Voc\u00ea ainda pode baixar a transcri\u00e7\u00e3o dos v\u00eddeos, que tamb\u00e9m auxiliar\u00e1 na elabora\u00e7\u00e3o do Plano de Cuidado.\",\r\n\r\n                \/*\r\n                 * SUBSTITUA pela URL do PDF desta aula.\r\n                 *\/\r\n                pdfUrl:\r\n                    \"COLE_AQUI_A_URL_DO_PDF_DA_TRANSCRICAO\",\r\n            },\r\n\r\n            iconUrl:\r\n                \"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/D15CasoClinicoDrawerIcon.png\",\r\n\r\n            \/*\r\n             * Mantidos os triggers espec\u00edficos desta aula.\r\n             *\/\r\n            triggers: [\r\n                {\r\n                    selector:\r\n                        \"#container-historia-vida\",\r\n\r\n                    section:\r\n                        \"historia-vida\",\r\n                },\r\n\r\n                {\r\n                    selector:\r\n                        \"#outras-informacoes\",\r\n\r\n                    section:\r\n                        \"outras-informacoes\",\r\n                },\r\n\r\n                {\r\n                    selector:\r\n                        \"#linhas-cuidado\",\r\n\r\n                    section:\r\n                        \"linhas-cuidado\",\r\n                },\r\n\r\n                {\r\n                    selector:\r\n                        \"#sugestoes-intervencoes\",\r\n\r\n                    section:\r\n                        \"planejamento\",\r\n                },\r\n            ],\r\n\r\n            \/*\r\n             * Nome do arquivo baixado com as anota\u00e7\u00f5es.\r\n             *\/\r\n            pdf: {\r\n                fileName:\r\n                    \"anotacoes-caso-clinico-maria.pdf\",\r\n            },\r\n        });\r\n\r\n    await planoDeCuidado.init();\r\n\r\n    \/*\r\n     * Opcional, mas \u00fatil para testes.\r\n     *\/\r\n    window.planoDeCuidadoAtual =\r\n        planoDeCuidado;\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<div class=\"elementor-element elementor-element-b30f989 e-con-full e-flex e-con e-parent\" data-id=\"b30f989\" data-element_type=\"container\" id=\"boas-vindas\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9bb11ce elementor-widget elementor-widget-template\" data-id=\"9bb11ce\" 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=\"46992\" class=\"elementor elementor-46992\" data-elementor-post-type=\"elementor_library\">\n\t\t\t<div class=\"elementor-element elementor-element-75af119 e-con-full e-flex e-con e-parent\" data-id=\"75af119\" data-element_type=\"container\" id=\"boas-vindas\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-9238db0 e-con-full e-flex e-con e-child\" data-id=\"9238db0\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d91cee6 elementor-widget__width-initial elementor-widget-mobile__width-inherit elementor-widget elementor-widget-heading\" data-id=\"d91cee6\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Boas-vindas\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-fc6a159 elementor-widget elementor-widget-text-editor\" data-id=\"fc6a159\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Agora que voc\u00ea j\u00e1 assistiu \u00e0 sess\u00e3o cl\u00ednica e acompanhou a din\u00e2mica da elabora\u00e7\u00e3o do plano de cuidado compartilhado, vamos praticar com um <\/span><b>caso fict\u00edcio<\/b><span style=\"font-weight: 400;\">.<\/span><\/p><p><span style=\"font-weight: 400;\">Nesta etapa, voc\u00ea acompanhar\u00e1 a <\/span><b>jornada da paciente Maria no SUS<\/b><span style=\"font-weight: 400;\">, observando desde o seu primeiro contato na Unidade B\u00e1sica de Sa\u00fade (UBS) at\u00e9 a articula\u00e7\u00e3o com a Aten\u00e7\u00e3o Especializada.<\/span><\/p><p><span style=\"font-weight: 400;\">O objetivo principal, ao analisar o caso da paciente, deve ser:<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">identificar sinais de suspei\u00e7\u00e3o de c\u00e2ncer;<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">aplicar estrat\u00e9gias de coordena\u00e7\u00e3o e navega\u00e7\u00e3o do paciente na Rede de Aten\u00e7\u00e3o \u00e0 Sa\u00fade;<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">refletir sobre o papel da APS na preven\u00e7\u00e3o, detec\u00e7\u00e3o precoce e seguimento p\u00f3s-tratamento.<\/span><\/li><\/ul><p><span style=\"font-weight: 400;\">Ao longo do percurso, utilize o <b>Campo de Anota\u00e7\u00f5es<\/b> para registrar, progressivamente, suas an\u00e1lises. Para isso, basta <b>clicar no \u00edcone<\/b> <img decoding=\"async\" style=\"width: 30px; border-radius: 10px; margin-right: 8px;\" src=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/CasoClinicoDrawerBoasVindas.png\" \/>,<\/span><span style=\"font-weight: 400;\">\u00a0localizado no lado direito da tela. Ao final, esses dados fundamentar\u00e3o a elabora\u00e7\u00e3o do Plano de Cuidado Compartilhado.<\/span><\/p><p><span style=\"font-weight: 400;\">Prossiga e fique atento \u00e0s orienta\u00e7\u00f5es!<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3871bdc e-con-full e-flex e-con e-child\" data-id=\"3871bdc\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7e42ccb elementor-widget elementor-widget-image\" data-id=\"7e42ccb\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"992\" src=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/CuidadoD15CasoClinico-T1-1024x992.webp\" class=\"attachment-large size-large wp-image-47991\" alt=\"\" srcset=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/CuidadoD15CasoClinico-T1-1024x992.webp 1024w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/CuidadoD15CasoClinico-T1-300x291.webp 300w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/CuidadoD15CasoClinico-T1-768x744.webp 768w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/CuidadoD15CasoClinico-T1-1536x1488.webp 1536w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/CuidadoD15CasoClinico-T1.webp 1902w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-908532e elementor-absolute elementor-widget elementor-widget-image\" data-id=\"908532e\" data-element_type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;,&quot;motion_fx_motion_fx_scrolling&quot;:&quot;yes&quot;,&quot;motion_fx_translateX_effect&quot;:&quot;yes&quot;,&quot;motion_fx_translateX_speed&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:4,&quot;sizes&quot;:[]},&quot;motion_fx_translateX_affectedRange&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:{&quot;start&quot;:0,&quot;end&quot;:100}},&quot;motion_fx_devices&quot;:[&quot;desktop&quot;,&quot;laptop&quot;,&quot;tablet&quot;,&quot;mobile&quot;]}\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"394\" src=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/08\/Rectangle-8-1-1024x394.png\" class=\"attachment-large size-large wp-image-43323\" alt=\"\" srcset=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/08\/Rectangle-8-1-1024x394.png 1024w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/08\/Rectangle-8-1-300x115.png 300w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/08\/Rectangle-8-1-768x295.png 768w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/08\/Rectangle-8-1-1536x591.png 1536w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/08\/Rectangle-8-1-2048x787.png 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\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<div class=\"elementor-element elementor-element-6428739 e-con-full e-flex e-con e-parent\" data-id=\"6428739\" data-element_type=\"container\" id=\"caso-clinico\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-bee8bee e-con-full e-flex e-con e-child\" data-id=\"bee8bee\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d0b4d16 elementor-widget elementor-widget-heading\" data-id=\"d0b4d16\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Caso Cl\u00ednico<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7df7051 elementor-widget elementor-widget-text-editor\" data-id=\"7df7051\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Este caso fict\u00edcio prop\u00f5e uma reflex\u00e3o pr\u00e1tica acerca da jornada do paciente no \u00e2mbito do Sistema \u00danico de Sa\u00fade (SUS), abrangendo desde o acolhimento na Aten\u00e7\u00e3o Prim\u00e1ria \u00e0 Sa\u00fade (APS) at\u00e9 a contrarrefer\u00eancia. O escopo enfatiza os pontos cr\u00edticos da linha de cuidado, as estrat\u00e9gias de coordena\u00e7\u00e3o e a navega\u00e7\u00e3o, al\u00e9m de outros fatores determinantes no processo de assist\u00eancia oncol\u00f3gica.<\/span><\/p><p><span style=\"font-weight: 400;\">Recomenda-se <\/span><b>aten\u00e7\u00e3o especial \u00e0s potenciais lacunas na organiza\u00e7\u00e3o do cuidado oncol\u00f3gico<\/b><span style=\"font-weight: 400;\">, aos <\/span><b>sinais de suspei\u00e7\u00e3o<\/b><span style=\"font-weight: 400;\">, aos <\/span><b>fatores de risco e \u00e0s barreiras de acesso<\/b><span style=\"font-weight: 400;\">. A an\u00e1lise deve avan\u00e7ar mediante a considera\u00e7\u00e3o de estrat\u00e9gias de articula\u00e7\u00e3o em rede, com \u00eanfase no papel da APS no tocante \u00e0 preven\u00e7\u00e3o, ao encaminhamento oportuno, \u00e0 coordena\u00e7\u00e3o do cuidado e ao acompanhamento p\u00f3s-tratamento.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-c9352c5 elementor-widget elementor-widget-html\" data-id=\"c9352c5\" 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<!-- D15: insira este bloco UMA unica vez na pagina, em widget HTML. -->\r\n<!-- Os outros tres widgets devem conter SOMENTE HTML, sem CSS nem JS. -->\r\n<style>\r\n@import url('https:\/\/fonts.googleapis.com\/css2?family=News+Cycle:wght@400;700&display=swap');\r\n\r\n    .d15-video-flow {\r\n\r\n        --d15-blue: #213B74;\r\n\r\n        --d15-yellow: #F8CA33;\r\n\r\n        --d15-yellow-hover: #F8E31F;\r\n\r\n        --d15-text: #171717;\r\n\r\n        --d15-card: #FFFFFF;\r\n\r\n        --d15-video-position: 50% 50%;\r\n\r\n        position: relative;\r\n\r\n        width: 100%;\r\n\r\n        height: 100vh;\r\n\r\n        min-height: 100vh;\r\n\r\n        overflow: hidden;\r\n\r\n        isolation: isolate;\r\n\r\n        background: #171717;\r\n\r\n    }\r\n\r\n    .d15-video-flow,\r\n\r\n    .d15-video-flow * {\r\n\r\n        box-sizing: border-box;\r\n\r\n    }\r\n\r\n    .d15-video-flow [hidden] {\r\n\r\n        display: none !important;\r\n\r\n    }\r\n\r\n    .d15-video-flow__waiting-image,\r\n\r\n    .d15-video-flow__video {\r\n\r\n        position: absolute;\r\n\r\n        z-index: 0;\r\n\r\n        inset: 0;\r\n\r\n        width: 100%;\r\n\r\n        height: 100%;\r\n\r\n        object-fit: cover;\r\n\r\n        object-position: var(--d15-video-position);\r\n\r\n        background: #171717;\r\n\r\n        transition: opacity 260ms ease, transform 420ms ease;\r\n\r\n    }\r\n\r\n    .d15-video-flow.is-loading .d15-video-flow__video {\r\n\r\n        opacity: 0.72;\r\n\r\n        transform: scale(1.008);\r\n\r\n    }\r\n\r\n    .d15-video-flow__overlay {\r\n\r\n        position: absolute;\r\n\r\n        z-index: 1;\r\n\r\n        inset: 0;\r\n\r\n        pointer-events: none;\r\n\r\n        background: linear-gradient(to top,\r\n\r\n                rgba(0, 0, 0, .70) 0%,\r\n\r\n                rgba(0, 0, 0, .18) 48%,\r\n\r\n                rgba(0, 0, 0, .02) 100%);\r\n\r\n    }\r\n\r\n    .d15-video-flow__interface {\r\n\r\n        position: relative;\r\n\r\n        z-index: 2;\r\n\r\n        display: flex;\r\n\r\n        align-items: flex-end;\r\n\r\n        justify-content: flex-start;\r\n\r\n        width: 100%;\r\n\r\n        height: 100%;\r\n\r\n        min-height: 100%;\r\n\r\n        padding: clamp(28px, 4.5vw, 72px);\r\n\r\n    }\r\n\r\n    .d15-video-flow__card {\r\n\r\n        position: relative;\r\n\r\n        width: min(620px, 42vw);\r\n\r\n        padding: clamp(24px, 2.1vw, 34px);\r\n\r\n        overflow: hidden;\r\n\r\n        border: 1px solid rgba(255, 255, 255, .70);\r\n\r\n        border-radius: 22px;\r\n\r\n        background: var(--d15-card);\r\n\r\n        box-shadow:\r\n\r\n            0 18px 50px rgba(0, 0, 0, .30),\r\n\r\n            0 2px 8px rgba(0, 0, 0, .08);\r\n\r\n        transition: width 250ms ease, padding 250ms ease;\r\n\r\n    }\r\n\r\n    .d15-video-flow__card::before {\r\n\r\n        content: \"\";\r\n\r\n        position: absolute;\r\n\r\n        inset: 0;\r\n\r\n        pointer-events: none;\r\n\r\n        background: linear-gradient(135deg,\r\n\r\n                rgba(255, 255, 255, .34),\r\n\r\n                rgba(255, 255, 255, 0) 45%);\r\n\r\n    }\r\n\r\n    .d15-video-flow__card>* {\r\n\r\n        position: relative;\r\n\r\n        z-index: 1;\r\n\r\n    }\r\n\r\n    .d15-video-flow__card.is-playing {\r\n\r\n        width: min(520px, 38vw);\r\n\r\n        padding: 22px 24px;\r\n\r\n    }\r\n\r\n    .d15-video-flow__title {\r\n\r\n        margin: 0 0 14px;\r\n\r\n        color: var(--d15-blue) !important;\r\n\r\n        font-family: \"News Cycle\", sans-serif;\r\n\r\n        font-size: clamp(31px, 2.35vw, 42px);\r\n\r\n        font-weight: 700;\r\n\r\n        line-height: 1.05;\r\n\r\n        letter-spacing: -0.02em;\r\n\r\n    }\r\n\r\n    .d15-video-flow__card.is-playing .d15-video-flow__title {\r\n\r\n        margin-bottom: 12px;\r\n\r\n        font-size: clamp(27px, 2vw, 35px);\r\n\r\n    }\r\n\r\n    .d15-video-flow__text {\r\n\r\n        margin: 0 0 18px;\r\n\r\n        color: var(--d15-text);\r\n\r\n        font-family: \"Nunito\", Arial, sans-serif;\r\n\r\n        font-size: 16px;\r\n\r\n        line-height: 1.55;\r\n\r\n    }\r\n\r\n    .d15-video-flow__actions,\r\n\r\n    .d15-video-flow__playback-controls,\r\n\r\n    .d15-video-flow__end-actions {\r\n\r\n        display: flex;\r\n\r\n        flex-wrap: wrap;\r\n\r\n        align-items: center;\r\n\r\n        gap: 10px;\r\n\r\n    }\r\n\r\n    .d15-video-flow__button {\r\n\r\n        appearance: none;\r\n\r\n        display: inline-flex;\r\n\r\n        align-items: center;\r\n\r\n        justify-content: center;\r\n\r\n        width: fit-content;\r\n\r\n        max-width: 100%;\r\n\r\n        min-height: 44px;\r\n\r\n        border: 0;\r\n\r\n        border-radius: 14px;\r\n\r\n        padding: 11px 19px;\r\n\r\n        color: var(--d15-text);\r\n\r\n        background: var(--d15-yellow);\r\n\r\n        font-family: \"Nunito\", Arial, sans-serif;\r\n\r\n        font-size: 15px;\r\n\r\n        font-weight: 700;\r\n\r\n        line-height: 1.25;\r\n\r\n        text-align: center;\r\n\r\n        text-wrap: balance;\r\n\r\n        box-shadow:\r\n\r\n            0 5px 14px rgba(33, 59, 116, .10),\r\n\r\n            inset 0 1px 0 rgba(255, 255, 255, .32);\r\n\r\n        cursor: pointer;\r\n\r\n        transition:\r\n\r\n            background-color 180ms ease,\r\n\r\n            box-shadow 180ms ease,\r\n\r\n            transform 180ms ease;\r\n\r\n    }\r\n\r\n    .d15-video-flow__button:hover,\r\n\r\n    .d15-video-flow__button:focus-visible {\r\n\r\n        background: var(--d15-yellow-hover);\r\n\r\n        transform: translateY(-2px);\r\n\r\n        box-shadow:\r\n\r\n            0 8px 18px rgba(33, 59, 116, .14),\r\n\r\n            inset 0 1px 0 rgba(255, 255, 255, .38);\r\n\r\n    }\r\n\r\n    .d15-video-flow__button:focus-visible {\r\n\r\n        outline: 3px solid rgba(33, 59, 116, .22);\r\n\r\n        outline-offset: 3px;\r\n\r\n    }\r\n\r\n    .d15-video-flow__button--secondary {\r\n\r\n        color: var(--d15-blue);\r\n\r\n        background: #FFFFFF;\r\n\r\n        border: 1.5px solid rgba(33, 59, 116, .30);\r\n\r\n        box-shadow: none;\r\n\r\n    }\r\n\r\n    .d15-video-flow__button--secondary:hover,\r\n\r\n    .d15-video-flow__button--secondary:focus-visible {\r\n\r\n        background: #F3F5F9;\r\n\r\n    }\r\n\r\n    .d15-video-flow__retry {\r\n\r\n        margin-top: 12px;\r\n\r\n    }\r\n\r\n    .d15-video-flow__status {\r\n\r\n        margin: 12px 0 0;\r\n\r\n        color: #6B3D00;\r\n\r\n        font-family: \"Nunito\", Arial, sans-serif;\r\n\r\n        font-size: 14px;\r\n\r\n        font-weight: 600;\r\n\r\n        line-height: 1.4;\r\n\r\n    }\r\n\r\n    .d15-video-flow__end-card {\r\n\r\n        animation: d15CardIn 260ms ease both;\r\n\r\n    }\r\n\r\n    @keyframes d15CardIn {\r\n\r\n        from {\r\n\r\n            opacity: 0;\r\n\r\n            transform: translateY(8px);\r\n\r\n        }\r\n\r\n        to {\r\n\r\n            opacity: 1;\r\n\r\n            transform: translateY(0);\r\n\r\n        }\r\n\r\n    }\r\n\r\n    \/* =========================================================\r\n       MOBILE APENAS (at\u00e9 767px)\r\n       - v\u00eddeo\/imagem acima do conte\u00fado, sem sobreposi\u00e7\u00e3o\r\n       - enquadramento horizontal 16:9, sem cortar o v\u00eddeo\r\n       - altura natural: n\u00e3o trava o scroll da p\u00e1gina\r\n       Desktop e notebook permanecem inalterados.\r\n       ========================================================= *\/\r\n    \/* =============================================================\r\n       MOBILE (somente ate 767px)\r\n       A midia permanece em uma linha 16:9, com o card abaixo.\r\n       Nenhuma regra de desktop ou notebook foi alterada.\r\n       ============================================================= *\/\r\n    @media (max-width: 767px) {\r\n        .d15-video-flow {\r\n            display: grid;\r\n            grid-template-columns: minmax(0, 1fr);\r\n            grid-template-rows: auto auto;\r\n            align-items: start;\r\n            width: 100%;\r\n            max-width: 100%;\r\n            height: auto;\r\n            min-height: 0;\r\n            overflow: visible;\r\n            background: #F3F5F9;\r\n        }\r\n\r\n        .d15-video-flow__waiting-image,\r\n        .d15-video-flow__video {\r\n            position: relative;\r\n            inset: auto;\r\n            grid-column: 1;\r\n            grid-row: 1;\r\n            display: block;\r\n            width: 100%;\r\n            max-width: 100%;\r\n            min-width: 0;\r\n            height: auto;\r\n            max-height: none;\r\n            aspect-ratio: 16 \/ 9;\r\n            object-fit: contain;\r\n            object-position: center;\r\n            margin: 0;\r\n            background: #171717;\r\n            transform: none;\r\n        }\r\n\r\n        .d15-video-flow.is-loading .d15-video-flow__video {\r\n            transform: none;\r\n        }\r\n\r\n        .d15-video-flow__overlay {\r\n            display: none;\r\n        }\r\n\r\n        .d15-video-flow__interface {\r\n            position: relative;\r\n            grid-column: 1;\r\n            grid-row: 2;\r\n            display: flex;\r\n            width: 100%;\r\n            height: auto;\r\n            min-height: 0;\r\n            padding: 16px;\r\n            align-items: stretch;\r\n            justify-content: flex-start;\r\n        }\r\n\r\n        .d15-video-flow__card,\r\n        .d15-video-flow__card.is-playing {\r\n            width: 100%;\r\n            max-width: 100%;\r\n            min-width: 0;\r\n            padding: 20px 18px;\r\n            border-radius: 18px;\r\n        }\r\n\r\n        .d15-video-flow__title,\r\n        .d15-video-flow__card.is-playing .d15-video-flow__title {\r\n            font-size: clamp(27px, 8.5vw, 35px);\r\n            overflow-wrap: anywhere;\r\n        }\r\n\r\n        .d15-video-flow__actions,\r\n        .d15-video-flow__playback-controls,\r\n        .d15-video-flow__end-actions,\r\n        .d15-video-flow__button {\r\n            width: 100%;\r\n            min-width: 0;\r\n        }\r\n\r\n        .d15-video-flow__button {\r\n            white-space: normal;\r\n            overflow-wrap: anywhere;\r\n        }\r\n    }\r\n\r\n    @media (prefers-reduced-motion: reduce) {\r\n\r\n        .d15-video-flow__waiting-image,\r\n\r\n        .d15-video-flow__video,\r\n\r\n        .d15-video-flow__card,\r\n\r\n        .d15-video-flow__button,\r\n\r\n        .d15-video-flow__end-card {\r\n\r\n            transition: none;\r\n\r\n            animation: none;\r\n\r\n        }\r\n\r\n    }\r\n<\/style>\r\n\r\n<script>\r\n(() => {\r\n\r\n        \/*\r\n\r\n         * A l\u00f3gica global \u00e9 definida uma \u00fanica vez.\r\n\r\n         * Cada .d15-video-flow guarda estado, hist\u00f3rico e v\u00eddeo pr\u00f3prios.\r\n\r\n         *\/\r\n\r\n        if (!window.D15VideoFlow) {\r\n\r\n            const SELECTOR = \".d15-video-flow\";\r\n\r\n            function initializeOne(component) {\r\n\r\n                if (\r\n\r\n                    !component ||\r\n\r\n                    component.dataset.d15VideoFlowInitialized === \"true\"\r\n\r\n                ) {\r\n\r\n                    return;\r\n\r\n                }\r\n\r\n                component.dataset.d15VideoFlowInitialized = \"true\";\r\n\r\n                const waitingImage = component.querySelector(\r\n\r\n                    \".d15-video-flow__waiting-image\"\r\n\r\n                );\r\n\r\n                const video = component.querySelector(\r\n\r\n                    \".d15-video-flow__video\"\r\n\r\n                );\r\n\r\n                const card = component.querySelector(\r\n\r\n                    \".d15-video-flow__card\"\r\n\r\n                );\r\n\r\n                const stages = [\r\n\r\n                    ...component.querySelectorAll(\r\n\r\n                        \".d15-video-flow__stage\"\r\n\r\n                    )\r\n\r\n                ];\r\n\r\n                const playback = component.querySelector(\r\n\r\n                    \".d15-video-flow__playback\"\r\n\r\n                );\r\n\r\n                const playbackTitle = component.querySelector(\r\n\r\n                    \".d15-video-flow__playback-title\"\r\n\r\n                );\r\n\r\n                const pauseButton = component.querySelector(\r\n\r\n                    \".d15-video-flow__pause\"\r\n\r\n                );\r\n\r\n                const skipButton = component.querySelector(\r\n\r\n                    \".d15-video-flow__skip\"\r\n\r\n                );\r\n\r\n                const endCard = component.querySelector(\r\n\r\n                    \".d15-video-flow__end-card\"\r\n\r\n                );\r\n\r\n                const endTitle = component.querySelector(\r\n\r\n                    \".d15-video-flow__end-title\"\r\n\r\n                );\r\n\r\n                const endText = component.querySelector(\r\n\r\n                    \".d15-video-flow__end-text\"\r\n\r\n                );\r\n\r\n                const endContinue = component.querySelector(\r\n\r\n                    \".d15-video-flow__end-continue\"\r\n\r\n                );\r\n\r\n                const endBack = component.querySelector(\r\n\r\n                    \".d15-video-flow__end-back\"\r\n\r\n                );\r\n\r\n                const retryButton = component.querySelector(\r\n\r\n                    \".d15-video-flow__retry\"\r\n\r\n                );\r\n\r\n                const status = component.querySelector(\r\n\r\n                    \".d15-video-flow__status\"\r\n\r\n                );\r\n\r\n                if (\r\n\r\n                    !waitingImage ||\r\n\r\n                    !video ||\r\n\r\n                    !card ||\r\n\r\n                    !stages.length ||\r\n\r\n                    !playback ||\r\n\r\n                    !pauseButton\r\n\r\n                ) {\r\n\r\n                    return;\r\n\r\n                }\r\n\r\n                const startStage =\r\n\r\n                    component.dataset.startStage ||\r\n\r\n                    stages[0].dataset.stage;\r\n\r\n                const defaultIdleImage =\r\n\r\n                    component.dataset.defaultIdleImage ||\r\n\r\n                    waitingImage.currentSrc ||\r\n\r\n                    waitingImage.src;\r\n\r\n                let activeStageName = null;\r\n\r\n                let currentPlayback = null;\r\n\r\n                let requestId = 0;\r\n\r\n                \/* Hist\u00f3rico exclusivo desta inst\u00e2ncia. *\/\r\n\r\n                const stageHistory = [];\r\n\r\n                function getStage(name) {\r\n\r\n                    return stages.find(\r\n\r\n                        stage => stage.dataset.stage === name\r\n\r\n                    ) || null;\r\n\r\n                }\r\n\r\n                function configured(value) {\r\n\r\n                    return Boolean(\r\n\r\n                        value &&\r\n\r\n                        String(value).trim() &&\r\n\r\n                        !String(value).includes(\"COLE_AQUI\") &&\r\n\r\n                        !String(value).includes(\"SUBSTITUA\")\r\n\r\n                    );\r\n\r\n                }\r\n\r\n                function showStatus(message = \"\") {\r\n\r\n                    if (!status) return;\r\n\r\n                    status.textContent = message;\r\n\r\n                    status.hidden = !message;\r\n\r\n                }\r\n\r\n                function resetMessages() {\r\n\r\n                    if (retryButton) {\r\n\r\n                        retryButton.hidden = true;\r\n\r\n                    }\r\n\r\n                    showStatus(\"\");\r\n\r\n                }\r\n\r\n                function hideAllPanels() {\r\n\r\n                    stages.forEach(stage => {\r\n\r\n                        stage.hidden = true;\r\n\r\n                    });\r\n\r\n                    playback.hidden = true;\r\n\r\n                    if (endCard) {\r\n\r\n                        endCard.hidden = true;\r\n\r\n                    }\r\n\r\n                }\r\n\r\n                function setPlayingCard(value) {\r\n\r\n                    card.classList.toggle(\r\n\r\n                        \"is-playing\",\r\n\r\n                        value\r\n\r\n                    );\r\n\r\n                }\r\n\r\n                function updatePauseLabel() {\r\n\r\n                    pauseButton.textContent = video.paused\r\n\r\n                        ? \"Continuar v\u00eddeo\"\r\n\r\n                        : \"Pausar v\u00eddeo\";\r\n\r\n                }\r\n\r\n                function applyVideoPosition(stage) {\r\n\r\n                    const position =\r\n\r\n                        stage?.dataset.videoPosition ||\r\n\r\n                        \"50% 50%\";\r\n\r\n                    component.style.setProperty(\r\n\r\n                        \"--d15-video-position\",\r\n\r\n                        position\r\n\r\n                    );\r\n\r\n                }\r\n\r\n                function showIdleImage(src) {\r\n\r\n                    \/*\r\n    \r\n                     * Invalida qualquer tentativa anterior de reprodu\u00e7\u00e3o\r\n    \r\n                     * e volta o componente para o estado de waiting.\r\n    \r\n                     *\/\r\n\r\n                    requestId += 1;\r\n\r\n                    video.pause();\r\n\r\n                    video.hidden = true;\r\n\r\n                    component.classList.remove(\"is-loading\");\r\n\r\n                    if (!configured(src)) {\r\n\r\n                        waitingImage.hidden = true;\r\n\r\n                        showStatus(\r\n\r\n                            \"A imagem de espera ainda n\u00e3o foi configurada.\"\r\n\r\n                        );\r\n\r\n                        return;\r\n\r\n                    }\r\n\r\n                    const currentSrc =\r\n\r\n                        waitingImage.currentSrc ||\r\n\r\n                        waitingImage.src;\r\n\r\n                    if (currentSrc !== src) {\r\n\r\n                        waitingImage.src = src;\r\n\r\n                    }\r\n\r\n                    waitingImage.hidden = false;\r\n\r\n                }\r\n\r\n                function parseSkipAfter(button) {\r\n\r\n                    if (!button.hasAttribute(\"data-skip-after\")) {\r\n\r\n                        return null;\r\n\r\n                    }\r\n\r\n                    const value = Number(\r\n\r\n                        button.dataset.skipAfter\r\n\r\n                    );\r\n\r\n                    return Number.isFinite(value)\r\n\r\n                        ? Math.max(0, value)\r\n\r\n                        : null;\r\n\r\n                }\r\n\r\n                function hasEndCard(config) {\r\n\r\n                    return Boolean(\r\n\r\n                        config &&\r\n\r\n                        (\r\n\r\n                            config.endTitle.trim() ||\r\n\r\n                            config.endText.trim()\r\n\r\n                        )\r\n\r\n                    );\r\n\r\n                }\r\n\r\n                function playSource({\r\n\r\n                    src,\r\n\r\n                    withAudio = false,\r\n\r\n                    loop = false\r\n\r\n                }) {\r\n\r\n                    if (!configured(src)) {\r\n\r\n                        return Promise.reject(\r\n\r\n                            new Error(\"V\u00eddeo n\u00e3o configurado.\")\r\n\r\n                        );\r\n\r\n                    }\r\n\r\n                    waitingImage.hidden = true;\r\n\r\n                    video.hidden = false;\r\n\r\n                    requestId += 1;\r\n\r\n                    const localRequest = requestId;\r\n\r\n                    component.classList.add(\"is-loading\");\r\n\r\n                    video.pause();\r\n\r\n                    video.loop = loop;\r\n\r\n                    video.muted = !withAudio;\r\n\r\n                    video.defaultMuted = !withAudio;\r\n\r\n                    const currentSrc =\r\n\r\n                        video.currentSrc || video.src;\r\n\r\n                    if (currentSrc !== src) {\r\n\r\n                        video.src = src;\r\n\r\n                        video.load();\r\n\r\n                    }\r\n\r\n                    const promise = video.play();\r\n\r\n                    if (\r\n\r\n                        promise &&\r\n\r\n                        typeof promise.then === \"function\"\r\n\r\n                    ) {\r\n\r\n                        return promise\r\n\r\n                            .then(() => {\r\n\r\n                                if (localRequest !== requestId) {\r\n\r\n                                    return;\r\n\r\n                                }\r\n\r\n                                component.classList.remove(\r\n\r\n                                    \"is-loading\"\r\n\r\n                                );\r\n\r\n                                updatePauseLabel();\r\n\r\n                            })\r\n\r\n                            .catch(error => {\r\n\r\n                                if (localRequest !== requestId) {\r\n\r\n                                    return;\r\n\r\n                                }\r\n\r\n                                component.classList.remove(\r\n\r\n                                    \"is-loading\"\r\n\r\n                                );\r\n\r\n                                if (withAudio && retryButton) {\r\n\r\n                                    retryButton.hidden = false;\r\n\r\n                                    showStatus(\r\n\r\n                                        \"O navegador bloqueou o \u00e1udio. Clique em \u201cReproduzir v\u00eddeo com \u00e1udio\u201d.\"\r\n\r\n                                    );\r\n\r\n                                }\r\n\r\n                                console.warn(\r\n\r\n                                    \"[D15VideoFlow]\",\r\n\r\n                                    error\r\n\r\n                                );\r\n\r\n                                throw error;\r\n\r\n                            });\r\n\r\n                    }\r\n\r\n                    return Promise.resolve();\r\n\r\n                }\r\n\r\n                function showStage(\r\n\r\n                    name,\r\n\r\n                    {\r\n\r\n                        pushHistory = false,\r\n\r\n                        replayLabel = \"\"\r\n\r\n                    } = {}\r\n\r\n                ) {\r\n\r\n                    const stage = getStage(name);\r\n\r\n                    if (!stage) {\r\n\r\n                        console.warn(\r\n\r\n                            `[D15VideoFlow] Etapa \"${name}\" n\u00e3o encontrada.`\r\n\r\n                        );\r\n\r\n                        return;\r\n\r\n                    }\r\n\r\n                    if (\r\n\r\n                        pushHistory &&\r\n\r\n                        activeStageName &&\r\n\r\n                        activeStageName !== name\r\n\r\n                    ) {\r\n\r\n                        stageHistory.push(activeStageName);\r\n\r\n                    }\r\n\r\n                    activeStageName = name;\r\n\r\n                    currentPlayback = null;\r\n\r\n                    hideAllPanels();\r\n\r\n                    resetMessages();\r\n\r\n                    setPlayingCard(false);\r\n\r\n                    stage.hidden = false;\r\n\r\n                    applyVideoPosition(stage);\r\n\r\n                    const idleImage =\r\n\r\n                        stage.dataset.idleImage ||\r\n\r\n                        defaultIdleImage;\r\n\r\n                    showIdleImage(\r\n\r\n                        idleImage\r\n\r\n                    );\r\n\r\n                }\r\n\r\n                function goBack() {\r\n\r\n                    if (stageHistory.length) {\r\n\r\n                        showStage(\r\n\r\n                            stageHistory.pop(),\r\n\r\n                            { pushHistory: false }\r\n\r\n                        );\r\n\r\n                        return;\r\n\r\n                    }\r\n\r\n                    if (activeStageName !== startStage) {\r\n\r\n                        showStage(\r\n\r\n                            startStage,\r\n\r\n                            { pushHistory: false }\r\n\r\n                        );\r\n\r\n                    }\r\n\r\n                }\r\n\r\n                function startPlayback(button) {\r\n\r\n                    const src = button.dataset.video || \"\";\r\n\r\n                    if (!configured(src)) {\r\n\r\n                        showStatus(\r\n\r\n                            \"Este v\u00eddeo ainda n\u00e3o foi configurado.\"\r\n\r\n                        );\r\n\r\n                        return;\r\n\r\n                    }\r\n\r\n                    currentPlayback = {\r\n\r\n                        originStage: activeStageName,\r\n\r\n                        nextStage:\r\n\r\n                            button.dataset.nextStage ||\r\n\r\n                            activeStageName,\r\n\r\n                        skipStage:\r\n\r\n                            button.dataset.skipStage ||\r\n\r\n                            button.dataset.nextStage ||\r\n\r\n                            activeStageName,\r\n\r\n                        playTitle:\r\n\r\n                            button.dataset.playTitle ||\r\n\r\n                            button.textContent.trim(),\r\n\r\n                        skipAfter:\r\n\r\n                            parseSkipAfter(button),\r\n\r\n                        replayLabel:\r\n\r\n                            button.dataset.replayLabel || \"\",\r\n\r\n                        sourceButton: button,\r\n\r\n                        endTitle:\r\n\r\n                            button.dataset.endCardTitle || \"\",\r\n\r\n                        endText:\r\n\r\n                            button.dataset.endCardText || \"\",\r\n\r\n                        endButton:\r\n\r\n                            button.dataset.endCardButton ||\r\n\r\n                            \"Continuar\",\r\n\r\n                        endNextStage:\r\n\r\n                            button.dataset.endCardNextStage ||\r\n\r\n                            button.dataset.nextStage ||\r\n\r\n                            activeStageName,\r\n\r\n                        endOnSkip:\r\n\r\n                            button.dataset.endCardOnSkip ===\r\n\r\n                            \"true\"\r\n\r\n                    };\r\n\r\n                    hideAllPanels();\r\n\r\n                    resetMessages();\r\n\r\n                    setPlayingCard(true);\r\n\r\n                    playback.hidden = false;\r\n\r\n                    if (playbackTitle) {\r\n\r\n                        playbackTitle.textContent =\r\n\r\n                            currentPlayback.playTitle;\r\n\r\n                    }\r\n\r\n                    \/*\r\n\r\n                     * null = nunca mostra Pular\r\n\r\n                     * 0    = mostra imediatamente\r\n\r\n                     * > 0  = mostra ao atingir o tempo\r\n\r\n                     *\/\r\n\r\n                    if (skipButton) {\r\n\r\n                        skipButton.hidden =\r\n\r\n                            currentPlayback.skipAfter === null ||\r\n\r\n                            currentPlayback.skipAfter > 0;\r\n\r\n                    }\r\n\r\n                    playSource({\r\n\r\n                        src,\r\n\r\n                        withAudio: true,\r\n\r\n                        loop: false\r\n\r\n                    }).catch(() => { });\r\n\r\n                }\r\n\r\n                function showEndCard() {\r\n\r\n                    if (\r\n\r\n                        !currentPlayback ||\r\n\r\n                        !endCard ||\r\n\r\n                        !hasEndCard(currentPlayback)\r\n\r\n                    ) {\r\n\r\n                        return false;\r\n\r\n                    }\r\n\r\n                    hideAllPanels();\r\n\r\n                    resetMessages();\r\n\r\n                    setPlayingCard(false);\r\n\r\n                    endCard.hidden = false;\r\n\r\n                    if (endTitle) {\r\n\r\n                        endTitle.textContent =\r\n\r\n                            currentPlayback.endTitle;\r\n\r\n                        endTitle.hidden =\r\n\r\n                            !currentPlayback.endTitle.trim();\r\n\r\n                    }\r\n\r\n                    if (endText) {\r\n\r\n                        endText.textContent =\r\n\r\n                            currentPlayback.endText;\r\n\r\n                        endText.hidden =\r\n\r\n                            !currentPlayback.endText.trim();\r\n\r\n                    }\r\n\r\n                    if (endContinue) {\r\n\r\n                        endContinue.textContent =\r\n\r\n                            currentPlayback.endButton;\r\n\r\n                    }\r\n\r\n                    video.pause();\r\n\r\n                    return true;\r\n\r\n                }\r\n\r\n                function applyReplayLabel() {\r\n\r\n                    if (\r\n\r\n                        currentPlayback?.replayLabel &&\r\n\r\n                        currentPlayback?.sourceButton\r\n\r\n                    ) {\r\n\r\n                        currentPlayback.sourceButton.textContent =\r\n\r\n                            currentPlayback.replayLabel;\r\n\r\n                    }\r\n\r\n                }\r\n\r\n                function goToPlaybackTarget({ skipped = false } = {}) {\r\n\r\n                    if (!currentPlayback) return;\r\n\r\n                    const shouldShowEndCard =\r\n\r\n                        hasEndCard(currentPlayback) &&\r\n\r\n                        (\r\n\r\n                            !skipped ||\r\n\r\n                            currentPlayback.endOnSkip\r\n\r\n                        );\r\n\r\n                    if (shouldShowEndCard) {\r\n\r\n                        showEndCard();\r\n\r\n                        return;\r\n\r\n                    }\r\n\r\n                    applyReplayLabel();\r\n\r\n                    const targetStage = skipped\r\n\r\n                        ? currentPlayback.skipStage\r\n\r\n                        : currentPlayback.nextStage;\r\n\r\n                    const originStage =\r\n\r\n                        currentPlayback.originStage;\r\n\r\n                    const replayLabel =\r\n\r\n                        currentPlayback.replayLabel;\r\n\r\n                    \/*\r\n\r\n                     * Mantemos a etapa de origem ativa at\u00e9 showStage,\r\n\r\n                     * para o hist\u00f3rico registrar a navega\u00e7\u00e3o correta.\r\n\r\n                     *\/\r\n\r\n                    activeStageName = originStage;\r\n\r\n                    showStage(\r\n\r\n                        targetStage,\r\n\r\n                        {\r\n\r\n                            pushHistory:\r\n\r\n                                targetStage !== originStage,\r\n\r\n                            replayLabel\r\n\r\n                        }\r\n\r\n                    );\r\n\r\n                }\r\n\r\n                function continueAfterEndCard() {\r\n\r\n                    if (!currentPlayback) return;\r\n\r\n                    applyReplayLabel();\r\n\r\n                    const targetStage =\r\n\r\n                        currentPlayback.endNextStage;\r\n\r\n                    const originStage =\r\n\r\n                        currentPlayback.originStage;\r\n\r\n                    const replayLabel =\r\n\r\n                        currentPlayback.replayLabel;\r\n\r\n                    activeStageName = originStage;\r\n\r\n                    showStage(\r\n\r\n                        targetStage,\r\n\r\n                        {\r\n\r\n                            pushHistory:\r\n\r\n                                targetStage !== originStage,\r\n\r\n                            replayLabel\r\n\r\n                        }\r\n\r\n                    );\r\n\r\n                }\r\n\r\n                \/*\r\n\r\n                 * EVENT DELEGATION:\r\n\r\n                 * n\u00e3o importa se uma etapa tem 1, 2, 5 ou 10 bot\u00f5es.\r\n\r\n                 *\/\r\n\r\n                component.addEventListener(\r\n\r\n                    \"click\",\r\n\r\n                    event => {\r\n\r\n                        const button = event.target.closest(\r\n\r\n                            \"[data-action]\"\r\n\r\n                        );\r\n\r\n                        if (\r\n\r\n                            !button ||\r\n\r\n                            !component.contains(button)\r\n\r\n                        ) {\r\n\r\n                            return;\r\n\r\n                        }\r\n\r\n                        const action = button.dataset.action;\r\n\r\n                        if (action === \"play\") {\r\n\r\n                            startPlayback(button);\r\n\r\n                            return;\r\n\r\n                        }\r\n\r\n                        if (action === \"back\") {\r\n\r\n                            goBack();\r\n\r\n                            return;\r\n\r\n                        }\r\n\r\n                        if (action === \"goto\") {\r\n\r\n                            const target =\r\n\r\n                                button.dataset.targetStage;\r\n\r\n                            if (target) {\r\n\r\n                                showStage(\r\n\r\n                                    target,\r\n\r\n                                    { pushHistory: true }\r\n\r\n                                );\r\n\r\n                            }\r\n\r\n                        }\r\n\r\n                    }\r\n\r\n                );\r\n\r\n                pauseButton.addEventListener(\r\n\r\n                    \"click\",\r\n\r\n                    () => {\r\n\r\n                        if (!currentPlayback) return;\r\n\r\n                        if (video.paused) {\r\n\r\n                            const promise = video.play();\r\n\r\n                            if (\r\n\r\n                                promise &&\r\n\r\n                                typeof promise.catch === \"function\"\r\n\r\n                            ) {\r\n\r\n                                promise.catch(() => {\r\n\r\n                                    if (retryButton) {\r\n\r\n                                        retryButton.hidden = false;\r\n\r\n                                    }\r\n\r\n                                });\r\n\r\n                            }\r\n\r\n                        } else {\r\n\r\n                            video.pause();\r\n\r\n                        }\r\n\r\n                        window.requestAnimationFrame(\r\n\r\n                            updatePauseLabel\r\n\r\n                        );\r\n\r\n                    }\r\n\r\n                );\r\n\r\n                if (skipButton) {\r\n\r\n                    skipButton.addEventListener(\r\n\r\n                        \"click\",\r\n\r\n                        () => {\r\n\r\n                            goToPlaybackTarget({\r\n\r\n                                skipped: true\r\n\r\n                            });\r\n\r\n                        }\r\n\r\n                    );\r\n\r\n                }\r\n\r\n                if (endContinue) {\r\n\r\n                    endContinue.addEventListener(\r\n\r\n                        \"click\",\r\n\r\n                        continueAfterEndCard\r\n\r\n                    );\r\n\r\n                }\r\n\r\n                if (endBack) {\r\n\r\n                    endBack.addEventListener(\r\n\r\n                        \"click\",\r\n\r\n                        () => {\r\n\r\n                            if (!currentPlayback) {\r\n\r\n                                goBack();\r\n\r\n                                return;\r\n\r\n                            }\r\n\r\n                            \/*\r\n\r\n                             * No card complementar, \"Voltar\"\r\n\r\n                             * retorna \u00e0 tela que abriu aquele v\u00eddeo.\r\n\r\n                             *\/\r\n\r\n                            showStage(\r\n\r\n                                currentPlayback.originStage,\r\n\r\n                                { pushHistory: false }\r\n\r\n                            );\r\n\r\n                        }\r\n\r\n                    );\r\n\r\n                }\r\n\r\n                if (retryButton) {\r\n\r\n                    retryButton.addEventListener(\r\n\r\n                        \"click\",\r\n\r\n                        () => {\r\n\r\n                            video.muted = false;\r\n\r\n                            video.defaultMuted = false;\r\n\r\n                            const promise = video.play();\r\n\r\n                            if (\r\n\r\n                                promise &&\r\n\r\n                                typeof promise.then === \"function\"\r\n\r\n                            ) {\r\n\r\n                                promise\r\n\r\n                                    .then(() => {\r\n\r\n                                        retryButton.hidden = true;\r\n\r\n                                        showStatus(\"\");\r\n\r\n                                        updatePauseLabel();\r\n\r\n                                    })\r\n\r\n                                    .catch(() => {\r\n\r\n                                        showStatus(\r\n\r\n                                            \"N\u00e3o foi poss\u00edvel iniciar o \u00e1udio. Tente novamente.\"\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\n\r\n                video.addEventListener(\r\n\r\n                    \"playing\",\r\n\r\n                    () => {\r\n\r\n                        component.classList.remove(\r\n\r\n                            \"is-loading\"\r\n\r\n                        );\r\n\r\n                        updatePauseLabel();\r\n\r\n                    }\r\n\r\n                );\r\n\r\n                video.addEventListener(\r\n\r\n                    \"play\",\r\n\r\n                    updatePauseLabel\r\n\r\n                );\r\n\r\n                video.addEventListener(\r\n\r\n                    \"pause\",\r\n\r\n                    updatePauseLabel\r\n\r\n                );\r\n\r\n                video.addEventListener(\r\n\r\n                    \"waiting\",\r\n\r\n                    () => {\r\n\r\n                        component.classList.add(\r\n\r\n                            \"is-loading\"\r\n\r\n                        );\r\n\r\n                    }\r\n\r\n                );\r\n\r\n                video.addEventListener(\r\n\r\n                    \"timeupdate\",\r\n\r\n                    () => {\r\n\r\n                        if (\r\n\r\n                            !currentPlayback ||\r\n\r\n                            currentPlayback.skipAfter === null\r\n\r\n                        ) {\r\n\r\n                            return;\r\n\r\n                        }\r\n\r\n                        if (\r\n\r\n                            skipButton &&\r\n\r\n                            video.currentTime >=\r\n\r\n                            currentPlayback.skipAfter\r\n\r\n                        ) {\r\n\r\n                            skipButton.hidden = false;\r\n\r\n                        }\r\n\r\n                    }\r\n\r\n                );\r\n\r\n                video.addEventListener(\r\n\r\n                    \"ended\",\r\n\r\n                    () => {\r\n\r\n                        if (!currentPlayback) return;\r\n\r\n                        goToPlaybackTarget({\r\n\r\n                            skipped: false\r\n\r\n                        });\r\n\r\n                    }\r\n\r\n                );\r\n\r\n                video.addEventListener(\r\n\r\n                    \"error\",\r\n\r\n                    () => {\r\n\r\n                        component.classList.remove(\r\n\r\n                            \"is-loading\"\r\n\r\n                        );\r\n\r\n                        showStatus(\r\n\r\n                            \"N\u00e3o foi poss\u00edvel carregar este v\u00eddeo.\"\r\n\r\n                        );\r\n\r\n                    }\r\n\r\n                );\r\n\r\n                showStage(\r\n\r\n                    startStage,\r\n\r\n                    { pushHistory: false }\r\n\r\n                );\r\n\r\n            }\r\n\r\n            function init(scope = document) {\r\n\r\n                const components = [];\r\n\r\n                if (scope.matches?.(SELECTOR)) {\r\n\r\n                    components.push(scope);\r\n\r\n                }\r\n\r\n                components.push(\r\n\r\n                    ...(\r\n\r\n                        scope.querySelectorAll?.(\r\n\r\n                            SELECTOR\r\n\r\n                        ) || []\r\n\r\n                    )\r\n\r\n                );\r\n\r\n                components.forEach(initializeOne);\r\n\r\n            }\r\n\r\n            window.D15VideoFlow = { init };\r\n\r\n            \/* Elementor: hook criado somente uma vez. *\/\r\n\r\n            window.addEventListener(\r\n\r\n                \"elementor\/frontend\/init\",\r\n\r\n                () => {\r\n\r\n                    if (!window.elementorFrontend?.hooks) {\r\n\r\n                        return;\r\n\r\n                    }\r\n\r\n                    window.elementorFrontend.hooks.addAction(\r\n\r\n                        \"frontend\/element_ready\/html.default\",\r\n\r\n                        ($scope) => {\r\n\r\n                            window.D15VideoFlow.init(\r\n\r\n                                $scope[0]\r\n\r\n                            );\r\n\r\n                        }\r\n\r\n                    );\r\n\r\n                },\r\n\r\n                { once: true }\r\n\r\n            );\r\n\r\n        }\r\n\r\n        function start() {\r\n\r\n            window.D15VideoFlow.init(document);\r\n\r\n        }\r\n\r\n        if (document.readyState === \"loading\") {\r\n\r\n            document.addEventListener(\r\n\r\n                \"DOMContentLoaded\",\r\n\r\n                start,\r\n\r\n                { once: true }\r\n\r\n            );\r\n\r\n        } else {\r\n\r\n            start();\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<div class=\"elementor-element elementor-element-fea546e e-grid e-con-full e-con e-child\" data-id=\"fea546e\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f04c3ea elementor-widget__width-inherit premium-lq__none elementor-widget elementor-widget-premium-addon-button\" data-id=\"f04c3ea\" data-element_type=\"widget\" data-widget_type=\"premium-addon-button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\r\n\r\n\t\t<a class=\"premium-button premium-button-none premium-btn-block premium-button-none\" href=\"#conhecendo-paciente\">\r\n\t\t\t<div class=\"premium-button-text-icon-wrapper\">\r\n\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t<span >\r\n\t\t\t\t\t\tCome\u00e7ar\t\t\t\t\t<\/span>\r\n\t\t\t\t\t\t\t<\/div>\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t<\/a>\r\n\r\n\r\n\t\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<\/div>\n\t\t<div class=\"elementor-element elementor-element-d97e943 e-flex e-con-boxed e-con e-parent\" data-id=\"d97e943\" data-element_type=\"container\" id=\"conhecendo-paciente\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3a69004 elementor-widget elementor-widget-heading\" data-id=\"3a69004\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Conhecendo a paciente\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f4346c4 e-con-full e-flex e-con e-child\" data-id=\"f4346c4\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-3b61f4d e-con-full e-flex e-con e-child\" data-id=\"3b61f4d\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c410363 elementor-widget elementor-widget-text-editor\" data-id=\"c410363\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Iniciaremos apresentando nossa paciente Maria. Nesta etapa, saberemos com quem ela mora, onde vive; conheceremos um pouco de sua hist\u00f3ria de vida, seu hist\u00f3rico cl\u00ednico e sua queixa principal.<\/span><\/p><p><span style=\"font-weight: 400;\">\u00c9 importante que voc\u00ea esteja sempre atento a cada informa\u00e7\u00e3o da paciente, pois o que parece simples ou sem import\u00e2ncia pode ter grande relev\u00e2ncia na compreens\u00e3o do caso e no desenvolvimento do plano de cuidado.<\/span><\/p><p><span style=\"font-weight: 400;\">Lembre-se de fazer os registros no <\/span><b>Campo de Anota\u00e7\u00f5es<\/b><span style=\"font-weight: 400;\">, pois tudo o que voc\u00ea anotar ser\u00e1 utilizado na elabora\u00e7\u00e3o do Plano de Cuidado Compartilhado.\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">Vamos come\u00e7ar?\u00a0<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2bc507c e-con-full elementor-hidden-mobile e-flex e-con e-child\" data-id=\"2bc507c\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8700cdd elementor-widget elementor-widget-image\" data-id=\"8700cdd\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"938\" src=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/CuidadoD15CasoClinico-T3-1024x938.webp\" class=\"attachment-large size-large wp-image-47995\" alt=\"\" srcset=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/CuidadoD15CasoClinico-T3-1024x938.webp 1024w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/CuidadoD15CasoClinico-T3-300x275.webp 300w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/CuidadoD15CasoClinico-T3-768x704.webp 768w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/CuidadoD15CasoClinico-T3-1536x1408.webp 1536w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/CuidadoD15CasoClinico-T3.webp 1676w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7d896ee elementor-absolute elementor-widget elementor-widget-image\" data-id=\"7d896ee\" data-element_type=\"widget\" data-settings=\"{&quot;_position&quot;:&quot;absolute&quot;,&quot;motion_fx_motion_fx_scrolling&quot;:&quot;yes&quot;,&quot;motion_fx_translateX_effect&quot;:&quot;yes&quot;,&quot;motion_fx_translateX_speed&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:4,&quot;sizes&quot;:[]},&quot;motion_fx_translateX_affectedRange&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:{&quot;start&quot;:0,&quot;end&quot;:100}},&quot;motion_fx_devices&quot;:[&quot;desktop&quot;,&quot;laptop&quot;,&quot;tablet&quot;,&quot;mobile&quot;]}\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"394\" src=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/08\/Rectangle-8-1-1024x394.png\" class=\"attachment-large size-large wp-image-43323\" alt=\"\" srcset=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/08\/Rectangle-8-1-1024x394.png 1024w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/08\/Rectangle-8-1-300x115.png 300w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/08\/Rectangle-8-1-768x295.png 768w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/08\/Rectangle-8-1-1536x591.png 1536w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/08\/Rectangle-8-1-2048x787.png 2048w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\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<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-eb79764 e-con-full e-flex e-con e-parent\" data-id=\"eb79764\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3a931cc elementor-hidden-desktop elementor-hidden-laptop elementor-hidden-tablet elementor-widget elementor-widget-heading\" data-id=\"3a931cc\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Conhecendo a paciente\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-82bcc6e elementor-widget elementor-widget-html\" data-id=\"82bcc6e\" 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<!--\r\n\r\nD15 VIDEO FLOW \u2014 vers\u00e3o responsiva para v\u00eddeos com legenda\r\n\r\nAjustes desta vers\u00e3o:\r\n\r\n1\\) desktop: container em 16:9, preservando o quadro completo do v\u00eddeo;\r\n\r\n2\\) waiting image sempre em cover;\r\n\r\n3\\) desktop\/notebook: card de reprodu\u00e7\u00e3o compacto, \u00e0 direita e fora da \u00e1rea das legendas;\r\n\r\n4\\) mobile: foto\/v\u00eddeo 100% de largura em 16:9 e card abaixo;\r\n\r\n5\\) mant\u00e9m a arquitetura multi-inst\u00e2ncia: cada .d15-video-flow funciona de forma independente.\r\n\r\n\\\\-->\r\n\r\n<!-- =========================================================\r\n\r\n     DISCIPLINA 15 \u2014 FLUXO DE V\u00cdDEOS REUTILIZ\u00c1VEL\r\n\r\n     Pode haver v\u00e1rios .d15-video-flow na mesma aula.\r\n\r\n     Cada inst\u00e2ncia \u00e9 independente e N\u00c3O usa IDs.\r\n\r\n     PARA MAIS BOT\u00d5ES:\r\n\r\n     duplique um bot\u00e3o com data-action=\"play\".\r\n\r\n     PARA MAIS TELAS\/ETAPAS:\r\n\r\n     duplique um bloco .d15-video-flow__stage e mude data-stage.\r\n\r\n     CARD COMPLEMENTAR AO FINAL:\r\n\r\n     use data-end-card-title e\/ou data-end-card-text no bot\u00e3o que abre o v\u00eddeo.\r\n\r\n     Se ambos ficarem vazios, o card n\u00e3o aparece.\r\n\r\n     ========================================================= -->\r\n\r\n<style>\r\n\r\n    @import url('https:\/\/fonts.googleapis.com\/css2?family=News+Cycle:wght@400;700&display=swap');\r\n\r\n    .d15-video-flow {\r\n\r\n        --d15-blue: #213B74;\r\n\r\n        --d15-yellow: #F8CA33;\r\n\r\n        --d15-yellow-hover: #F8E31F;\r\n\r\n        --d15-text: #171717;\r\n\r\n        --d15-card: #FFFFFF;\r\n\r\n        \/* V\u00eddeos agora t\u00eam legenda embutida: preserva a parte inferior do quadro. *\/\r\n\r\n        --d15-video-position: 50% 100%;\r\n\r\n        position: relative;\r\n\r\n        width: calc(100% - 75px);\r\n\r\n        margin-left: 75px;\r\n\r\n        \/*\r\n         * Desktop\/notebook:\r\n         * o container acompanha a propor\u00e7\u00e3o real do v\u00eddeo.\r\n         * Assim n\u00e3o precisamos cortar laterais nem criar barras.\r\n         *\/\r\n        height: auto;\r\n\r\n        min-height: 0;\r\n\r\n        max-height: none;\r\n\r\n        aspect-ratio: 16 \/ 9;\r\n\r\n        overflow: hidden;\r\n\r\n        isolation: isolate;\r\n\r\n        background: #171717;\r\n\r\n    }\r\n\r\n    .d15-video-flow,\r\n\r\n    .d15-video-flow * {\r\n\r\n        box-sizing: border-box;\r\n\r\n    }\r\n\r\n    .d15-video-flow [hidden] {\r\n\r\n        display: none !important;\r\n\r\n    }\r\n\r\n    .d15-video-flow__waiting-image,\r\n\r\n    .d15-video-flow__video {\r\n\r\n        position: absolute;\r\n\r\n        z-index: 0;\r\n\r\n        top: 0;\r\n\r\n        right: 0;\r\n\r\n        bottom: 0;\r\n\r\n        left: 0;\r\n\r\n        width: 100%;\r\n\r\n        height: 100%;\r\n\r\n        object-fit: contain;\r\n\r\n        object-position: var(--d15-video-position);\r\n\r\n        background: #171717;\r\n\r\n        transition: opacity 260ms ease, transform 420ms ease;\r\n\r\n    }\r\n\r\n    \/*\r\n     * ENQUADRAMENTO:\r\n     * - imagem de waiting continua preenchendo todo o container;\r\n     * - v\u00eddeo mostra o quadro inteiro, sem cortar as legendas.\r\n     *\/\r\n    .d15-video-flow .d15-video-flow__waiting-image {\r\n        object-fit: cover !important;\r\n        object-position: 50% 50% !important;\r\n    }\r\n\r\n    .d15-video-flow .d15-video-flow__video {\r\n        top: 0 !important;\r\n        right: 0 !important;\r\n        bottom: 0 !important;\r\n        left: 0 !important;\r\n\r\n        width: 100% !important;\r\n        height: 100% !important;\r\n\r\n        object-fit: contain !important;\r\n        object-position: 50% 50% !important;\r\n\r\n        background: transparent !important;\r\n\r\n        transform: none !important;\r\n        opacity: 1 !important;\r\n    }\r\n\r\n    .d15-video-flow.is-loading .d15-video-flow__video {\r\n        opacity: 1 !important;\r\n        transform: none !important;\r\n    }\r\n\r\n    .d15-video-flow__overlay {\r\n        display: none !important;\r\n        background: none !important;\r\n        opacity: 0 !important;\r\n    }\r\n\r\n    .d15-video-flow__interface {\r\n\r\n        position: relative;\r\n\r\n        z-index: 2;\r\n\r\n        display: flex;\r\n\r\n        align-items: flex-end;\r\n\r\n        justify-content: flex-start;\r\n\r\n        width: 100%;\r\n\r\n        height: 100%;\r\n\r\n        min-height: 100%;\r\n\r\n        padding: clamp(28px, 4.5vw, 72px);\r\n\r\n    }\r\n\r\n    .d15-video-flow__card {\r\n\r\n        position: relative;\r\n\r\n        width: min(620px, 42vw);\r\n\r\n        padding: clamp(24px, 2.1vw, 34px);\r\n\r\n        overflow: hidden;\r\n\r\n        border: 1px solid rgba(255,255,255,.70);\r\n\r\n        border-radius: 22px;\r\n\r\n        background: var(--d15-card);\r\n\r\n        box-shadow:\r\n\r\n            0 18px 50px rgba(0,0,0,.30),\r\n\r\n            0 2px 8px rgba(0,0,0,.08);\r\n\r\n        transition: width 250ms ease, padding 250ms ease;\r\n\r\n    }\r\n\r\n    .d15-video-flow__card::before {\r\n\r\n        content: \"\";\r\n\r\n        position: absolute;\r\n\r\n        inset: 0;\r\n\r\n        pointer-events: none;\r\n\r\n        background: linear-gradient(\r\n\r\n            135deg,\r\n\r\n            rgba(255,255,255,.34),\r\n\r\n            rgba(255,255,255,0) 45%\r\n\r\n        );\r\n\r\n    }\r\n\r\n    .d15-video-flow__card > * {\r\n\r\n        position: relative;\r\n\r\n        z-index: 1;\r\n\r\n    }\r\n\r\n    \/* Durante a reprodu\u00e7\u00e3o, o card fica compacto, \u00e0 direita e longe das legendas. *\/\r\n\r\n    .d15-video-flow__card.is-playing {\r\n\r\n        width: min(240px, 20vw);\r\n\r\n        padding: 12px 14px;\r\n\r\n        margin-left: auto;\r\n\r\n        margin-right: 2%;\r\n\r\n        align-self: center;\r\n\r\n        border-radius: 16px;\r\n\r\n    }\r\n\r\n    .d15-video-flow__title {\r\n\r\n        margin: 0 0 14px;\r\n\r\n        color: var(--d15-blue) !important;\r\n\r\n        font-family: \"News Cycle\", sans-serif;\r\n\r\n        font-size: clamp(31px, 2.35vw, 42px);\r\n\r\n        font-weight: 700;\r\n\r\n        line-height: 1.05;\r\n\r\n        letter-spacing: -0.02em;\r\n\r\n    }\r\n\r\n    .d15-video-flow__card.is-playing .d15-video-flow__title {\r\n\r\n        margin-bottom: 8px;\r\n\r\n        font-size: clamp(17px, 1.2vw, 21px);\r\n\r\n        line-height: 1.1;\r\n\r\n    }\r\n\r\n    .d15-video-flow__card.is-playing .d15-video-flow__playback-controls,\r\n\r\n    .d15-video-flow__card.is-playing .d15-video-flow__button {\r\n\r\n        width: 100%;\r\n\r\n    }\r\n\r\n    .d15-video-flow__card.is-playing .d15-video-flow__button {\r\n\r\n        min-height: 36px;\r\n\r\n        padding: 8px 10px;\r\n\r\n        font-size: 13px;\r\n\r\n        border-radius: 10px;\r\n\r\n    }\r\n\r\n    .d15-video-flow__text {\r\n\r\n        margin: 0 0 18px;\r\n\r\n        color: var(--d15-text);\r\n\r\n        font-family: \"Nunito\", Arial, sans-serif;\r\n\r\n        font-size: 16px;\r\n\r\n        line-height: 1.55;\r\n\r\n    }\r\n\r\n    .d15-video-flow__actions,\r\n\r\n    .d15-video-flow__playback-controls,\r\n\r\n    .d15-video-flow__end-actions {\r\n\r\n        display: flex;\r\n\r\n        flex-wrap: wrap;\r\n\r\n        align-items: center;\r\n\r\n        gap: 10px;\r\n\r\n    }\r\n\r\n    .d15-video-flow__button {\r\n\r\n        appearance: none;\r\n\r\n        display: inline-flex;\r\n\r\n        align-items: center;\r\n\r\n        justify-content: center;\r\n\r\n        width: fit-content;\r\n\r\n        max-width: 100%;\r\n\r\n        min-height: 44px;\r\n\r\n        border: 0;\r\n\r\n        border-radius: 14px;\r\n\r\n        padding: 11px 19px;\r\n\r\n        color: var(--d15-text);\r\n\r\n        background: var(--d15-yellow);\r\n\r\n        font-family: \"Nunito\", Arial, sans-serif;\r\n\r\n        font-size: 15px;\r\n\r\n        font-weight: 700;\r\n\r\n        line-height: 1.25;\r\n\r\n        text-align: center;\r\n\r\n        text-wrap: balance;\r\n\r\n        box-shadow:\r\n\r\n            0 5px 14px rgba(33,59,116,.10),\r\n\r\n            inset 0 1px 0 rgba(255,255,255,.32);\r\n\r\n        cursor: pointer;\r\n\r\n        transition:\r\n\r\n            background-color 180ms ease,\r\n\r\n            box-shadow 180ms ease,\r\n\r\n            transform 180ms ease;\r\n\r\n    }\r\n\r\n    .d15-video-flow__button:hover,\r\n\r\n    .d15-video-flow__button:focus-visible {\r\n\r\n        background: var(--d15-yellow-hover);\r\n\r\n        transform: translateY(-2px);\r\n\r\n        box-shadow:\r\n\r\n            0 8px 18px rgba(33,59,116,.14),\r\n\r\n            inset 0 1px 0 rgba(255,255,255,.38);\r\n\r\n    }\r\n\r\n    .d15-video-flow__button:focus-visible {\r\n\r\n        outline: 3px solid rgba(33,59,116,.22);\r\n\r\n        outline-offset: 3px;\r\n\r\n    }\r\n\r\n    .d15-video-flow__button--secondary {\r\n\r\n        color: var(--d15-blue);\r\n\r\n        background: #FFFFFF;\r\n\r\n        border: 1.5px solid rgba(33,59,116,.30);\r\n\r\n        box-shadow: none;\r\n\r\n    }\r\n\r\n    .d15-video-flow__button--secondary:hover,\r\n\r\n    .d15-video-flow__button--secondary:focus-visible {\r\n\r\n        background: #F3F5F9;\r\n\r\n    }\r\n\r\n    \/* =====================================================\r\n\r\n       BARRA DE REPRODU\u00c7\u00c3O\r\n\r\n       ===================================================== *\/\r\n\r\n    .d15-video-flow__playback-controls {\r\n\r\n        flex-direction: column;\r\n\r\n        align-items: stretch;\r\n\r\n    }\r\n\r\n    .d15-video-flow__seek {\r\n\r\n        display: grid;\r\n\r\n        grid-template-columns: 38px minmax(0, 1fr) 38px;\r\n\r\n        align-items: center;\r\n\r\n        gap: 8px;\r\n\r\n        width: 100%;\r\n\r\n        margin-top: 2px;\r\n\r\n    }\r\n\r\n    .d15-video-flow__seek-time {\r\n\r\n        color: var(--d15-blue);\r\n\r\n        font-family:\r\n\r\n            \"Nunito\",\r\n\r\n            Arial,\r\n\r\n            sans-serif;\r\n\r\n        font-size: 11px;\r\n\r\n        font-weight: 700;\r\n\r\n        line-height: 1;\r\n\r\n        white-space: nowrap;\r\n\r\n    }\r\n\r\n    .d15-video-flow__seek-time:last-child {\r\n\r\n        text-align: right;\r\n\r\n    }\r\n\r\n    .d15-video-flow__seek-input {\r\n\r\n        width: 100%;\r\n\r\n        min-width: 0;\r\n\r\n        margin: 0;\r\n\r\n        cursor: pointer;\r\n\r\n        accent-color: var(--d15-blue);\r\n\r\n    }\r\n\r\n    .d15-video-flow__seek-input:disabled {\r\n\r\n        cursor: default;\r\n\r\n        opacity: .55;\r\n\r\n    }\r\n\r\n    .d15-video-flow__seek-input:focus-visible {\r\n\r\n        outline: 3px solid rgba(33, 59, 116, .20);\r\n\r\n        outline-offset: 3px;\r\n\r\n        border-radius: 999px;\r\n\r\n    }\r\n\r\n    .d15-video-flow__retry {\r\n\r\n        margin-top: 12px;\r\n\r\n    }\r\n\r\n    .d15-video-flow__status {\r\n\r\n        margin: 12px 0 0;\r\n\r\n        color: #6B3D00;\r\n\r\n        font-family: \"Nunito\", Arial, sans-serif;\r\n\r\n        font-size: 14px;\r\n\r\n        font-weight: 600;\r\n\r\n        line-height: 1.4;\r\n\r\n    }\r\n\r\n    .d15-video-flow__end-card {\r\n\r\n        animation: d15CardIn 260ms ease both;\r\n\r\n    }\r\n\r\n    @keyframes d15CardIn {\r\n\r\n        from {\r\n\r\n            opacity: 0;\r\n\r\n            transform: translateY(8px);\r\n\r\n        }\r\n\r\n        to {\r\n\r\n            opacity: 1;\r\n\r\n            transform: translateY(0);\r\n\r\n        }\r\n\r\n    }\r\n\r\n    @media (max-width: 767px) {\r\n\r\n        .d15-video-flow {\r\n\r\n            display: flex;\r\n\r\n            flex-direction: column;\r\n\r\n            width: 100%;\r\n\r\n            margin-left: 0;\r\n\r\n            aspect-ratio: auto;\r\n\r\n            height: auto;\r\n\r\n            min-height: 0;\r\n\r\n            overflow: visible;\r\n\r\n            background: #F2F3F5;\r\n\r\n        }\r\n\r\n        .d15-video-flow__title {\r\n            display: none;\r\n        }\r\n\r\n        \/*\r\n\r\n         * No mobile, foto\/v\u00eddeo ficam em fluxo normal e ocupam 100% da largura.\r\n\r\n         * aspect-ratio 16\/9 evita o corte das legendas embutidas.\r\n\r\n         *\/\r\n\r\n        .d15-video-flow__waiting-image,\r\n\r\n        .d15-video-flow__video {\r\n\r\n            position: relative;\r\n\r\n            z-index: 0;\r\n\r\n            top: auto;\r\n\r\n            right: auto;\r\n\r\n            bottom: 0;\r\n\r\n            left: auto;\r\n\r\n            display: block;\r\n\r\n            flex: 0 0 auto;\r\n\r\n            width: 100%;\r\n\r\n            height: auto;\r\n\r\n            aspect-ratio: 16 \/ 9;\r\n\r\n            object-position: 50% 100%;\r\n\r\n            background: #171717;\r\n\r\n        }\r\n\r\n        \/* Waiting cobre totalmente a \u00e1rea de m\u00eddia. *\/\r\n\r\n        .d15-video-flow__waiting-image {\r\n\r\n            object-fit: cover;\r\n\r\n        }\r\n\r\n        \/* V\u00eddeo preserva o quadro inteiro para n\u00e3o cortar as legendas. *\/\r\n\r\n        .d15-video-flow__video {\r\n\r\n            object-fit: contain;\r\n\r\n        }\r\n\r\n        \/* O degrad\u00ea era pensado para card sobreposto; no mobile o card fica abaixo. *\/\r\n\r\n        .d15-video-flow__overlay {\r\n\r\n            display: none;\r\n\r\n        }\r\n\r\n        .d15-video-flow__interface {\r\n\r\n            position: relative;\r\n\r\n            z-index: 2;\r\n\r\n            display: block;\r\n\r\n            width: 100%;\r\n\r\n            height: auto;\r\n\r\n            min-height: 0;\r\n\r\n            padding: 24px 18px 30px;\r\n\r\n            background: #F2F3F5;\r\n\r\n        }\r\n\r\n        .d15-video-flow__card,\r\n\r\n        .d15-video-flow__card.is-playing {\r\n\r\n            width: 100%;\r\n\r\n            max-width: none;\r\n\r\n            padding: 20px 18px;\r\n\r\n            border-radius: 18px;\r\n\r\n            margin: 0;\r\n\r\n            align-self: auto;\r\n\r\n        }\r\n\r\n        .d15-video-flow__title,\r\n\r\n        .d15-video-flow__card.is-playing .d15-video-flow__title {\r\n\r\n            font-size: clamp(28px, 8.5vw, 36px);\r\n\r\n        }\r\n\r\n        .d15-video-flow__actions,\r\n\r\n        .d15-video-flow__playback-controls,\r\n\r\n        .d15-video-flow__end-actions,\r\n\r\n        .d15-video-flow__button {\r\n\r\n            width: 100%;\r\n\r\n        }\r\n\r\n    }\r\n\r\n    @media (prefers-reduced-motion: reduce) {\r\n\r\n        .d15-video-flow__waiting-image,\r\n\r\n        .d15-video-flow__video,\r\n\r\n        .d15-video-flow__card,\r\n\r\n        .d15-video-flow__button,\r\n\r\n        .d15-video-flow__end-card {\r\n\r\n            transition: none;\r\n\r\n            animation: none;\r\n\r\n        }\r\n\r\n    }\r\n\r\n<\/style>\r\n\r\n<!-- =========================================================\r\n\r\n     INST\u00c2NCIA EXEMPLO \u2014 MARIA\r\n\r\n     Voc\u00ea pode duplicar TODO este <div class=\"d15-video-flow\">.\r\n\r\n     As c\u00f3pias n\u00e3o interferem umas nas outras.\r\n\r\n     ========================================================= -->\r\n\r\n<div\r\n\r\n    class=\"d15-video-flow\"\r\n\r\n    data-start-stage=\"intro\"\r\n\r\n    data-default-idle-image=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/10\/CuidadoD15Roteiro1Waiting-scaled.jpg\"\r\n\r\n>\r\n\r\n    <!--\r\n\r\n         WAITING \/ FUNDO PARADO:\r\n\r\n         a URL fica em data-default-idle-image na inst\u00e2ncia.\r\n\r\n         O JavaScript coloca essa imagem em tela cheia.\r\n\r\n    -->\r\n\r\n    <img\r\n\r\n        class=\"d15-video-flow__waiting-image\"\r\n\r\n        alt=\"\"\r\n\r\n        aria-hidden=\"true\"\r\n\r\n    >\r\n\r\n    <!--\r\n\r\n         Este v\u00eddeo fica oculto enquanto a tela est\u00e1 em waiting.\r\n\r\n         Ele aparece somente quando algum bot\u00e3o data-action=\"play\"\r\n\r\n         iniciar um v\u00eddeo.\r\n\r\n    -->\r\n\r\n    <video\r\n\r\n        class=\"d15-video-flow__video\"\r\n\r\n        playsinline\r\n\r\n        preload=\"auto\"\r\n\r\n        hidden\r\n\r\n    ><\/video>\r\n\r\n    <div class=\"d15-video-flow__overlay\"><\/div>\r\n\r\n    <div class=\"d15-video-flow__interface\">\r\n\r\n        <div class=\"d15-video-flow__card\">\r\n\r\n            <!-- =============================================\r\n\r\n                 TELA 1 \u2014 CONHECENDO A PACIENTE\r\n\r\n                 ============================================= -->\r\n\r\n            <section\r\n\r\n                class=\"d15-video-flow__stage\"\r\n\r\n                data-stage=\"intro\"\r\n\r\n                data-idle-image=\"\"\r\n\r\n            >\r\n\r\n                <h2 class=\"d15-video-flow__title\">\r\n\r\n                    Conhecendo a paciente\r\n\r\n                <\/h2>\r\n\r\n                <div class=\"d15-video-flow__actions\">\r\n\r\n                    <!--\r\n\r\n                        = Pular aparece aos 30s.\r\n\r\n                        data-skip-after=\"0\"\r\n\r\n                        = Pular aparece desde o come\u00e7o.\r\n\r\n                        sem data-skip-after\r\n\r\n                        = n\u00e3o existe op\u00e7\u00e3o de pular.\r\n\r\n                        CARD COMPLEMENTAR OPCIONAL:\r\n\r\n                        Preencha data-end-card-title e\/ou\r\n\r\n                        data-end-card-text para ele aparecer\r\n\r\n                        ao final natural deste v\u00eddeo.\r\n\r\n                    -->\r\n\r\n                    <button\r\n\r\n                        type=\"button\"\r\n\r\n                        class=\"d15-video-flow__button\"\r\n\r\n                        data-action=\"play\"\r\n\r\n                        data-video=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/10\/Roteiro1-VersaoWeb-VFinalV2.mp4\"\r\n\r\n                        data-play-title=\"Exames\"\r\n\r\n                        data-next-stage=\"intro\"\r\n\r\n                        data-skip-after=\"30\"\r\n\r\n                        data-end-card-title=\"\"\r\n\r\n                        data-end-card-text=\"\"\r\n\r\n                        data-end-card-button=\"Continuar\"\r\n\r\n                    >\r\n\r\n                        Clique aqui para conhecer a hist\u00f3ria de Maria\r\n\r\n                    <\/button>\r\n\r\n                <\/div>\r\n\r\n            <\/section>\r\n\r\n<!-- =============================================\r\n\r\n                 CONTROLE DURANTE O V\u00cdDEO\r\n\r\n                 ============================================= -->\r\n\r\n            <section\r\n\r\n                class=\"d15-video-flow__playback\"\r\n\r\n                hidden\r\n\r\n            >\r\n\r\n                <h2\r\n\r\n                    class=\"d15-video-flow__title d15-video-flow__playback-title\"\r\n\r\n                >\r\n\r\n                    V\u00eddeo\r\n\r\n                <\/h2>\r\n\r\n                <div\r\n\r\n                    class=\"d15-video-flow__playback-controls\"\r\n\r\n                    role=\"group\"\r\n\r\n                    aria-label=\"Controles do v\u00eddeo\"\r\n\r\n                >\r\n\r\n                    <button\r\n\r\n                        type=\"button\"\r\n\r\n                        class=\"d15-video-flow__button d15-video-flow__pause\"\r\n\r\n                    >\r\n\r\n                        Pausar v\u00eddeo\r\n\r\n                    <\/button>\r\n\r\n                    <div\r\n\r\n                        class=\"d15-video-flow__seek\"\r\n\r\n                    >\r\n\r\n                        <span\r\n\r\n                            class=\"d15-video-flow__seek-time d15-video-flow__seek-current\"\r\n\r\n                            aria-hidden=\"true\"\r\n\r\n                        >\r\n\r\n                            0:00\r\n\r\n                        <\/span>\r\n\r\n                        <input\r\n\r\n                            type=\"range\"\r\n\r\n                            class=\"d15-video-flow__seek-input\"\r\n\r\n                            min=\"0\"\r\n\r\n                            max=\"100\"\r\n\r\n                            step=\"0.1\"\r\n\r\n                            value=\"0\"\r\n\r\n                            aria-label=\"Barra de reprodu\u00e7\u00e3o do v\u00eddeo\"\r\n\r\n                        >\r\n\r\n                        <span\r\n\r\n                            class=\"d15-video-flow__seek-time d15-video-flow__seek-duration\"\r\n\r\n                            aria-hidden=\"true\"\r\n\r\n                        >\r\n\r\n                            0:00\r\n\r\n                        <\/span>\r\n\r\n                    <\/div>\r\n\r\n                <\/div>\r\n\r\n            <\/section>\r\n\r\n            <!-- =============================================\r\n\r\n                 CARD COMPLEMENTAR OPCIONAL\r\n\r\n                 O JS preenche este card a partir dos atributos\r\n\r\n                 data-end-card-* do bot\u00e3o que iniciou o v\u00eddeo.\r\n\r\n                 ============================================= -->\r\n\r\n            <section\r\n\r\n                class=\"d15-video-flow__end-card\"\r\n\r\n                hidden\r\n\r\n            >\r\n\r\n                <h2\r\n\r\n                    class=\"d15-video-flow__title d15-video-flow__end-title\"\r\n\r\n                ><\/h2>\r\n\r\n                <p\r\n\r\n                    class=\"d15-video-flow__text d15-video-flow__end-text\"\r\n\r\n                ><\/p>\r\n\r\n                <div class=\"d15-video-flow__end-actions\">\r\n\r\n                    <button\r\n\r\n                        type=\"button\"\r\n\r\n                        class=\"d15-video-flow__button d15-video-flow__end-continue\"\r\n\r\n                    >\r\n\r\n                        Continuar\r\n\r\n                    <\/button>\r\n\r\n                    <button\r\n\r\n                        type=\"button\"\r\n\r\n                        class=\"d15-video-flow__button d15-video-flow__button--secondary d15-video-flow__end-back\"\r\n\r\n                    >\r\n\r\n                        Voltar\r\n\r\n                    <\/button>\r\n\r\n                <\/div>\r\n\r\n            <\/section>\r\n\r\n            <button\r\n\r\n                type=\"button\"\r\n\r\n                class=\"d15-video-flow__button d15-video-flow__retry\"\r\n\r\n                hidden\r\n\r\n            >\r\n\r\n                Reproduzir v\u00eddeo com \u00e1udio\r\n\r\n            <\/button>\r\n\r\n            <p\r\n\r\n                class=\"d15-video-flow__status\"\r\n\r\n                aria-live=\"polite\"\r\n\r\n                hidden\r\n\r\n            ><\/p>\r\n\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n<\/div>\r\n\r\n<script>\r\n\r\n(() => {\r\n\r\n    \/*\r\n\r\n     * A l\u00f3gica global \u00e9 definida uma \u00fanica vez.\r\n\r\n     * Cada .d15-video-flow guarda estado, hist\u00f3rico e v\u00eddeo pr\u00f3prios.\r\n\r\n     *\/\r\n\r\n    if (!window.D15VideoFlow) {\r\n\r\n        const SELECTOR = \".d15-video-flow\";\r\n\r\n        function initializeOne(component) {\r\n\r\n            if (\r\n\r\n                !component ||\r\n\r\n                component.dataset.d15VideoFlowInitialized === \"true\"\r\n\r\n            ) {\r\n\r\n                return;\r\n\r\n            }\r\n\r\n            component.dataset.d15VideoFlowInitialized = \"true\";\r\n\r\n            const waitingImage = component.querySelector(\r\n\r\n                \".d15-video-flow__waiting-image\"\r\n\r\n            );\r\n\r\n            const video = component.querySelector(\r\n\r\n                \".d15-video-flow__video\"\r\n\r\n            );\r\n\r\n            const card = component.querySelector(\r\n\r\n                \".d15-video-flow__card\"\r\n\r\n            );\r\n\r\n            const stages = [\r\n\r\n                ...component.querySelectorAll(\r\n\r\n                    \".d15-video-flow__stage\"\r\n\r\n                )\r\n\r\n            ];\r\n\r\n            const playback = component.querySelector(\r\n\r\n                \".d15-video-flow__playback\"\r\n\r\n            );\r\n\r\n            const playbackTitle = component.querySelector(\r\n\r\n                \".d15-video-flow__playback-title\"\r\n\r\n            );\r\n\r\n            const pauseButton = component.querySelector(\r\n\r\n                \".d15-video-flow__pause\"\r\n\r\n            );\r\n\r\n            const seekInput = component.querySelector(\r\n\r\n                \".d15-video-flow__seek-input\"\r\n\r\n            );\r\n\r\n            const seekCurrent = component.querySelector(\r\n\r\n                \".d15-video-flow__seek-current\"\r\n\r\n            );\r\n\r\n            const seekDuration = component.querySelector(\r\n\r\n                \".d15-video-flow__seek-duration\"\r\n\r\n            );\r\n\r\nconst skipButton = component.querySelector(\r\n\r\n                \".d15-video-flow__skip\"\r\n\r\n            );\r\n\r\n            const endCard = component.querySelector(\r\n\r\n                \".d15-video-flow__end-card\"\r\n\r\n            );\r\n\r\n            const endTitle = component.querySelector(\r\n\r\n                \".d15-video-flow__end-title\"\r\n\r\n            );\r\n\r\n            const endText = component.querySelector(\r\n\r\n                \".d15-video-flow__end-text\"\r\n\r\n            );\r\n\r\n            const endContinue = component.querySelector(\r\n\r\n                \".d15-video-flow__end-continue\"\r\n\r\n            );\r\n\r\n            const endBack = component.querySelector(\r\n\r\n                \".d15-video-flow__end-back\"\r\n\r\n            );\r\n\r\n            const retryButton = component.querySelector(\r\n\r\n                \".d15-video-flow__retry\"\r\n\r\n            );\r\n\r\n            const status = component.querySelector(\r\n\r\n                \".d15-video-flow__status\"\r\n\r\n            );\r\n\r\n            if (\r\n\r\n                !waitingImage ||\r\n\r\n                !video ||\r\n\r\n                !card ||\r\n\r\n                !stages.length ||\r\n\r\n                !playback ||\r\n\r\n                !pauseButton\r\n\r\n            ) {\r\n\r\n                return;\r\n\r\n            }\r\n\r\n            const startStage =\r\n\r\n                component.dataset.startStage ||\r\n\r\n                stages[0].dataset.stage;\r\n\r\n            const defaultIdleImage =\r\n\r\n                component.dataset.defaultIdleImage ||\r\n\r\n                waitingImage.currentSrc ||\r\n\r\n                waitingImage.src;\r\n\r\n            let activeStageName = null;\r\n\r\n            let currentPlayback = null;\r\n\r\n            let requestId = 0;\r\n\r\n            \/* Hist\u00f3rico exclusivo desta inst\u00e2ncia. *\/\r\n\r\n            const stageHistory = [];\r\n\r\n            function getStage(name) {\r\n\r\n                return stages.find(\r\n\r\n                    stage => stage.dataset.stage === name\r\n\r\n                ) || null;\r\n\r\n            }\r\n\r\n            function configured(value) {\r\n\r\n                return Boolean(\r\n\r\n                    value &&\r\n\r\n                    String(value).trim() &&\r\n\r\n                    !String(value).includes(\"COLE_AQUI\") &&\r\n\r\n                    !String(value).includes(\"SUBSTITUA\")\r\n\r\n                );\r\n\r\n            }\r\n\r\n            function showStatus(message = \"\") {\r\n\r\n                if (!status) return;\r\n\r\n                status.textContent = message;\r\n\r\n                status.hidden = !message;\r\n\r\n            }\r\n\r\n            function resetMessages() {\r\n\r\n                if (retryButton) {\r\n\r\n                    retryButton.hidden = true;\r\n\r\n                }\r\n\r\n                showStatus(\"\");\r\n\r\n            }\r\n\r\n            function hideAllPanels() {\r\n\r\n                stages.forEach(stage => {\r\n\r\n                    stage.hidden = true;\r\n\r\n                });\r\n\r\n                playback.hidden = true;\r\n\r\n                if (endCard) {\r\n\r\n                    endCard.hidden = true;\r\n\r\n                }\r\n\r\n            }\r\n\r\n            function setPlayingCard(value) {\r\n\r\n                card.classList.toggle(\r\n\r\n                    \"is-playing\",\r\n\r\n                    value\r\n\r\n                );\r\n\r\n            }\r\n\r\n            function updatePauseLabel() {\r\n\r\n                pauseButton.textContent = video.paused\r\n\r\n                    ? \"Continuar v\u00eddeo\"\r\n\r\n                    : \"Pausar v\u00eddeo\";\r\n\r\n            }\r\n\r\n            function formatVideoTime(seconds) {\r\n                const safeSeconds =\r\n                    Number.isFinite(seconds)\r\n                        ? Math.max(0, seconds)\r\n                        : 0;\r\n\r\n                const minutes =\r\n                    Math.floor(\r\n                        safeSeconds \/ 60\r\n                    );\r\n\r\n                const remainingSeconds =\r\n                    Math.floor(\r\n                        safeSeconds % 60\r\n                    );\r\n\r\n                return `${minutes}:${String(\r\n                    remainingSeconds\r\n                ).padStart(2, \"0\")}`;\r\n            }\r\n\r\n            function getVideoDuration() {\r\n                if (\r\n                    Number.isFinite(video.duration) &&\r\n                    video.duration > 0 &&\r\n                    video.duration !== Infinity\r\n                ) {\r\n                    return video.duration;\r\n                }\r\n\r\n                \/*\r\n                 * Fallback importante para alguns MP4s\/servidores:\r\n                 * enquanto duration ainda aparece como Infinity\/NaN,\r\n                 * usamos a regi\u00e3o j\u00e1 reconhecida como seekable.\r\n                 *\/\r\n                if (\r\n                    video.seekable &&\r\n                    video.seekable.length\r\n                ) {\r\n                    const lastIndex =\r\n                        video.seekable.length - 1;\r\n\r\n                    const seekableEnd =\r\n                        video.seekable.end(\r\n                            lastIndex\r\n                        );\r\n\r\n                    if (\r\n                        Number.isFinite(seekableEnd) &&\r\n                        seekableEnd > 0\r\n                    ) {\r\n                        return seekableEnd;\r\n                    }\r\n                }\r\n\r\n                return 0;\r\n            }\r\n\r\n            function resetSeekBar() {\r\n                if (seekInput) {\r\n                    seekInput.min = \"0\";\r\n                    seekInput.max = \"0\";\r\n                    seekInput.step = \"0.05\";\r\n                    seekInput.value = \"0\";\r\n                    seekInput.setAttribute(\r\n                        \"aria-valuemin\",\r\n                        \"0\"\r\n                    );\r\n                    seekInput.setAttribute(\r\n                        \"aria-valuemax\",\r\n                        \"0\"\r\n                    );\r\n                    seekInput.setAttribute(\r\n                        \"aria-valuenow\",\r\n                        \"0\"\r\n                    );\r\n                }\r\n\r\n                if (seekCurrent) {\r\n                    seekCurrent.textContent =\r\n                        \"0:00\";\r\n                }\r\n\r\n                if (seekDuration) {\r\n                    seekDuration.textContent =\r\n                        \"0:00\";\r\n                }\r\n            }\r\n\r\n            function updateSeekBar() {\r\n                if (!seekInput) {\r\n                    return;\r\n                }\r\n\r\n                const duration =\r\n                    getVideoDuration();\r\n\r\n                const current =\r\n                    Number.isFinite(video.currentTime)\r\n                        ? Math.max(\r\n                            0,\r\n                            video.currentTime\r\n                        )\r\n                        : 0;\r\n\r\n                if (duration > 0) {\r\n                    seekInput.max =\r\n                        String(duration);\r\n\r\n                    seekInput.value =\r\n                        String(\r\n                            Math.min(\r\n                                current,\r\n                                duration\r\n                            )\r\n                        );\r\n\r\n                    seekInput.setAttribute(\r\n                        \"aria-valuemax\",\r\n                        String(duration)\r\n                    );\r\n\r\n                    seekInput.setAttribute(\r\n                        \"aria-valuenow\",\r\n                        String(current)\r\n                    );\r\n\r\n                    if (seekDuration) {\r\n                        seekDuration.textContent =\r\n                            formatVideoTime(\r\n                                duration\r\n                            );\r\n                    }\r\n                } else {\r\n                    seekInput.max = \"0\";\r\n                    seekInput.value = \"0\";\r\n\r\n                    if (seekDuration) {\r\n                        seekDuration.textContent =\r\n                            \"0:00\";\r\n                    }\r\n                }\r\n\r\n                if (seekCurrent) {\r\n                    seekCurrent.textContent =\r\n                        formatVideoTime(\r\n                            current\r\n                        );\r\n                }\r\n            }\r\n\r\n            function seekToControlValue() {\r\n                if (!seekInput) {\r\n                    return;\r\n                }\r\n\r\n                const duration =\r\n                    getVideoDuration();\r\n\r\n                if (duration <= 0) {\r\n                    updateSeekBar();\r\n                    return;\r\n                }\r\n\r\n                const target =\r\n                    Number(\r\n                        seekInput.value\r\n                    );\r\n\r\n                if (\r\n                    !Number.isFinite(target)\r\n                ) {\r\n                    return;\r\n                }\r\n\r\n                video.currentTime =\r\n                    Math.min(\r\n                        duration,\r\n                        Math.max(\r\n                            0,\r\n                            target\r\n                        )\r\n                    );\r\n\r\n                updateSeekBar();\r\n            }\r\n\r\n            function applyVideoPosition(stage) {\r\n\r\n                const position =\r\n\r\n                    stage?.dataset.videoPosition ||\r\n\r\n                    \"50% 100%\";\r\n\r\n                component.style.setProperty(\r\n\r\n                    \"--d15-video-position\",\r\n\r\n                    position\r\n\r\n                );\r\n\r\n            }\r\n\r\n            function showIdleImage(src) {\r\n\r\n                \/*\r\n\r\n                 * Invalida qualquer tentativa anterior de reprodu\u00e7\u00e3o\r\n\r\n                 * e volta o componente para o estado de waiting.\r\n\r\n                 *\/\r\n\r\n                requestId += 1;\r\n\r\n                video.pause();\r\n\r\n                video.hidden = true;\r\n\r\n                resetSeekBar();\r\n\r\n                component.classList.remove(\"is-loading\");\r\n\r\n                if (!configured(src)) {\r\n\r\n                    waitingImage.hidden = true;\r\n\r\n                    showStatus(\r\n\r\n                        \"A imagem de espera ainda n\u00e3o foi configurada.\"\r\n\r\n                    );\r\n\r\n                    return;\r\n\r\n                }\r\n\r\n                const currentSrc =\r\n\r\n                    waitingImage.currentSrc ||\r\n\r\n                    waitingImage.src;\r\n\r\n                if (currentSrc !== src) {\r\n\r\n                    waitingImage.src = src;\r\n\r\n                }\r\n\r\n                waitingImage.hidden = false;\r\n\r\n            }\r\n\r\n            function parseSkipAfter(button) {\r\n\r\n                if (!button.hasAttribute(\"data-skip-after\")) {\r\n\r\n                    return null;\r\n\r\n                }\r\n\r\n                const value = Number(\r\n\r\n                    button.dataset.skipAfter\r\n\r\n                );\r\n\r\n                return Number.isFinite(value)\r\n\r\n                    ? Math.max(0, value)\r\n\r\n                    : null;\r\n\r\n            }\r\n\r\n            function hasEndCard(config) {\r\n\r\n                return Boolean(\r\n\r\n                    config &&\r\n\r\n                    (\r\n\r\n                        config.endTitle.trim() ||\r\n\r\n                        config.endText.trim()\r\n\r\n                    )\r\n\r\n                );\r\n\r\n            }\r\n\r\n            function playSource({\r\n\r\n                src,\r\n\r\n                withAudio = false,\r\n\r\n                loop = false\r\n\r\n            }) {\r\n\r\n                if (!configured(src)) {\r\n\r\n                    return Promise.reject(\r\n\r\n                        new Error(\"V\u00eddeo n\u00e3o configurado.\")\r\n\r\n                    );\r\n\r\n                }\r\n\r\n                waitingImage.hidden = true;\r\n\r\n                video.hidden = false;\r\n\r\n                requestId += 1;\r\n\r\n                const localRequest = requestId;\r\n\r\n                component.classList.add(\"is-loading\");\r\n\r\n                video.pause();\r\n\r\n                video.loop = loop;\r\n\r\n                video.muted = !withAudio;\r\n\r\n                video.defaultMuted = !withAudio;\r\n\r\n                const currentSrc =\r\n\r\n                    video.currentSrc || video.src;\r\n\r\n                if (currentSrc !== src) {\r\n\r\n                    video.src = src;\r\n\r\n                    video.load();\r\n\r\n                }\r\n\r\n                const promise = video.play();\r\n\r\n                if (\r\n\r\n                    promise &&\r\n\r\n                    typeof promise.then === \"function\"\r\n\r\n                ) {\r\n\r\n                    return promise\r\n\r\n                        .then(() => {\r\n\r\n                            if (localRequest !== requestId) {\r\n\r\n                                return;\r\n\r\n                            }\r\n\r\n                            component.classList.remove(\r\n\r\n                                \"is-loading\"\r\n\r\n                            );\r\n\r\n                            updatePauseLabel();\r\n\r\n                                updateSeekBar();\r\n\r\n                        })\r\n\r\n                        .catch(error => {\r\n\r\n                            if (localRequest !== requestId) {\r\n\r\n                                return;\r\n\r\n                            }\r\n\r\n                            component.classList.remove(\r\n\r\n                                \"is-loading\"\r\n\r\n                            );\r\n\r\n                            if (withAudio && retryButton) {\r\n\r\n                                retryButton.hidden = false;\r\n\r\n                                showStatus(\r\n\r\n                                    \"O navegador bloqueou o \u00e1udio. Clique em \u201cReproduzir v\u00eddeo com \u00e1udio\u201d.\"\r\n\r\n                                );\r\n\r\n                            }\r\n\r\n                            console.warn(\r\n\r\n                                \"[D15VideoFlow]\",\r\n\r\n                                error\r\n\r\n                            );\r\n\r\n                            throw error;\r\n\r\n                        });\r\n\r\n                }\r\n\r\n                return Promise.resolve();\r\n\r\n            }\r\n\r\n            function showStage(\r\n\r\n                name,\r\n\r\n                {\r\n\r\n                    pushHistory = false,\r\n\r\n                    replayLabel = \"\"\r\n\r\n                } = {}\r\n\r\n            ) {\r\n\r\n                const stage = getStage(name);\r\n\r\n                if (!stage) {\r\n\r\n                    console.warn(\r\n\r\n                        `[D15VideoFlow] Etapa \"${name}\" n\u00e3o encontrada.`\r\n\r\n                    );\r\n\r\n                    return;\r\n\r\n                }\r\n\r\n                if (\r\n\r\n                    pushHistory &&\r\n\r\n                    activeStageName &&\r\n\r\n                    activeStageName !== name\r\n\r\n                ) {\r\n\r\n                    stageHistory.push(activeStageName);\r\n\r\n                }\r\n\r\n                activeStageName = name;\r\n\r\n                currentPlayback = null;\r\n\r\n                hideAllPanels();\r\n\r\n                resetMessages();\r\n\r\n                setPlayingCard(false);\r\n\r\n                stage.hidden = false;\r\n\r\n                applyVideoPosition(stage);\r\n\r\n                const idleImage =\r\n\r\n                    stage.dataset.idleImage ||\r\n\r\n                    defaultIdleImage;\r\n\r\n                showIdleImage(\r\n\r\n                    idleImage\r\n\r\n                );\r\n\r\n            }\r\n\r\n            function goBack() {\r\n\r\n                if (stageHistory.length) {\r\n\r\n                    showStage(\r\n\r\n                        stageHistory.pop(),\r\n\r\n                        { pushHistory: false }\r\n\r\n                    );\r\n\r\n                    return;\r\n\r\n                }\r\n\r\n                if (activeStageName !== startStage) {\r\n\r\n                    showStage(\r\n\r\n                        startStage,\r\n\r\n                        { pushHistory: false }\r\n\r\n                    );\r\n\r\n                }\r\n\r\n            }\r\n\r\n            function startPlayback(button) {\r\n\r\n                const src = button.dataset.video || \"\";\r\n\r\n                if (!configured(src)) {\r\n\r\n                    showStatus(\r\n\r\n                        \"Este v\u00eddeo ainda n\u00e3o foi configurado.\"\r\n\r\n                    );\r\n\r\n                    return;\r\n\r\n                }\r\n\r\n                currentPlayback = {\r\n\r\n                    originStage: activeStageName,\r\n\r\n                    nextStage:\r\n\r\n                        button.dataset.nextStage ||\r\n\r\n                        activeStageName,\r\n\r\n                    skipStage:\r\n\r\n                        button.dataset.skipStage ||\r\n\r\n                        button.dataset.nextStage ||\r\n\r\n                        activeStageName,\r\n\r\n                    playTitle:\r\n\r\n                        button.dataset.playTitle ||\r\n\r\n                        button.textContent.trim(),\r\n\r\n                    skipAfter:\r\n\r\n                        parseSkipAfter(button),\r\n\r\n                    replayLabel:\r\n\r\n                        button.dataset.replayLabel || \"\",\r\n\r\n                    sourceButton: button,\r\n\r\n                    endTitle:\r\n\r\n                        button.dataset.endCardTitle || \"\",\r\n\r\n                    endText:\r\n\r\n                        button.dataset.endCardText || \"\",\r\n\r\n                    endButton:\r\n\r\n                        button.dataset.endCardButton ||\r\n\r\n                        \"Continuar\",\r\n\r\n                    endNextStage:\r\n\r\n                        button.dataset.endCardNextStage ||\r\n\r\n                        button.dataset.nextStage ||\r\n\r\n                        activeStageName,\r\n\r\n                    endOnSkip:\r\n\r\n                        button.dataset.endCardOnSkip ===\r\n\r\n                        \"true\"\r\n\r\n                };\r\n\r\n                hideAllPanels();\r\n\r\n                resetMessages();\r\n\r\n                setPlayingCard(true);\r\n\r\n                playback.hidden = false;\r\n\r\n                resetSeekBar();\r\n\r\n                if (playbackTitle) {\r\n\r\n                    playbackTitle.textContent =\r\n\r\n                        currentPlayback.playTitle;\r\n\r\n                }\r\n\r\n                \/*\r\n\r\n                 * null = nunca mostra Pular\r\n\r\n                 * 0    = mostra imediatamente\r\n\r\n                 * > 0  = mostra ao atingir o tempo\r\n\r\n                 *\/\r\n\r\n                if (skipButton) {\r\n\r\n                    skipButton.hidden =\r\n\r\n                        currentPlayback.skipAfter === null ||\r\n\r\n                        currentPlayback.skipAfter > 0;\r\n\r\n                }\r\n\r\n                playSource({\r\n\r\n                    src,\r\n\r\n                    withAudio: true,\r\n\r\n                    loop: false\r\n\r\n                }).catch(() => {});\r\n\r\n            }\r\n\r\n            function showEndCard() {\r\n\r\n                if (\r\n\r\n                    !currentPlayback ||\r\n\r\n                    !endCard ||\r\n\r\n                    !hasEndCard(currentPlayback)\r\n\r\n                ) {\r\n\r\n                    return false;\r\n\r\n                }\r\n\r\n                hideAllPanels();\r\n\r\n                resetMessages();\r\n\r\n                setPlayingCard(false);\r\n\r\n                endCard.hidden = false;\r\n\r\n                if (endTitle) {\r\n\r\n                    endTitle.textContent =\r\n\r\n                        currentPlayback.endTitle;\r\n\r\n                    endTitle.hidden =\r\n\r\n                        !currentPlayback.endTitle.trim();\r\n\r\n                }\r\n\r\n                if (endText) {\r\n\r\n                    endText.textContent =\r\n\r\n                        currentPlayback.endText;\r\n\r\n                    endText.hidden =\r\n\r\n                        !currentPlayback.endText.trim();\r\n\r\n                }\r\n\r\n                if (endContinue) {\r\n\r\n                    endContinue.textContent =\r\n\r\n                        currentPlayback.endButton;\r\n\r\n                }\r\n\r\n                video.pause();\r\n\r\n                return true;\r\n\r\n            }\r\n\r\n            function applyReplayLabel() {\r\n\r\n                if (\r\n\r\n                    currentPlayback?.replayLabel &&\r\n\r\n                    currentPlayback?.sourceButton\r\n\r\n                ) {\r\n\r\n                    currentPlayback.sourceButton.textContent =\r\n\r\n                        currentPlayback.replayLabel;\r\n\r\n                }\r\n\r\n            }\r\n\r\n            function goToPlaybackTarget({ skipped = false } = {}) {\r\n\r\n                if (!currentPlayback) return;\r\n\r\n                const shouldShowEndCard =\r\n\r\n                    hasEndCard(currentPlayback) &&\r\n\r\n                    (\r\n\r\n                        !skipped ||\r\n\r\n                        currentPlayback.endOnSkip\r\n\r\n                    );\r\n\r\n                if (shouldShowEndCard) {\r\n\r\n                    showEndCard();\r\n\r\n                    return;\r\n\r\n                }\r\n\r\n                applyReplayLabel();\r\n\r\n                const targetStage = skipped\r\n\r\n                    ? currentPlayback.skipStage\r\n\r\n                    : currentPlayback.nextStage;\r\n\r\n                const originStage =\r\n\r\n                    currentPlayback.originStage;\r\n\r\n                const replayLabel =\r\n\r\n                    currentPlayback.replayLabel;\r\n\r\n                \/*\r\n\r\n                 * Mantemos a etapa de origem ativa at\u00e9 showStage,\r\n\r\n                 * para o hist\u00f3rico registrar a navega\u00e7\u00e3o correta.\r\n\r\n                 *\/\r\n\r\n                activeStageName = originStage;\r\n\r\n                showStage(\r\n\r\n                    targetStage,\r\n\r\n                    {\r\n\r\n                        pushHistory:\r\n\r\n                            targetStage !== originStage,\r\n\r\n                        replayLabel\r\n\r\n                    }\r\n\r\n                );\r\n\r\n            }\r\n\r\n            function continueAfterEndCard() {\r\n\r\n                if (!currentPlayback) return;\r\n\r\n                applyReplayLabel();\r\n\r\n                const targetStage =\r\n\r\n                    currentPlayback.endNextStage;\r\n\r\n                const originStage =\r\n\r\n                    currentPlayback.originStage;\r\n\r\n                const replayLabel =\r\n\r\n                    currentPlayback.replayLabel;\r\n\r\n                activeStageName = originStage;\r\n\r\n                showStage(\r\n\r\n                    targetStage,\r\n\r\n                    {\r\n\r\n                        pushHistory:\r\n\r\n                            targetStage !== originStage,\r\n\r\n                        replayLabel\r\n\r\n                    }\r\n\r\n                );\r\n\r\n            }\r\n\r\n            \/*\r\n\r\n             * EVENT DELEGATION:\r\n\r\n             * n\u00e3o importa se uma etapa tem 1, 2, 5 ou 10 bot\u00f5es.\r\n\r\n             *\/\r\n\r\n            component.addEventListener(\r\n\r\n                \"click\",\r\n\r\n                event => {\r\n\r\n                    const button = event.target.closest(\r\n\r\n                        \"[data-action]\"\r\n\r\n                    );\r\n\r\n                    if (\r\n\r\n                        !button ||\r\n\r\n                        !component.contains(button)\r\n\r\n                    ) {\r\n\r\n                        return;\r\n\r\n                    }\r\n\r\n                    const action = button.dataset.action;\r\n\r\n                    if (action === \"play\") {\r\n\r\n                        startPlayback(button);\r\n\r\n                        return;\r\n\r\n                    }\r\n\r\n                    if (action === \"back\") {\r\n\r\n                        goBack();\r\n\r\n                        return;\r\n\r\n                    }\r\n\r\n                    if (action === \"goto\") {\r\n\r\n                        const target =\r\n\r\n                            button.dataset.targetStage;\r\n\r\n                        if (target) {\r\n\r\n                            showStage(\r\n\r\n                                target,\r\n\r\n                                { pushHistory: true }\r\n\r\n                            );\r\n\r\n                        }\r\n\r\n                    }\r\n\r\n                }\r\n\r\n            );\r\n\r\n            pauseButton.addEventListener(\r\n\r\n                \"click\",\r\n\r\n                () => {\r\n\r\n                    if (!currentPlayback) return;\r\n\r\n                    if (video.paused) {\r\n\r\n                        const promise = video.play();\r\n\r\n                        if (\r\n\r\n                            promise &&\r\n\r\n                            typeof promise.catch === \"function\"\r\n\r\n                        ) {\r\n\r\n                            promise.catch(() => {\r\n\r\n                                if (retryButton) {\r\n\r\n                                    retryButton.hidden = false;\r\n\r\n                                }\r\n\r\n                            });\r\n\r\n                        }\r\n\r\n                    } else {\r\n\r\n                        video.pause();\r\n\r\n                    }\r\n\r\n                    window.requestAnimationFrame(\r\n\r\n                        updatePauseLabel\r\n\r\n                    );\r\n\r\n                }\r\n\r\n            );\r\n\r\n            if (seekInput) {\r\n                \/*\r\n                 * input: atualiza enquanto o aluno arrasta.\r\n                 * change: garante a posi\u00e7\u00e3o final em mouse\/touch\/teclado.\r\n                 *\/\r\n                seekInput.addEventListener(\r\n                    \"input\",\r\n                    seekToControlValue\r\n                );\r\n\r\n                seekInput.addEventListener(\r\n                    \"change\",\r\n                    seekToControlValue\r\n                );\r\n            }\r\n\r\nif (skipButton) {\r\n\r\n                skipButton.addEventListener(\r\n\r\n                    \"click\",\r\n\r\n                    () => {\r\n\r\n                        goToPlaybackTarget({\r\n\r\n                            skipped: true\r\n\r\n                        });\r\n\r\n                    }\r\n\r\n                );\r\n\r\n            }\r\n\r\n            if (endContinue) {\r\n\r\n                endContinue.addEventListener(\r\n\r\n                    \"click\",\r\n\r\n                    continueAfterEndCard\r\n\r\n                );\r\n\r\n            }\r\n\r\n            if (endBack) {\r\n\r\n                endBack.addEventListener(\r\n\r\n                    \"click\",\r\n\r\n                    () => {\r\n\r\n                        if (!currentPlayback) {\r\n\r\n                            goBack();\r\n\r\n                            return;\r\n\r\n                        }\r\n\r\n                        \/*\r\n\r\n                         * No card complementar, \"Voltar\"\r\n\r\n                         * retorna \u00e0 tela que abriu aquele v\u00eddeo.\r\n\r\n                         *\/\r\n\r\n                        showStage(\r\n\r\n                            currentPlayback.originStage,\r\n\r\n                            { pushHistory: false }\r\n\r\n                        );\r\n\r\n                    }\r\n\r\n                );\r\n\r\n            }\r\n\r\n            if (retryButton) {\r\n\r\n                retryButton.addEventListener(\r\n\r\n                    \"click\",\r\n\r\n                    () => {\r\n\r\n                        video.muted = false;\r\n\r\n                        video.defaultMuted = false;\r\n\r\n                        const promise = video.play();\r\n\r\n                        if (\r\n\r\n                            promise &&\r\n\r\n                            typeof promise.then === \"function\"\r\n\r\n                        ) {\r\n\r\n                            promise\r\n\r\n                                .then(() => {\r\n\r\n                                    retryButton.hidden = true;\r\n\r\n                                    showStatus(\"\");\r\n\r\n                                    updatePauseLabel();\r\n\r\n                                })\r\n\r\n                                .catch(() => {\r\n\r\n                                    showStatus(\r\n\r\n                                        \"N\u00e3o foi poss\u00edvel iniciar o \u00e1udio. Tente novamente.\"\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\n\r\n            video.addEventListener(\r\n\r\n                \"playing\",\r\n\r\n                () => {\r\n\r\n                    component.classList.remove(\r\n\r\n                        \"is-loading\"\r\n\r\n                    );\r\n\r\n                    updatePauseLabel();\r\n\r\n                    updateSeekBar();\r\n\r\n                }\r\n\r\n            );\r\n\r\n            video.addEventListener(\r\n\r\n                \"loadedmetadata\",\r\n\r\n                updateSeekBar\r\n\r\n            );\r\n\r\n            video.addEventListener(\r\n                \"durationchange\",\r\n                updateSeekBar\r\n            );\r\n\r\n            video.addEventListener(\r\n                \"loadeddata\",\r\n                updateSeekBar\r\n            );\r\n\r\n            video.addEventListener(\r\n                \"canplay\",\r\n                updateSeekBar\r\n            );\r\n\r\n            video.addEventListener(\r\n                \"progress\",\r\n                updateSeekBar\r\n            );\r\n\r\n            video.addEventListener(\r\n                \"seeking\",\r\n                updateSeekBar\r\n            );\r\n\r\n            video.addEventListener(\r\n                \"seeked\",\r\n                updateSeekBar\r\n            );\r\n\r\nvideo.addEventListener(\r\n\r\n                \"play\",\r\n\r\n                updatePauseLabel\r\n\r\n            );\r\n\r\n            video.addEventListener(\r\n\r\n                \"pause\",\r\n\r\n                updatePauseLabel\r\n\r\n            );\r\n\r\n            video.addEventListener(\r\n\r\n                \"waiting\",\r\n\r\n                () => {\r\n\r\n                    component.classList.add(\r\n\r\n                        \"is-loading\"\r\n\r\n                    );\r\n\r\n                }\r\n\r\n            );\r\n\r\n            video.addEventListener(\r\n\r\n                \"timeupdate\",\r\n\r\n                () => {\r\n\r\n                    updateSeekBar();\r\n\r\n                    if (\r\n\r\n                        !currentPlayback ||\r\n\r\n                        currentPlayback.skipAfter === null\r\n\r\n                    ) {\r\n\r\n                        return;\r\n\r\n                    }\r\n\r\n                    if (\r\n\r\n                        skipButton &&\r\n\r\n                        video.currentTime >=\r\n\r\n                        currentPlayback.skipAfter\r\n\r\n                    ) {\r\n\r\n                        skipButton.hidden = false;\r\n\r\n                    }\r\n\r\n                }\r\n\r\n            );\r\n\r\n            video.addEventListener(\r\n\r\n                \"ended\",\r\n\r\n                () => {\r\n\r\n                    if (!currentPlayback) return;\r\n\r\n                    goToPlaybackTarget({\r\n\r\n                        skipped: false\r\n\r\n                    });\r\n\r\n                }\r\n\r\n            );\r\n\r\n            video.addEventListener(\r\n\r\n                \"error\",\r\n\r\n                () => {\r\n\r\n                    component.classList.remove(\r\n\r\n                        \"is-loading\"\r\n\r\n                    );\r\n\r\n                    showStatus(\r\n\r\n                        \"N\u00e3o foi poss\u00edvel carregar este v\u00eddeo.\"\r\n\r\n                    );\r\n\r\n                }\r\n\r\n            );\r\n\r\n            showStage(\r\n\r\n                startStage,\r\n\r\n                { pushHistory: false }\r\n\r\n            );\r\n\r\n        }\r\n\r\n        function init(scope = document) {\r\n\r\n            const components = [];\r\n\r\n            if (scope.matches?.(SELECTOR)) {\r\n\r\n                components.push(scope);\r\n\r\n            }\r\n\r\n            components.push(\r\n\r\n                ...(\r\n\r\n                    scope.querySelectorAll?.(\r\n\r\n                        SELECTOR\r\n\r\n                    ) || []\r\n\r\n                )\r\n\r\n            );\r\n\r\n            components.forEach(initializeOne);\r\n\r\n        }\r\n\r\n        window.D15VideoFlow = { init };\r\n\r\n        \/* Elementor: hook criado somente uma vez. *\/\r\n\r\n        window.addEventListener(\r\n\r\n            \"elementor\/frontend\/init\",\r\n\r\n            () => {\r\n\r\n                if (!window.elementorFrontend?.hooks) {\r\n\r\n                    return;\r\n\r\n                }\r\n\r\n                window.elementorFrontend.hooks.addAction(\r\n\r\n                    \"frontend\/element_ready\/html.default\",\r\n\r\n                    ($scope) => {\r\n\r\n                        window.D15VideoFlow.init(\r\n\r\n                            $scope[0]\r\n\r\n                        );\r\n\r\n                    }\r\n\r\n                );\r\n\r\n            },\r\n\r\n            { once: true }\r\n\r\n        );\r\n\r\n    }\r\n\r\n    function start() {\r\n\r\n        window.D15VideoFlow.init(document);\r\n\r\n    }\r\n\r\n    if (document.readyState === \"loading\") {\r\n\r\n        document.addEventListener(\r\n\r\n            \"DOMContentLoaded\",\r\n\r\n            start,\r\n\r\n            { once: true }\r\n\r\n        );\r\n\r\n    } else {\r\n\r\n        start();\r\n\r\n    }\r\n\r\n})();\r\n\r\n<\/script>\r\n\r\n<script>\r\n(() => {\r\n    const COMPONENT_SELECTOR =\r\n        \".d15-video-flow\";\r\n\r\n\r\n    function formatTime(seconds) {\r\n        const safe =\r\n            Number.isFinite(seconds)\r\n                ? Math.max(0, seconds)\r\n                : 0;\r\n\r\n        const minutes =\r\n            Math.floor(\r\n                safe \/ 60\r\n            );\r\n\r\n        const secs =\r\n            Math.floor(\r\n                safe % 60\r\n            );\r\n\r\n        return (\r\n            minutes +\r\n            \":\" +\r\n            String(secs)\r\n                .padStart(2, \"0\")\r\n        );\r\n    }\r\n\r\n\r\n    function initSeekPatch(component) {\r\n        if (\r\n            !component ||\r\n            component.dataset\r\n                .d15SeekPatchInitialized ===\r\n                \"true\"\r\n        ) {\r\n            return;\r\n        }\r\n\r\n\r\n        const video =\r\n            component.querySelector(\r\n                \".d15-video-flow__video\"\r\n            );\r\n\r\n        const range =\r\n            component.querySelector(\r\n                \".d15-video-flow__seek-input\"\r\n            );\r\n\r\n        const currentLabel =\r\n            component.querySelector(\r\n                \".d15-video-flow__seek-current\"\r\n            );\r\n\r\n        const durationLabel =\r\n            component.querySelector(\r\n                \".d15-video-flow__seek-duration\"\r\n            );\r\n\r\n\r\n        if (\r\n            !video ||\r\n            !range\r\n        ) {\r\n            return;\r\n        }\r\n\r\n\r\n        component.dataset\r\n            .d15SeekPatchInitialized =\r\n            \"true\";\r\n\r\n\r\n        let userIsDragging =\r\n            false;\r\n\r\n        let rafId =\r\n            null;\r\n\r\n        let probeOriginalTime =\r\n            null;\r\n\r\n\r\n        function getDuration() {\r\n            if (\r\n                Number.isFinite(\r\n                    video.duration\r\n                ) &&\r\n                video.duration > 0 &&\r\n                video.duration !== Infinity\r\n            ) {\r\n                return video.duration;\r\n            }\r\n\r\n\r\n            if (\r\n                video.seekable &&\r\n                video.seekable.length\r\n            ) {\r\n                const last =\r\n                    video.seekable.length - 1;\r\n\r\n                const end =\r\n                    video.seekable.end(\r\n                        last\r\n                    );\r\n\r\n                if (\r\n                    Number.isFinite(end) &&\r\n                    end > 0\r\n                ) {\r\n                    return end;\r\n                }\r\n            }\r\n\r\n\r\n            if (\r\n                video.buffered &&\r\n                video.buffered.length\r\n            ) {\r\n                const last =\r\n                    video.buffered.length - 1;\r\n\r\n                const end =\r\n                    video.buffered.end(\r\n                        last\r\n                    );\r\n\r\n                if (\r\n                    Number.isFinite(end) &&\r\n                    end > 0\r\n                ) {\r\n                    return end;\r\n                }\r\n            }\r\n\r\n\r\n            return 0;\r\n        }\r\n\r\n\r\n        function renderSeek() {\r\n            const duration =\r\n                getDuration();\r\n\r\n            const current =\r\n                Number.isFinite(\r\n                    video.currentTime\r\n                )\r\n                    ? Math.max(\r\n                        0,\r\n                        video.currentTime\r\n                    )\r\n                    : 0;\r\n\r\n\r\n            if (\r\n                duration > 0\r\n            ) {\r\n                range.min =\r\n                    \"0\";\r\n\r\n                range.max =\r\n                    String(\r\n                        duration\r\n                    );\r\n\r\n                range.step =\r\n                    \"0.05\";\r\n\r\n                range.disabled =\r\n                    false;\r\n\r\n\r\n                if (\r\n                    !userIsDragging\r\n                ) {\r\n                    range.value =\r\n                        String(\r\n                            Math.min(\r\n                                current,\r\n                                duration\r\n                            )\r\n                        );\r\n                }\r\n\r\n\r\n                range.setAttribute(\r\n                    \"aria-valuemin\",\r\n                    \"0\"\r\n                );\r\n\r\n                range.setAttribute(\r\n                    \"aria-valuemax\",\r\n                    String(\r\n                        duration\r\n                    )\r\n                );\r\n\r\n                range.setAttribute(\r\n                    \"aria-valuenow\",\r\n                    String(\r\n                        current\r\n                    )\r\n                );\r\n\r\n\r\n                if (\r\n                    durationLabel\r\n                ) {\r\n                    durationLabel\r\n                        .textContent =\r\n                        formatTime(\r\n                            duration\r\n                        );\r\n                }\r\n\r\n            } else {\r\n                \/*\r\n                 * Mant\u00e9m a barra ativa visualmente,\r\n                 * mesmo antes de o navegador informar\r\n                 * a dura\u00e7\u00e3o real.\r\n                 *\/\r\n                range.min =\r\n                    \"0\";\r\n\r\n                range.max =\r\n                    \"100\";\r\n\r\n                range.step =\r\n                    \"0.1\";\r\n\r\n                range.disabled =\r\n                    false;\r\n\r\n\r\n                if (\r\n                    !userIsDragging\r\n                ) {\r\n                    range.value =\r\n                        \"0\";\r\n                }\r\n\r\n\r\n                if (\r\n                    durationLabel\r\n                ) {\r\n                    durationLabel\r\n                        .textContent =\r\n                        \"0:00\";\r\n                }\r\n            }\r\n\r\n\r\n            if (\r\n                currentLabel\r\n            ) {\r\n                currentLabel\r\n                    .textContent =\r\n                    formatTime(\r\n                        current\r\n                    );\r\n            }\r\n        }\r\n\r\n\r\n        \/*\r\n         * Alguns MP4s podem entregar duration = Infinity.\r\n         * Este probe for\u00e7a o browser a resolver a dura\u00e7\u00e3o.\r\n         *\/\r\n        function probeDuration() {\r\n            if (\r\n                video.duration !==\r\n                    Infinity\r\n            ) {\r\n                return;\r\n            }\r\n\r\n\r\n            if (\r\n                probeOriginalTime !==\r\n                    null\r\n            ) {\r\n                return;\r\n            }\r\n\r\n\r\n            probeOriginalTime =\r\n                Number.isFinite(\r\n                    video.currentTime\r\n                )\r\n                    ? video.currentTime\r\n                    : 0;\r\n\r\n\r\n            try {\r\n                video.currentTime =\r\n                    1e101;\r\n            } catch (_) {\r\n                probeOriginalTime =\r\n                    null;\r\n            }\r\n        }\r\n\r\n\r\n        function restoreAfterProbe() {\r\n            if (\r\n                probeOriginalTime ===\r\n                    null\r\n            ) {\r\n                return;\r\n            }\r\n\r\n\r\n            if (\r\n                Number.isFinite(\r\n                    video.duration\r\n                ) &&\r\n                video.duration > 0 &&\r\n                video.duration !== Infinity\r\n            ) {\r\n                const oldTime =\r\n                    probeOriginalTime;\r\n\r\n                probeOriginalTime =\r\n                    null;\r\n\r\n\r\n                try {\r\n                    video.currentTime =\r\n                        Math.min(\r\n                            oldTime,\r\n                            video.duration\r\n                        );\r\n                } catch (_) {}\r\n\r\n\r\n                renderSeek();\r\n            }\r\n        }\r\n\r\n\r\n        function seekToRangeValue() {\r\n            const duration =\r\n                getDuration();\r\n\r\n            if (\r\n                duration <= 0\r\n            ) {\r\n                renderSeek();\r\n                return;\r\n            }\r\n\r\n\r\n            const target =\r\n                Number(\r\n                    range.value\r\n                );\r\n\r\n\r\n            if (\r\n                !Number.isFinite(\r\n                    target\r\n                )\r\n            ) {\r\n                return;\r\n            }\r\n\r\n\r\n            try {\r\n                video.currentTime =\r\n                    Math.min(\r\n                        duration,\r\n                        Math.max(\r\n                            0,\r\n                            target\r\n                        )\r\n                    );\r\n            } catch (_) {}\r\n\r\n\r\n            renderSeek();\r\n        }\r\n\r\n\r\n        function animationLoop() {\r\n            renderSeek();\r\n\r\n\r\n            if (\r\n                !video.paused &&\r\n                !video.ended\r\n            ) {\r\n                rafId =\r\n                    window\r\n                        .requestAnimationFrame(\r\n                            animationLoop\r\n                        );\r\n            } else {\r\n                rafId =\r\n                    null;\r\n            }\r\n        }\r\n\r\n\r\n        function startLoop() {\r\n            if (\r\n                rafId !==\r\n                    null\r\n            ) {\r\n                return;\r\n            }\r\n\r\n\r\n            rafId =\r\n                window\r\n                    .requestAnimationFrame(\r\n                        animationLoop\r\n                    );\r\n        }\r\n\r\n\r\n        function stopLoop() {\r\n            if (\r\n                rafId !==\r\n                    null\r\n            ) {\r\n                window\r\n                    .cancelAnimationFrame(\r\n                        rafId\r\n                    );\r\n\r\n                rafId =\r\n                    null;\r\n            }\r\n\r\n\r\n            renderSeek();\r\n        }\r\n\r\n\r\n        range.addEventListener(\r\n            \"pointerdown\",\r\n            () => {\r\n                userIsDragging =\r\n                    true;\r\n            }\r\n        );\r\n\r\n\r\n        range.addEventListener(\r\n            \"input\",\r\n            () => {\r\n                userIsDragging =\r\n                    true;\r\n\r\n                seekToRangeValue();\r\n            }\r\n        );\r\n\r\n\r\n        range.addEventListener(\r\n            \"change\",\r\n            () => {\r\n                seekToRangeValue();\r\n\r\n                userIsDragging =\r\n                    false;\r\n\r\n                renderSeek();\r\n            }\r\n        );\r\n\r\n\r\n        range.addEventListener(\r\n            \"pointerup\",\r\n            () => {\r\n                seekToRangeValue();\r\n\r\n                userIsDragging =\r\n                    false;\r\n\r\n                renderSeek();\r\n            }\r\n        );\r\n\r\n\r\n        range.addEventListener(\r\n            \"keyup\",\r\n            () => {\r\n                seekToRangeValue();\r\n\r\n                userIsDragging =\r\n                    false;\r\n\r\n                renderSeek();\r\n            }\r\n        );\r\n\r\n\r\n        [\r\n            \"loadedmetadata\",\r\n            \"loadeddata\",\r\n            \"durationchange\",\r\n            \"canplay\",\r\n            \"canplaythrough\",\r\n            \"progress\",\r\n            \"timeupdate\",\r\n            \"seeking\",\r\n            \"seeked\"\r\n        ].forEach(\r\n            eventName => {\r\n                video.addEventListener(\r\n                    eventName,\r\n                    () => {\r\n                        probeDuration();\r\n                        restoreAfterProbe();\r\n                        renderSeek();\r\n                    }\r\n                );\r\n            }\r\n        );\r\n\r\n\r\n        video.addEventListener(\r\n            \"play\",\r\n            () => {\r\n                probeDuration();\r\n                restoreAfterProbe();\r\n                renderSeek();\r\n                startLoop();\r\n            }\r\n        );\r\n\r\n\r\n        video.addEventListener(\r\n            \"playing\",\r\n            () => {\r\n                probeDuration();\r\n                restoreAfterProbe();\r\n                renderSeek();\r\n                startLoop();\r\n            }\r\n        );\r\n\r\n\r\n        video.addEventListener(\r\n            \"pause\",\r\n            stopLoop\r\n        );\r\n\r\n\r\n        video.addEventListener(\r\n            \"ended\",\r\n            stopLoop\r\n        );\r\n\r\n\r\n        \/*\r\n         * O c\u00f3digo principal troca video.src dinamicamente.\r\n         * Observamos isso para reiniciar a barra.\r\n         *\/\r\n        const srcObserver =\r\n            new MutationObserver(\r\n                mutations => {\r\n                    const changed =\r\n                        mutations.some(\r\n                            mutation =>\r\n                                mutation.attributeName ===\r\n                                \"src\"\r\n                        );\r\n\r\n\r\n                    if (\r\n                        !changed\r\n                    ) {\r\n                        return;\r\n                    }\r\n\r\n\r\n                    userIsDragging =\r\n                        false;\r\n\r\n                    probeOriginalTime =\r\n                        null;\r\n\r\n                    range.value =\r\n                        \"0\";\r\n\r\n\r\n                    if (\r\n                        currentLabel\r\n                    ) {\r\n                        currentLabel\r\n                            .textContent =\r\n                            \"0:00\";\r\n                    }\r\n\r\n\r\n                    if (\r\n                        durationLabel\r\n                    ) {\r\n                        durationLabel\r\n                            .textContent =\r\n                            \"0:00\";\r\n                    }\r\n\r\n\r\n                    [\r\n                        0,\r\n                        100,\r\n                        300,\r\n                        700,\r\n                        1500\r\n                    ].forEach(\r\n                        delay => {\r\n                            window.setTimeout(\r\n                                () => {\r\n                                    probeDuration();\r\n                                    restoreAfterProbe();\r\n                                    renderSeek();\r\n                                },\r\n                                delay\r\n                            );\r\n                        }\r\n                    );\r\n                }\r\n            );\r\n\r\n\r\n        srcObserver.observe(\r\n            video,\r\n            {\r\n                attributes:\r\n                    true,\r\n                attributeFilter:\r\n                    [\r\n                        \"src\"\r\n                    ]\r\n            }\r\n        );\r\n\r\n\r\n        renderSeek();\r\n\r\n\r\n        [\r\n            100,\r\n            300,\r\n            700,\r\n            1500\r\n        ].forEach(\r\n            delay => {\r\n                window.setTimeout(\r\n                    () => {\r\n                        probeDuration();\r\n                        restoreAfterProbe();\r\n                        renderSeek();\r\n                    },\r\n                    delay\r\n                );\r\n            }\r\n        );\r\n    }\r\n\r\n\r\n    function initAll(\r\n        scope = document\r\n    ) {\r\n        const components =\r\n            [];\r\n\r\n\r\n        if (\r\n            scope.matches?.(\r\n                COMPONENT_SELECTOR\r\n            )\r\n        ) {\r\n            components.push(\r\n                scope\r\n            );\r\n        }\r\n\r\n\r\n        components.push(\r\n            ...(\r\n                scope\r\n                    .querySelectorAll?.(\r\n                        COMPONENT_SELECTOR\r\n                    ) ||\r\n                []\r\n            )\r\n        );\r\n\r\n\r\n        components.forEach(\r\n            initSeekPatch\r\n        );\r\n    }\r\n\r\n\r\n    function start() {\r\n        initAll(\r\n            document\r\n        );\r\n    }\r\n\r\n\r\n    if (\r\n        document.readyState ===\r\n        \"loading\"\r\n    ) {\r\n        document.addEventListener(\r\n            \"DOMContentLoaded\",\r\n            start,\r\n            {\r\n                once:\r\n                    true\r\n            }\r\n        );\r\n    } else {\r\n        start();\r\n    }\r\n\r\n\r\n    \/*\r\n     * Compatibilidade com widgets HTML do Elementor.\r\n     *\/\r\n    window.addEventListener(\r\n        \"elementor\/frontend\/init\",\r\n        () => {\r\n            if (\r\n                !window\r\n                    .elementorFrontend\r\n                    ?.hooks\r\n            ) {\r\n                return;\r\n            }\r\n\r\n\r\n            window\r\n                .elementorFrontend\r\n                .hooks\r\n                .addAction(\r\n                    \"frontend\/element_ready\/html.default\",\r\n                    $scope => {\r\n                        initAll(\r\n                            $scope[0]\r\n                        );\r\n                    }\r\n                );\r\n        },\r\n        {\r\n            once:\r\n                true\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<div class=\"elementor-element elementor-element-f34b6ff e-flex e-con-boxed e-con e-parent\" data-id=\"f34b6ff\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-46baca8 e-con-full e-flex elementor-invisible e-con e-child\" data-id=\"46baca8\" data-element_type=\"container\" id=\"container-historia-vida\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;animation&quot;:&quot;fadeInDown&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1d1a7f7 elementor-widget__width-initial premium-lottie-svg elementor-widget elementor-widget-premium-lottie\" data-id=\"1d1a7f7\" data-element_type=\"widget\" data-settings=\"{&quot;lottie_file&quot;:{&quot;url&quot;:&quot;https:\\\/\\\/cursos1.nead.conasems.org.br\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/opd-1.json&quot;,&quot;id&quot;:45330,&quot;size&quot;:&quot;&quot;,&quot;alt&quot;:&quot;&quot;,&quot;source&quot;:&quot;library&quot;}}\" data-widget_type=\"premium-lottie.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\r\n\t\t<div class=\"premium-lottie-animation\" data-lottie-url=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/opd-1.json\" data-lottie-loop=\"true\" data-lottie-reverse=\"\" data-lottie-hover=\"\" data-lottie-speed=\"1\" data-lottie-render=\"svg\" data-lottie-delay=\"\">\r\n\t\t\t\t\t<\/div>\r\n\r\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-175d7a1 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"175d7a1\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><b>Aten\u00e7\u00e3o! Inicie agora seus registros clicando no Campo de Anota\u00e7\u00f5es ao lado!\u00a0<\/b><\/p><p><span style=\"font-weight: 400;\">A partir do hist\u00f3rico de Maria e desse primeiro atendimento (com o conhecimento da queixa principal), voc\u00ea j\u00e1 tem muito o que registrar no <\/span><b>campo de anota\u00e7\u00f5es<\/b><span style=\"font-weight: 400;\">. <\/span><b>Clique no \u00edcone <\/b><span style=\"font-weight: 400;\">e preencha as <\/span><b>se\u00e7\u00f5es 1 e 2<\/b><span style=\"font-weight: 400;\">.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-68489f3 e-con-full e-flex e-con e-child\" data-id=\"68489f3\" data-element_type=\"container\" id=\"exames\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5855249 elementor-widget elementor-widget-heading\" data-id=\"5855249\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Exames\n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-1307260 e-con-full e-flex e-con e-child\" data-id=\"1307260\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-09743ad e-con-full e-flex e-con e-child\" data-id=\"09743ad\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f5710ec elementor-widget elementor-widget-text-editor\" data-id=\"f5710ec\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Vimos que, ap\u00f3s o primeiro relato de sangramento, Maria j\u00e1 foi colocada em atendimento priorit\u00e1rio e, neste mesmo dia, foi encaminhada para realizar o exame geral e o especular.\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">Acompanhe, a seguir, o desdobramento da consulta e os resultados exames f\u00edsicos e complementares de Maria.<\/span><\/p>\t\t\t\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<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-5ee0914 e-con-full e-flex e-con e-parent\" data-id=\"5ee0914\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8627ed6 elementor-widget elementor-widget-html\" data-id=\"8627ed6\" 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<!--\r\n\r\nD15 VIDEO FLOW \u2014 vers\u00e3o responsiva para v\u00eddeos com legenda\r\n\r\nAjustes desta vers\u00e3o:\r\n\r\n1\\) desktop: container em 16:9, preservando o quadro completo do v\u00eddeo;\r\n\r\n2\\) waiting image sempre em cover;\r\n\r\n3\\) desktop\/notebook: card de reprodu\u00e7\u00e3o compacto, \u00e0 direita e fora da \u00e1rea das legendas;\r\n\r\n4\\) mobile: foto\/v\u00eddeo 100% de largura em 16:9 e card abaixo;\r\n\r\n5\\) mant\u00e9m a arquitetura multi-inst\u00e2ncia: cada .d15-video-flow funciona de forma independente.\r\n\r\n\\\\-->\r\n\r\n<!-- =========================================================\r\n\r\n     DISCIPLINA 15 \u2014 FLUXO DE V\u00cdDEOS REUTILIZ\u00c1VEL\r\n\r\n     Pode haver v\u00e1rios .d15-video-flow na mesma aula.\r\n\r\n     Cada inst\u00e2ncia \u00e9 independente e N\u00c3O usa IDs.\r\n\r\n     PARA MAIS BOT\u00d5ES:\r\n\r\n     duplique um bot\u00e3o com data-action=\"play\".\r\n\r\n     PARA MAIS TELAS\/ETAPAS:\r\n\r\n     duplique um bloco .d15-video-flow__stage e mude data-stage.\r\n\r\n     CARD COMPLEMENTAR AO FINAL:\r\n\r\n     use data-end-card-title e\/ou data-end-card-text no bot\u00e3o que abre o v\u00eddeo.\r\n\r\n     Se ambos ficarem vazios, o card n\u00e3o aparece.\r\n\r\n     ========================================================= -->\r\n\r\n<style>\r\n\r\n    @import url('https:\/\/fonts.googleapis.com\/css2?family=News+Cycle:wght@400;700&display=swap');\r\n\r\n    .d15-video-flow {\r\n\r\n        --d15-blue: #213B74;\r\n\r\n        --d15-yellow: #F8CA33;\r\n\r\n        --d15-yellow-hover: #F8E31F;\r\n\r\n        --d15-text: #171717;\r\n\r\n        --d15-card: #FFFFFF;\r\n\r\n        \/* V\u00eddeos agora t\u00eam legenda embutida: preserva a parte inferior do quadro. *\/\r\n\r\n        --d15-video-position: 50% 100%;\r\n\r\n        position: relative;\r\n\r\n        width: calc(100% - 75px);\r\n\r\n        margin-left: 75px;\r\n\r\n        \/*\r\n         * Desktop\/notebook:\r\n         * o container acompanha a propor\u00e7\u00e3o real do v\u00eddeo.\r\n         * Assim n\u00e3o precisamos cortar laterais nem criar barras.\r\n         *\/\r\n        height: auto;\r\n\r\n        min-height: 0;\r\n\r\n        max-height: none;\r\n\r\n        aspect-ratio: 16 \/ 9;\r\n\r\n        overflow: hidden;\r\n\r\n        isolation: isolate;\r\n\r\n        background: #171717;\r\n\r\n    }\r\n\r\n    .d15-video-flow,\r\n\r\n    .d15-video-flow * {\r\n\r\n        box-sizing: border-box;\r\n\r\n    }\r\n\r\n    .d15-video-flow [hidden] {\r\n\r\n        display: none !important;\r\n\r\n    }\r\n\r\n    .d15-video-flow__waiting-image,\r\n\r\n    .d15-video-flow__video {\r\n\r\n        position: absolute;\r\n\r\n        z-index: 0;\r\n\r\n        top: 0;\r\n\r\n        right: 0;\r\n\r\n        bottom: 0;\r\n\r\n        left: 0;\r\n\r\n        width: 100%;\r\n\r\n        height: 100%;\r\n\r\n        object-fit: contain;\r\n\r\n        object-position: var(--d15-video-position);\r\n\r\n        background: #171717;\r\n\r\n        transition: opacity 260ms ease, transform 420ms ease;\r\n\r\n    }\r\n\r\n    \/*\r\n     * ENQUADRAMENTO:\r\n     * - imagem de waiting continua preenchendo todo o container;\r\n     * - v\u00eddeo mostra o quadro inteiro, sem cortar as legendas.\r\n     *\/\r\n    .d15-video-flow .d15-video-flow__waiting-image {\r\n        object-fit: cover !important;\r\n        object-position: 50% 50% !important;\r\n    }\r\n\r\n    .d15-video-flow .d15-video-flow__video {\r\n        top: 0 !important;\r\n        right: 0 !important;\r\n        bottom: 0 !important;\r\n        left: 0 !important;\r\n\r\n        width: 100% !important;\r\n        height: 100% !important;\r\n\r\n        object-fit: contain !important;\r\n        object-position: 50% 50% !important;\r\n\r\n        background: transparent !important;\r\n\r\n        transform: none !important;\r\n        opacity: 1 !important;\r\n    }\r\n\r\n    .d15-video-flow.is-loading .d15-video-flow__video {\r\n        opacity: 1 !important;\r\n        transform: none !important;\r\n    }\r\n\r\n    .d15-video-flow__overlay {\r\n        display: none !important;\r\n        background: none !important;\r\n        opacity: 0 !important;\r\n    }\r\n\r\n    .d15-video-flow__interface {\r\n\r\n        position: relative;\r\n\r\n        z-index: 2;\r\n\r\n        display: flex;\r\n\r\n        align-items: flex-end;\r\n\r\n        justify-content: flex-start;\r\n\r\n        width: 100%;\r\n\r\n        height: 100%;\r\n\r\n        min-height: 100%;\r\n\r\n        padding: clamp(28px, 4.5vw, 72px);\r\n\r\n    }\r\n\r\n    .d15-video-flow__card {\r\n\r\n        position: relative;\r\n\r\n        width: min(620px, 42vw);\r\n\r\n        padding: clamp(24px, 2.1vw, 34px);\r\n\r\n        overflow: hidden;\r\n\r\n        border: 1px solid rgba(255,255,255,.70);\r\n\r\n        border-radius: 22px;\r\n\r\n        background: var(--d15-card);\r\n\r\n        box-shadow:\r\n\r\n            0 18px 50px rgba(0,0,0,.30),\r\n\r\n            0 2px 8px rgba(0,0,0,.08);\r\n\r\n        transition: width 250ms ease, padding 250ms ease;\r\n\r\n    }\r\n\r\n    .d15-video-flow__card::before {\r\n\r\n        content: \"\";\r\n\r\n        position: absolute;\r\n\r\n        inset: 0;\r\n\r\n        pointer-events: none;\r\n\r\n        background: linear-gradient(\r\n\r\n            135deg,\r\n\r\n            rgba(255,255,255,.34),\r\n\r\n            rgba(255,255,255,0) 45%\r\n\r\n        );\r\n\r\n    }\r\n\r\n    .d15-video-flow__card > * {\r\n\r\n        position: relative;\r\n\r\n        z-index: 1;\r\n\r\n    }\r\n\r\n    \/* Durante a reprodu\u00e7\u00e3o, o card fica compacto, \u00e0 direita e longe das legendas. *\/\r\n\r\n    .d15-video-flow__card.is-playing {\r\n\r\n        width: min(240px, 20vw);\r\n\r\n        padding: 12px 14px;\r\n\r\n        margin-left: auto;\r\n\r\n        margin-right: 2%;\r\n\r\n        align-self: center;\r\n\r\n        border-radius: 16px;\r\n\r\n    }\r\n\r\n    .d15-video-flow__title {\r\n\r\n        margin: 0 0 14px;\r\n\r\n        color: var(--d15-blue) !important;\r\n\r\n        font-family: \"News Cycle\", sans-serif;\r\n\r\n        font-size: clamp(31px, 2.35vw, 42px);\r\n\r\n        font-weight: 700;\r\n\r\n        line-height: 1.05;\r\n\r\n        letter-spacing: -0.02em;\r\n\r\n    }\r\n\r\n    .d15-video-flow__card.is-playing .d15-video-flow__title {\r\n\r\n        margin-bottom: 8px;\r\n\r\n        font-size: clamp(17px, 1.2vw, 21px);\r\n\r\n        line-height: 1.1;\r\n\r\n    }\r\n\r\n    .d15-video-flow__card.is-playing .d15-video-flow__playback-controls,\r\n\r\n    .d15-video-flow__card.is-playing .d15-video-flow__button {\r\n\r\n        width: 100%;\r\n\r\n    }\r\n\r\n    .d15-video-flow__card.is-playing .d15-video-flow__button {\r\n\r\n        min-height: 36px;\r\n\r\n        padding: 8px 10px;\r\n\r\n        font-size: 13px;\r\n\r\n        border-radius: 10px;\r\n\r\n    }\r\n\r\n    .d15-video-flow__text {\r\n\r\n        margin: 0 0 18px;\r\n\r\n        color: var(--d15-text);\r\n\r\n        font-family: \"Nunito\", Arial, sans-serif;\r\n\r\n        font-size: 16px;\r\n\r\n        line-height: 1.55;\r\n\r\n    }\r\n\r\n    .d15-video-flow__actions,\r\n\r\n    .d15-video-flow__playback-controls,\r\n\r\n    .d15-video-flow__end-actions {\r\n\r\n        display: flex;\r\n\r\n        flex-wrap: wrap;\r\n\r\n        align-items: center;\r\n\r\n        gap: 10px;\r\n\r\n    }\r\n\r\n    .d15-video-flow__button {\r\n\r\n        appearance: none;\r\n\r\n        display: inline-flex;\r\n\r\n        align-items: center;\r\n\r\n        justify-content: center;\r\n\r\n        width: fit-content;\r\n\r\n        max-width: 100%;\r\n\r\n        min-height: 44px;\r\n\r\n        border: 0;\r\n\r\n        border-radius: 14px;\r\n\r\n        padding: 11px 19px;\r\n\r\n        color: var(--d15-text);\r\n\r\n        background: var(--d15-yellow);\r\n\r\n        font-family: \"Nunito\", Arial, sans-serif;\r\n\r\n        font-size: 15px;\r\n\r\n        font-weight: 700;\r\n\r\n        line-height: 1.25;\r\n\r\n        text-align: center;\r\n\r\n        text-wrap: balance;\r\n\r\n        box-shadow:\r\n\r\n            0 5px 14px rgba(33,59,116,.10),\r\n\r\n            inset 0 1px 0 rgba(255,255,255,.32);\r\n\r\n        cursor: pointer;\r\n\r\n        transition:\r\n\r\n            background-color 180ms ease,\r\n\r\n            box-shadow 180ms ease,\r\n\r\n            transform 180ms ease;\r\n\r\n    }\r\n\r\n    .d15-video-flow__button:hover,\r\n\r\n    .d15-video-flow__button:focus-visible {\r\n\r\n        background: var(--d15-yellow-hover);\r\n\r\n        transform: translateY(-2px);\r\n\r\n        box-shadow:\r\n\r\n            0 8px 18px rgba(33,59,116,.14),\r\n\r\n            inset 0 1px 0 rgba(255,255,255,.38);\r\n\r\n    }\r\n\r\n    .d15-video-flow__button:focus-visible {\r\n\r\n        outline: 3px solid rgba(33,59,116,.22);\r\n\r\n        outline-offset: 3px;\r\n\r\n    }\r\n\r\n    .d15-video-flow__button--secondary {\r\n\r\n        color: var(--d15-blue);\r\n\r\n        background: #FFFFFF;\r\n\r\n        border: 1.5px solid rgba(33,59,116,.30);\r\n\r\n        box-shadow: none;\r\n\r\n    }\r\n\r\n    .d15-video-flow__button--secondary:hover,\r\n\r\n    .d15-video-flow__button--secondary:focus-visible {\r\n\r\n        background: #F3F5F9;\r\n\r\n    }\r\n\r\n    \/* =====================================================\r\n\r\n       BARRA DE REPRODU\u00c7\u00c3O\r\n\r\n       ===================================================== *\/\r\n\r\n    .d15-video-flow__playback-controls {\r\n\r\n        flex-direction: column;\r\n\r\n        align-items: stretch;\r\n\r\n    }\r\n\r\n    .d15-video-flow__seek {\r\n\r\n        display: grid;\r\n\r\n        grid-template-columns: 38px minmax(0, 1fr) 38px;\r\n\r\n        align-items: center;\r\n\r\n        gap: 8px;\r\n\r\n        width: 100%;\r\n\r\n        margin-top: 2px;\r\n\r\n    }\r\n\r\n    .d15-video-flow__seek-time {\r\n\r\n        color: var(--d15-blue);\r\n\r\n        font-family:\r\n\r\n            \"Nunito\",\r\n\r\n            Arial,\r\n\r\n            sans-serif;\r\n\r\n        font-size: 11px;\r\n\r\n        font-weight: 700;\r\n\r\n        line-height: 1;\r\n\r\n        white-space: nowrap;\r\n\r\n    }\r\n\r\n    .d15-video-flow__seek-time:last-child {\r\n\r\n        text-align: right;\r\n\r\n    }\r\n\r\n    .d15-video-flow__seek-input {\r\n\r\n        width: 100%;\r\n\r\n        min-width: 0;\r\n\r\n        margin: 0;\r\n\r\n        cursor: pointer;\r\n\r\n        accent-color: var(--d15-blue);\r\n\r\n    }\r\n\r\n    .d15-video-flow__seek-input:disabled {\r\n\r\n        cursor: default;\r\n\r\n        opacity: .55;\r\n\r\n    }\r\n\r\n    .d15-video-flow__seek-input:focus-visible {\r\n\r\n        outline: 3px solid rgba(33, 59, 116, .20);\r\n\r\n        outline-offset: 3px;\r\n\r\n        border-radius: 999px;\r\n\r\n    }\r\n\r\n    .d15-video-flow__retry {\r\n\r\n        margin-top: 12px;\r\n\r\n    }\r\n\r\n    .d15-video-flow__status {\r\n\r\n        margin: 12px 0 0;\r\n\r\n        color: #6B3D00;\r\n\r\n        font-family: \"Nunito\", Arial, sans-serif;\r\n\r\n        font-size: 14px;\r\n\r\n        font-weight: 600;\r\n\r\n        line-height: 1.4;\r\n\r\n    }\r\n\r\n    .d15-video-flow__end-card {\r\n\r\n        animation: d15CardIn 260ms ease both;\r\n\r\n    }\r\n\r\n    @keyframes d15CardIn {\r\n\r\n        from {\r\n\r\n            opacity: 0;\r\n\r\n            transform: translateY(8px);\r\n\r\n        }\r\n\r\n        to {\r\n\r\n            opacity: 1;\r\n\r\n            transform: translateY(0);\r\n\r\n        }\r\n\r\n    }\r\n\r\n    @media (max-width: 767px) {\r\n\r\n        .d15-video-flow__title {\r\n            display: none;\r\n        }\r\n\r\n        .d15-video-flow {\r\n\r\n            display: flex;\r\n\r\n            flex-direction: column;\r\n\r\n            width: 100%;\r\n\r\n            margin-left: 0;\r\n\r\n            aspect-ratio: auto;\r\n\r\n            height: auto;\r\n\r\n            min-height: 0;\r\n\r\n            overflow: visible;\r\n\r\n            background: #F2F3F5;\r\n\r\n        }\r\n\r\n        \/*\r\n\r\n         * No mobile, foto\/v\u00eddeo ficam em fluxo normal e ocupam 100% da largura.\r\n\r\n         * aspect-ratio 16\/9 evita o corte das legendas embutidas.\r\n\r\n         *\/\r\n\r\n        .d15-video-flow__waiting-image,\r\n\r\n        .d15-video-flow__video {\r\n\r\n            position: relative;\r\n\r\n            z-index: 0;\r\n\r\n            top: auto;\r\n\r\n            right: auto;\r\n\r\n            bottom: 0;\r\n\r\n            left: auto;\r\n\r\n            display: block;\r\n\r\n            flex: 0 0 auto;\r\n\r\n            width: 100%;\r\n\r\n            height: auto;\r\n\r\n            aspect-ratio: 16 \/ 9;\r\n\r\n            object-position: 50% 100%;\r\n\r\n            background: #171717;\r\n\r\n        }\r\n\r\n        \/* Waiting cobre totalmente a \u00e1rea de m\u00eddia. *\/\r\n\r\n        .d15-video-flow__waiting-image {\r\n\r\n            object-fit: cover;\r\n\r\n        }\r\n\r\n        \/* V\u00eddeo preserva o quadro inteiro para n\u00e3o cortar as legendas. *\/\r\n\r\n        .d15-video-flow__video {\r\n\r\n            object-fit: contain;\r\n\r\n        }\r\n\r\n        \/* O degrad\u00ea era pensado para card sobreposto; no mobile o card fica abaixo. *\/\r\n\r\n        .d15-video-flow__overlay {\r\n\r\n            display: none;\r\n\r\n        }\r\n\r\n        .d15-video-flow__interface {\r\n\r\n            position: relative;\r\n\r\n            z-index: 2;\r\n\r\n            display: block;\r\n\r\n            width: 100%;\r\n\r\n            height: auto;\r\n\r\n            min-height: 0;\r\n\r\n            padding: 24px 18px 30px;\r\n\r\n            background: #F2F3F5;\r\n\r\n        }\r\n\r\n        .d15-video-flow__card,\r\n\r\n        .d15-video-flow__card.is-playing {\r\n\r\n            width: 100%;\r\n\r\n            max-width: none;\r\n\r\n            padding: 20px 18px;\r\n\r\n            border-radius: 18px;\r\n\r\n            margin: 0;\r\n\r\n            align-self: auto;\r\n\r\n        }\r\n\r\n        .d15-video-flow__title,\r\n\r\n        .d15-video-flow__card.is-playing .d15-video-flow__title {\r\n\r\n            font-size: clamp(28px, 8.5vw, 36px);\r\n\r\n        }\r\n\r\n        .d15-video-flow__actions,\r\n\r\n        .d15-video-flow__playback-controls,\r\n\r\n        .d15-video-flow__end-actions,\r\n\r\n        .d15-video-flow__button {\r\n\r\n            width: 100%;\r\n\r\n        }\r\n\r\n    }\r\n\r\n    @media (prefers-reduced-motion: reduce) {\r\n\r\n        .d15-video-flow__waiting-image,\r\n\r\n        .d15-video-flow__video,\r\n\r\n        .d15-video-flow__card,\r\n\r\n        .d15-video-flow__button,\r\n\r\n        .d15-video-flow__end-card {\r\n\r\n            transition: none;\r\n\r\n            animation: none;\r\n\r\n        }\r\n\r\n    }\r\n\r\n<\/style>\r\n\r\n<!-- =========================================================\r\n\r\n     INST\u00c2NCIA EXEMPLO \u2014 MARIA\r\n\r\n     Voc\u00ea pode duplicar TODO este <div class=\"d15-video-flow\">.\r\n\r\n     As c\u00f3pias n\u00e3o interferem umas nas outras.\r\n\r\n     ========================================================= -->\r\n\r\n<div\r\n\r\n    class=\"d15-video-flow\"\r\n\r\n    data-start-stage=\"intro\"\r\n\r\n    data-default-idle-image=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/10\/CuidadoCasoClinicoD15Roteiro2-Waiting-scaled.webp\"\r\n\r\n>\r\n\r\n    <!--\r\n\r\n         WAITING \/ FUNDO PARADO:\r\n\r\n         a URL fica em data-default-idle-image na inst\u00e2ncia.\r\n\r\n         O JavaScript coloca essa imagem em tela cheia.\r\n\r\n    -->\r\n\r\n    <img\r\n\r\n        class=\"d15-video-flow__waiting-image\"\r\n\r\n        alt=\"\"\r\n\r\n        aria-hidden=\"true\"\r\n\r\n    >\r\n\r\n    <!--\r\n\r\n         Este v\u00eddeo fica oculto enquanto a tela est\u00e1 em waiting.\r\n\r\n         Ele aparece somente quando algum bot\u00e3o data-action=\"play\"\r\n\r\n         iniciar um v\u00eddeo.\r\n\r\n    -->\r\n\r\n    <video\r\n\r\n        class=\"d15-video-flow__video\"\r\n\r\n        playsinline\r\n\r\n        preload=\"auto\"\r\n\r\n        hidden\r\n\r\n    ><\/video>\r\n\r\n    <div class=\"d15-video-flow__overlay\"><\/div>\r\n\r\n    <div class=\"d15-video-flow__interface\">\r\n\r\n        <div class=\"d15-video-flow__card\">\r\n\r\n            <!-- =============================================\r\n\r\n                 TELA 1 \u2014 CONHECENDO A PACIENTE\r\n\r\n                 ============================================= -->\r\n\r\n            <section\r\n\r\n                class=\"d15-video-flow__stage\"\r\n\r\n                data-stage=\"intro\"\r\n\r\n                data-idle-image=\"\"\r\n\r\n            >\r\n\r\n                <h2 class=\"d15-video-flow__title\">\r\n\r\n                    Exames\r\n\r\n                <\/h2>\r\n\r\n                <div class=\"d15-video-flow__actions\">\r\n\r\n                    <!--\r\n\r\n                        = Pular aparece aos 30s.\r\n\r\n                        data-skip-after=\"0\"\r\n\r\n                        = Pular aparece desde o come\u00e7o.\r\n\r\n                        sem data-skip-after\r\n\r\n                        = n\u00e3o existe op\u00e7\u00e3o de pular.\r\n\r\n                        CARD COMPLEMENTAR OPCIONAL:\r\n\r\n                        Preencha data-end-card-title e\/ou\r\n\r\n                        data-end-card-text para ele aparecer\r\n\r\n                        ao final natural deste v\u00eddeo.\r\n\r\n                    -->\r\n\r\n                    <button\r\n\r\n                        type=\"button\"\r\n\r\n                        class=\"d15-video-flow__button\"\r\n\r\n                        data-action=\"play\"\r\n\r\n                        data-video=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/10\/Roteiro2-VersaoWeb-VFinal.mp4\"\r\n\r\n                        data-play-title=\"Exames\"\r\n\r\n                        data-next-stage=\"intro\"\r\n\r\n                        data-skip-after=\"30\"\r\n\r\n                        data-end-card-title=\"\"\r\n\r\n                        data-end-card-text=\"\"\r\n\r\n                        data-end-card-button=\"Continuar\"\r\n\r\n                    >\r\n\r\n                        Clique aqui para conferir os exames realizados e seus resultados\r\n\r\n                    <\/button>\r\n\r\n                <\/div>\r\n\r\n            <\/section>\r\n\r\n<!-- =============================================\r\n\r\n                 CONTROLE DURANTE O V\u00cdDEO\r\n\r\n                 ============================================= -->\r\n\r\n            <section\r\n\r\n                class=\"d15-video-flow__playback\"\r\n\r\n                hidden\r\n\r\n            >\r\n\r\n                <h2\r\n\r\n                    class=\"d15-video-flow__title d15-video-flow__playback-title\"\r\n\r\n                >\r\n\r\n                    V\u00eddeo\r\n\r\n                <\/h2>\r\n\r\n                <div\r\n\r\n                    class=\"d15-video-flow__playback-controls\"\r\n\r\n                    role=\"group\"\r\n\r\n                    aria-label=\"Controles do v\u00eddeo\"\r\n\r\n                >\r\n\r\n                    <button\r\n\r\n                        type=\"button\"\r\n\r\n                        class=\"d15-video-flow__button d15-video-flow__pause\"\r\n\r\n                    >\r\n\r\n                        Pausar v\u00eddeo\r\n\r\n                    <\/button>\r\n\r\n                    <div\r\n\r\n                        class=\"d15-video-flow__seek\"\r\n\r\n                    >\r\n\r\n                        <span\r\n\r\n                            class=\"d15-video-flow__seek-time d15-video-flow__seek-current\"\r\n\r\n                            aria-hidden=\"true\"\r\n\r\n                        >\r\n\r\n                            0:00\r\n\r\n                        <\/span>\r\n\r\n                        <input\r\n\r\n                            type=\"range\"\r\n\r\n                            class=\"d15-video-flow__seek-input\"\r\n\r\n                            min=\"0\"\r\n\r\n                            max=\"100\"\r\n\r\n                            step=\"0.1\"\r\n\r\n                            value=\"0\"\r\n\r\n                            aria-label=\"Barra de reprodu\u00e7\u00e3o do v\u00eddeo\"\r\n\r\n                        >\r\n\r\n                        <span\r\n\r\n                            class=\"d15-video-flow__seek-time d15-video-flow__seek-duration\"\r\n\r\n                            aria-hidden=\"true\"\r\n\r\n                        >\r\n\r\n                            0:00\r\n\r\n                        <\/span>\r\n\r\n                    <\/div>\r\n\r\n                <\/div>\r\n\r\n            <\/section>\r\n\r\n            <!-- =============================================\r\n\r\n                 CARD COMPLEMENTAR OPCIONAL\r\n\r\n                 O JS preenche este card a partir dos atributos\r\n\r\n                 data-end-card-* do bot\u00e3o que iniciou o v\u00eddeo.\r\n\r\n                 ============================================= -->\r\n\r\n            <section\r\n\r\n                class=\"d15-video-flow__end-card\"\r\n\r\n                hidden\r\n\r\n            >\r\n\r\n                <h2\r\n\r\n                    class=\"d15-video-flow__title d15-video-flow__end-title\"\r\n\r\n                ><\/h2>\r\n\r\n                <p\r\n\r\n                    class=\"d15-video-flow__text d15-video-flow__end-text\"\r\n\r\n                ><\/p>\r\n\r\n                <div class=\"d15-video-flow__end-actions\">\r\n\r\n                    <button\r\n\r\n                        type=\"button\"\r\n\r\n                        class=\"d15-video-flow__button d15-video-flow__end-continue\"\r\n\r\n                    >\r\n\r\n                        Continuar\r\n\r\n                    <\/button>\r\n\r\n                    <button\r\n\r\n                        type=\"button\"\r\n\r\n                        class=\"d15-video-flow__button d15-video-flow__button--secondary d15-video-flow__end-back\"\r\n\r\n                    >\r\n\r\n                        Voltar\r\n\r\n                    <\/button>\r\n\r\n                <\/div>\r\n\r\n            <\/section>\r\n\r\n            <button\r\n\r\n                type=\"button\"\r\n\r\n                class=\"d15-video-flow__button d15-video-flow__retry\"\r\n\r\n                hidden\r\n\r\n            >\r\n\r\n                Reproduzir v\u00eddeo com \u00e1udio\r\n\r\n            <\/button>\r\n\r\n            <p\r\n\r\n                class=\"d15-video-flow__status\"\r\n\r\n                aria-live=\"polite\"\r\n\r\n                hidden\r\n\r\n            ><\/p>\r\n\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n<\/div>\r\n\r\n<script>\r\n\r\n(() => {\r\n\r\n    \/*\r\n\r\n     * A l\u00f3gica global \u00e9 definida uma \u00fanica vez.\r\n\r\n     * Cada .d15-video-flow guarda estado, hist\u00f3rico e v\u00eddeo pr\u00f3prios.\r\n\r\n     *\/\r\n\r\n    if (!window.D15VideoFlow) {\r\n\r\n        const SELECTOR = \".d15-video-flow\";\r\n\r\n        function initializeOne(component) {\r\n\r\n            if (\r\n\r\n                !component ||\r\n\r\n                component.dataset.d15VideoFlowInitialized === \"true\"\r\n\r\n            ) {\r\n\r\n                return;\r\n\r\n            }\r\n\r\n            component.dataset.d15VideoFlowInitialized = \"true\";\r\n\r\n            const waitingImage = component.querySelector(\r\n\r\n                \".d15-video-flow__waiting-image\"\r\n\r\n            );\r\n\r\n            const video = component.querySelector(\r\n\r\n                \".d15-video-flow__video\"\r\n\r\n            );\r\n\r\n            const card = component.querySelector(\r\n\r\n                \".d15-video-flow__card\"\r\n\r\n            );\r\n\r\n            const stages = [\r\n\r\n                ...component.querySelectorAll(\r\n\r\n                    \".d15-video-flow__stage\"\r\n\r\n                )\r\n\r\n            ];\r\n\r\n            const playback = component.querySelector(\r\n\r\n                \".d15-video-flow__playback\"\r\n\r\n            );\r\n\r\n            const playbackTitle = component.querySelector(\r\n\r\n                \".d15-video-flow__playback-title\"\r\n\r\n            );\r\n\r\n            const pauseButton = component.querySelector(\r\n\r\n                \".d15-video-flow__pause\"\r\n\r\n            );\r\n\r\n            const seekInput = component.querySelector(\r\n\r\n                \".d15-video-flow__seek-input\"\r\n\r\n            );\r\n\r\n            const seekCurrent = component.querySelector(\r\n\r\n                \".d15-video-flow__seek-current\"\r\n\r\n            );\r\n\r\n            const seekDuration = component.querySelector(\r\n\r\n                \".d15-video-flow__seek-duration\"\r\n\r\n            );\r\n\r\nconst skipButton = component.querySelector(\r\n\r\n                \".d15-video-flow__skip\"\r\n\r\n            );\r\n\r\n            const endCard = component.querySelector(\r\n\r\n                \".d15-video-flow__end-card\"\r\n\r\n            );\r\n\r\n            const endTitle = component.querySelector(\r\n\r\n                \".d15-video-flow__end-title\"\r\n\r\n            );\r\n\r\n            const endText = component.querySelector(\r\n\r\n                \".d15-video-flow__end-text\"\r\n\r\n            );\r\n\r\n            const endContinue = component.querySelector(\r\n\r\n                \".d15-video-flow__end-continue\"\r\n\r\n            );\r\n\r\n            const endBack = component.querySelector(\r\n\r\n                \".d15-video-flow__end-back\"\r\n\r\n            );\r\n\r\n            const retryButton = component.querySelector(\r\n\r\n                \".d15-video-flow__retry\"\r\n\r\n            );\r\n\r\n            const status = component.querySelector(\r\n\r\n                \".d15-video-flow__status\"\r\n\r\n            );\r\n\r\n            if (\r\n\r\n                !waitingImage ||\r\n\r\n                !video ||\r\n\r\n                !card ||\r\n\r\n                !stages.length ||\r\n\r\n                !playback ||\r\n\r\n                !pauseButton\r\n\r\n            ) {\r\n\r\n                return;\r\n\r\n            }\r\n\r\n            const startStage =\r\n\r\n                component.dataset.startStage ||\r\n\r\n                stages[0].dataset.stage;\r\n\r\n            const defaultIdleImage =\r\n\r\n                component.dataset.defaultIdleImage ||\r\n\r\n                waitingImage.currentSrc ||\r\n\r\n                waitingImage.src;\r\n\r\n            let activeStageName = null;\r\n\r\n            let currentPlayback = null;\r\n\r\n            let requestId = 0;\r\n\r\n            \/* Hist\u00f3rico exclusivo desta inst\u00e2ncia. *\/\r\n\r\n            const stageHistory = [];\r\n\r\n            function getStage(name) {\r\n\r\n                return stages.find(\r\n\r\n                    stage => stage.dataset.stage === name\r\n\r\n                ) || null;\r\n\r\n            }\r\n\r\n            function configured(value) {\r\n\r\n                return Boolean(\r\n\r\n                    value &&\r\n\r\n                    String(value).trim() &&\r\n\r\n                    !String(value).includes(\"COLE_AQUI\") &&\r\n\r\n                    !String(value).includes(\"SUBSTITUA\")\r\n\r\n                );\r\n\r\n            }\r\n\r\n            function showStatus(message = \"\") {\r\n\r\n                if (!status) return;\r\n\r\n                status.textContent = message;\r\n\r\n                status.hidden = !message;\r\n\r\n            }\r\n\r\n            function resetMessages() {\r\n\r\n                if (retryButton) {\r\n\r\n                    retryButton.hidden = true;\r\n\r\n                }\r\n\r\n                showStatus(\"\");\r\n\r\n            }\r\n\r\n            function hideAllPanels() {\r\n\r\n                stages.forEach(stage => {\r\n\r\n                    stage.hidden = true;\r\n\r\n                });\r\n\r\n                playback.hidden = true;\r\n\r\n                if (endCard) {\r\n\r\n                    endCard.hidden = true;\r\n\r\n                }\r\n\r\n            }\r\n\r\n            function setPlayingCard(value) {\r\n\r\n                card.classList.toggle(\r\n\r\n                    \"is-playing\",\r\n\r\n                    value\r\n\r\n                );\r\n\r\n            }\r\n\r\n            function updatePauseLabel() {\r\n\r\n                pauseButton.textContent = video.paused\r\n\r\n                    ? \"Continuar v\u00eddeo\"\r\n\r\n                    : \"Pausar v\u00eddeo\";\r\n\r\n            }\r\n\r\n            function formatVideoTime(seconds) {\r\n                const safeSeconds =\r\n                    Number.isFinite(seconds)\r\n                        ? Math.max(0, seconds)\r\n                        : 0;\r\n\r\n                const minutes =\r\n                    Math.floor(\r\n                        safeSeconds \/ 60\r\n                    );\r\n\r\n                const remainingSeconds =\r\n                    Math.floor(\r\n                        safeSeconds % 60\r\n                    );\r\n\r\n                return `${minutes}:${String(\r\n                    remainingSeconds\r\n                ).padStart(2, \"0\")}`;\r\n            }\r\n\r\n            function getVideoDuration() {\r\n                if (\r\n                    Number.isFinite(video.duration) &&\r\n                    video.duration > 0 &&\r\n                    video.duration !== Infinity\r\n                ) {\r\n                    return video.duration;\r\n                }\r\n\r\n                \/*\r\n                 * Fallback importante para alguns MP4s\/servidores:\r\n                 * enquanto duration ainda aparece como Infinity\/NaN,\r\n                 * usamos a regi\u00e3o j\u00e1 reconhecida como seekable.\r\n                 *\/\r\n                if (\r\n                    video.seekable &&\r\n                    video.seekable.length\r\n                ) {\r\n                    const lastIndex =\r\n                        video.seekable.length - 1;\r\n\r\n                    const seekableEnd =\r\n                        video.seekable.end(\r\n                            lastIndex\r\n                        );\r\n\r\n                    if (\r\n                        Number.isFinite(seekableEnd) &&\r\n                        seekableEnd > 0\r\n                    ) {\r\n                        return seekableEnd;\r\n                    }\r\n                }\r\n\r\n                return 0;\r\n            }\r\n\r\n            function resetSeekBar() {\r\n                if (seekInput) {\r\n                    seekInput.min = \"0\";\r\n                    seekInput.max = \"0\";\r\n                    seekInput.step = \"0.05\";\r\n                    seekInput.value = \"0\";\r\n                    seekInput.setAttribute(\r\n                        \"aria-valuemin\",\r\n                        \"0\"\r\n                    );\r\n                    seekInput.setAttribute(\r\n                        \"aria-valuemax\",\r\n                        \"0\"\r\n                    );\r\n                    seekInput.setAttribute(\r\n                        \"aria-valuenow\",\r\n                        \"0\"\r\n                    );\r\n                }\r\n\r\n                if (seekCurrent) {\r\n                    seekCurrent.textContent =\r\n                        \"0:00\";\r\n                }\r\n\r\n                if (seekDuration) {\r\n                    seekDuration.textContent =\r\n                        \"0:00\";\r\n                }\r\n            }\r\n\r\n            function updateSeekBar() {\r\n                if (!seekInput) {\r\n                    return;\r\n                }\r\n\r\n                const duration =\r\n                    getVideoDuration();\r\n\r\n                const current =\r\n                    Number.isFinite(video.currentTime)\r\n                        ? Math.max(\r\n                            0,\r\n                            video.currentTime\r\n                        )\r\n                        : 0;\r\n\r\n                if (duration > 0) {\r\n                    seekInput.max =\r\n                        String(duration);\r\n\r\n                    seekInput.value =\r\n                        String(\r\n                            Math.min(\r\n                                current,\r\n                                duration\r\n                            )\r\n                        );\r\n\r\n                    seekInput.setAttribute(\r\n                        \"aria-valuemax\",\r\n                        String(duration)\r\n                    );\r\n\r\n                    seekInput.setAttribute(\r\n                        \"aria-valuenow\",\r\n                        String(current)\r\n                    );\r\n\r\n                    if (seekDuration) {\r\n                        seekDuration.textContent =\r\n                            formatVideoTime(\r\n                                duration\r\n                            );\r\n                    }\r\n                } else {\r\n                    seekInput.max = \"0\";\r\n                    seekInput.value = \"0\";\r\n\r\n                    if (seekDuration) {\r\n                        seekDuration.textContent =\r\n                            \"0:00\";\r\n                    }\r\n                }\r\n\r\n                if (seekCurrent) {\r\n                    seekCurrent.textContent =\r\n                        formatVideoTime(\r\n                            current\r\n                        );\r\n                }\r\n            }\r\n\r\n            function seekToControlValue() {\r\n                if (!seekInput) {\r\n                    return;\r\n                }\r\n\r\n                const duration =\r\n                    getVideoDuration();\r\n\r\n                if (duration <= 0) {\r\n                    updateSeekBar();\r\n                    return;\r\n                }\r\n\r\n                const target =\r\n                    Number(\r\n                        seekInput.value\r\n                    );\r\n\r\n                if (\r\n                    !Number.isFinite(target)\r\n                ) {\r\n                    return;\r\n                }\r\n\r\n                video.currentTime =\r\n                    Math.min(\r\n                        duration,\r\n                        Math.max(\r\n                            0,\r\n                            target\r\n                        )\r\n                    );\r\n\r\n                updateSeekBar();\r\n            }\r\n\r\n            function applyVideoPosition(stage) {\r\n\r\n                const position =\r\n\r\n                    stage?.dataset.videoPosition ||\r\n\r\n                    \"50% 100%\";\r\n\r\n                component.style.setProperty(\r\n\r\n                    \"--d15-video-position\",\r\n\r\n                    position\r\n\r\n                );\r\n\r\n            }\r\n\r\n            function showIdleImage(src) {\r\n\r\n                \/*\r\n\r\n                 * Invalida qualquer tentativa anterior de reprodu\u00e7\u00e3o\r\n\r\n                 * e volta o componente para o estado de waiting.\r\n\r\n                 *\/\r\n\r\n                requestId += 1;\r\n\r\n                video.pause();\r\n\r\n                video.hidden = true;\r\n\r\n                resetSeekBar();\r\n\r\n                component.classList.remove(\"is-loading\");\r\n\r\n                if (!configured(src)) {\r\n\r\n                    waitingImage.hidden = true;\r\n\r\n                    showStatus(\r\n\r\n                        \"A imagem de espera ainda n\u00e3o foi configurada.\"\r\n\r\n                    );\r\n\r\n                    return;\r\n\r\n                }\r\n\r\n                const currentSrc =\r\n\r\n                    waitingImage.currentSrc ||\r\n\r\n                    waitingImage.src;\r\n\r\n                if (currentSrc !== src) {\r\n\r\n                    waitingImage.src = src;\r\n\r\n                }\r\n\r\n                waitingImage.hidden = false;\r\n\r\n            }\r\n\r\n            function parseSkipAfter(button) {\r\n\r\n                if (!button.hasAttribute(\"data-skip-after\")) {\r\n\r\n                    return null;\r\n\r\n                }\r\n\r\n                const value = Number(\r\n\r\n                    button.dataset.skipAfter\r\n\r\n                );\r\n\r\n                return Number.isFinite(value)\r\n\r\n                    ? Math.max(0, value)\r\n\r\n                    : null;\r\n\r\n            }\r\n\r\n            function hasEndCard(config) {\r\n\r\n                return Boolean(\r\n\r\n                    config &&\r\n\r\n                    (\r\n\r\n                        config.endTitle.trim() ||\r\n\r\n                        config.endText.trim()\r\n\r\n                    )\r\n\r\n                );\r\n\r\n            }\r\n\r\n            function playSource({\r\n\r\n                src,\r\n\r\n                withAudio = false,\r\n\r\n                loop = false\r\n\r\n            }) {\r\n\r\n                if (!configured(src)) {\r\n\r\n                    return Promise.reject(\r\n\r\n                        new Error(\"V\u00eddeo n\u00e3o configurado.\")\r\n\r\n                    );\r\n\r\n                }\r\n\r\n                waitingImage.hidden = true;\r\n\r\n                video.hidden = false;\r\n\r\n                requestId += 1;\r\n\r\n                const localRequest = requestId;\r\n\r\n                component.classList.add(\"is-loading\");\r\n\r\n                video.pause();\r\n\r\n                video.loop = loop;\r\n\r\n                video.muted = !withAudio;\r\n\r\n                video.defaultMuted = !withAudio;\r\n\r\n                const currentSrc =\r\n\r\n                    video.currentSrc || video.src;\r\n\r\n                if (currentSrc !== src) {\r\n\r\n                    video.src = src;\r\n\r\n                    video.load();\r\n\r\n                }\r\n\r\n                const promise = video.play();\r\n\r\n                if (\r\n\r\n                    promise &&\r\n\r\n                    typeof promise.then === \"function\"\r\n\r\n                ) {\r\n\r\n                    return promise\r\n\r\n                        .then(() => {\r\n\r\n                            if (localRequest !== requestId) {\r\n\r\n                                return;\r\n\r\n                            }\r\n\r\n                            component.classList.remove(\r\n\r\n                                \"is-loading\"\r\n\r\n                            );\r\n\r\n                            updatePauseLabel();\r\n\r\n                                updateSeekBar();\r\n\r\n                        })\r\n\r\n                        .catch(error => {\r\n\r\n                            if (localRequest !== requestId) {\r\n\r\n                                return;\r\n\r\n                            }\r\n\r\n                            component.classList.remove(\r\n\r\n                                \"is-loading\"\r\n\r\n                            );\r\n\r\n                            if (withAudio && retryButton) {\r\n\r\n                                retryButton.hidden = false;\r\n\r\n                                showStatus(\r\n\r\n                                    \"O navegador bloqueou o \u00e1udio. Clique em \u201cReproduzir v\u00eddeo com \u00e1udio\u201d.\"\r\n\r\n                                );\r\n\r\n                            }\r\n\r\n                            console.warn(\r\n\r\n                                \"[D15VideoFlow]\",\r\n\r\n                                error\r\n\r\n                            );\r\n\r\n                            throw error;\r\n\r\n                        });\r\n\r\n                }\r\n\r\n                return Promise.resolve();\r\n\r\n            }\r\n\r\n            function showStage(\r\n\r\n                name,\r\n\r\n                {\r\n\r\n                    pushHistory = false,\r\n\r\n                    replayLabel = \"\"\r\n\r\n                } = {}\r\n\r\n            ) {\r\n\r\n                const stage = getStage(name);\r\n\r\n                if (!stage) {\r\n\r\n                    console.warn(\r\n\r\n                        `[D15VideoFlow] Etapa \"${name}\" n\u00e3o encontrada.`\r\n\r\n                    );\r\n\r\n                    return;\r\n\r\n                }\r\n\r\n                if (\r\n\r\n                    pushHistory &&\r\n\r\n                    activeStageName &&\r\n\r\n                    activeStageName !== name\r\n\r\n                ) {\r\n\r\n                    stageHistory.push(activeStageName);\r\n\r\n                }\r\n\r\n                activeStageName = name;\r\n\r\n                currentPlayback = null;\r\n\r\n                hideAllPanels();\r\n\r\n                resetMessages();\r\n\r\n                setPlayingCard(false);\r\n\r\n                stage.hidden = false;\r\n\r\n                applyVideoPosition(stage);\r\n\r\n                const idleImage =\r\n\r\n                    stage.dataset.idleImage ||\r\n\r\n                    defaultIdleImage;\r\n\r\n                showIdleImage(\r\n\r\n                    idleImage\r\n\r\n                );\r\n\r\n            }\r\n\r\n            function goBack() {\r\n\r\n                if (stageHistory.length) {\r\n\r\n                    showStage(\r\n\r\n                        stageHistory.pop(),\r\n\r\n                        { pushHistory: false }\r\n\r\n                    );\r\n\r\n                    return;\r\n\r\n                }\r\n\r\n                if (activeStageName !== startStage) {\r\n\r\n                    showStage(\r\n\r\n                        startStage,\r\n\r\n                        { pushHistory: false }\r\n\r\n                    );\r\n\r\n                }\r\n\r\n            }\r\n\r\n            function startPlayback(button) {\r\n\r\n                const src = button.dataset.video || \"\";\r\n\r\n                if (!configured(src)) {\r\n\r\n                    showStatus(\r\n\r\n                        \"Este v\u00eddeo ainda n\u00e3o foi configurado.\"\r\n\r\n                    );\r\n\r\n                    return;\r\n\r\n                }\r\n\r\n                currentPlayback = {\r\n\r\n                    originStage: activeStageName,\r\n\r\n                    nextStage:\r\n\r\n                        button.dataset.nextStage ||\r\n\r\n                        activeStageName,\r\n\r\n                    skipStage:\r\n\r\n                        button.dataset.skipStage ||\r\n\r\n                        button.dataset.nextStage ||\r\n\r\n                        activeStageName,\r\n\r\n                    playTitle:\r\n\r\n                        button.dataset.playTitle ||\r\n\r\n                        button.textContent.trim(),\r\n\r\n                    skipAfter:\r\n\r\n                        parseSkipAfter(button),\r\n\r\n                    replayLabel:\r\n\r\n                        button.dataset.replayLabel || \"\",\r\n\r\n                    sourceButton: button,\r\n\r\n                    endTitle:\r\n\r\n                        button.dataset.endCardTitle || \"\",\r\n\r\n                    endText:\r\n\r\n                        button.dataset.endCardText || \"\",\r\n\r\n                    endButton:\r\n\r\n                        button.dataset.endCardButton ||\r\n\r\n                        \"Continuar\",\r\n\r\n                    endNextStage:\r\n\r\n                        button.dataset.endCardNextStage ||\r\n\r\n                        button.dataset.nextStage ||\r\n\r\n                        activeStageName,\r\n\r\n                    endOnSkip:\r\n\r\n                        button.dataset.endCardOnSkip ===\r\n\r\n                        \"true\"\r\n\r\n                };\r\n\r\n                hideAllPanels();\r\n\r\n                resetMessages();\r\n\r\n                setPlayingCard(true);\r\n\r\n                playback.hidden = false;\r\n\r\n                resetSeekBar();\r\n\r\n                if (playbackTitle) {\r\n\r\n                    playbackTitle.textContent =\r\n\r\n                        currentPlayback.playTitle;\r\n\r\n                }\r\n\r\n                \/*\r\n\r\n                 * null = nunca mostra Pular\r\n\r\n                 * 0    = mostra imediatamente\r\n\r\n                 * > 0  = mostra ao atingir o tempo\r\n\r\n                 *\/\r\n\r\n                if (skipButton) {\r\n\r\n                    skipButton.hidden =\r\n\r\n                        currentPlayback.skipAfter === null ||\r\n\r\n                        currentPlayback.skipAfter > 0;\r\n\r\n                }\r\n\r\n                playSource({\r\n\r\n                    src,\r\n\r\n                    withAudio: true,\r\n\r\n                    loop: false\r\n\r\n                }).catch(() => {});\r\n\r\n            }\r\n\r\n            function showEndCard() {\r\n\r\n                if (\r\n\r\n                    !currentPlayback ||\r\n\r\n                    !endCard ||\r\n\r\n                    !hasEndCard(currentPlayback)\r\n\r\n                ) {\r\n\r\n                    return false;\r\n\r\n                }\r\n\r\n                hideAllPanels();\r\n\r\n                resetMessages();\r\n\r\n                setPlayingCard(false);\r\n\r\n                endCard.hidden = false;\r\n\r\n                if (endTitle) {\r\n\r\n                    endTitle.textContent =\r\n\r\n                        currentPlayback.endTitle;\r\n\r\n                    endTitle.hidden =\r\n\r\n                        !currentPlayback.endTitle.trim();\r\n\r\n                }\r\n\r\n                if (endText) {\r\n\r\n                    endText.textContent =\r\n\r\n                        currentPlayback.endText;\r\n\r\n                    endText.hidden =\r\n\r\n                        !currentPlayback.endText.trim();\r\n\r\n                }\r\n\r\n                if (endContinue) {\r\n\r\n                    endContinue.textContent =\r\n\r\n                        currentPlayback.endButton;\r\n\r\n                }\r\n\r\n                video.pause();\r\n\r\n                return true;\r\n\r\n            }\r\n\r\n            function applyReplayLabel() {\r\n\r\n                if (\r\n\r\n                    currentPlayback?.replayLabel &&\r\n\r\n                    currentPlayback?.sourceButton\r\n\r\n                ) {\r\n\r\n                    currentPlayback.sourceButton.textContent =\r\n\r\n                        currentPlayback.replayLabel;\r\n\r\n                }\r\n\r\n            }\r\n\r\n            function goToPlaybackTarget({ skipped = false } = {}) {\r\n\r\n                if (!currentPlayback) return;\r\n\r\n                const shouldShowEndCard =\r\n\r\n                    hasEndCard(currentPlayback) &&\r\n\r\n                    (\r\n\r\n                        !skipped ||\r\n\r\n                        currentPlayback.endOnSkip\r\n\r\n                    );\r\n\r\n                if (shouldShowEndCard) {\r\n\r\n                    showEndCard();\r\n\r\n                    return;\r\n\r\n                }\r\n\r\n                applyReplayLabel();\r\n\r\n                const targetStage = skipped\r\n\r\n                    ? currentPlayback.skipStage\r\n\r\n                    : currentPlayback.nextStage;\r\n\r\n                const originStage =\r\n\r\n                    currentPlayback.originStage;\r\n\r\n                const replayLabel =\r\n\r\n                    currentPlayback.replayLabel;\r\n\r\n                \/*\r\n\r\n                 * Mantemos a etapa de origem ativa at\u00e9 showStage,\r\n\r\n                 * para o hist\u00f3rico registrar a navega\u00e7\u00e3o correta.\r\n\r\n                 *\/\r\n\r\n                activeStageName = originStage;\r\n\r\n                showStage(\r\n\r\n                    targetStage,\r\n\r\n                    {\r\n\r\n                        pushHistory:\r\n\r\n                            targetStage !== originStage,\r\n\r\n                        replayLabel\r\n\r\n                    }\r\n\r\n                );\r\n\r\n            }\r\n\r\n            function continueAfterEndCard() {\r\n\r\n                if (!currentPlayback) return;\r\n\r\n                applyReplayLabel();\r\n\r\n                const targetStage =\r\n\r\n                    currentPlayback.endNextStage;\r\n\r\n                const originStage =\r\n\r\n                    currentPlayback.originStage;\r\n\r\n                const replayLabel =\r\n\r\n                    currentPlayback.replayLabel;\r\n\r\n                activeStageName = originStage;\r\n\r\n                showStage(\r\n\r\n                    targetStage,\r\n\r\n                    {\r\n\r\n                        pushHistory:\r\n\r\n                            targetStage !== originStage,\r\n\r\n                        replayLabel\r\n\r\n                    }\r\n\r\n                );\r\n\r\n            }\r\n\r\n            \/*\r\n\r\n             * EVENT DELEGATION:\r\n\r\n             * n\u00e3o importa se uma etapa tem 1, 2, 5 ou 10 bot\u00f5es.\r\n\r\n             *\/\r\n\r\n            component.addEventListener(\r\n\r\n                \"click\",\r\n\r\n                event => {\r\n\r\n                    const button = event.target.closest(\r\n\r\n                        \"[data-action]\"\r\n\r\n                    );\r\n\r\n                    if (\r\n\r\n                        !button ||\r\n\r\n                        !component.contains(button)\r\n\r\n                    ) {\r\n\r\n                        return;\r\n\r\n                    }\r\n\r\n                    const action = button.dataset.action;\r\n\r\n                    if (action === \"play\") {\r\n\r\n                        startPlayback(button);\r\n\r\n                        return;\r\n\r\n                    }\r\n\r\n                    if (action === \"back\") {\r\n\r\n                        goBack();\r\n\r\n                        return;\r\n\r\n                    }\r\n\r\n                    if (action === \"goto\") {\r\n\r\n                        const target =\r\n\r\n                            button.dataset.targetStage;\r\n\r\n                        if (target) {\r\n\r\n                            showStage(\r\n\r\n                                target,\r\n\r\n                                { pushHistory: true }\r\n\r\n                            );\r\n\r\n                        }\r\n\r\n                    }\r\n\r\n                }\r\n\r\n            );\r\n\r\n            pauseButton.addEventListener(\r\n\r\n                \"click\",\r\n\r\n                () => {\r\n\r\n                    if (!currentPlayback) return;\r\n\r\n                    if (video.paused) {\r\n\r\n                        const promise = video.play();\r\n\r\n                        if (\r\n\r\n                            promise &&\r\n\r\n                            typeof promise.catch === \"function\"\r\n\r\n                        ) {\r\n\r\n                            promise.catch(() => {\r\n\r\n                                if (retryButton) {\r\n\r\n                                    retryButton.hidden = false;\r\n\r\n                                }\r\n\r\n                            });\r\n\r\n                        }\r\n\r\n                    } else {\r\n\r\n                        video.pause();\r\n\r\n                    }\r\n\r\n                    window.requestAnimationFrame(\r\n\r\n                        updatePauseLabel\r\n\r\n                    );\r\n\r\n                }\r\n\r\n            );\r\n\r\n            if (seekInput) {\r\n                \/*\r\n                 * input: atualiza enquanto o aluno arrasta.\r\n                 * change: garante a posi\u00e7\u00e3o final em mouse\/touch\/teclado.\r\n                 *\/\r\n                seekInput.addEventListener(\r\n                    \"input\",\r\n                    seekToControlValue\r\n                );\r\n\r\n                seekInput.addEventListener(\r\n                    \"change\",\r\n                    seekToControlValue\r\n                );\r\n            }\r\n\r\nif (skipButton) {\r\n\r\n                skipButton.addEventListener(\r\n\r\n                    \"click\",\r\n\r\n                    () => {\r\n\r\n                        goToPlaybackTarget({\r\n\r\n                            skipped: true\r\n\r\n                        });\r\n\r\n                    }\r\n\r\n                );\r\n\r\n            }\r\n\r\n            if (endContinue) {\r\n\r\n                endContinue.addEventListener(\r\n\r\n                    \"click\",\r\n\r\n                    continueAfterEndCard\r\n\r\n                );\r\n\r\n            }\r\n\r\n            if (endBack) {\r\n\r\n                endBack.addEventListener(\r\n\r\n                    \"click\",\r\n\r\n                    () => {\r\n\r\n                        if (!currentPlayback) {\r\n\r\n                            goBack();\r\n\r\n                            return;\r\n\r\n                        }\r\n\r\n                        \/*\r\n\r\n                         * No card complementar, \"Voltar\"\r\n\r\n                         * retorna \u00e0 tela que abriu aquele v\u00eddeo.\r\n\r\n                         *\/\r\n\r\n                        showStage(\r\n\r\n                            currentPlayback.originStage,\r\n\r\n                            { pushHistory: false }\r\n\r\n                        );\r\n\r\n                    }\r\n\r\n                );\r\n\r\n            }\r\n\r\n            if (retryButton) {\r\n\r\n                retryButton.addEventListener(\r\n\r\n                    \"click\",\r\n\r\n                    () => {\r\n\r\n                        video.muted = false;\r\n\r\n                        video.defaultMuted = false;\r\n\r\n                        const promise = video.play();\r\n\r\n                        if (\r\n\r\n                            promise &&\r\n\r\n                            typeof promise.then === \"function\"\r\n\r\n                        ) {\r\n\r\n                            promise\r\n\r\n                                .then(() => {\r\n\r\n                                    retryButton.hidden = true;\r\n\r\n                                    showStatus(\"\");\r\n\r\n                                    updatePauseLabel();\r\n\r\n                                })\r\n\r\n                                .catch(() => {\r\n\r\n                                    showStatus(\r\n\r\n                                        \"N\u00e3o foi poss\u00edvel iniciar o \u00e1udio. Tente novamente.\"\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\n\r\n            video.addEventListener(\r\n\r\n                \"playing\",\r\n\r\n                () => {\r\n\r\n                    component.classList.remove(\r\n\r\n                        \"is-loading\"\r\n\r\n                    );\r\n\r\n                    updatePauseLabel();\r\n\r\n                    updateSeekBar();\r\n\r\n                }\r\n\r\n            );\r\n\r\n            video.addEventListener(\r\n\r\n                \"loadedmetadata\",\r\n\r\n                updateSeekBar\r\n\r\n            );\r\n\r\n            video.addEventListener(\r\n                \"durationchange\",\r\n                updateSeekBar\r\n            );\r\n\r\n            video.addEventListener(\r\n                \"loadeddata\",\r\n                updateSeekBar\r\n            );\r\n\r\n            video.addEventListener(\r\n                \"canplay\",\r\n                updateSeekBar\r\n            );\r\n\r\n            video.addEventListener(\r\n                \"progress\",\r\n                updateSeekBar\r\n            );\r\n\r\n            video.addEventListener(\r\n                \"seeking\",\r\n                updateSeekBar\r\n            );\r\n\r\n            video.addEventListener(\r\n                \"seeked\",\r\n                updateSeekBar\r\n            );\r\n\r\nvideo.addEventListener(\r\n\r\n                \"play\",\r\n\r\n                updatePauseLabel\r\n\r\n            );\r\n\r\n            video.addEventListener(\r\n\r\n                \"pause\",\r\n\r\n                updatePauseLabel\r\n\r\n            );\r\n\r\n            video.addEventListener(\r\n\r\n                \"waiting\",\r\n\r\n                () => {\r\n\r\n                    component.classList.add(\r\n\r\n                        \"is-loading\"\r\n\r\n                    );\r\n\r\n                }\r\n\r\n            );\r\n\r\n            video.addEventListener(\r\n\r\n                \"timeupdate\",\r\n\r\n                () => {\r\n\r\n                    updateSeekBar();\r\n\r\n                    if (\r\n\r\n                        !currentPlayback ||\r\n\r\n                        currentPlayback.skipAfter === null\r\n\r\n                    ) {\r\n\r\n                        return;\r\n\r\n                    }\r\n\r\n                    if (\r\n\r\n                        skipButton &&\r\n\r\n                        video.currentTime >=\r\n\r\n                        currentPlayback.skipAfter\r\n\r\n                    ) {\r\n\r\n                        skipButton.hidden = false;\r\n\r\n                    }\r\n\r\n                }\r\n\r\n            );\r\n\r\n            video.addEventListener(\r\n\r\n                \"ended\",\r\n\r\n                () => {\r\n\r\n                    if (!currentPlayback) return;\r\n\r\n                    goToPlaybackTarget({\r\n\r\n                        skipped: false\r\n\r\n                    });\r\n\r\n                }\r\n\r\n            );\r\n\r\n            video.addEventListener(\r\n\r\n                \"error\",\r\n\r\n                () => {\r\n\r\n                    component.classList.remove(\r\n\r\n                        \"is-loading\"\r\n\r\n                    );\r\n\r\n                    showStatus(\r\n\r\n                        \"N\u00e3o foi poss\u00edvel carregar este v\u00eddeo.\"\r\n\r\n                    );\r\n\r\n                }\r\n\r\n            );\r\n\r\n            showStage(\r\n\r\n                startStage,\r\n\r\n                { pushHistory: false }\r\n\r\n            );\r\n\r\n        }\r\n\r\n        function init(scope = document) {\r\n\r\n            const components = [];\r\n\r\n            if (scope.matches?.(SELECTOR)) {\r\n\r\n                components.push(scope);\r\n\r\n            }\r\n\r\n            components.push(\r\n\r\n                ...(\r\n\r\n                    scope.querySelectorAll?.(\r\n\r\n                        SELECTOR\r\n\r\n                    ) || []\r\n\r\n                )\r\n\r\n            );\r\n\r\n            components.forEach(initializeOne);\r\n\r\n        }\r\n\r\n        window.D15VideoFlow = { init };\r\n\r\n        \/* Elementor: hook criado somente uma vez. *\/\r\n\r\n        window.addEventListener(\r\n\r\n            \"elementor\/frontend\/init\",\r\n\r\n            () => {\r\n\r\n                if (!window.elementorFrontend?.hooks) {\r\n\r\n                    return;\r\n\r\n                }\r\n\r\n                window.elementorFrontend.hooks.addAction(\r\n\r\n                    \"frontend\/element_ready\/html.default\",\r\n\r\n                    ($scope) => {\r\n\r\n                        window.D15VideoFlow.init(\r\n\r\n                            $scope[0]\r\n\r\n                        );\r\n\r\n                    }\r\n\r\n                );\r\n\r\n            },\r\n\r\n            { once: true }\r\n\r\n        );\r\n\r\n    }\r\n\r\n    function start() {\r\n\r\n        window.D15VideoFlow.init(document);\r\n\r\n    }\r\n\r\n    if (document.readyState === \"loading\") {\r\n\r\n        document.addEventListener(\r\n\r\n            \"DOMContentLoaded\",\r\n\r\n            start,\r\n\r\n            { once: true }\r\n\r\n        );\r\n\r\n    } else {\r\n\r\n        start();\r\n\r\n    }\r\n\r\n})();\r\n\r\n<\/script>\r\n\r\n<script>\r\n(() => {\r\n    const COMPONENT_SELECTOR =\r\n        \".d15-video-flow\";\r\n\r\n\r\n    function formatTime(seconds) {\r\n        const safe =\r\n            Number.isFinite(seconds)\r\n                ? Math.max(0, seconds)\r\n                : 0;\r\n\r\n        const minutes =\r\n            Math.floor(\r\n                safe \/ 60\r\n            );\r\n\r\n        const secs =\r\n            Math.floor(\r\n                safe % 60\r\n            );\r\n\r\n        return (\r\n            minutes +\r\n            \":\" +\r\n            String(secs)\r\n                .padStart(2, \"0\")\r\n        );\r\n    }\r\n\r\n\r\n    function initSeekPatch(component) {\r\n        if (\r\n            !component ||\r\n            component.dataset\r\n                .d15SeekPatchInitialized ===\r\n                \"true\"\r\n        ) {\r\n            return;\r\n        }\r\n\r\n\r\n        const video =\r\n            component.querySelector(\r\n                \".d15-video-flow__video\"\r\n            );\r\n\r\n        const range =\r\n            component.querySelector(\r\n                \".d15-video-flow__seek-input\"\r\n            );\r\n\r\n        const currentLabel =\r\n            component.querySelector(\r\n                \".d15-video-flow__seek-current\"\r\n            );\r\n\r\n        const durationLabel =\r\n            component.querySelector(\r\n                \".d15-video-flow__seek-duration\"\r\n            );\r\n\r\n\r\n        if (\r\n            !video ||\r\n            !range\r\n        ) {\r\n            return;\r\n        }\r\n\r\n\r\n        component.dataset\r\n            .d15SeekPatchInitialized =\r\n            \"true\";\r\n\r\n\r\n        let userIsDragging =\r\n            false;\r\n\r\n        let rafId =\r\n            null;\r\n\r\n        let probeOriginalTime =\r\n            null;\r\n\r\n\r\n        function getDuration() {\r\n            if (\r\n                Number.isFinite(\r\n                    video.duration\r\n                ) &&\r\n                video.duration > 0 &&\r\n                video.duration !== Infinity\r\n            ) {\r\n                return video.duration;\r\n            }\r\n\r\n\r\n            if (\r\n                video.seekable &&\r\n                video.seekable.length\r\n            ) {\r\n                const last =\r\n                    video.seekable.length - 1;\r\n\r\n                const end =\r\n                    video.seekable.end(\r\n                        last\r\n                    );\r\n\r\n                if (\r\n                    Number.isFinite(end) &&\r\n                    end > 0\r\n                ) {\r\n                    return end;\r\n                }\r\n            }\r\n\r\n\r\n            if (\r\n                video.buffered &&\r\n                video.buffered.length\r\n            ) {\r\n                const last =\r\n                    video.buffered.length - 1;\r\n\r\n                const end =\r\n                    video.buffered.end(\r\n                        last\r\n                    );\r\n\r\n                if (\r\n                    Number.isFinite(end) &&\r\n                    end > 0\r\n                ) {\r\n                    return end;\r\n                }\r\n            }\r\n\r\n\r\n            return 0;\r\n        }\r\n\r\n\r\n        function renderSeek() {\r\n            const duration =\r\n                getDuration();\r\n\r\n            const current =\r\n                Number.isFinite(\r\n                    video.currentTime\r\n                )\r\n                    ? Math.max(\r\n                        0,\r\n                        video.currentTime\r\n                    )\r\n                    : 0;\r\n\r\n\r\n            if (\r\n                duration > 0\r\n            ) {\r\n                range.min =\r\n                    \"0\";\r\n\r\n                range.max =\r\n                    String(\r\n                        duration\r\n                    );\r\n\r\n                range.step =\r\n                    \"0.05\";\r\n\r\n                range.disabled =\r\n                    false;\r\n\r\n\r\n                if (\r\n                    !userIsDragging\r\n                ) {\r\n                    range.value =\r\n                        String(\r\n                            Math.min(\r\n                                current,\r\n                                duration\r\n                            )\r\n                        );\r\n                }\r\n\r\n\r\n                range.setAttribute(\r\n                    \"aria-valuemin\",\r\n                    \"0\"\r\n                );\r\n\r\n                range.setAttribute(\r\n                    \"aria-valuemax\",\r\n                    String(\r\n                        duration\r\n                    )\r\n                );\r\n\r\n                range.setAttribute(\r\n                    \"aria-valuenow\",\r\n                    String(\r\n                        current\r\n                    )\r\n                );\r\n\r\n\r\n                if (\r\n                    durationLabel\r\n                ) {\r\n                    durationLabel\r\n                        .textContent =\r\n                        formatTime(\r\n                            duration\r\n                        );\r\n                }\r\n\r\n            } else {\r\n                \/*\r\n                 * Mant\u00e9m a barra ativa visualmente,\r\n                 * mesmo antes de o navegador informar\r\n                 * a dura\u00e7\u00e3o real.\r\n                 *\/\r\n                range.min =\r\n                    \"0\";\r\n\r\n                range.max =\r\n                    \"100\";\r\n\r\n                range.step =\r\n                    \"0.1\";\r\n\r\n                range.disabled =\r\n                    false;\r\n\r\n\r\n                if (\r\n                    !userIsDragging\r\n                ) {\r\n                    range.value =\r\n                        \"0\";\r\n                }\r\n\r\n\r\n                if (\r\n                    durationLabel\r\n                ) {\r\n                    durationLabel\r\n                        .textContent =\r\n                        \"0:00\";\r\n                }\r\n            }\r\n\r\n\r\n            if (\r\n                currentLabel\r\n            ) {\r\n                currentLabel\r\n                    .textContent =\r\n                    formatTime(\r\n                        current\r\n                    );\r\n            }\r\n        }\r\n\r\n\r\n        \/*\r\n         * Alguns MP4s podem entregar duration = Infinity.\r\n         * Este probe for\u00e7a o browser a resolver a dura\u00e7\u00e3o.\r\n         *\/\r\n        function probeDuration() {\r\n            if (\r\n                video.duration !==\r\n                    Infinity\r\n            ) {\r\n                return;\r\n            }\r\n\r\n\r\n            if (\r\n                probeOriginalTime !==\r\n                    null\r\n            ) {\r\n                return;\r\n            }\r\n\r\n\r\n            probeOriginalTime =\r\n                Number.isFinite(\r\n                    video.currentTime\r\n                )\r\n                    ? video.currentTime\r\n                    : 0;\r\n\r\n\r\n            try {\r\n                video.currentTime =\r\n                    1e101;\r\n            } catch (_) {\r\n                probeOriginalTime =\r\n                    null;\r\n            }\r\n        }\r\n\r\n\r\n        function restoreAfterProbe() {\r\n            if (\r\n                probeOriginalTime ===\r\n                    null\r\n            ) {\r\n                return;\r\n            }\r\n\r\n\r\n            if (\r\n                Number.isFinite(\r\n                    video.duration\r\n                ) &&\r\n                video.duration > 0 &&\r\n                video.duration !== Infinity\r\n            ) {\r\n                const oldTime =\r\n                    probeOriginalTime;\r\n\r\n                probeOriginalTime =\r\n                    null;\r\n\r\n\r\n                try {\r\n                    video.currentTime =\r\n                        Math.min(\r\n                            oldTime,\r\n                            video.duration\r\n                        );\r\n                } catch (_) {}\r\n\r\n\r\n                renderSeek();\r\n            }\r\n        }\r\n\r\n\r\n        function seekToRangeValue() {\r\n            const duration =\r\n                getDuration();\r\n\r\n            if (\r\n                duration <= 0\r\n            ) {\r\n                renderSeek();\r\n                return;\r\n            }\r\n\r\n\r\n            const target =\r\n                Number(\r\n                    range.value\r\n                );\r\n\r\n\r\n            if (\r\n                !Number.isFinite(\r\n                    target\r\n                )\r\n            ) {\r\n                return;\r\n            }\r\n\r\n\r\n            try {\r\n                video.currentTime =\r\n                    Math.min(\r\n                        duration,\r\n                        Math.max(\r\n                            0,\r\n                            target\r\n                        )\r\n                    );\r\n            } catch (_) {}\r\n\r\n\r\n            renderSeek();\r\n        }\r\n\r\n\r\n        function animationLoop() {\r\n            renderSeek();\r\n\r\n\r\n            if (\r\n                !video.paused &&\r\n                !video.ended\r\n            ) {\r\n                rafId =\r\n                    window\r\n                        .requestAnimationFrame(\r\n                            animationLoop\r\n                        );\r\n            } else {\r\n                rafId =\r\n                    null;\r\n            }\r\n        }\r\n\r\n\r\n        function startLoop() {\r\n            if (\r\n                rafId !==\r\n                    null\r\n            ) {\r\n                return;\r\n            }\r\n\r\n\r\n            rafId =\r\n                window\r\n                    .requestAnimationFrame(\r\n                        animationLoop\r\n                    );\r\n        }\r\n\r\n\r\n        function stopLoop() {\r\n            if (\r\n                rafId !==\r\n                    null\r\n            ) {\r\n                window\r\n                    .cancelAnimationFrame(\r\n                        rafId\r\n                    );\r\n\r\n                rafId =\r\n                    null;\r\n            }\r\n\r\n\r\n            renderSeek();\r\n        }\r\n\r\n\r\n        range.addEventListener(\r\n            \"pointerdown\",\r\n            () => {\r\n                userIsDragging =\r\n                    true;\r\n            }\r\n        );\r\n\r\n\r\n        range.addEventListener(\r\n            \"input\",\r\n            () => {\r\n                userIsDragging =\r\n                    true;\r\n\r\n                seekToRangeValue();\r\n            }\r\n        );\r\n\r\n\r\n        range.addEventListener(\r\n            \"change\",\r\n            () => {\r\n                seekToRangeValue();\r\n\r\n                userIsDragging =\r\n                    false;\r\n\r\n                renderSeek();\r\n            }\r\n        );\r\n\r\n\r\n        range.addEventListener(\r\n            \"pointerup\",\r\n            () => {\r\n                seekToRangeValue();\r\n\r\n                userIsDragging =\r\n                    false;\r\n\r\n                renderSeek();\r\n            }\r\n        );\r\n\r\n\r\n        range.addEventListener(\r\n            \"keyup\",\r\n            () => {\r\n                seekToRangeValue();\r\n\r\n                userIsDragging =\r\n                    false;\r\n\r\n                renderSeek();\r\n            }\r\n        );\r\n\r\n\r\n        [\r\n            \"loadedmetadata\",\r\n            \"loadeddata\",\r\n            \"durationchange\",\r\n            \"canplay\",\r\n            \"canplaythrough\",\r\n            \"progress\",\r\n            \"timeupdate\",\r\n            \"seeking\",\r\n            \"seeked\"\r\n        ].forEach(\r\n            eventName => {\r\n                video.addEventListener(\r\n                    eventName,\r\n                    () => {\r\n                        probeDuration();\r\n                        restoreAfterProbe();\r\n                        renderSeek();\r\n                    }\r\n                );\r\n            }\r\n        );\r\n\r\n\r\n        video.addEventListener(\r\n            \"play\",\r\n            () => {\r\n                probeDuration();\r\n                restoreAfterProbe();\r\n                renderSeek();\r\n                startLoop();\r\n            }\r\n        );\r\n\r\n\r\n        video.addEventListener(\r\n            \"playing\",\r\n            () => {\r\n                probeDuration();\r\n                restoreAfterProbe();\r\n                renderSeek();\r\n                startLoop();\r\n            }\r\n        );\r\n\r\n\r\n        video.addEventListener(\r\n            \"pause\",\r\n            stopLoop\r\n        );\r\n\r\n\r\n        video.addEventListener(\r\n            \"ended\",\r\n            stopLoop\r\n        );\r\n\r\n\r\n        \/*\r\n         * O c\u00f3digo principal troca video.src dinamicamente.\r\n         * Observamos isso para reiniciar a barra.\r\n         *\/\r\n        const srcObserver =\r\n            new MutationObserver(\r\n                mutations => {\r\n                    const changed =\r\n                        mutations.some(\r\n                            mutation =>\r\n                                mutation.attributeName ===\r\n                                \"src\"\r\n                        );\r\n\r\n\r\n                    if (\r\n                        !changed\r\n                    ) {\r\n                        return;\r\n                    }\r\n\r\n\r\n                    userIsDragging =\r\n                        false;\r\n\r\n                    probeOriginalTime =\r\n                        null;\r\n\r\n                    range.value =\r\n                        \"0\";\r\n\r\n\r\n                    if (\r\n                        currentLabel\r\n                    ) {\r\n                        currentLabel\r\n                            .textContent =\r\n                            \"0:00\";\r\n                    }\r\n\r\n\r\n                    if (\r\n                        durationLabel\r\n                    ) {\r\n                        durationLabel\r\n                            .textContent =\r\n                            \"0:00\";\r\n                    }\r\n\r\n\r\n                    [\r\n                        0,\r\n                        100,\r\n                        300,\r\n                        700,\r\n                        1500\r\n                    ].forEach(\r\n                        delay => {\r\n                            window.setTimeout(\r\n                                () => {\r\n                                    probeDuration();\r\n                                    restoreAfterProbe();\r\n                                    renderSeek();\r\n                                },\r\n                                delay\r\n                            );\r\n                        }\r\n                    );\r\n                }\r\n            );\r\n\r\n\r\n        srcObserver.observe(\r\n            video,\r\n            {\r\n                attributes:\r\n                    true,\r\n                attributeFilter:\r\n                    [\r\n                        \"src\"\r\n                    ]\r\n            }\r\n        );\r\n\r\n\r\n        renderSeek();\r\n\r\n\r\n        [\r\n            100,\r\n            300,\r\n            700,\r\n            1500\r\n        ].forEach(\r\n            delay => {\r\n                window.setTimeout(\r\n                    () => {\r\n                        probeDuration();\r\n                        restoreAfterProbe();\r\n                        renderSeek();\r\n                    },\r\n                    delay\r\n                );\r\n            }\r\n        );\r\n    }\r\n\r\n\r\n    function initAll(\r\n        scope = document\r\n    ) {\r\n        const components =\r\n            [];\r\n\r\n\r\n        if (\r\n            scope.matches?.(\r\n                COMPONENT_SELECTOR\r\n            )\r\n        ) {\r\n            components.push(\r\n                scope\r\n            );\r\n        }\r\n\r\n\r\n        components.push(\r\n            ...(\r\n                scope\r\n                    .querySelectorAll?.(\r\n                        COMPONENT_SELECTOR\r\n                    ) ||\r\n                []\r\n            )\r\n        );\r\n\r\n\r\n        components.forEach(\r\n            initSeekPatch\r\n        );\r\n    }\r\n\r\n\r\n    function start() {\r\n        initAll(\r\n            document\r\n        );\r\n    }\r\n\r\n\r\n    if (\r\n        document.readyState ===\r\n        \"loading\"\r\n    ) {\r\n        document.addEventListener(\r\n            \"DOMContentLoaded\",\r\n            start,\r\n            {\r\n                once:\r\n                    true\r\n            }\r\n        );\r\n    } else {\r\n        start();\r\n    }\r\n\r\n\r\n    \/*\r\n     * Compatibilidade com widgets HTML do Elementor.\r\n     *\/\r\n    window.addEventListener(\r\n        \"elementor\/frontend\/init\",\r\n        () => {\r\n            if (\r\n                !window\r\n                    .elementorFrontend\r\n                    ?.hooks\r\n            ) {\r\n                return;\r\n            }\r\n\r\n\r\n            window\r\n                .elementorFrontend\r\n                .hooks\r\n                .addAction(\r\n                    \"frontend\/element_ready\/html.default\",\r\n                    $scope => {\r\n                        initAll(\r\n                            $scope[0]\r\n                        );\r\n                    }\r\n                );\r\n        },\r\n        {\r\n            once:\r\n                true\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<div class=\"elementor-element elementor-element-ae5fdfd e-flex e-con-boxed e-con e-parent\" data-id=\"ae5fdfd\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-0a87655 e-con-full e-flex elementor-invisible e-con e-child\" data-id=\"0a87655\" data-element_type=\"container\" id=\"outras-informacoes\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;animation&quot;:&quot;fadeInDown&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5732beb elementor-widget__width-initial premium-lottie-svg elementor-widget elementor-widget-premium-lottie\" data-id=\"5732beb\" data-element_type=\"widget\" data-settings=\"{&quot;lottie_file&quot;:{&quot;url&quot;:&quot;https:\\\/\\\/cursos1.nead.conasems.org.br\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/opd-1.json&quot;,&quot;id&quot;:45330,&quot;size&quot;:&quot;&quot;,&quot;alt&quot;:&quot;&quot;,&quot;source&quot;:&quot;library&quot;}}\" data-widget_type=\"premium-lottie.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\r\n\t\t<div class=\"premium-lottie-animation\" data-lottie-url=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/opd-1.json\" data-lottie-loop=\"true\" data-lottie-reverse=\"\" data-lottie-hover=\"\" data-lottie-speed=\"1\" data-lottie-render=\"svg\" data-lottie-delay=\"\">\r\n\t\t\t\t\t<\/div>\r\n\r\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-751b442 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"751b442\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Os resultados dos exames e a <\/span><b>alta suspei\u00e7\u00e3o de c\u00e2ncer do colo do \u00fatero<\/b><span style=\"font-weight: 400;\"> tamb\u00e9m s\u00e3o informa\u00e7\u00f5es relevantes. Aproveite para inclu\u00ed-las em \u201cOutras informa\u00e7\u00f5es relevantes do caso\u201d, na se\u00e7\u00e3o 3.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-c4346a7 e-con-full e-flex e-con e-child\" data-id=\"c4346a7\" data-element_type=\"container\" id=\"fluxo-jornada\">\n\t\t\t\t<div class=\"elementor-element elementor-element-36de3b6 elementor-widget elementor-widget-heading\" data-id=\"36de3b6\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Fluxo da jornada do paciente<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-abd37ef e-con-full e-flex e-con e-child\" data-id=\"abd37ef\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-272b7ff e-con-full e-flex e-con e-child\" data-id=\"272b7ff\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f0bb634 elementor-widget elementor-widget-text-editor\" data-id=\"f0bb634\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Com a confirma\u00e7\u00e3o da <\/span><b>alta suspei\u00e7\u00e3o<\/b><span style=\"font-weight: 400;\"> para <\/span><b>c\u00e2ncer<\/b><span style=\"font-weight: 400;\">, a equipe tomou as provid\u00eancias para o encaminhamento do caso \u00e0 Aten\u00e7\u00e3o Especializada.\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">Em contextos como este, a APS tem o papel de organizar o percurso do usu\u00e1rio na rede, garantir o acesso oportuno aos servi\u00e7os especializados e manter o acompanhamento longitudinal, mesmo durante o tratamento em outros pontos da rede.<\/span><\/p><p><span style=\"font-weight: 400;\">A navega\u00e7\u00e3o do paciente, a comunica\u00e7\u00e3o entre servi\u00e7os e o suporte multiprofissional s\u00e3o fundamentais para reduzir barreiras, promover ades\u00e3o e qualificar o cuidado.<\/span><\/p><p><span style=\"font-weight: 400;\">Confira, a seguir, como foi feito esse <\/span><b>encaminhamento<\/b><span style=\"font-weight: 400;\">, saiba qual foi o <\/span><b>diagn\u00f3stico <\/b><span style=\"font-weight: 400;\">e veja como a equipe de sa\u00fade da UBS e Aten\u00e7\u00e3o Especializada se envolveu no cuidado da paciente.<\/span><\/p>\t\t\t\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<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-746bd20 e-con-full e-flex e-con e-parent\" data-id=\"746bd20\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7d7af9f elementor-widget elementor-widget-html\" data-id=\"7d7af9f\" 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<!--\r\n\r\nD15 VIDEO FLOW \u2014 vers\u00e3o responsiva para v\u00eddeos com legenda\r\n\r\nAjustes desta vers\u00e3o:\r\n\r\n1\\) desktop: container em 16:9, preservando o quadro completo do v\u00eddeo;\r\n\r\n2\\) waiting image sempre em cover;\r\n\r\n3\\) desktop\/notebook: card de reprodu\u00e7\u00e3o compacto, \u00e0 direita e fora da \u00e1rea das legendas;\r\n\r\n4\\) mobile: foto\/v\u00eddeo 100% de largura em 16:9 e card abaixo;\r\n\r\n5\\) mant\u00e9m a arquitetura multi-inst\u00e2ncia: cada .d15-video-flow funciona de forma independente.\r\n\r\n\\\\-->\r\n\r\n<!-- =========================================================\r\n\r\n     DISCIPLINA 15 \u2014 FLUXO DE V\u00cdDEOS REUTILIZ\u00c1VEL\r\n\r\n     Pode haver v\u00e1rios .d15-video-flow na mesma aula.\r\n\r\n     Cada inst\u00e2ncia \u00e9 independente e N\u00c3O usa IDs.\r\n\r\n     PARA MAIS BOT\u00d5ES:\r\n\r\n     duplique um bot\u00e3o com data-action=\"play\".\r\n\r\n     PARA MAIS TELAS\/ETAPAS:\r\n\r\n     duplique um bloco .d15-video-flow__stage e mude data-stage.\r\n\r\n     CARD COMPLEMENTAR AO FINAL:\r\n\r\n     use data-end-card-title e\/ou data-end-card-text no bot\u00e3o que abre o v\u00eddeo.\r\n\r\n     Se ambos ficarem vazios, o card n\u00e3o aparece.\r\n\r\n     ========================================================= -->\r\n\r\n<style>\r\n\r\n    @import url('https:\/\/fonts.googleapis.com\/css2?family=News+Cycle:wght@400;700&display=swap');\r\n\r\n    .d15-video-flow {\r\n\r\n        --d15-blue: #213B74;\r\n\r\n        --d15-yellow: #F8CA33;\r\n\r\n        --d15-yellow-hover: #F8E31F;\r\n\r\n        --d15-text: #171717;\r\n\r\n        --d15-card: #FFFFFF;\r\n\r\n        \/* V\u00eddeos agora t\u00eam legenda embutida: preserva a parte inferior do quadro. *\/\r\n\r\n        --d15-video-position: 50% 100%;\r\n\r\n        position: relative;\r\n\r\n        width: calc(100% - 75px);\r\n\r\n        margin-left: 75px;\r\n\r\n        \/*\r\n         * Desktop\/notebook:\r\n         * o container acompanha a propor\u00e7\u00e3o real do v\u00eddeo.\r\n         * Assim n\u00e3o precisamos cortar laterais nem criar barras.\r\n         *\/\r\n        height: auto;\r\n\r\n        min-height: 0;\r\n\r\n        max-height: none;\r\n\r\n        aspect-ratio: 16 \/ 9;\r\n\r\n        overflow: hidden;\r\n\r\n        isolation: isolate;\r\n\r\n        background: #171717;\r\n\r\n    }\r\n\r\n    .d15-video-flow,\r\n\r\n    .d15-video-flow * {\r\n\r\n        box-sizing: border-box;\r\n\r\n    }\r\n\r\n    .d15-video-flow [hidden] {\r\n\r\n        display: none !important;\r\n\r\n    }\r\n\r\n    .d15-video-flow__waiting-image,\r\n\r\n    .d15-video-flow__video {\r\n\r\n        position: absolute;\r\n\r\n        z-index: 0;\r\n\r\n        top: 0;\r\n\r\n        right: 0;\r\n\r\n        bottom: 0;\r\n\r\n        left: 0;\r\n\r\n        width: 100%;\r\n\r\n        height: 100%;\r\n\r\n        object-fit: contain;\r\n\r\n        object-position: var(--d15-video-position);\r\n\r\n        background: #171717;\r\n\r\n        transition: opacity 260ms ease, transform 420ms ease;\r\n\r\n    }\r\n\r\n    \/*\r\n     * ENQUADRAMENTO:\r\n     * - imagem de waiting continua preenchendo todo o container;\r\n     * - v\u00eddeo mostra o quadro inteiro, sem cortar as legendas.\r\n     *\/\r\n    .d15-video-flow .d15-video-flow__waiting-image {\r\n        object-fit: cover !important;\r\n        object-position: 50% 50% !important;\r\n    }\r\n\r\n    .d15-video-flow .d15-video-flow__video {\r\n        top: 0 !important;\r\n        right: 0 !important;\r\n        bottom: 0 !important;\r\n        left: 0 !important;\r\n\r\n        width: 100% !important;\r\n        height: 100% !important;\r\n\r\n        object-fit: contain !important;\r\n        object-position: 50% 50% !important;\r\n\r\n        background: transparent !important;\r\n\r\n        transform: none !important;\r\n        opacity: 1 !important;\r\n    }\r\n\r\n    .d15-video-flow.is-loading .d15-video-flow__video {\r\n        opacity: 1 !important;\r\n        transform: none !important;\r\n    }\r\n\r\n    .d15-video-flow__overlay {\r\n        display: none !important;\r\n        background: none !important;\r\n        opacity: 0 !important;\r\n    }\r\n\r\n    .d15-video-flow__interface {\r\n\r\n        position: relative;\r\n\r\n        z-index: 2;\r\n\r\n        display: flex;\r\n\r\n        align-items: flex-end;\r\n\r\n        justify-content: flex-start;\r\n\r\n        width: 100%;\r\n\r\n        height: 100%;\r\n\r\n        min-height: 100%;\r\n\r\n        padding: clamp(28px, 4.5vw, 72px);\r\n\r\n    }\r\n\r\n    .d15-video-flow__card {\r\n\r\n        position: relative;\r\n\r\n        width: min(620px, 42vw);\r\n\r\n        padding: clamp(24px, 2.1vw, 34px);\r\n\r\n        overflow: hidden;\r\n\r\n        border: 1px solid rgba(255,255,255,.70);\r\n\r\n        border-radius: 22px;\r\n\r\n        background: var(--d15-card);\r\n\r\n        box-shadow:\r\n\r\n            0 18px 50px rgba(0,0,0,.30),\r\n\r\n            0 2px 8px rgba(0,0,0,.08);\r\n\r\n        transition: width 250ms ease, padding 250ms ease;\r\n\r\n    }\r\n\r\n    .d15-video-flow__card::before {\r\n\r\n        content: \"\";\r\n\r\n        position: absolute;\r\n\r\n        inset: 0;\r\n\r\n        pointer-events: none;\r\n\r\n        background: linear-gradient(\r\n\r\n            135deg,\r\n\r\n            rgba(255,255,255,.34),\r\n\r\n            rgba(255,255,255,0) 45%\r\n\r\n        );\r\n\r\n    }\r\n\r\n    .d15-video-flow__card > * {\r\n\r\n        position: relative;\r\n\r\n        z-index: 1;\r\n\r\n    }\r\n\r\n    \/* Durante a reprodu\u00e7\u00e3o, o card fica compacto, \u00e0 direita e longe das legendas. *\/\r\n\r\n    .d15-video-flow__card.is-playing {\r\n\r\n        width: min(240px, 20vw);\r\n\r\n        padding: 12px 14px;\r\n\r\n        margin-left: auto;\r\n\r\n        margin-right: 2%;\r\n\r\n        align-self: center;\r\n\r\n        border-radius: 16px;\r\n\r\n    }\r\n\r\n    .d15-video-flow__title {\r\n\r\n        margin: 0 0 14px;\r\n\r\n        color: var(--d15-blue) !important;\r\n\r\n        font-family: \"News Cycle\", sans-serif;\r\n\r\n        font-size: clamp(31px, 2.35vw, 42px);\r\n\r\n        font-weight: 700;\r\n\r\n        line-height: 1.05;\r\n\r\n        letter-spacing: -0.02em;\r\n\r\n    }\r\n\r\n    .d15-video-flow__card.is-playing .d15-video-flow__title {\r\n\r\n        margin-bottom: 8px;\r\n\r\n        font-size: clamp(17px, 1.2vw, 21px);\r\n\r\n        line-height: 1.1;\r\n\r\n    }\r\n\r\n    .d15-video-flow__card.is-playing .d15-video-flow__playback-controls,\r\n\r\n    .d15-video-flow__card.is-playing .d15-video-flow__button {\r\n\r\n        width: 100%;\r\n\r\n    }\r\n\r\n    .d15-video-flow__card.is-playing .d15-video-flow__button {\r\n\r\n        min-height: 36px;\r\n\r\n        padding: 8px 10px;\r\n\r\n        font-size: 13px;\r\n\r\n        border-radius: 10px;\r\n\r\n    }\r\n\r\n    .d15-video-flow__text {\r\n\r\n        margin: 0 0 18px;\r\n\r\n        color: var(--d15-text);\r\n\r\n        font-family: \"Nunito\", Arial, sans-serif;\r\n\r\n        font-size: 16px;\r\n\r\n        line-height: 1.55;\r\n\r\n    }\r\n\r\n    .d15-video-flow__actions,\r\n\r\n    .d15-video-flow__playback-controls,\r\n\r\n    .d15-video-flow__end-actions {\r\n\r\n        display: flex;\r\n\r\n        flex-wrap: wrap;\r\n\r\n        align-items: center;\r\n\r\n        gap: 10px;\r\n\r\n    }\r\n\r\n    .d15-video-flow__button {\r\n\r\n        appearance: none;\r\n\r\n        display: inline-flex;\r\n\r\n        align-items: center;\r\n\r\n        justify-content: center;\r\n\r\n        width: fit-content;\r\n\r\n        max-width: 100%;\r\n\r\n        min-height: 44px;\r\n\r\n        border: 0;\r\n\r\n        border-radius: 14px;\r\n\r\n        padding: 11px 19px;\r\n\r\n        color: var(--d15-text);\r\n\r\n        background: var(--d15-yellow);\r\n\r\n        font-family: \"Nunito\", Arial, sans-serif;\r\n\r\n        font-size: 15px;\r\n\r\n        font-weight: 700;\r\n\r\n        line-height: 1.25;\r\n\r\n        text-align: center;\r\n\r\n        text-wrap: balance;\r\n\r\n        box-shadow:\r\n\r\n            0 5px 14px rgba(33,59,116,.10),\r\n\r\n            inset 0 1px 0 rgba(255,255,255,.32);\r\n\r\n        cursor: pointer;\r\n\r\n        transition:\r\n\r\n            background-color 180ms ease,\r\n\r\n            box-shadow 180ms ease,\r\n\r\n            transform 180ms ease;\r\n\r\n    }\r\n\r\n    .d15-video-flow__button:hover,\r\n\r\n    .d15-video-flow__button:focus-visible {\r\n\r\n        background: var(--d15-yellow-hover);\r\n\r\n        transform: translateY(-2px);\r\n\r\n        box-shadow:\r\n\r\n            0 8px 18px rgba(33,59,116,.14),\r\n\r\n            inset 0 1px 0 rgba(255,255,255,.38);\r\n\r\n    }\r\n\r\n    .d15-video-flow__button:focus-visible {\r\n\r\n        outline: 3px solid rgba(33,59,116,.22);\r\n\r\n        outline-offset: 3px;\r\n\r\n    }\r\n\r\n    .d15-video-flow__button--secondary {\r\n\r\n        color: var(--d15-blue);\r\n\r\n        background: #FFFFFF;\r\n\r\n        border: 1.5px solid rgba(33,59,116,.30);\r\n\r\n        box-shadow: none;\r\n\r\n    }\r\n\r\n    .d15-video-flow__button--secondary:hover,\r\n\r\n    .d15-video-flow__button--secondary:focus-visible {\r\n\r\n        background: #F3F5F9;\r\n\r\n    }\r\n\r\n    \/* =====================================================\r\n\r\n       BARRA DE REPRODU\u00c7\u00c3O\r\n\r\n       ===================================================== *\/\r\n\r\n    .d15-video-flow__playback-controls {\r\n\r\n        flex-direction: column;\r\n\r\n        align-items: stretch;\r\n\r\n    }\r\n\r\n    .d15-video-flow__seek {\r\n\r\n        display: grid;\r\n\r\n        grid-template-columns: 38px minmax(0, 1fr) 38px;\r\n\r\n        align-items: center;\r\n\r\n        gap: 8px;\r\n\r\n        width: 100%;\r\n\r\n        margin-top: 2px;\r\n\r\n    }\r\n\r\n    .d15-video-flow__seek-time {\r\n\r\n        color: var(--d15-blue);\r\n\r\n        font-family:\r\n\r\n            \"Nunito\",\r\n\r\n            Arial,\r\n\r\n            sans-serif;\r\n\r\n        font-size: 11px;\r\n\r\n        font-weight: 700;\r\n\r\n        line-height: 1;\r\n\r\n        white-space: nowrap;\r\n\r\n    }\r\n\r\n    .d15-video-flow__seek-time:last-child {\r\n\r\n        text-align: right;\r\n\r\n    }\r\n\r\n    .d15-video-flow__seek-input {\r\n\r\n        width: 100%;\r\n\r\n        min-width: 0;\r\n\r\n        margin: 0;\r\n\r\n        cursor: pointer;\r\n\r\n        accent-color: var(--d15-blue);\r\n\r\n    }\r\n\r\n    .d15-video-flow__seek-input:disabled {\r\n\r\n        cursor: default;\r\n\r\n        opacity: .55;\r\n\r\n    }\r\n\r\n    .d15-video-flow__seek-input:focus-visible {\r\n\r\n        outline: 3px solid rgba(33, 59, 116, .20);\r\n\r\n        outline-offset: 3px;\r\n\r\n        border-radius: 999px;\r\n\r\n    }\r\n\r\n    .d15-video-flow__retry {\r\n\r\n        margin-top: 12px;\r\n\r\n    }\r\n\r\n    .d15-video-flow__status {\r\n\r\n        margin: 12px 0 0;\r\n\r\n        color: #6B3D00;\r\n\r\n        font-family: \"Nunito\", Arial, sans-serif;\r\n\r\n        font-size: 14px;\r\n\r\n        font-weight: 600;\r\n\r\n        line-height: 1.4;\r\n\r\n    }\r\n\r\n    .d15-video-flow__end-card {\r\n\r\n        animation: d15CardIn 260ms ease both;\r\n\r\n    }\r\n\r\n    @keyframes d15CardIn {\r\n\r\n        from {\r\n\r\n            opacity: 0;\r\n\r\n            transform: translateY(8px);\r\n\r\n        }\r\n\r\n        to {\r\n\r\n            opacity: 1;\r\n\r\n            transform: translateY(0);\r\n\r\n        }\r\n\r\n    }\r\n\r\n    @media (max-width: 767px) {\r\n\r\n        .d15-video-flow {\r\n\r\n            display: flex;\r\n\r\n            flex-direction: column;\r\n\r\n            width: 100%;\r\n\r\n            margin-left: 0;\r\n\r\n            aspect-ratio: auto;\r\n\r\n            height: auto;\r\n\r\n            min-height: 0;\r\n\r\n            overflow: visible;\r\n\r\n            background: #F2F3F5;\r\n\r\n        }\r\n\r\n        \/*\r\n\r\n         * No mobile, foto\/v\u00eddeo ficam em fluxo normal e ocupam 100% da largura.\r\n\r\n         * aspect-ratio 16\/9 evita o corte das legendas embutidas.\r\n\r\n         *\/\r\n\r\n        .d15-video-flow__waiting-image,\r\n\r\n        .d15-video-flow__video {\r\n\r\n            position: relative;\r\n\r\n            z-index: 0;\r\n\r\n            top: auto;\r\n\r\n            right: auto;\r\n\r\n            bottom: 0;\r\n\r\n            left: auto;\r\n\r\n            display: block;\r\n\r\n            flex: 0 0 auto;\r\n\r\n            width: 100%;\r\n\r\n            height: auto;\r\n\r\n            aspect-ratio: 16 \/ 9;\r\n\r\n            object-position: 50% 100%;\r\n\r\n            background: #171717;\r\n\r\n        }\r\n\r\n        \/* Waiting cobre totalmente a \u00e1rea de m\u00eddia. *\/\r\n\r\n        .d15-video-flow__waiting-image {\r\n\r\n            object-fit: cover;\r\n\r\n        }\r\n\r\n        \/* V\u00eddeo preserva o quadro inteiro para n\u00e3o cortar as legendas. *\/\r\n\r\n        .d15-video-flow__video {\r\n\r\n            object-fit: contain;\r\n\r\n        }\r\n\r\n        \/* O degrad\u00ea era pensado para card sobreposto; no mobile o card fica abaixo. *\/\r\n\r\n        .d15-video-flow__overlay {\r\n\r\n            display: none;\r\n\r\n        }\r\n\r\n        .d15-video-flow__interface {\r\n\r\n            position: relative;\r\n\r\n            z-index: 2;\r\n\r\n            display: block;\r\n\r\n            width: 100%;\r\n\r\n            height: auto;\r\n\r\n            min-height: 0;\r\n\r\n            padding: 24px 18px 30px;\r\n\r\n            background: #F2F3F5;\r\n\r\n        }\r\n\r\n        .d15-video-flow__card,\r\n\r\n        .d15-video-flow__card.is-playing {\r\n\r\n            width: 100%;\r\n\r\n            max-width: none;\r\n\r\n            padding: 20px 18px;\r\n\r\n            border-radius: 18px;\r\n\r\n            margin: 0;\r\n\r\n            align-self: auto;\r\n\r\n        }\r\n\r\n        .d15-video-flow__title,\r\n\r\n        .d15-video-flow__card.is-playing .d15-video-flow__title {\r\n\r\n            font-size: clamp(28px, 8.5vw, 36px);\r\n\r\n        }\r\n\r\n        .d15-video-flow__actions,\r\n\r\n        .d15-video-flow__playback-controls,\r\n\r\n        .d15-video-flow__end-actions,\r\n\r\n        .d15-video-flow__button {\r\n\r\n            width: 100%;\r\n\r\n        }\r\n\r\n    }\r\n\r\n    @media (prefers-reduced-motion: reduce) {\r\n\r\n        .d15-video-flow__waiting-image,\r\n\r\n        .d15-video-flow__video,\r\n\r\n        .d15-video-flow__card,\r\n\r\n        .d15-video-flow__button,\r\n\r\n        .d15-video-flow__end-card {\r\n\r\n            transition: none;\r\n\r\n            animation: none;\r\n\r\n        }\r\n\r\n    }\r\n\r\n<\/style>\r\n\r\n<!-- =========================================================\r\n\r\n     INST\u00c2NCIA EXEMPLO \u2014 MARIA\r\n\r\n     Voc\u00ea pode duplicar TODO este <div class=\"d15-video-flow\">.\r\n\r\n     As c\u00f3pias n\u00e3o interferem umas nas outras.\r\n\r\n     ========================================================= -->\r\n\r\n<div\r\n\r\n    class=\"d15-video-flow\"\r\n\r\n    data-start-stage=\"intro\"\r\n\r\n    data-default-idle-image=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/10\/CuidadoCasoClinicoD15Roteiro3-Waiting.webp\"\r\n\r\n>\r\n\r\n    <!--\r\n\r\n         WAITING \/ FUNDO PARADO:\r\n\r\n         a URL fica em data-default-idle-image na inst\u00e2ncia.\r\n\r\n         O JavaScript coloca essa imagem em tela cheia.\r\n\r\n    -->\r\n\r\n    <img\r\n\r\n        class=\"d15-video-flow__waiting-image\"\r\n\r\n        alt=\"\"\r\n\r\n        aria-hidden=\"true\"\r\n\r\n    >\r\n\r\n    <!--\r\n\r\n         Este v\u00eddeo fica oculto enquanto a tela est\u00e1 em waiting.\r\n\r\n         Ele aparece somente quando algum bot\u00e3o data-action=\"play\"\r\n\r\n         iniciar um v\u00eddeo.\r\n\r\n    -->\r\n\r\n    <video\r\n\r\n        class=\"d15-video-flow__video\"\r\n\r\n        playsinline\r\n\r\n        preload=\"auto\"\r\n\r\n        hidden\r\n\r\n    ><\/video>\r\n\r\n    <div class=\"d15-video-flow__overlay\"><\/div>\r\n\r\n    <div class=\"d15-video-flow__interface\">\r\n\r\n        <div class=\"d15-video-flow__card\">\r\n\r\n            <!-- =============================================\r\n\r\n                 TELA 1 \u2014 CONHECENDO A PACIENTE\r\n\r\n                 ============================================= -->\r\n\r\n            <section\r\n\r\n                class=\"d15-video-flow__stage\"\r\n\r\n                data-stage=\"intro\"\r\n\r\n                data-idle-image=\"\"\r\n\r\n            >\r\n\r\n                <h2 class=\"d15-video-flow__title\">\r\n\r\n                    Fluxo da jornada da paciente\r\n\r\n                <\/h2>\r\n\r\n                <div class=\"d15-video-flow__actions\">\r\n\r\n                    <!--\r\n\r\n                        = Pular aparece aos 30s.\r\n\r\n                        data-skip-after=\"0\"\r\n\r\n                        = Pular aparece desde o come\u00e7o.\r\n\r\n                        sem data-skip-after\r\n\r\n                        = n\u00e3o existe op\u00e7\u00e3o de pular.\r\n\r\n                        CARD COMPLEMENTAR OPCIONAL:\r\n\r\n                        Preencha data-end-card-title e\/ou\r\n\r\n                        data-end-card-text para ele aparecer\r\n\r\n                        ao final natural deste v\u00eddeo.\r\n\r\n                    -->\r\n\r\n                    <button\r\n\r\n                        type=\"button\"\r\n\r\n                        class=\"d15-video-flow__button\"\r\n\r\n                        data-action=\"play\"\r\n\r\n                        data-video=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/10\/Roteiro3-VersaoWeb-VFinal.mp4\"\r\n\r\n                        data-play-title=\"Exames\"\r\n\r\n                        data-next-stage=\"intro\"\r\n\r\n                        data-skip-after=\"30\"\r\n\r\n                        data-end-card-title=\"\"\r\n\r\n                        data-end-card-text=\"\"\r\n\r\n                        data-end-card-button=\"Continuar\"\r\n\r\n                    >\r\n\r\n                        Clique aqui para acompanhar uma parte da trajet\u00f3ria de Maria\r\n\r\n                    <\/button>\r\n\r\n                <\/div>\r\n\r\n            <\/section>\r\n\r\n<!-- =============================================\r\n\r\n                 CONTROLE DURANTE O V\u00cdDEO\r\n\r\n                 ============================================= -->\r\n\r\n            <section\r\n\r\n                class=\"d15-video-flow__playback\"\r\n\r\n                hidden\r\n\r\n            >\r\n\r\n                <h2\r\n\r\n                    class=\"d15-video-flow__title d15-video-flow__playback-title\"\r\n\r\n                >\r\n\r\n                    V\u00eddeo\r\n\r\n                <\/h2>\r\n\r\n                <div\r\n\r\n                    class=\"d15-video-flow__playback-controls\"\r\n\r\n                    role=\"group\"\r\n\r\n                    aria-label=\"Controles do v\u00eddeo\"\r\n\r\n                >\r\n\r\n                    <button\r\n\r\n                        type=\"button\"\r\n\r\n                        class=\"d15-video-flow__button d15-video-flow__pause\"\r\n\r\n                    >\r\n\r\n                        Pausar v\u00eddeo\r\n\r\n                    <\/button>\r\n\r\n                    <div\r\n\r\n                        class=\"d15-video-flow__seek\"\r\n\r\n                    >\r\n\r\n                        <span\r\n\r\n                            class=\"d15-video-flow__seek-time d15-video-flow__seek-current\"\r\n\r\n                            aria-hidden=\"true\"\r\n\r\n                        >\r\n\r\n                            0:00\r\n\r\n                        <\/span>\r\n\r\n                        <input\r\n\r\n                            type=\"range\"\r\n\r\n                            class=\"d15-video-flow__seek-input\"\r\n\r\n                            min=\"0\"\r\n\r\n                            max=\"100\"\r\n\r\n                            step=\"0.1\"\r\n\r\n                            value=\"0\"\r\n\r\n                            aria-label=\"Barra de reprodu\u00e7\u00e3o do v\u00eddeo\"\r\n\r\n                        >\r\n\r\n                        <span\r\n\r\n                            class=\"d15-video-flow__seek-time d15-video-flow__seek-duration\"\r\n\r\n                            aria-hidden=\"true\"\r\n\r\n                        >\r\n\r\n                            0:00\r\n\r\n                        <\/span>\r\n\r\n                    <\/div>\r\n\r\n                <\/div>\r\n\r\n            <\/section>\r\n\r\n            <!-- =============================================\r\n\r\n                 CARD COMPLEMENTAR OPCIONAL\r\n\r\n                 O JS preenche este card a partir dos atributos\r\n\r\n                 data-end-card-* do bot\u00e3o que iniciou o v\u00eddeo.\r\n\r\n                 ============================================= -->\r\n\r\n            <section\r\n\r\n                class=\"d15-video-flow__end-card\"\r\n\r\n                hidden\r\n\r\n            >\r\n\r\n                <h2\r\n\r\n                    class=\"d15-video-flow__title d15-video-flow__end-title\"\r\n\r\n                ><\/h2>\r\n\r\n                <p\r\n\r\n                    class=\"d15-video-flow__text d15-video-flow__end-text\"\r\n\r\n                ><\/p>\r\n\r\n                <div class=\"d15-video-flow__end-actions\">\r\n\r\n                    <button\r\n\r\n                        type=\"button\"\r\n\r\n                        class=\"d15-video-flow__button d15-video-flow__end-continue\"\r\n\r\n                    >\r\n\r\n                        Continuar\r\n\r\n                    <\/button>\r\n\r\n                    <button\r\n\r\n                        type=\"button\"\r\n\r\n                        class=\"d15-video-flow__button d15-video-flow__button--secondary d15-video-flow__end-back\"\r\n\r\n                    >\r\n\r\n                        Voltar\r\n\r\n                    <\/button>\r\n\r\n                <\/div>\r\n\r\n            <\/section>\r\n\r\n            <button\r\n\r\n                type=\"button\"\r\n\r\n                class=\"d15-video-flow__button d15-video-flow__retry\"\r\n\r\n                hidden\r\n\r\n            >\r\n\r\n                Reproduzir v\u00eddeo com \u00e1udio\r\n\r\n            <\/button>\r\n\r\n            <p\r\n\r\n                class=\"d15-video-flow__status\"\r\n\r\n                aria-live=\"polite\"\r\n\r\n                hidden\r\n\r\n            ><\/p>\r\n\r\n        <\/div>\r\n\r\n    <\/div>\r\n\r\n<\/div>\r\n\r\n<script>\r\n\r\n(() => {\r\n\r\n    \/*\r\n\r\n     * A l\u00f3gica global \u00e9 definida uma \u00fanica vez.\r\n\r\n     * Cada .d15-video-flow guarda estado, hist\u00f3rico e v\u00eddeo pr\u00f3prios.\r\n\r\n     *\/\r\n\r\n    if (!window.D15VideoFlow) {\r\n\r\n        const SELECTOR = \".d15-video-flow\";\r\n\r\n        function initializeOne(component) {\r\n\r\n            if (\r\n\r\n                !component ||\r\n\r\n                component.dataset.d15VideoFlowInitialized === \"true\"\r\n\r\n            ) {\r\n\r\n                return;\r\n\r\n            }\r\n\r\n            component.dataset.d15VideoFlowInitialized = \"true\";\r\n\r\n            const waitingImage = component.querySelector(\r\n\r\n                \".d15-video-flow__waiting-image\"\r\n\r\n            );\r\n\r\n            const video = component.querySelector(\r\n\r\n                \".d15-video-flow__video\"\r\n\r\n            );\r\n\r\n            const card = component.querySelector(\r\n\r\n                \".d15-video-flow__card\"\r\n\r\n            );\r\n\r\n            const stages = [\r\n\r\n                ...component.querySelectorAll(\r\n\r\n                    \".d15-video-flow__stage\"\r\n\r\n                )\r\n\r\n            ];\r\n\r\n            const playback = component.querySelector(\r\n\r\n                \".d15-video-flow__playback\"\r\n\r\n            );\r\n\r\n            const playbackTitle = component.querySelector(\r\n\r\n                \".d15-video-flow__playback-title\"\r\n\r\n            );\r\n\r\n            const pauseButton = component.querySelector(\r\n\r\n                \".d15-video-flow__pause\"\r\n\r\n            );\r\n\r\n            const seekInput = component.querySelector(\r\n\r\n                \".d15-video-flow__seek-input\"\r\n\r\n            );\r\n\r\n            const seekCurrent = component.querySelector(\r\n\r\n                \".d15-video-flow__seek-current\"\r\n\r\n            );\r\n\r\n            const seekDuration = component.querySelector(\r\n\r\n                \".d15-video-flow__seek-duration\"\r\n\r\n            );\r\n\r\nconst skipButton = component.querySelector(\r\n\r\n                \".d15-video-flow__skip\"\r\n\r\n            );\r\n\r\n            const endCard = component.querySelector(\r\n\r\n                \".d15-video-flow__end-card\"\r\n\r\n            );\r\n\r\n            const endTitle = component.querySelector(\r\n\r\n                \".d15-video-flow__end-title\"\r\n\r\n            );\r\n\r\n            const endText = component.querySelector(\r\n\r\n                \".d15-video-flow__end-text\"\r\n\r\n            );\r\n\r\n            const endContinue = component.querySelector(\r\n\r\n                \".d15-video-flow__end-continue\"\r\n\r\n            );\r\n\r\n            const endBack = component.querySelector(\r\n\r\n                \".d15-video-flow__end-back\"\r\n\r\n            );\r\n\r\n            const retryButton = component.querySelector(\r\n\r\n                \".d15-video-flow__retry\"\r\n\r\n            );\r\n\r\n            const status = component.querySelector(\r\n\r\n                \".d15-video-flow__status\"\r\n\r\n            );\r\n\r\n            if (\r\n\r\n                !waitingImage ||\r\n\r\n                !video ||\r\n\r\n                !card ||\r\n\r\n                !stages.length ||\r\n\r\n                !playback ||\r\n\r\n                !pauseButton\r\n\r\n            ) {\r\n\r\n                return;\r\n\r\n            }\r\n\r\n            const startStage =\r\n\r\n                component.dataset.startStage ||\r\n\r\n                stages[0].dataset.stage;\r\n\r\n            const defaultIdleImage =\r\n\r\n                component.dataset.defaultIdleImage ||\r\n\r\n                waitingImage.currentSrc ||\r\n\r\n                waitingImage.src;\r\n\r\n            let activeStageName = null;\r\n\r\n            let currentPlayback = null;\r\n\r\n            let requestId = 0;\r\n\r\n            \/* Hist\u00f3rico exclusivo desta inst\u00e2ncia. *\/\r\n\r\n            const stageHistory = [];\r\n\r\n            function getStage(name) {\r\n\r\n                return stages.find(\r\n\r\n                    stage => stage.dataset.stage === name\r\n\r\n                ) || null;\r\n\r\n            }\r\n\r\n            function configured(value) {\r\n\r\n                return Boolean(\r\n\r\n                    value &&\r\n\r\n                    String(value).trim() &&\r\n\r\n                    !String(value).includes(\"COLE_AQUI\") &&\r\n\r\n                    !String(value).includes(\"SUBSTITUA\")\r\n\r\n                );\r\n\r\n            }\r\n\r\n            function showStatus(message = \"\") {\r\n\r\n                if (!status) return;\r\n\r\n                status.textContent = message;\r\n\r\n                status.hidden = !message;\r\n\r\n            }\r\n\r\n            function resetMessages() {\r\n\r\n                if (retryButton) {\r\n\r\n                    retryButton.hidden = true;\r\n\r\n                }\r\n\r\n                showStatus(\"\");\r\n\r\n            }\r\n\r\n            function hideAllPanels() {\r\n\r\n                stages.forEach(stage => {\r\n\r\n                    stage.hidden = true;\r\n\r\n                });\r\n\r\n                playback.hidden = true;\r\n\r\n                if (endCard) {\r\n\r\n                    endCard.hidden = true;\r\n\r\n                }\r\n\r\n            }\r\n\r\n            function setPlayingCard(value) {\r\n\r\n                card.classList.toggle(\r\n\r\n                    \"is-playing\",\r\n\r\n                    value\r\n\r\n                );\r\n\r\n            }\r\n\r\n            function updatePauseLabel() {\r\n\r\n                pauseButton.textContent = video.paused\r\n\r\n                    ? \"Continuar v\u00eddeo\"\r\n\r\n                    : \"Pausar v\u00eddeo\";\r\n\r\n            }\r\n\r\n            function formatVideoTime(seconds) {\r\n                const safeSeconds =\r\n                    Number.isFinite(seconds)\r\n                        ? Math.max(0, seconds)\r\n                        : 0;\r\n\r\n                const minutes =\r\n                    Math.floor(\r\n                        safeSeconds \/ 60\r\n                    );\r\n\r\n                const remainingSeconds =\r\n                    Math.floor(\r\n                        safeSeconds % 60\r\n                    );\r\n\r\n                return `${minutes}:${String(\r\n                    remainingSeconds\r\n                ).padStart(2, \"0\")}`;\r\n            }\r\n\r\n            function getVideoDuration() {\r\n                if (\r\n                    Number.isFinite(video.duration) &&\r\n                    video.duration > 0 &&\r\n                    video.duration !== Infinity\r\n                ) {\r\n                    return video.duration;\r\n                }\r\n\r\n                \/*\r\n                 * Fallback importante para alguns MP4s\/servidores:\r\n                 * enquanto duration ainda aparece como Infinity\/NaN,\r\n                 * usamos a regi\u00e3o j\u00e1 reconhecida como seekable.\r\n                 *\/\r\n                if (\r\n                    video.seekable &&\r\n                    video.seekable.length\r\n                ) {\r\n                    const lastIndex =\r\n                        video.seekable.length - 1;\r\n\r\n                    const seekableEnd =\r\n                        video.seekable.end(\r\n                            lastIndex\r\n                        );\r\n\r\n                    if (\r\n                        Number.isFinite(seekableEnd) &&\r\n                        seekableEnd > 0\r\n                    ) {\r\n                        return seekableEnd;\r\n                    }\r\n                }\r\n\r\n                return 0;\r\n            }\r\n\r\n            function resetSeekBar() {\r\n                if (seekInput) {\r\n                    seekInput.min = \"0\";\r\n                    seekInput.max = \"0\";\r\n                    seekInput.step = \"0.05\";\r\n                    seekInput.value = \"0\";\r\n                    seekInput.setAttribute(\r\n                        \"aria-valuemin\",\r\n                        \"0\"\r\n                    );\r\n                    seekInput.setAttribute(\r\n                        \"aria-valuemax\",\r\n                        \"0\"\r\n                    );\r\n                    seekInput.setAttribute(\r\n                        \"aria-valuenow\",\r\n                        \"0\"\r\n                    );\r\n                }\r\n\r\n                if (seekCurrent) {\r\n                    seekCurrent.textContent =\r\n                        \"0:00\";\r\n                }\r\n\r\n                if (seekDuration) {\r\n                    seekDuration.textContent =\r\n                        \"0:00\";\r\n                }\r\n            }\r\n\r\n            function updateSeekBar() {\r\n                if (!seekInput) {\r\n                    return;\r\n                }\r\n\r\n                const duration =\r\n                    getVideoDuration();\r\n\r\n                const current =\r\n                    Number.isFinite(video.currentTime)\r\n                        ? Math.max(\r\n                            0,\r\n                            video.currentTime\r\n                        )\r\n                        : 0;\r\n\r\n                if (duration > 0) {\r\n                    seekInput.max =\r\n                        String(duration);\r\n\r\n                    seekInput.value =\r\n                        String(\r\n                            Math.min(\r\n                                current,\r\n                                duration\r\n                            )\r\n                        );\r\n\r\n                    seekInput.setAttribute(\r\n                        \"aria-valuemax\",\r\n                        String(duration)\r\n                    );\r\n\r\n                    seekInput.setAttribute(\r\n                        \"aria-valuenow\",\r\n                        String(current)\r\n                    );\r\n\r\n                    if (seekDuration) {\r\n                        seekDuration.textContent =\r\n                            formatVideoTime(\r\n                                duration\r\n                            );\r\n                    }\r\n                } else {\r\n                    seekInput.max = \"0\";\r\n                    seekInput.value = \"0\";\r\n\r\n                    if (seekDuration) {\r\n                        seekDuration.textContent =\r\n                            \"0:00\";\r\n                    }\r\n                }\r\n\r\n                if (seekCurrent) {\r\n                    seekCurrent.textContent =\r\n                        formatVideoTime(\r\n                            current\r\n                        );\r\n                }\r\n            }\r\n\r\n            function seekToControlValue() {\r\n                if (!seekInput) {\r\n                    return;\r\n                }\r\n\r\n                const duration =\r\n                    getVideoDuration();\r\n\r\n                if (duration <= 0) {\r\n                    updateSeekBar();\r\n                    return;\r\n                }\r\n\r\n                const target =\r\n                    Number(\r\n                        seekInput.value\r\n                    );\r\n\r\n                if (\r\n                    !Number.isFinite(target)\r\n                ) {\r\n                    return;\r\n                }\r\n\r\n                video.currentTime =\r\n                    Math.min(\r\n                        duration,\r\n                        Math.max(\r\n                            0,\r\n                            target\r\n                        )\r\n                    );\r\n\r\n                updateSeekBar();\r\n            }\r\n\r\n            function applyVideoPosition(stage) {\r\n\r\n                const position =\r\n\r\n                    stage?.dataset.videoPosition ||\r\n\r\n                    \"50% 100%\";\r\n\r\n                component.style.setProperty(\r\n\r\n                    \"--d15-video-position\",\r\n\r\n                    position\r\n\r\n                );\r\n\r\n            }\r\n\r\n            function showIdleImage(src) {\r\n\r\n                \/*\r\n\r\n                 * Invalida qualquer tentativa anterior de reprodu\u00e7\u00e3o\r\n\r\n                 * e volta o componente para o estado de waiting.\r\n\r\n                 *\/\r\n\r\n                requestId += 1;\r\n\r\n                video.pause();\r\n\r\n                video.hidden = true;\r\n\r\n                resetSeekBar();\r\n\r\n                component.classList.remove(\"is-loading\");\r\n\r\n                if (!configured(src)) {\r\n\r\n                    waitingImage.hidden = true;\r\n\r\n                    showStatus(\r\n\r\n                        \"A imagem de espera ainda n\u00e3o foi configurada.\"\r\n\r\n                    );\r\n\r\n                    return;\r\n\r\n                }\r\n\r\n                const currentSrc =\r\n\r\n                    waitingImage.currentSrc ||\r\n\r\n                    waitingImage.src;\r\n\r\n                if (currentSrc !== src) {\r\n\r\n                    waitingImage.src = src;\r\n\r\n                }\r\n\r\n                waitingImage.hidden = false;\r\n\r\n            }\r\n\r\n            function parseSkipAfter(button) {\r\n\r\n                if (!button.hasAttribute(\"data-skip-after\")) {\r\n\r\n                    return null;\r\n\r\n                }\r\n\r\n                const value = Number(\r\n\r\n                    button.dataset.skipAfter\r\n\r\n                );\r\n\r\n                return Number.isFinite(value)\r\n\r\n                    ? Math.max(0, value)\r\n\r\n                    : null;\r\n\r\n            }\r\n\r\n            function hasEndCard(config) {\r\n\r\n                return Boolean(\r\n\r\n                    config &&\r\n\r\n                    (\r\n\r\n                        config.endTitle.trim() ||\r\n\r\n                        config.endText.trim()\r\n\r\n                    )\r\n\r\n                );\r\n\r\n            }\r\n\r\n            function playSource({\r\n\r\n                src,\r\n\r\n                withAudio = false,\r\n\r\n                loop = false\r\n\r\n            }) {\r\n\r\n                if (!configured(src)) {\r\n\r\n                    return Promise.reject(\r\n\r\n                        new Error(\"V\u00eddeo n\u00e3o configurado.\")\r\n\r\n                    );\r\n\r\n                }\r\n\r\n                waitingImage.hidden = true;\r\n\r\n                video.hidden = false;\r\n\r\n                requestId += 1;\r\n\r\n                const localRequest = requestId;\r\n\r\n                component.classList.add(\"is-loading\");\r\n\r\n                video.pause();\r\n\r\n                video.loop = loop;\r\n\r\n                video.muted = !withAudio;\r\n\r\n                video.defaultMuted = !withAudio;\r\n\r\n                const currentSrc =\r\n\r\n                    video.currentSrc || video.src;\r\n\r\n                if (currentSrc !== src) {\r\n\r\n                    video.src = src;\r\n\r\n                    video.load();\r\n\r\n                }\r\n\r\n                const promise = video.play();\r\n\r\n                if (\r\n\r\n                    promise &&\r\n\r\n                    typeof promise.then === \"function\"\r\n\r\n                ) {\r\n\r\n                    return promise\r\n\r\n                        .then(() => {\r\n\r\n                            if (localRequest !== requestId) {\r\n\r\n                                return;\r\n\r\n                            }\r\n\r\n                            component.classList.remove(\r\n\r\n                                \"is-loading\"\r\n\r\n                            );\r\n\r\n                            updatePauseLabel();\r\n\r\n                                updateSeekBar();\r\n\r\n                        })\r\n\r\n                        .catch(error => {\r\n\r\n                            if (localRequest !== requestId) {\r\n\r\n                                return;\r\n\r\n                            }\r\n\r\n                            component.classList.remove(\r\n\r\n                                \"is-loading\"\r\n\r\n                            );\r\n\r\n                            if (withAudio && retryButton) {\r\n\r\n                                retryButton.hidden = false;\r\n\r\n                                showStatus(\r\n\r\n                                    \"O navegador bloqueou o \u00e1udio. Clique em \u201cReproduzir v\u00eddeo com \u00e1udio\u201d.\"\r\n\r\n                                );\r\n\r\n                            }\r\n\r\n                            console.warn(\r\n\r\n                                \"[D15VideoFlow]\",\r\n\r\n                                error\r\n\r\n                            );\r\n\r\n                            throw error;\r\n\r\n                        });\r\n\r\n                }\r\n\r\n                return Promise.resolve();\r\n\r\n            }\r\n\r\n            function showStage(\r\n\r\n                name,\r\n\r\n                {\r\n\r\n                    pushHistory = false,\r\n\r\n                    replayLabel = \"\"\r\n\r\n                } = {}\r\n\r\n            ) {\r\n\r\n                const stage = getStage(name);\r\n\r\n                if (!stage) {\r\n\r\n                    console.warn(\r\n\r\n                        `[D15VideoFlow] Etapa \"${name}\" n\u00e3o encontrada.`\r\n\r\n                    );\r\n\r\n                    return;\r\n\r\n                }\r\n\r\n                if (\r\n\r\n                    pushHistory &&\r\n\r\n                    activeStageName &&\r\n\r\n                    activeStageName !== name\r\n\r\n                ) {\r\n\r\n                    stageHistory.push(activeStageName);\r\n\r\n                }\r\n\r\n                activeStageName = name;\r\n\r\n                currentPlayback = null;\r\n\r\n                hideAllPanels();\r\n\r\n                resetMessages();\r\n\r\n                setPlayingCard(false);\r\n\r\n                stage.hidden = false;\r\n\r\n                applyVideoPosition(stage);\r\n\r\n                const idleImage =\r\n\r\n                    stage.dataset.idleImage ||\r\n\r\n                    defaultIdleImage;\r\n\r\n                showIdleImage(\r\n\r\n                    idleImage\r\n\r\n                );\r\n\r\n            }\r\n\r\n            function goBack() {\r\n\r\n                if (stageHistory.length) {\r\n\r\n                    showStage(\r\n\r\n                        stageHistory.pop(),\r\n\r\n                        { pushHistory: false }\r\n\r\n                    );\r\n\r\n                    return;\r\n\r\n                }\r\n\r\n                if (activeStageName !== startStage) {\r\n\r\n                    showStage(\r\n\r\n                        startStage,\r\n\r\n                        { pushHistory: false }\r\n\r\n                    );\r\n\r\n                }\r\n\r\n            }\r\n\r\n            function startPlayback(button) {\r\n\r\n                const src = button.dataset.video || \"\";\r\n\r\n                if (!configured(src)) {\r\n\r\n                    showStatus(\r\n\r\n                        \"Este v\u00eddeo ainda n\u00e3o foi configurado.\"\r\n\r\n                    );\r\n\r\n                    return;\r\n\r\n                }\r\n\r\n                currentPlayback = {\r\n\r\n                    originStage: activeStageName,\r\n\r\n                    nextStage:\r\n\r\n                        button.dataset.nextStage ||\r\n\r\n                        activeStageName,\r\n\r\n                    skipStage:\r\n\r\n                        button.dataset.skipStage ||\r\n\r\n                        button.dataset.nextStage ||\r\n\r\n                        activeStageName,\r\n\r\n                    playTitle:\r\n\r\n                        button.dataset.playTitle ||\r\n\r\n                        button.textContent.trim(),\r\n\r\n                    skipAfter:\r\n\r\n                        parseSkipAfter(button),\r\n\r\n                    replayLabel:\r\n\r\n                        button.dataset.replayLabel || \"\",\r\n\r\n                    sourceButton: button,\r\n\r\n                    endTitle:\r\n\r\n                        button.dataset.endCardTitle || \"\",\r\n\r\n                    endText:\r\n\r\n                        button.dataset.endCardText || \"\",\r\n\r\n                    endButton:\r\n\r\n                        button.dataset.endCardButton ||\r\n\r\n                        \"Continuar\",\r\n\r\n                    endNextStage:\r\n\r\n                        button.dataset.endCardNextStage ||\r\n\r\n                        button.dataset.nextStage ||\r\n\r\n                        activeStageName,\r\n\r\n                    endOnSkip:\r\n\r\n                        button.dataset.endCardOnSkip ===\r\n\r\n                        \"true\"\r\n\r\n                };\r\n\r\n                hideAllPanels();\r\n\r\n                resetMessages();\r\n\r\n                setPlayingCard(true);\r\n\r\n                playback.hidden = false;\r\n\r\n                resetSeekBar();\r\n\r\n                if (playbackTitle) {\r\n\r\n                    playbackTitle.textContent =\r\n\r\n                        currentPlayback.playTitle;\r\n\r\n                }\r\n\r\n                \/*\r\n\r\n                 * null = nunca mostra Pular\r\n\r\n                 * 0    = mostra imediatamente\r\n\r\n                 * > 0  = mostra ao atingir o tempo\r\n\r\n                 *\/\r\n\r\n                if (skipButton) {\r\n\r\n                    skipButton.hidden =\r\n\r\n                        currentPlayback.skipAfter === null ||\r\n\r\n                        currentPlayback.skipAfter > 0;\r\n\r\n                }\r\n\r\n                playSource({\r\n\r\n                    src,\r\n\r\n                    withAudio: true,\r\n\r\n                    loop: false\r\n\r\n                }).catch(() => {});\r\n\r\n            }\r\n\r\n            function showEndCard() {\r\n\r\n                if (\r\n\r\n                    !currentPlayback ||\r\n\r\n                    !endCard ||\r\n\r\n                    !hasEndCard(currentPlayback)\r\n\r\n                ) {\r\n\r\n                    return false;\r\n\r\n                }\r\n\r\n                hideAllPanels();\r\n\r\n                resetMessages();\r\n\r\n                setPlayingCard(false);\r\n\r\n                endCard.hidden = false;\r\n\r\n                if (endTitle) {\r\n\r\n                    endTitle.textContent =\r\n\r\n                        currentPlayback.endTitle;\r\n\r\n                    endTitle.hidden =\r\n\r\n                        !currentPlayback.endTitle.trim();\r\n\r\n                }\r\n\r\n                if (endText) {\r\n\r\n                    endText.textContent =\r\n\r\n                        currentPlayback.endText;\r\n\r\n                    endText.hidden =\r\n\r\n                        !currentPlayback.endText.trim();\r\n\r\n                }\r\n\r\n                if (endContinue) {\r\n\r\n                    endContinue.textContent =\r\n\r\n                        currentPlayback.endButton;\r\n\r\n                }\r\n\r\n                video.pause();\r\n\r\n                return true;\r\n\r\n            }\r\n\r\n            function applyReplayLabel() {\r\n\r\n                if (\r\n\r\n                    currentPlayback?.replayLabel &&\r\n\r\n                    currentPlayback?.sourceButton\r\n\r\n                ) {\r\n\r\n                    currentPlayback.sourceButton.textContent =\r\n\r\n                        currentPlayback.replayLabel;\r\n\r\n                }\r\n\r\n            }\r\n\r\n            function goToPlaybackTarget({ skipped = false } = {}) {\r\n\r\n                if (!currentPlayback) return;\r\n\r\n                const shouldShowEndCard =\r\n\r\n                    hasEndCard(currentPlayback) &&\r\n\r\n                    (\r\n\r\n                        !skipped ||\r\n\r\n                        currentPlayback.endOnSkip\r\n\r\n                    );\r\n\r\n                if (shouldShowEndCard) {\r\n\r\n                    showEndCard();\r\n\r\n                    return;\r\n\r\n                }\r\n\r\n                applyReplayLabel();\r\n\r\n                const targetStage = skipped\r\n\r\n                    ? currentPlayback.skipStage\r\n\r\n                    : currentPlayback.nextStage;\r\n\r\n                const originStage =\r\n\r\n                    currentPlayback.originStage;\r\n\r\n                const replayLabel =\r\n\r\n                    currentPlayback.replayLabel;\r\n\r\n                \/*\r\n\r\n                 * Mantemos a etapa de origem ativa at\u00e9 showStage,\r\n\r\n                 * para o hist\u00f3rico registrar a navega\u00e7\u00e3o correta.\r\n\r\n                 *\/\r\n\r\n                activeStageName = originStage;\r\n\r\n                showStage(\r\n\r\n                    targetStage,\r\n\r\n                    {\r\n\r\n                        pushHistory:\r\n\r\n                            targetStage !== originStage,\r\n\r\n                        replayLabel\r\n\r\n                    }\r\n\r\n                );\r\n\r\n            }\r\n\r\n            function continueAfterEndCard() {\r\n\r\n                if (!currentPlayback) return;\r\n\r\n                applyReplayLabel();\r\n\r\n                const targetStage =\r\n\r\n                    currentPlayback.endNextStage;\r\n\r\n                const originStage =\r\n\r\n                    currentPlayback.originStage;\r\n\r\n                const replayLabel =\r\n\r\n                    currentPlayback.replayLabel;\r\n\r\n                activeStageName = originStage;\r\n\r\n                showStage(\r\n\r\n                    targetStage,\r\n\r\n                    {\r\n\r\n                        pushHistory:\r\n\r\n                            targetStage !== originStage,\r\n\r\n                        replayLabel\r\n\r\n                    }\r\n\r\n                );\r\n\r\n            }\r\n\r\n            \/*\r\n\r\n             * EVENT DELEGATION:\r\n\r\n             * n\u00e3o importa se uma etapa tem 1, 2, 5 ou 10 bot\u00f5es.\r\n\r\n             *\/\r\n\r\n            component.addEventListener(\r\n\r\n                \"click\",\r\n\r\n                event => {\r\n\r\n                    const button = event.target.closest(\r\n\r\n                        \"[data-action]\"\r\n\r\n                    );\r\n\r\n                    if (\r\n\r\n                        !button ||\r\n\r\n                        !component.contains(button)\r\n\r\n                    ) {\r\n\r\n                        return;\r\n\r\n                    }\r\n\r\n                    const action = button.dataset.action;\r\n\r\n                    if (action === \"play\") {\r\n\r\n                        startPlayback(button);\r\n\r\n                        return;\r\n\r\n                    }\r\n\r\n                    if (action === \"back\") {\r\n\r\n                        goBack();\r\n\r\n                        return;\r\n\r\n                    }\r\n\r\n                    if (action === \"goto\") {\r\n\r\n                        const target =\r\n\r\n                            button.dataset.targetStage;\r\n\r\n                        if (target) {\r\n\r\n                            showStage(\r\n\r\n                                target,\r\n\r\n                                { pushHistory: true }\r\n\r\n                            );\r\n\r\n                        }\r\n\r\n                    }\r\n\r\n                }\r\n\r\n            );\r\n\r\n            pauseButton.addEventListener(\r\n\r\n                \"click\",\r\n\r\n                () => {\r\n\r\n                    if (!currentPlayback) return;\r\n\r\n                    if (video.paused) {\r\n\r\n                        const promise = video.play();\r\n\r\n                        if (\r\n\r\n                            promise &&\r\n\r\n                            typeof promise.catch === \"function\"\r\n\r\n                        ) {\r\n\r\n                            promise.catch(() => {\r\n\r\n                                if (retryButton) {\r\n\r\n                                    retryButton.hidden = false;\r\n\r\n                                }\r\n\r\n                            });\r\n\r\n                        }\r\n\r\n                    } else {\r\n\r\n                        video.pause();\r\n\r\n                    }\r\n\r\n                    window.requestAnimationFrame(\r\n\r\n                        updatePauseLabel\r\n\r\n                    );\r\n\r\n                }\r\n\r\n            );\r\n\r\n            if (seekInput) {\r\n                \/*\r\n                 * input: atualiza enquanto o aluno arrasta.\r\n                 * change: garante a posi\u00e7\u00e3o final em mouse\/touch\/teclado.\r\n                 *\/\r\n                seekInput.addEventListener(\r\n                    \"input\",\r\n                    seekToControlValue\r\n                );\r\n\r\n                seekInput.addEventListener(\r\n                    \"change\",\r\n                    seekToControlValue\r\n                );\r\n            }\r\n\r\nif (skipButton) {\r\n\r\n                skipButton.addEventListener(\r\n\r\n                    \"click\",\r\n\r\n                    () => {\r\n\r\n                        goToPlaybackTarget({\r\n\r\n                            skipped: true\r\n\r\n                        });\r\n\r\n                    }\r\n\r\n                );\r\n\r\n            }\r\n\r\n            if (endContinue) {\r\n\r\n                endContinue.addEventListener(\r\n\r\n                    \"click\",\r\n\r\n                    continueAfterEndCard\r\n\r\n                );\r\n\r\n            }\r\n\r\n            if (endBack) {\r\n\r\n                endBack.addEventListener(\r\n\r\n                    \"click\",\r\n\r\n                    () => {\r\n\r\n                        if (!currentPlayback) {\r\n\r\n                            goBack();\r\n\r\n                            return;\r\n\r\n                        }\r\n\r\n                        \/*\r\n\r\n                         * No card complementar, \"Voltar\"\r\n\r\n                         * retorna \u00e0 tela que abriu aquele v\u00eddeo.\r\n\r\n                         *\/\r\n\r\n                        showStage(\r\n\r\n                            currentPlayback.originStage,\r\n\r\n                            { pushHistory: false }\r\n\r\n                        );\r\n\r\n                    }\r\n\r\n                );\r\n\r\n            }\r\n\r\n            if (retryButton) {\r\n\r\n                retryButton.addEventListener(\r\n\r\n                    \"click\",\r\n\r\n                    () => {\r\n\r\n                        video.muted = false;\r\n\r\n                        video.defaultMuted = false;\r\n\r\n                        const promise = video.play();\r\n\r\n                        if (\r\n\r\n                            promise &&\r\n\r\n                            typeof promise.then === \"function\"\r\n\r\n                        ) {\r\n\r\n                            promise\r\n\r\n                                .then(() => {\r\n\r\n                                    retryButton.hidden = true;\r\n\r\n                                    showStatus(\"\");\r\n\r\n                                    updatePauseLabel();\r\n\r\n                                })\r\n\r\n                                .catch(() => {\r\n\r\n                                    showStatus(\r\n\r\n                                        \"N\u00e3o foi poss\u00edvel iniciar o \u00e1udio. Tente novamente.\"\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\n\r\n            video.addEventListener(\r\n\r\n                \"playing\",\r\n\r\n                () => {\r\n\r\n                    component.classList.remove(\r\n\r\n                        \"is-loading\"\r\n\r\n                    );\r\n\r\n                    updatePauseLabel();\r\n\r\n                    updateSeekBar();\r\n\r\n                }\r\n\r\n            );\r\n\r\n            video.addEventListener(\r\n\r\n                \"loadedmetadata\",\r\n\r\n                updateSeekBar\r\n\r\n            );\r\n\r\n            video.addEventListener(\r\n                \"durationchange\",\r\n                updateSeekBar\r\n            );\r\n\r\n            video.addEventListener(\r\n                \"loadeddata\",\r\n                updateSeekBar\r\n            );\r\n\r\n            video.addEventListener(\r\n                \"canplay\",\r\n                updateSeekBar\r\n            );\r\n\r\n            video.addEventListener(\r\n                \"progress\",\r\n                updateSeekBar\r\n            );\r\n\r\n            video.addEventListener(\r\n                \"seeking\",\r\n                updateSeekBar\r\n            );\r\n\r\n            video.addEventListener(\r\n                \"seeked\",\r\n                updateSeekBar\r\n            );\r\n\r\nvideo.addEventListener(\r\n\r\n                \"play\",\r\n\r\n                updatePauseLabel\r\n\r\n            );\r\n\r\n            video.addEventListener(\r\n\r\n                \"pause\",\r\n\r\n                updatePauseLabel\r\n\r\n            );\r\n\r\n            video.addEventListener(\r\n\r\n                \"waiting\",\r\n\r\n                () => {\r\n\r\n                    component.classList.add(\r\n\r\n                        \"is-loading\"\r\n\r\n                    );\r\n\r\n                }\r\n\r\n            );\r\n\r\n            video.addEventListener(\r\n\r\n                \"timeupdate\",\r\n\r\n                () => {\r\n\r\n                    updateSeekBar();\r\n\r\n                    if (\r\n\r\n                        !currentPlayback ||\r\n\r\n                        currentPlayback.skipAfter === null\r\n\r\n                    ) {\r\n\r\n                        return;\r\n\r\n                    }\r\n\r\n                    if (\r\n\r\n                        skipButton &&\r\n\r\n                        video.currentTime >=\r\n\r\n                        currentPlayback.skipAfter\r\n\r\n                    ) {\r\n\r\n                        skipButton.hidden = false;\r\n\r\n                    }\r\n\r\n                }\r\n\r\n            );\r\n\r\n            video.addEventListener(\r\n\r\n                \"ended\",\r\n\r\n                () => {\r\n\r\n                    if (!currentPlayback) return;\r\n\r\n                    goToPlaybackTarget({\r\n\r\n                        skipped: false\r\n\r\n                    });\r\n\r\n                }\r\n\r\n            );\r\n\r\n            video.addEventListener(\r\n\r\n                \"error\",\r\n\r\n                () => {\r\n\r\n                    component.classList.remove(\r\n\r\n                        \"is-loading\"\r\n\r\n                    );\r\n\r\n                    showStatus(\r\n\r\n                        \"N\u00e3o foi poss\u00edvel carregar este v\u00eddeo.\"\r\n\r\n                    );\r\n\r\n                }\r\n\r\n            );\r\n\r\n            showStage(\r\n\r\n                startStage,\r\n\r\n                { pushHistory: false }\r\n\r\n            );\r\n\r\n        }\r\n\r\n        function init(scope = document) {\r\n\r\n            const components = [];\r\n\r\n            if (scope.matches?.(SELECTOR)) {\r\n\r\n                components.push(scope);\r\n\r\n            }\r\n\r\n            components.push(\r\n\r\n                ...(\r\n\r\n                    scope.querySelectorAll?.(\r\n\r\n                        SELECTOR\r\n\r\n                    ) || []\r\n\r\n                )\r\n\r\n            );\r\n\r\n            components.forEach(initializeOne);\r\n\r\n        }\r\n\r\n        window.D15VideoFlow = { init };\r\n\r\n        \/* Elementor: hook criado somente uma vez. *\/\r\n\r\n        window.addEventListener(\r\n\r\n            \"elementor\/frontend\/init\",\r\n\r\n            () => {\r\n\r\n                if (!window.elementorFrontend?.hooks) {\r\n\r\n                    return;\r\n\r\n                }\r\n\r\n                window.elementorFrontend.hooks.addAction(\r\n\r\n                    \"frontend\/element_ready\/html.default\",\r\n\r\n                    ($scope) => {\r\n\r\n                        window.D15VideoFlow.init(\r\n\r\n                            $scope[0]\r\n\r\n                        );\r\n\r\n                    }\r\n\r\n                );\r\n\r\n            },\r\n\r\n            { once: true }\r\n\r\n        );\r\n\r\n    }\r\n\r\n    function start() {\r\n\r\n        window.D15VideoFlow.init(document);\r\n\r\n    }\r\n\r\n    if (document.readyState === \"loading\") {\r\n\r\n        document.addEventListener(\r\n\r\n            \"DOMContentLoaded\",\r\n\r\n            start,\r\n\r\n            { once: true }\r\n\r\n        );\r\n\r\n    } else {\r\n\r\n        start();\r\n\r\n    }\r\n\r\n})();\r\n\r\n<\/script>\r\n\r\n<script>\r\n(() => {\r\n    const COMPONENT_SELECTOR =\r\n        \".d15-video-flow\";\r\n\r\n\r\n    function formatTime(seconds) {\r\n        const safe =\r\n            Number.isFinite(seconds)\r\n                ? Math.max(0, seconds)\r\n                : 0;\r\n\r\n        const minutes =\r\n            Math.floor(\r\n                safe \/ 60\r\n            );\r\n\r\n        const secs =\r\n            Math.floor(\r\n                safe % 60\r\n            );\r\n\r\n        return (\r\n            minutes +\r\n            \":\" +\r\n            String(secs)\r\n                .padStart(2, \"0\")\r\n        );\r\n    }\r\n\r\n\r\n    function initSeekPatch(component) {\r\n        if (\r\n            !component ||\r\n            component.dataset\r\n                .d15SeekPatchInitialized ===\r\n                \"true\"\r\n        ) {\r\n            return;\r\n        }\r\n\r\n\r\n        const video =\r\n            component.querySelector(\r\n                \".d15-video-flow__video\"\r\n            );\r\n\r\n        const range =\r\n            component.querySelector(\r\n                \".d15-video-flow__seek-input\"\r\n            );\r\n\r\n        const currentLabel =\r\n            component.querySelector(\r\n                \".d15-video-flow__seek-current\"\r\n            );\r\n\r\n        const durationLabel =\r\n            component.querySelector(\r\n                \".d15-video-flow__seek-duration\"\r\n            );\r\n\r\n\r\n        if (\r\n            !video ||\r\n            !range\r\n        ) {\r\n            return;\r\n        }\r\n\r\n\r\n        component.dataset\r\n            .d15SeekPatchInitialized =\r\n            \"true\";\r\n\r\n\r\n        let userIsDragging =\r\n            false;\r\n\r\n        let rafId =\r\n            null;\r\n\r\n        let probeOriginalTime =\r\n            null;\r\n\r\n\r\n        function getDuration() {\r\n            if (\r\n                Number.isFinite(\r\n                    video.duration\r\n                ) &&\r\n                video.duration > 0 &&\r\n                video.duration !== Infinity\r\n            ) {\r\n                return video.duration;\r\n            }\r\n\r\n\r\n            if (\r\n                video.seekable &&\r\n                video.seekable.length\r\n            ) {\r\n                const last =\r\n                    video.seekable.length - 1;\r\n\r\n                const end =\r\n                    video.seekable.end(\r\n                        last\r\n                    );\r\n\r\n                if (\r\n                    Number.isFinite(end) &&\r\n                    end > 0\r\n                ) {\r\n                    return end;\r\n                }\r\n            }\r\n\r\n\r\n            if (\r\n                video.buffered &&\r\n                video.buffered.length\r\n            ) {\r\n                const last =\r\n                    video.buffered.length - 1;\r\n\r\n                const end =\r\n                    video.buffered.end(\r\n                        last\r\n                    );\r\n\r\n                if (\r\n                    Number.isFinite(end) &&\r\n                    end > 0\r\n                ) {\r\n                    return end;\r\n                }\r\n            }\r\n\r\n\r\n            return 0;\r\n        }\r\n\r\n\r\n        function renderSeek() {\r\n            const duration =\r\n                getDuration();\r\n\r\n            const current =\r\n                Number.isFinite(\r\n                    video.currentTime\r\n                )\r\n                    ? Math.max(\r\n                        0,\r\n                        video.currentTime\r\n                    )\r\n                    : 0;\r\n\r\n\r\n            if (\r\n                duration > 0\r\n            ) {\r\n                range.min =\r\n                    \"0\";\r\n\r\n                range.max =\r\n                    String(\r\n                        duration\r\n                    );\r\n\r\n                range.step =\r\n                    \"0.05\";\r\n\r\n                range.disabled =\r\n                    false;\r\n\r\n\r\n                if (\r\n                    !userIsDragging\r\n                ) {\r\n                    range.value =\r\n                        String(\r\n                            Math.min(\r\n                                current,\r\n                                duration\r\n                            )\r\n                        );\r\n                }\r\n\r\n\r\n                range.setAttribute(\r\n                    \"aria-valuemin\",\r\n                    \"0\"\r\n                );\r\n\r\n                range.setAttribute(\r\n                    \"aria-valuemax\",\r\n                    String(\r\n                        duration\r\n                    )\r\n                );\r\n\r\n                range.setAttribute(\r\n                    \"aria-valuenow\",\r\n                    String(\r\n                        current\r\n                    )\r\n                );\r\n\r\n\r\n                if (\r\n                    durationLabel\r\n                ) {\r\n                    durationLabel\r\n                        .textContent =\r\n                        formatTime(\r\n                            duration\r\n                        );\r\n                }\r\n\r\n            } else {\r\n                \/*\r\n                 * Mant\u00e9m a barra ativa visualmente,\r\n                 * mesmo antes de o navegador informar\r\n                 * a dura\u00e7\u00e3o real.\r\n                 *\/\r\n                range.min =\r\n                    \"0\";\r\n\r\n                range.max =\r\n                    \"100\";\r\n\r\n                range.step =\r\n                    \"0.1\";\r\n\r\n                range.disabled =\r\n                    false;\r\n\r\n\r\n                if (\r\n                    !userIsDragging\r\n                ) {\r\n                    range.value =\r\n                        \"0\";\r\n                }\r\n\r\n\r\n                if (\r\n                    durationLabel\r\n                ) {\r\n                    durationLabel\r\n                        .textContent =\r\n                        \"0:00\";\r\n                }\r\n            }\r\n\r\n\r\n            if (\r\n                currentLabel\r\n            ) {\r\n                currentLabel\r\n                    .textContent =\r\n                    formatTime(\r\n                        current\r\n                    );\r\n            }\r\n        }\r\n\r\n\r\n        \/*\r\n         * Alguns MP4s podem entregar duration = Infinity.\r\n         * Este probe for\u00e7a o browser a resolver a dura\u00e7\u00e3o.\r\n         *\/\r\n        function probeDuration() {\r\n            if (\r\n                video.duration !==\r\n                    Infinity\r\n            ) {\r\n                return;\r\n            }\r\n\r\n\r\n            if (\r\n                probeOriginalTime !==\r\n                    null\r\n            ) {\r\n                return;\r\n            }\r\n\r\n\r\n            probeOriginalTime =\r\n                Number.isFinite(\r\n                    video.currentTime\r\n                )\r\n                    ? video.currentTime\r\n                    : 0;\r\n\r\n\r\n            try {\r\n                video.currentTime =\r\n                    1e101;\r\n            } catch (_) {\r\n                probeOriginalTime =\r\n                    null;\r\n            }\r\n        }\r\n\r\n\r\n        function restoreAfterProbe() {\r\n            if (\r\n                probeOriginalTime ===\r\n                    null\r\n            ) {\r\n                return;\r\n            }\r\n\r\n\r\n            if (\r\n                Number.isFinite(\r\n                    video.duration\r\n                ) &&\r\n                video.duration > 0 &&\r\n                video.duration !== Infinity\r\n            ) {\r\n                const oldTime =\r\n                    probeOriginalTime;\r\n\r\n                probeOriginalTime =\r\n                    null;\r\n\r\n\r\n                try {\r\n                    video.currentTime =\r\n                        Math.min(\r\n                            oldTime,\r\n                            video.duration\r\n                        );\r\n                } catch (_) {}\r\n\r\n\r\n                renderSeek();\r\n            }\r\n        }\r\n\r\n\r\n        function seekToRangeValue() {\r\n            const duration =\r\n                getDuration();\r\n\r\n            if (\r\n                duration <= 0\r\n            ) {\r\n                renderSeek();\r\n                return;\r\n            }\r\n\r\n\r\n            const target =\r\n                Number(\r\n                    range.value\r\n                );\r\n\r\n\r\n            if (\r\n                !Number.isFinite(\r\n                    target\r\n                )\r\n            ) {\r\n                return;\r\n            }\r\n\r\n\r\n            try {\r\n                video.currentTime =\r\n                    Math.min(\r\n                        duration,\r\n                        Math.max(\r\n                            0,\r\n                            target\r\n                        )\r\n                    );\r\n            } catch (_) {}\r\n\r\n\r\n            renderSeek();\r\n        }\r\n\r\n\r\n        function animationLoop() {\r\n            renderSeek();\r\n\r\n\r\n            if (\r\n                !video.paused &&\r\n                !video.ended\r\n            ) {\r\n                rafId =\r\n                    window\r\n                        .requestAnimationFrame(\r\n                            animationLoop\r\n                        );\r\n            } else {\r\n                rafId =\r\n                    null;\r\n            }\r\n        }\r\n\r\n\r\n        function startLoop() {\r\n            if (\r\n                rafId !==\r\n                    null\r\n            ) {\r\n                return;\r\n            }\r\n\r\n\r\n            rafId =\r\n                window\r\n                    .requestAnimationFrame(\r\n                        animationLoop\r\n                    );\r\n        }\r\n\r\n\r\n        function stopLoop() {\r\n            if (\r\n                rafId !==\r\n                    null\r\n            ) {\r\n                window\r\n                    .cancelAnimationFrame(\r\n                        rafId\r\n                    );\r\n\r\n                rafId =\r\n                    null;\r\n            }\r\n\r\n\r\n            renderSeek();\r\n        }\r\n\r\n\r\n        range.addEventListener(\r\n            \"pointerdown\",\r\n            () => {\r\n                userIsDragging =\r\n                    true;\r\n            }\r\n        );\r\n\r\n\r\n        range.addEventListener(\r\n            \"input\",\r\n            () => {\r\n                userIsDragging =\r\n                    true;\r\n\r\n                seekToRangeValue();\r\n            }\r\n        );\r\n\r\n\r\n        range.addEventListener(\r\n            \"change\",\r\n            () => {\r\n                seekToRangeValue();\r\n\r\n                userIsDragging =\r\n                    false;\r\n\r\n                renderSeek();\r\n            }\r\n        );\r\n\r\n\r\n        range.addEventListener(\r\n            \"pointerup\",\r\n            () => {\r\n                seekToRangeValue();\r\n\r\n                userIsDragging =\r\n                    false;\r\n\r\n                renderSeek();\r\n            }\r\n        );\r\n\r\n\r\n        range.addEventListener(\r\n            \"keyup\",\r\n            () => {\r\n                seekToRangeValue();\r\n\r\n                userIsDragging =\r\n                    false;\r\n\r\n                renderSeek();\r\n            }\r\n        );\r\n\r\n\r\n        [\r\n            \"loadedmetadata\",\r\n            \"loadeddata\",\r\n            \"durationchange\",\r\n            \"canplay\",\r\n            \"canplaythrough\",\r\n            \"progress\",\r\n            \"timeupdate\",\r\n            \"seeking\",\r\n            \"seeked\"\r\n        ].forEach(\r\n            eventName => {\r\n                video.addEventListener(\r\n                    eventName,\r\n                    () => {\r\n                        probeDuration();\r\n                        restoreAfterProbe();\r\n                        renderSeek();\r\n                    }\r\n                );\r\n            }\r\n        );\r\n\r\n\r\n        video.addEventListener(\r\n            \"play\",\r\n            () => {\r\n                probeDuration();\r\n                restoreAfterProbe();\r\n                renderSeek();\r\n                startLoop();\r\n            }\r\n        );\r\n\r\n\r\n        video.addEventListener(\r\n            \"playing\",\r\n            () => {\r\n                probeDuration();\r\n                restoreAfterProbe();\r\n                renderSeek();\r\n                startLoop();\r\n            }\r\n        );\r\n\r\n\r\n        video.addEventListener(\r\n            \"pause\",\r\n            stopLoop\r\n        );\r\n\r\n\r\n        video.addEventListener(\r\n            \"ended\",\r\n            stopLoop\r\n        );\r\n\r\n\r\n        \/*\r\n         * O c\u00f3digo principal troca video.src dinamicamente.\r\n         * Observamos isso para reiniciar a barra.\r\n         *\/\r\n        const srcObserver =\r\n            new MutationObserver(\r\n                mutations => {\r\n                    const changed =\r\n                        mutations.some(\r\n                            mutation =>\r\n                                mutation.attributeName ===\r\n                                \"src\"\r\n                        );\r\n\r\n\r\n                    if (\r\n                        !changed\r\n                    ) {\r\n                        return;\r\n                    }\r\n\r\n\r\n                    userIsDragging =\r\n                        false;\r\n\r\n                    probeOriginalTime =\r\n                        null;\r\n\r\n                    range.value =\r\n                        \"0\";\r\n\r\n\r\n                    if (\r\n                        currentLabel\r\n                    ) {\r\n                        currentLabel\r\n                            .textContent =\r\n                            \"0:00\";\r\n                    }\r\n\r\n\r\n                    if (\r\n                        durationLabel\r\n                    ) {\r\n                        durationLabel\r\n                            .textContent =\r\n                            \"0:00\";\r\n                    }\r\n\r\n\r\n                    [\r\n                        0,\r\n                        100,\r\n                        300,\r\n                        700,\r\n                        1500\r\n                    ].forEach(\r\n                        delay => {\r\n                            window.setTimeout(\r\n                                () => {\r\n                                    probeDuration();\r\n                                    restoreAfterProbe();\r\n                                    renderSeek();\r\n                                },\r\n                                delay\r\n                            );\r\n                        }\r\n                    );\r\n                }\r\n            );\r\n\r\n\r\n        srcObserver.observe(\r\n            video,\r\n            {\r\n                attributes:\r\n                    true,\r\n                attributeFilter:\r\n                    [\r\n                        \"src\"\r\n                    ]\r\n            }\r\n        );\r\n\r\n\r\n        renderSeek();\r\n\r\n\r\n        [\r\n            100,\r\n            300,\r\n            700,\r\n            1500\r\n        ].forEach(\r\n            delay => {\r\n                window.setTimeout(\r\n                    () => {\r\n                        probeDuration();\r\n                        restoreAfterProbe();\r\n                        renderSeek();\r\n                    },\r\n                    delay\r\n                );\r\n            }\r\n        );\r\n    }\r\n\r\n\r\n    function initAll(\r\n        scope = document\r\n    ) {\r\n        const components =\r\n            [];\r\n\r\n\r\n        if (\r\n            scope.matches?.(\r\n                COMPONENT_SELECTOR\r\n            )\r\n        ) {\r\n            components.push(\r\n                scope\r\n            );\r\n        }\r\n\r\n\r\n        components.push(\r\n            ...(\r\n                scope\r\n                    .querySelectorAll?.(\r\n                        COMPONENT_SELECTOR\r\n                    ) ||\r\n                []\r\n            )\r\n        );\r\n\r\n\r\n        components.forEach(\r\n            initSeekPatch\r\n        );\r\n    }\r\n\r\n\r\n    function start() {\r\n        initAll(\r\n            document\r\n        );\r\n    }\r\n\r\n\r\n    if (\r\n        document.readyState ===\r\n        \"loading\"\r\n    ) {\r\n        document.addEventListener(\r\n            \"DOMContentLoaded\",\r\n            start,\r\n            {\r\n                once:\r\n                    true\r\n            }\r\n        );\r\n    } else {\r\n        start();\r\n    }\r\n\r\n\r\n    \/*\r\n     * Compatibilidade com widgets HTML do Elementor.\r\n     *\/\r\n    window.addEventListener(\r\n        \"elementor\/frontend\/init\",\r\n        () => {\r\n            if (\r\n                !window\r\n                    .elementorFrontend\r\n                    ?.hooks\r\n            ) {\r\n                return;\r\n            }\r\n\r\n\r\n            window\r\n                .elementorFrontend\r\n                .hooks\r\n                .addAction(\r\n                    \"frontend\/element_ready\/html.default\",\r\n                    $scope => {\r\n                        initAll(\r\n                            $scope[0]\r\n                        );\r\n                    }\r\n                );\r\n        },\r\n        {\r\n            once:\r\n                true\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<\/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<div class=\"elementor-element elementor-element-4d5da22 elementor-widget elementor-widget-template\" data-id=\"4d5da22\" 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=\"48031\" class=\"elementor elementor-48031\" data-elementor-post-type=\"elementor_library\">\n\t\t\t<div class=\"elementor-element elementor-element-f34b6ff e-flex e-con-boxed e-con e-parent\" data-id=\"f34b6ff\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-68489f3 e-con-full e-flex e-con e-child\" data-id=\"68489f3\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-1307260 e-con-full e-flex e-con e-child\" data-id=\"1307260\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-09743ad e-con-full e-flex e-con e-child\" data-id=\"09743ad\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f5710ec elementor-widget elementor-widget-text-editor\" data-id=\"f5710ec\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Voc\u00ea viu que, de modo geral, o tratamento da Maria deve considerar:\u00a0<\/span><\/p><ul><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">O controle da doen\u00e7a oncol\u00f3gica;\u00a0<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Os riscos do tratamento;<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">O estado emocional;<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">O estado nutricional;<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Os riscos decorrentes das barreiras de acesso;<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">O tabagismo;<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">O sedentarismo.<\/span><\/li><\/ul>\t\t\t\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<\/div>\n\t\t<div class=\"elementor-element elementor-element-46baca8 e-con-full e-flex elementor-invisible e-con e-child\" data-id=\"46baca8\" data-element_type=\"container\" id=\"linhas-cuidado\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;animation&quot;:&quot;fadeInDown&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1d1a7f7 elementor-widget__width-initial premium-lottie-svg elementor-widget elementor-widget-premium-lottie\" data-id=\"1d1a7f7\" data-element_type=\"widget\" data-settings=\"{&quot;lottie_file&quot;:{&quot;url&quot;:&quot;https:\\\/\\\/cursos1.nead.conasems.org.br\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/opd-1.json&quot;,&quot;id&quot;:45330,&quot;size&quot;:&quot;&quot;,&quot;alt&quot;:&quot;&quot;,&quot;source&quot;:&quot;library&quot;}}\" data-widget_type=\"premium-lottie.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\r\n\t\t<div class=\"premium-lottie-animation\" data-lottie-url=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/opd-1.json\" data-lottie-loop=\"true\" data-lottie-reverse=\"\" data-lottie-hover=\"\" data-lottie-speed=\"1\" data-lottie-render=\"svg\" data-lottie-delay=\"\">\r\n\t\t\t\t\t<\/div>\r\n\r\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-175d7a1 elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"175d7a1\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Conhecendo o hist\u00f3rico cl\u00ednico e de vida da paciente, voc\u00ea est\u00e1 apto a identificar problemas e condi\u00e7\u00f5es avaliadas, al\u00e9m de apontar necessidades que considera priorit\u00e1rias para Maria. Aproveite para realizar as anota\u00e7\u00f5es nas <\/span><b>se\u00e7\u00f5es 4 e 5<\/b><span style=\"font-weight: 400;\">.\u00a0<\/span><\/p>\t\t\t\t\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<div class=\"elementor-element elementor-element-75af119 e-flex e-con-boxed e-con e-parent\" data-id=\"75af119\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-3871bdc e-con-full e-flex e-con e-child\" data-id=\"3871bdc\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7e42ccb elementor-widget elementor-widget-image\" data-id=\"7e42ccb\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"782\" height=\"782\" src=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/10\/CuidadoCasoClinico15-T10-Icon.webp\" class=\"attachment-large size-large wp-image-48040\" alt=\"\" srcset=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/10\/CuidadoCasoClinico15-T10-Icon.webp 782w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/10\/CuidadoCasoClinico15-T10-Icon-300x300.webp 300w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/10\/CuidadoCasoClinico15-T10-Icon-150x150.webp 150w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/10\/CuidadoCasoClinico15-T10-Icon-768x768.webp 768w\" sizes=\"(max-width: 782px) 100vw, 782px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9238db0 e-con-full e-flex e-con e-child\" data-id=\"9238db0\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fc6a159 elementor-widget elementor-widget-text-editor\" data-id=\"fc6a159\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Pensando no atendimento integral \u00e0 sa\u00fade de Maria, reflita sobre quais s\u00e3o os <\/span><b>profissionais <\/b><span style=\"font-weight: 400;\">da Equipe de Sa\u00fade da Fam\u00edlia (<\/span><b>APS<\/b><span style=\"font-weight: 400;\">), da <\/span><b>eMulti <\/b><span style=\"font-weight: 400;\">e da Rede de Aten\u00e7\u00e3o \u00e0 Sa\u00fade (<\/span><b>RAS<\/b><span style=\"font-weight: 400;\">) que precisam se unir para montar o <\/span><b>Plano de Cuidado Compartilhado <\/b><span style=\"font-weight: 400;\">dela, considerando todos os problemas e condi\u00e7\u00f5es que identificamos no caso.<\/span><\/p><p><span style=\"font-weight: 400;\">A seguir, relembre os pilares da elabora\u00e7\u00e3o do Plano de Cuidado Compartilhado; na sequ\u00eancia, voc\u00ea ser\u00e1 direcionado a, efetivamente, elaborar o plano.\u00a0<\/span><\/p>\t\t\t\t\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>\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<div class=\"elementor-element elementor-element-eced63b elementor-widget elementor-widget-template\" data-id=\"eced63b\" 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=\"48045\" class=\"elementor elementor-48045\" data-elementor-post-type=\"elementor_library\">\n\t\t\t<div class=\"elementor-element elementor-element-6428739 e-con-full e-flex e-con e-parent\" data-id=\"6428739\" data-element_type=\"container\" id=\"plano-de-cuidado\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-bee8bee e-con-full e-flex e-con e-child\" data-id=\"bee8bee\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d0b4d16 elementor-widget elementor-widget-heading\" data-id=\"d0b4d16\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Orienta\u00e7\u00f5es sobre a elabora\u00e7\u00e3o do Plano de Cuidado Compartilhado \n<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7df7051 elementor-widget elementor-widget-text-editor\" data-id=\"7df7051\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">O <\/span><b>Plano de Cuidado Compartilhado<\/b><span style=\"font-weight: 400;\"> \u00e9 uma estrat\u00e9gia de organiza\u00e7\u00e3o do cuidado em sa\u00fade que envolve a <\/span><b>constru\u00e7\u00e3o conjunta<\/b><span style=\"font-weight: 400;\"> de <\/span><b>a\u00e7\u00f5es<\/b><span style=\"font-weight: 400;\">, <\/span><b>metas <\/b><span style=\"font-weight: 400;\">e <\/span><b>responsabilidades <\/b><span style=\"font-weight: 400;\">entre diferentes <\/span><b>profissionais<\/b><span style=\"font-weight: 400;\">, o <\/span><b>usu\u00e1rio <\/b><span style=\"font-weight: 400;\">e, quando poss\u00edvel, sua <\/span><b>fam\u00edlia <\/b><span style=\"font-weight: 400;\">ou <\/span><b>rede de apoio<\/b><span style=\"font-weight: 400;\">.<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-fea546e e-grid e-con-full e-con e-child\" data-id=\"fea546e\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f04c3ea elementor-widget__width-inherit premium-lq__none elementor-widget elementor-widget-premium-addon-button\" data-id=\"f04c3ea\" data-element_type=\"widget\" data-widget_type=\"premium-addon-button.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\r\n\r\n\t\t<a class=\"premium-button premium-button-none premium-btn-block premium-button-none\" href=\"#tela12\">\r\n\t\t\t<div class=\"premium-button-text-icon-wrapper\">\r\n\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t<span >\r\n\t\t\t\t\t\tCome\u00e7ar\t\t\t\t\t<\/span>\r\n\t\t\t\t\t\t\t<\/div>\r\n\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t<\/a>\r\n\r\n\r\n\t\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<\/div>\n\t\t<div class=\"elementor-element elementor-element-eb79764 e-flex e-con-boxed e-con e-parent\" data-id=\"eb79764\" data-element_type=\"container\" id=\"tela12\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-dce290c elementor-widget elementor-widget-text-editor\" data-id=\"dce290c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">O Plano de Cuidado Compartilhado deve seguir estas etapas:<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-94bb5cd e-con-full e-flex e-con e-child\" data-id=\"94bb5cd\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-1a95910 e-con-full e-flex elementor-invisible e-con e-child\" data-id=\"1a95910\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;animation&quot;:&quot;fadeInLeft&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-dc3b915 elementor-widget__width-initial elementor-widget elementor-widget-image\" data-id=\"dc3b915\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"683\" height=\"1024\" src=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/Group-14-3-683x1024.png\" class=\"attachment-large size-large wp-image-46474\" alt=\"\" srcset=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/Group-14-3-683x1024.png 683w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/Group-14-3-200x300.png 200w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/Group-14-3-768x1152.png 768w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/Group-14-3.png 1000w\" sizes=\"(max-width: 683px) 100vw, 683px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-8e17e37 e-con-full e-flex e-con e-child\" data-id=\"8e17e37\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5efab4c elementor-widget elementor-widget-text-editor\" data-id=\"5efab4c\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><b>Discuss\u00e3o do caso (reuni\u00e3o compartilhada)<\/b><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-2b7a094 elementor-widget elementor-widget-text-editor\" data-id=\"2b7a094\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">A equipe de refer\u00eancia (da UBS, por exemplo) apresenta o caso e convida outros profissionais (como da equipe eMulti, do CAPS, do CRAS ou especialistas) para constru\u00edrem o plano em conjunto.<\/span><\/p>\t\t\t\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<div class=\"elementor-element elementor-element-cdf830d e-con-full e-flex elementor-invisible e-con e-child\" data-id=\"cdf830d\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;animation&quot;:&quot;fadeInLeft&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-92d67b0 elementor-widget__width-initial elementor-widget elementor-widget-image\" data-id=\"92d67b0\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"683\" height=\"1024\" src=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/Group-15-2-683x1024.png\" class=\"attachment-large size-large wp-image-46475\" alt=\"\" srcset=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/Group-15-2-683x1024.png 683w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/Group-15-2-200x300.png 200w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/Group-15-2-768x1152.png 768w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/Group-15-2.png 1000w\" sizes=\"(max-width: 683px) 100vw, 683px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-932db1a e-con-full e-flex e-con e-child\" data-id=\"932db1a\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-80a8852 elementor-widget elementor-widget-text-editor\" data-id=\"80a8852\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><b>Constru\u00e7\u00e3o conjunta do plano<\/b><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-12eecb1 elementor-widget elementor-widget-text-editor\" data-id=\"12eecb1\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">S\u00e3o definidos: a) as <\/span><b>necessidades priorit\u00e1rias<\/b><span style=\"font-weight: 400;\"> do paciente; b) os <\/span><b>objetivos de cuidado<\/b><span style=\"font-weight: 400;\">; c) as <\/span><b>a\u00e7\u00f5es espec\u00edficas<\/b><span style=\"font-weight: 400;\"> de <\/span><b>cada profissional<\/b><span style=\"font-weight: 400;\"> ou servi\u00e7o; d) as formas de comunica\u00e7\u00e3o e de <\/span><b>acompanhamento<\/b><span style=\"font-weight: 400;\"> entre as equipes.<\/span><\/p>\t\t\t\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<div class=\"elementor-element elementor-element-4f559ce e-con-full e-flex elementor-invisible e-con e-child\" data-id=\"4f559ce\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;animation&quot;:&quot;fadeInLeft&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9242cef elementor-widget__width-initial elementor-widget elementor-widget-image\" data-id=\"9242cef\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"683\" height=\"1024\" src=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/Group-16-2-683x1024.png\" class=\"attachment-large size-large wp-image-46476\" alt=\"\" srcset=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/Group-16-2-683x1024.png 683w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/Group-16-2-200x300.png 200w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/Group-16-2-768x1152.png 768w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/Group-16-2.png 1000w\" sizes=\"(max-width: 683px) 100vw, 683px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b6fe380 e-con-full e-flex e-con e-child\" data-id=\"b6fe380\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-98f715b elementor-widget elementor-widget-text-editor\" data-id=\"98f715b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><b>Acompanhamento compartilhado<\/b><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dcfd1ee elementor-widget elementor-widget-text-editor\" data-id=\"dcfd1ee\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Cada parte assume <\/span><b>responsabilidades <\/b><span style=\"font-weight: 400;\">complementares e <\/span><b>compartilha <\/b><span style=\"font-weight: 400;\">informa\u00e7\u00f5es sobre a <\/span><b>evolu\u00e7\u00e3o <\/b><span style=\"font-weight: 400;\">do caso.<\/span><\/p>\t\t\t\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<div class=\"elementor-element elementor-element-c1168e2 e-con-full e-flex elementor-invisible e-con e-child\" data-id=\"c1168e2\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;animation&quot;:&quot;fadeInLeft&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1adfcd7 elementor-widget__width-initial elementor-widget elementor-widget-image\" data-id=\"1adfcd7\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"683\" height=\"1024\" src=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/Group-17-3-683x1024.png\" class=\"attachment-large size-large wp-image-46473\" alt=\"\" srcset=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/Group-17-3-683x1024.png 683w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/Group-17-3-200x300.png 200w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/Group-17-3-768x1152.png 768w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/Group-17-3.png 1000w\" sizes=\"(max-width: 683px) 100vw, 683px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-10b8acb e-con-full e-flex e-con e-child\" data-id=\"10b8acb\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3919dd2 elementor-widget elementor-widget-text-editor\" data-id=\"3919dd2\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><b>Avalia\u00e7\u00e3o peri\u00f3dica\u00a0<\/b><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8d00e9d elementor-widget elementor-widget-text-editor\" data-id=\"8d00e9d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">O plano \u00e9 <\/span><b>reavaliado coletivamente<\/b><span style=\"font-weight: 400;\">, ajustando-se conforme os resultados e novas demandas.<\/span><\/p>\t\t\t\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<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9a2e3f3 e-con-full e-flex e-con e-parent\" data-id=\"9a2e3f3\" data-element_type=\"container\" id=\"executando-etapas-plano\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-230e1d4 e-con-full e-flex e-con e-child\" data-id=\"230e1d4\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d55431a elementor-widget elementor-widget-text-editor\" data-id=\"d55431a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Executando as etapas do plano <\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-92a5a06 elementor-widget elementor-widget-text-editor\" data-id=\"92a5a06\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">At\u00e9 aqui, voc\u00ea conheceu a Maria, sua hist\u00f3ria de vida e hist\u00f3rico cl\u00ednico. Agora, este \u00e9 o momento de analisar as necessidades priorit\u00e1rias da paciente.\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">Sugerimos que voc\u00ea <\/span><b>discuta com os profissionais da sua UBS <\/b><span style=\"font-weight: 400;\">(que seriam envolvidos neste caso) sobre as a\u00e7\u00f5es a serem desenvolvidas para Maria em sua linha de cuidado.\u00a0\u00a0<\/span><\/p><p><span style=\"font-weight: 400;\">Veja, a seguir, quais pontos precisam ser <\/span><b>discutidos.<\/b><\/p>\t\t\t\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<div class=\"elementor-element elementor-element-74c51a0 e-flex e-con-boxed e-con e-parent\" data-id=\"74c51a0\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-26c0aee elementor-widget elementor-widget-text-editor\" data-id=\"26c0aee\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><b>Clique nas abas para visualizar.<\/b><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6bb3ac9 e-n-tabs-mobile elementor-widget elementor-widget-n-tabs\" data-id=\"6bb3ac9\" data-element_type=\"widget\" data-settings=\"{&quot;tabs_justify_horizontal&quot;:&quot;stretch&quot;,&quot;horizontal_scroll&quot;:&quot;disable&quot;}\" data-widget_type=\"nested-tabs.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"e-n-tabs\" data-widget-number=\"112933577\" aria-label=\"Tabs. Open items with Enter or Space, close with Escape and navigate using the Arrow keys.\">\n\t\t\t<div class=\"e-n-tabs-heading\" role=\"tablist\">\n\t\t\t\t\t<button id=\"e-n-tab-title-1129335771\" data-tab-title-id=\"e-n-tab-title-1129335771\" class=\"e-n-tab-title\" aria-selected=\"true\" data-tab-index=\"1\" role=\"tab\" tabindex=\"0\" aria-controls=\"e-n-tab-content-1129335771\" style=\"--n-tabs-title-order: 1;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tPlanejamento do Cuidado\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t<button id=\"e-n-tab-title-1129335772\" data-tab-title-id=\"e-n-tab-title-1129335772\" class=\"e-n-tab-title\" aria-selected=\"false\" data-tab-index=\"2\" role=\"tab\" tabindex=\"-1\" aria-controls=\"e-n-tab-content-1129335772\" style=\"--n-tabs-title-order: 2;\">\n\t\t\t\t\t\t<span class=\"e-n-tab-title-text\">\n\t\t\t\tPlano de Autocuidado\t\t\t<\/span>\n\t\t<\/button>\n\t\t\t\t\t<\/div>\n\t\t\t<div class=\"e-n-tabs-content\">\n\t\t\t\t<div id=\"e-n-tab-content-1129335771\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-1129335771\" data-tab-index=\"1\" style=\"--n-tabs-title-order: 1;\" class=\"e-active elementor-element elementor-element-0b95fa5 e-con-full e-flex e-con e-child\" data-id=\"0b95fa5\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-5045df8 e-con-full e-flex e-con e-child\" data-id=\"5045df8\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-770a6db elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"770a6db\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">interven\u00e7\u00f5es necess\u00e1rias para os problemas e as condi\u00e7\u00f5es avaliadas;\u00a0<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">ofertas e recursos necess\u00e1rios;<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">metas e prazos;<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">respons\u00e1veis;<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">informa\u00e7\u00f5es sobre monitoramento;<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">informa\u00e7\u00f5es sobre avalia\u00e7\u00e3o e revis\u00e3o.<\/span><\/li><\/ul>\t\t\t\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<div id=\"e-n-tab-content-1129335772\" role=\"tabpanel\" aria-labelledby=\"e-n-tab-title-1129335772\" data-tab-index=\"2\" style=\"--n-tabs-title-order: 2;\" class=\" elementor-element elementor-element-741bfa5 e-con-full e-flex e-con e-child\" data-id=\"741bfa5\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-daf627b e-con-full e-flex e-con e-child\" data-id=\"daf627b\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-db1acee elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"db1acee\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<ul><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">a\u00e7\u00f5es de autocuidado do paciente;\u00a0<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">frequ\u00eancia\/metas;\u00a0<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">respons\u00e1veis;<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">monitoramento;<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">reavalia\u00e7\u00e3o etc.\u00a0<\/span><\/li><\/ul><p><span style=\"font-weight: 400;\">Considere dimens\u00f5es como alimenta\u00e7\u00e3o, medica\u00e7\u00e3o, atividade f\u00edsica, sono e descanso, sa\u00fade mental, depend\u00eancia de subst\u00e2ncias (\u00e1lcool, cigarro, entorpecentes).\u00a0<\/span><\/p>\t\t\t\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<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-75b0f89 e-con-full e-flex elementor-invisible e-con e-child\" data-id=\"75b0f89\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;animation&quot;:&quot;fadeInDown&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-dfb0dbd elementor-widget__width-inherit elementor-widget elementor-widget-text-editor\" data-id=\"dfb0dbd\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><b>Anote as decis\u00f5es\/dire\u00e7\u00f5es<\/b><span style=\"font-weight: 400;\"> alinhadas com os outros profissionais.\u00a0<\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d9c260b elementor-widget elementor-widget-text-editor\" data-id=\"d9c260b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Para facilitar esse processo colaborativo, utilize o <\/span><b>Modelo do Plano de Cuidado Compartilhado<\/b><span style=\"font-weight: 400;\"> visto na Disciplina 6. <\/span><span style=\"color: #213b74;\"><a style=\"color: #213b74;\" href=\"https:\/\/dfcsy40fyc0pq.cloudfront.net\/ava\/aulas\/modelo-de-plano-de-cuidado-compartilhado-1780334197.pdf\" target=\"_blank\" rel=\"noopener\"><b>Clique aqui <\/b><\/a><\/span><span style=\"font-weight: 400;\">para acess\u00e1-lo.<\/span><span style=\"font-weight: 400;\">\u00a0<\/span><\/p>\t\t\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-c155684 e-con-full e-flex e-con e-parent\" data-id=\"c155684\" data-element_type=\"container\" id=\"finalizando\">\n\t\t<div class=\"elementor-element elementor-element-76ff889 e-con-full e-flex e-con e-child\" data-id=\"76ff889\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-175fd9f e-con-full e-flex e-con e-child\" data-id=\"175fd9f\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t<div class=\"elementor-element elementor-element-0354ffa e-con-full e-flex e-con e-child\" data-id=\"0354ffa\" data-element_type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-e889635 e-con-full e-flex e-con e-child\" data-id=\"e889635\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-231106a elementor-widget elementor-widget-text-editor\" data-id=\"231106a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Estamos finalizando mais uma etapa desta disciplina!<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-8f8e8a9 elementor-widget elementor-widget-text-editor\" data-id=\"8f8e8a9\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Ao longo desta atividade, refor\u00e7amos que o <\/span><b>cuidado <\/b><span style=\"font-weight: 400;\">\u00e0s <\/span><b>pessoas <\/b><span style=\"font-weight: 400;\">com suspeita ou diagn\u00f3stico de <\/span><b>c\u00e2ncer <\/b><span style=\"font-weight: 400;\">come\u00e7a muito antes do tratamento especializado e <\/span><b>continua ap\u00f3s sua conclus\u00e3o<\/b><span style=\"font-weight: 400;\">. Na APS, reconhecer sinais de suspei\u00e7\u00e3o, compreender fatores de risco e atuar na preven\u00e7\u00e3o e na detec\u00e7\u00e3o precoce s\u00e3o passos fundamentais para favorecer o diagn\u00f3stico oportuno e ampliar as possibilidades de cuidado.<\/span><\/p><p><span style=\"font-weight: 400;\">Vimos que cuidar de uma pessoa com c\u00e2ncer n\u00e3o significa apenas encaminh\u00e1-la para outro servi\u00e7o. \u00c9 necess\u00e1rio acompanhar sua trajet\u00f3ria na Rede de Aten\u00e7\u00e3o \u00e0 Sa\u00fade, favorecer a comunica\u00e7\u00e3o entre os diferentes pontos de aten\u00e7\u00e3o e contribuir para que o acesso ao cuidado aconte\u00e7a de forma oportuna e qualificada. <\/span><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3ca7487 e-con-full e-flex elementor-invisible e-con e-child\" data-id=\"3ca7487\" data-element_type=\"container\" id=\"sugestoes-intervencoes\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;,&quot;animation&quot;:&quot;fadeInDown&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-357dbc5 elementor-widget__width-initial elementor-widget-mobile__width-inherit premium-lottie-svg elementor-widget elementor-widget-premium-lottie\" data-id=\"357dbc5\" data-element_type=\"widget\" data-settings=\"{&quot;lottie_file&quot;:{&quot;url&quot;:&quot;https:\\\/\\\/cursos1.nead.conasems.org.br\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/opd-1.json&quot;,&quot;id&quot;:45330,&quot;size&quot;:&quot;&quot;,&quot;alt&quot;:&quot;&quot;,&quot;source&quot;:&quot;library&quot;}}\" data-widget_type=\"premium-lottie.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\r\n\t\t<div class=\"premium-lottie-animation\" data-lottie-url=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/opd-1.json\" data-lottie-loop=\"true\" data-lottie-reverse=\"\" data-lottie-hover=\"\" data-lottie-speed=\"1\" data-lottie-render=\"svg\" data-lottie-delay=\"\">\r\n\t\t\t\t\t<\/div>\r\n\r\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-b3b157e elementor-widget__width-initial elementor-widget elementor-widget-text-editor\" data-id=\"b3b157e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Este ser\u00e1 seu \u00faltimo registro no <\/span><b>campo de anota\u00e7\u00f5es<\/b><span style=\"font-weight: 400;\">, onde voc\u00ea incluir\u00e1 informa\u00e7\u00f5es sobre as <\/span><b>interven\u00e7\u00f5es <\/b><span style=\"font-weight: 400;\">e as <\/span><b>a\u00e7\u00f5es do plano de autocuidado<\/b><span style=\"font-weight: 400;\"> nas se\u00e7\u00f5es <\/span><b>5 <\/b><span style=\"font-weight: 400;\">e <\/span><b>7.<\/b><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-697094a elementor-widget elementor-widget-text-editor\" data-id=\"697094a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><span style=\"font-weight: 400;\">Essa experi\u00eancia tem sido preciosa, pois voc\u00ea est\u00e1 aplicando diversos conhecimentos constru\u00eddos ao longo desta jornada. Parab\u00e9ns!<\/span><\/p><p><span style=\"font-weight: 400;\">Agora, vamos \u00e0 pr\u00e1tica!<\/span><\/p><ol><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Se ainda n\u00e3o fez o <\/span><b><i>download <\/i><\/b><span style=\"font-weight: 400;\">de suas <\/span><b>anota\u00e7\u00f5es <\/b><span style=\"font-weight: 400;\">e da <\/span><b>transcri\u00e7\u00e3o dos v\u00eddeos<\/b><span style=\"font-weight: 400;\">, retorne ao <\/span><b>Campo de Anota\u00e7\u00f5es<\/b><span style=\"font-weight: 400;\"> e baixe os PDFs.<\/span><\/li><li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Em seguida, realize a <\/span><b>Atividade Simulada<\/b><span style=\"font-weight: 400;\">. Para isso,<\/span> <a style=\"color: #a31300;\" href=\"#notlink\" target=\"_blank\" rel=\"noopener\"><b>clique aqui<\/b><\/a> <span style=\"font-weight: 400;\">ou acesse-a no AVA.<\/span><\/li><\/ol><p><b>Boa pr\u00e1tica!<\/b><\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-f82ec67 e-con-full e-flex e-con e-child\" data-id=\"f82ec67\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-30af012 elementor-widget elementor-widget-image\" data-id=\"30af012\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"860\" height=\"1024\" src=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/09\/CuidadoD15-CasoClinico-Finalizando-e1790171486435.webp\" class=\"attachment-large size-large wp-image-46434\" alt=\"\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-f837602 elementor-absolute elementor-widget elementor-widget-image\" data-id=\"f837602\" data-element_type=\"widget\" data-settings=\"{&quot;motion_fx_motion_fx_scrolling&quot;:&quot;yes&quot;,&quot;motion_fx_translateX_effect&quot;:&quot;yes&quot;,&quot;_position&quot;:&quot;absolute&quot;,&quot;motion_fx_translateX_speed&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:4,&quot;sizes&quot;:[]},&quot;motion_fx_translateX_affectedRange&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:{&quot;start&quot;:0,&quot;end&quot;:100}},&quot;motion_fx_devices&quot;:[&quot;desktop&quot;,&quot;laptop&quot;,&quot;tablet&quot;,&quot;mobile&quot;]}\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"110\" src=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/01\/Grafismo_1-1024x110.webp\" class=\"attachment-large size-large wp-image-27788\" alt=\"\" srcset=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/01\/Grafismo_1-1024x110.webp 1024w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/01\/Grafismo_1-300x32.webp 300w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/01\/Grafismo_1-768x83.webp 768w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/01\/Grafismo_1.webp 1113w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-34727d9 elementor-absolute elementor-widget elementor-widget-image\" data-id=\"34727d9\" data-element_type=\"widget\" data-settings=\"{&quot;motion_fx_motion_fx_scrolling&quot;:&quot;yes&quot;,&quot;motion_fx_translateX_effect&quot;:&quot;yes&quot;,&quot;_position&quot;:&quot;absolute&quot;,&quot;motion_fx_translateX_speed&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:4,&quot;sizes&quot;:[]},&quot;motion_fx_translateX_affectedRange&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:{&quot;start&quot;:0,&quot;end&quot;:100}},&quot;motion_fx_devices&quot;:[&quot;desktop&quot;,&quot;laptop&quot;,&quot;tablet&quot;,&quot;mobile&quot;]}\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"110\" src=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/01\/Grafismo4-1024x110.webp\" class=\"attachment-large size-large wp-image-27963\" alt=\"\" srcset=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/01\/Grafismo4-1024x110.webp 1024w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/01\/Grafismo4-300x32.webp 300w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/01\/Grafismo4-768x83.webp 768w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/01\/Grafismo4.webp 1113w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ac51ca9 elementor-absolute elementor-widget elementor-widget-image\" data-id=\"ac51ca9\" data-element_type=\"widget\" data-settings=\"{&quot;motion_fx_motion_fx_scrolling&quot;:&quot;yes&quot;,&quot;motion_fx_translateX_effect&quot;:&quot;yes&quot;,&quot;_position&quot;:&quot;absolute&quot;,&quot;motion_fx_translateX_speed&quot;:{&quot;unit&quot;:&quot;px&quot;,&quot;size&quot;:4,&quot;sizes&quot;:[]},&quot;motion_fx_translateX_affectedRange&quot;:{&quot;unit&quot;:&quot;%&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:{&quot;start&quot;:0,&quot;end&quot;:100}},&quot;motion_fx_devices&quot;:[&quot;desktop&quot;,&quot;laptop&quot;,&quot;tablet&quot;,&quot;mobile&quot;]}\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"110\" src=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/03\/rectangle_41-1024x110.webp\" class=\"attachment-large size-large wp-image-32975\" alt=\"\" srcset=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/03\/rectangle_41-1024x110.webp 1024w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/03\/rectangle_41-300x32.webp 300w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/03\/rectangle_41-768x83.webp 768w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/03\/rectangle_41.webp 1113w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\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<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-342c136 e-con-full e-flex e-con e-parent\" data-id=\"342c136\" data-element_type=\"container\" id=\"ficha\">\n\t\t<div class=\"elementor-element elementor-element-7b633cb e-flex e-con-boxed e-con e-child\" data-id=\"7b633cb\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-94c61f7 elementor-widget elementor-widget-text-editor\" data-id=\"94c61f7\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>FICHA T\u00c9CNICA<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-358afbb e-grid e-con-full e-con e-child\" data-id=\"358afbb\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-32606d3 elementor-widget elementor-widget-text-editor\" data-id=\"32606d3\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>Coordena\u00e7\u00e3o-geral:<\/strong><br \/>Ana Cl\u00e1udia Cardozo Chaves &#8211; SAPS\/MS<br \/>Ana Luiza Ferreira Rodrigues Caldas &#8211; SAPS\/MS<br \/>Ana Paula Neves Marques de Pinho &#8211; A.C. Camargo<br \/>Cristiane Martins Pantale\u00e3o &#8211; CONASEMS<br \/>Hisham Mohamad Hamida &#8211; CONASEMS<br \/>Mauro Junqueira &#8211; CONASEMS<br \/>Patricia da Silva Campos &#8211; CONASEMS<br \/>Ver\u00f4nica Savatin Wottrich &#8211; CONASEMS<\/p><p><strong>Coordena\u00e7\u00e3o t\u00e9cnica e pedag\u00f3gica:<\/strong><br \/>Beatriz Zocal da Silva &#8211; SAPS\/MS<br \/>Danylo Santos Silva Vila\u00e7a &#8211; SAPS\/MS<br \/>Jacirene Gon\u00e7alves Lima Franco &#8211; SAPS\/MS<br \/>Kelly Cristina Santana \u2013 CONASEMS<br \/>Maria da Penha Marques Sapata &#8211; CONASEMS<br \/>Marta de Sousa Lima &#8211; CONASEMS<br \/>Patricia da Silva Campos &#8211; CONASEMS<br \/>Soane Cristina Almeida dos Santos &#8211; CONASEMS<br \/>Thais Coutinho de Oliveira &#8211; SAPS\/MS<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d83e688 elementor-widget elementor-widget-text-editor\" data-id=\"d83e688\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>Elabora\u00e7\u00e3o de conte\u00fado:<\/strong><br \/>Adriana Santos Barbosa<br \/>Thais Alessa Leite<\/p><p><strong>Designer educacional:<\/strong><br \/>Fabiana Guimar\u00e3es Coelho \u2013 CONASEMS<\/p><p><strong>Coordena\u00e7\u00e3o de desenvolvimento gr\u00e1fico:<\/strong><br \/>Cristina Perrone &#8211; CONASEMS<\/p><p><strong>Desenvolvimento Web:<\/strong><br \/>Aidan Bruno &#8211; CONASEMS<br \/>Alexandre Itabayana &#8211; CONASEMS<br \/>Caroline Boaventura &#8211; CONASEMS<\/p><p><strong>Projeto Gr\u00e1fico e Design de Experi\u00eancia:<\/strong><br \/>Ygor Baeta Louren\u00e7o &#8211; CONASEMS<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-37e4297 elementor-widget elementor-widget-text-editor\" data-id=\"37e4297\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p><strong>Ilustra\u00e7\u00e3o:<\/strong><br \/>Lucas Corr\u00eaa Mendon\u00e7a \u2013 CONASEMS<\/p><p><strong>Revis\u00e3o Lingu\u00edstica:<\/strong><br \/>Aline Ferreira de Almeida \u2013 CONASEMS<br \/><br \/><strong>Fotografias e ilustra\u00e7\u00f5es:<\/strong><br \/>Biblioteca do Banco de Imagens do Conasems<\/p><p><strong>Imagens:<\/strong><br \/>Fototeca do CONASEMS<br \/>Flickr Minist\u00e9rio da Sa\u00fade<br \/>Flickr CONASEMS<br \/>Flickr Secretaria de Sa\u00fade do Distrito Federal<br \/>Envato Elements<br \/>https:\/\/elements.envato.com <br \/>Freepik<br \/>https:\/\/br.freepik.com<br \/>Pexels<br \/>https:\/\/www.pexels.com\/pt-br\/<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-7f7cb4e e-flex e-con-boxed e-con e-child\" data-id=\"7f7cb4e\" 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-112dbde elementor-widget elementor-widget-image\" data-id=\"112dbde\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"126\" src=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/05\/logos-cuidado-do-cuidado-horizontal-1024x126.webp\" class=\"attachment-large size-large wp-image-39589\" alt=\"\" srcset=\"https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/05\/logos-cuidado-do-cuidado-horizontal-1024x126.webp 1024w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/05\/logos-cuidado-do-cuidado-horizontal-300x37.webp 300w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/05\/logos-cuidado-do-cuidado-horizontal-768x95.webp 768w, https:\/\/cursos1.nead.conasems.org.br\/wp-content\/uploads\/2026\/05\/logos-cuidado-do-cuidado-horizontal.webp 1430w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\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<\/div>\n\t\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","protected":false},"excerpt":{"rendered":"<p>Caso Cl\u00ednico Boas pr\u00e1ticas em sa\u00fade mental e APS Iniciar Como navegar Para iniciar, clique nas caixas. Aperfei\u00e7oamento da Pr\u00e1tica em Coordena\u00e7\u00e3o do Cuidado a partir da Aten\u00e7\u00e3o Prim\u00e1ria \u00e0 Sa\u00fade \u2013 APS Caso Cl\u00ednico: Maria Iniciar Como Navegar<\/p>\n","protected":false},"author":5,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_canvas","meta":{"footnotes":""},"class_list":["post-46984","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/cursos1.nead.conasems.org.br\/index.php\/wp-json\/wp\/v2\/pages\/46984","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cursos1.nead.conasems.org.br\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/cursos1.nead.conasems.org.br\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/cursos1.nead.conasems.org.br\/index.php\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/cursos1.nead.conasems.org.br\/index.php\/wp-json\/wp\/v2\/comments?post=46984"}],"version-history":[{"count":31,"href":"https:\/\/cursos1.nead.conasems.org.br\/index.php\/wp-json\/wp\/v2\/pages\/46984\/revisions"}],"predecessor-version":[{"id":48138,"href":"https:\/\/cursos1.nead.conasems.org.br\/index.php\/wp-json\/wp\/v2\/pages\/46984\/revisions\/48138"}],"wp:attachment":[{"href":"https:\/\/cursos1.nead.conasems.org.br\/index.php\/wp-json\/wp\/v2\/media?parent=46984"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}