/**
 * Maringá Faz Mais — páginas internas (etapa 4).
 * Vanilla JS, carregado depois do main.js (e do Leaflet quando a página tem
 * mapa): filtros das listagens, galeria navegável e mini-mapa da ficha,
 * "ler mais" das atualizações, página Mapa de Obras (pins + filtros + card
 * da obra selecionada) e página Galeria (filtros + lightbox).
 */
(function () {
	'use strict';

	function urlEmbedYouTube(url) {
		var m = url.match(/(?:youtube\.com\/(?:watch\?v=|shorts\/|embed\/)|youtu\.be\/)([\w-]{11})/);
		return m ? 'https://www.youtube-nocookie.com/embed/' + m[1] + '?autoplay=1&rel=0' : null;
	}

	// Player pra um MP4 ou link do YouTube — usado na ficha e no lightbox.
	function criaPlayer(url, titulo) {
		var embed = urlEmbedYouTube(url);
		var midia;
		if (embed) {
			midia = document.createElement('iframe');
			midia.src = embed;
			midia.allow = 'autoplay; encrypted-media; picture-in-picture';
			midia.allowFullscreen = true;
			midia.title = titulo || 'Vídeo da obra';
		} else {
			midia = document.createElement('video');
			midia.src = url;
			midia.controls = true;
			// Toca só depois do clique — gesto do visitante, nunca sozinho.
			midia.autoplay = true;
			midia.playsInline = true;
		}
		return midia;
	}

	/* ---------- Filtros das listagens (auto-envio + URL limpa) ---------- */
	var formFiltros = document.querySelector('form.mfm-filtros[method="get"]');
	if (formFiltros) {
		// Campos vazios ficam fora da URL (?status=&busca= vira /obras/).
		formFiltros.addEventListener('submit', function () {
			formFiltros.querySelectorAll('select, input[name="busca"]').forEach(function (campo) {
				campo.disabled = !campo.value.trim();
			});
		});
		formFiltros.querySelectorAll('select').forEach(function (select) {
			select.addEventListener('change', function () {
				if (typeof formFiltros.requestSubmit === 'function') {
					formFiltros.requestSubmit();
				} else {
					formFiltros.submit();
				}
			});
		});
	}

	/* ---------- Listagem: busca ao digitar (troca a grade via fetch) ---------- */
	var buscaListagem = formFiltros ? formFiltros.querySelector('input[name="busca"]') : null;
	var resultadosListagem = document.getElementById('mfm-listagem-resultados');
	if (buscaListagem && resultadosListagem && window.fetch) {
		var timerBusca = null;
		var controladorBusca = null;

		var buscaAoVivo = function () {
			var params = new URLSearchParams();
			formFiltros.querySelectorAll('select, input[name="busca"]').forEach(function (campo) {
				if (campo.value.trim()) {
					params.set(campo.name, campo.value.trim());
				}
			});
			var url = formFiltros.action + (params.toString() ? '?' + params.toString() : '');

			if (controladorBusca) {
				controladorBusca.abort(); // resposta velha não atropela a nova
			}
			controladorBusca = window.AbortController ? new AbortController() : null;

			fetch(url, controladorBusca ? { signal: controladorBusca.signal } : {})
				.then(function (resposta) {
					return resposta.text();
				})
				.then(function (html) {
					var doc = new DOMParser().parseFromString(html, 'text/html');
					var novo = doc.getElementById('mfm-listagem-resultados');
					if (!novo) {
						return;
					}
					resultadosListagem.innerHTML = novo.innerHTML;

					var contagemNova = doc.querySelector('.mfm-pagina-cabecalho__contagem');
					var contagemAtual = document.querySelector('.mfm-pagina-cabecalho__contagem');
					if (contagemNova && contagemAtual) {
						contagemAtual.textContent = contagemNova.textContent;
					}
					// Compartilhar/recarregar a página mantém a busca.
					window.history.replaceState(null, '', url);
				})
				.catch(function () {
					// Fetch abortado ou rede fora: a grade atual fica como está.
				});
		};

		buscaListagem.addEventListener('input', function () {
			clearTimeout(timerBusca);
			timerBusca = setTimeout(buscaAoVivo, 300);
		});

		// Enter continua funcionando, mas sem recarregar a página.
		formFiltros.addEventListener('submit', function (e) {
			e.preventDefault();
			formFiltros.querySelectorAll('select, input[name="busca"]').forEach(function (campo) {
				campo.disabled = false; // desfaz o disable do handler de URL limpa
			});
			clearTimeout(timerBusca);
			buscaAoVivo();
		});
	}

	/* ---------- Ficha: galeria navegável (thumbs + setas) ---------- */
	var fotoPrincipal = document.getElementById('mfm-foto-principal');
	var thumbs = Array.prototype.slice.call(document.querySelectorAll('.mfm-ficha__thumb'));
	if (fotoPrincipal && thumbs.length) {
		var fotoAtual = 0;

		var mostraFoto = function (indice) {
			fotoAtual = (indice + thumbs.length) % thumbs.length; // dá a volta
			// srcset da capa sairia maior que a foto trocada — remove.
			fotoPrincipal.removeAttribute('srcset');
			fotoPrincipal.removeAttribute('sizes');
			fotoPrincipal.src = thumbs[fotoAtual].dataset.grande;
			// O "ampliar" abre sempre a foto exibida no momento.
			fotoPrincipal.dataset.cheia = thumbs[fotoAtual].dataset.cheia || thumbs[fotoAtual].dataset.grande;

			thumbs.forEach(function (outra, i) {
				outra.classList.toggle('ativa', i === fotoAtual);
				if (i === fotoAtual) {
					outra.setAttribute('aria-current', 'true');
				} else {
					outra.removeAttribute('aria-current');
				}
			});
			// Mantém a miniatura ativa à vista na faixa rolável.
			thumbs[fotoAtual].scrollIntoView({ block: 'nearest', inline: 'nearest' });
		};

		thumbs.forEach(function (thumb, i) {
			thumb.addEventListener('click', function () {
				mostraFoto(i);
			});
		});

		var setaAnt = document.querySelector('.mfm-ficha__seta--ant');
		var setaProx = document.querySelector('.mfm-ficha__seta--prox');
		if (setaAnt) {
			setaAnt.addEventListener('click', function () {
				mostraFoto(fotoAtual - 1);
			});
		}
		if (setaProx) {
			setaProx.addEventListener('click', function () {
				mostraFoto(fotoAtual + 1);
			});
		}
	}

	/* ---------- Ficha: vídeos sob clique ---------- */
	document.querySelectorAll('.mfm-ficha__video .mfm-video-play').forEach(function (play) {
		play.addEventListener('click', function () {
			play.parentNode.replaceChild(criaPlayer(play.dataset.video), play);
		});
	});

	/* ---------- Ficha: ampliar a foto das atualizações ---------- */
	var modalFicha = document.getElementById('mfm-ficha-modal');
	if (modalFicha) {
		var alvoFicha = document.getElementById('mfm-ficha-modal-alvo');
		var legendaFicha = document.getElementById('mfm-ficha-modal-legenda');
		var botaoFotoAberto = null;

		var fechaModalFicha = function () {
			modalFicha.hidden = true;
			alvoFicha.innerHTML = '';
			legendaFicha.textContent = '';
			document.body.style.overflow = '';
			if (botaoFotoAberto) {
				botaoFotoAberto.focus();
				botaoFotoAberto = null;
			}
		};

		var abreModalFicha = function (src, legenda, origem) {
			if (!src) {
				return;
			}
			var img = document.createElement('img');
			img.src = src;
			img.alt = legenda || '';
			alvoFicha.innerHTML = '';
			alvoFicha.appendChild(img);
			legendaFicha.textContent = legenda || '';
			botaoFotoAberto = origem;
			modalFicha.hidden = false;
			document.body.style.overflow = 'hidden';
			modalFicha.querySelector('.mfm-modal__fechar').focus();
		};

		document.querySelectorAll('.mfm-atualizacao__foto-botao').forEach(function (botao) {
			botao.addEventListener('click', function () {
				abreModalFicha(botao.dataset.grande, botao.dataset.legenda, botao);
			});
		});

		// Foto principal da galeria: amplia a foto exibida no momento.
		var botaoAmpliar = document.querySelector('.mfm-ficha__ampliar');
		if (botaoAmpliar) {
			botaoAmpliar.addEventListener('click', function () {
				var foto = document.getElementById('mfm-foto-principal');
				if (foto) {
					abreModalFicha(foto.dataset.cheia || foto.src, '', botaoAmpliar);
				}
			});
		}

		modalFicha.addEventListener('click', function (e) {
			if (e.target.hasAttribute('data-fechar')) {
				fechaModalFicha();
			}
		});

		document.addEventListener('keydown', function (e) {
			if ('Escape' === e.key && !modalFicha.hidden) {
				fechaModalFicha();
			}
		});
	}

	/* ---------- Ficha: "Ler mais" das atualizações ---------- */
	document.querySelectorAll('.mfm-atualizacao__texto').forEach(function (texto) {
		texto.classList.add('fechado');
		// Só ganha botão o texto que realmente passa do limite de linhas.
		if (texto.scrollHeight <= texto.clientHeight + 4) {
			texto.classList.remove('fechado');
			return;
		}
		var botao = texto.parentNode.querySelector('.mfm-atualizacao__mais');
		if (!botao) {
			return;
		}
		botao.hidden = false;
		botao.addEventListener('click', function () {
			var fechado = texto.classList.toggle('fechado');
			botao.textContent = fechado ? 'Ler mais' : 'Ler menos';
			botao.setAttribute('aria-expanded', fechado ? 'false' : 'true');
		});
	});

	/* ---------- Ficha: mini-mapa da localização ---------- */
	var caixaMiniMapa = document.getElementById('mfm-mapa-ficha');
	if (caixaMiniMapa && window.L && window.mfmFicha && window.mfmFicha.lat && window.mfmFicha.lng) {
		var iniciaMiniMapa = function () {
			var dados = window.mfmFicha;
			var mapa = L.map(caixaMiniMapa, { scrollWheelZoom: false });

			L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
				maxZoom: 19,
				attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>'
			}).addTo(mapa);

			mapa.on('click focus', function () {
				mapa.scrollWheelZoom.enable();
			});
			mapa.on('blur', function () {
				mapa.scrollWheelZoom.disable();
			});

			var icone = L.divIcon({
				className: 'mfm-pin',
				html: '<span class="mfm-pin__ponto mfm-cor-' + dados.status + '"></span>',
				iconSize: [18, 24],
				iconAnchor: [9, 22]
			});
			L.marker([dados.lat, dados.lng], { icon: icone, title: dados.titulo, alt: dados.titulo }).addTo(mapa);
			mapa.setView([dados.lat, dados.lng], 16);
		};

		if ('IntersectionObserver' in window) {
			var observerMini = new IntersectionObserver(function (entradas) {
				if (!entradas[0].isIntersecting) {
					return;
				}
				observerMini.disconnect();
				iniciaMiniMapa();
			}, { rootMargin: '400px 0px' });
			observerMini.observe(caixaMiniMapa);
		} else {
			iniciaMiniMapa();
		}
	}

	/* ---------- Página Mapa de Obras ---------- */
	var caixaMapa = document.getElementById('mfm-mapa-pagina');

	// DOM via textContent: título/resumo são conteúdo digitado no painel.
	function montaPopup(obra, aoVerDetalhes) {
		var caixa = document.createElement('div');

		var titulo = document.createElement('p');
		titulo.className = 'mfm-popup__titulo';
		titulo.textContent = obra.titulo;
		caixa.appendChild(titulo);

		var meta = [obra.statusRotulo, obra.regiaoNome, obra.eixoNome].filter(Boolean).join(' · ');
		if (meta) {
			var linhaMeta = document.createElement('p');
			linhaMeta.className = 'mfm-popup__meta';
			linhaMeta.textContent = meta;
			caixa.appendChild(linhaMeta);
		}

		if (obra.resumo) {
			var resumo = document.createElement('p');
			resumo.className = 'mfm-popup__resumo';
			resumo.textContent = obra.resumo;
			caixa.appendChild(resumo);
		}

		[
			obra.investimento ? 'Investimento: ' + obra.investimento : '',
			obra.previsao ? 'Previsão de entrega: ' + obra.previsao : ''
		].filter(Boolean).forEach(function (texto) {
			var linha = document.createElement('p');
			linha.className = 'mfm-popup__meta';
			linha.textContent = texto;
			caixa.appendChild(linha);
		});

		var link = document.createElement('a');
		link.className = 'mfm-popup__link';
		link.href = obra.url;
		link.textContent = 'Ver mais detalhes';
		caixa.appendChild(link);

		if (aoVerDetalhes) {
			aoVerDetalhes(caixa);
		}

		return caixa;
	}

	// Card da obra selecionada, no padrão do card das listagens.
	function montaCardObra(obra) {
		var card = document.createElement('article');
		card.className = 'mfm-card visivel' + ('entregue' === obra.status ? ' mfm-card--entregue' : '');

		var midia = document.createElement('div');
		midia.className = 'mfm-card__midia';
		if (obra.foto) {
			var foto = document.createElement('img');
			foto.className = 'mfm-card__foto';
			foto.src = obra.foto;
			foto.alt = '';
			foto.loading = 'lazy';
			midia.appendChild(foto);
		} else {
			var vazia = document.createElement('span');
			vazia.className = 'mfm-card__foto mfm-card__foto--vazia';
			vazia.setAttribute('aria-hidden', 'true');
			vazia.textContent = '{ }';
			midia.appendChild(vazia);
		}
		if (obra.statusRotulo) {
			var badge = document.createElement('span');
			badge.className = 'mfm-badge mfm-badge--' + obra.status;
			badge.textContent = obra.statusRotulo;
			midia.appendChild(badge);
		}
		if ('entregue' === obra.status) {
			var carimbo = document.createElement('span');
			carimbo.className = 'mfm-carimbo';
			carimbo.setAttribute('aria-hidden', 'true');
			carimbo.textContent = 'Entregue!';
			midia.appendChild(carimbo);
		}
		card.appendChild(midia);

		var corpo = document.createElement('div');
		corpo.className = 'mfm-card__corpo';

		if (obra.eixoNome) {
			var eixo = document.createElement('p');
			eixo.className = 'mfm-card__eixo';
			eixo.textContent = obra.eixoNome;
			corpo.appendChild(eixo);
		}

		var titulo = document.createElement('h2');
		titulo.className = 'mfm-card__titulo';
		var link = document.createElement('a');
		link.href = obra.url;
		link.textContent = obra.titulo;
		titulo.appendChild(link);
		corpo.appendChild(titulo);

		var local = [obra.bairro, obra.regiaoNome].filter(Boolean).join(' · ');
		if (local) {
			var linhaLocal = document.createElement('p');
			linhaLocal.className = 'mfm-card__local';
			linhaLocal.textContent = local;
			corpo.appendChild(linhaLocal);
		}

		if (obra.resumo) {
			var resumo = document.createElement('p');
			resumo.className = 'mfm-card__resumo';
			resumo.textContent = obra.resumo;
			corpo.appendChild(resumo);
		}

		var metas = [
			obra.investimento ? 'Investimento: ' + obra.investimento : '',
			obra.previsao ? 'Previsão de entrega: ' + obra.previsao : ''
		].filter(Boolean);
		if (metas.length) {
			var linhaMetas = document.createElement('p');
			linhaMetas.className = 'mfm-card__local';
			linhaMetas.textContent = metas.join(' · ');
			corpo.appendChild(linhaMetas);
		}

		if ('andamento' === obra.status) {
			var progresso = document.createElement('div');
			progresso.className = 'mfm-card__progresso';
			var barra = document.createElement('span');
			barra.className = 'mfm-card__barra';
			barra.setAttribute('role', 'progressbar');
			barra.setAttribute('aria-label', 'Progresso da obra');
			barra.setAttribute('aria-valuemin', '0');
			barra.setAttribute('aria-valuemax', '100');
			barra.setAttribute('aria-valuenow', String(obra.progresso));
			var fill = document.createElement('span');
			fill.className = 'mfm-card__barra-fill';
			fill.style.width = obra.progresso + '%';
			barra.appendChild(fill);
			progresso.appendChild(barra);
			progresso.appendChild(document.createTextNode(' ' + obra.progresso + '%'));
			corpo.appendChild(progresso);
		}

		card.appendChild(corpo);
		return card;
	}

	function iniciaMapaPagina() {
		var dados = window.mfmMapa;
		var selecionada = document.getElementById('mfm-obra-selecionada');
		var mapa = L.map(caixaMapa, { scrollWheelZoom: false });

		L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', {
			maxZoom: 19,
			attribution: '&copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a>'
		}).addTo(mapa);

		// Zoom pela rodinha só depois de interagir — não prende o scroll da página.
		mapa.on('click focus', function () {
			mapa.scrollWheelZoom.enable();
		});
		mapa.on('blur', function () {
			mapa.scrollWheelZoom.disable();
		});

		var grupo = L.layerGroup().addTo(mapa);
		var marcadores = dados.obras.map(function (obra) {
			var icone = L.divIcon({
				className: 'mfm-pin',
				html: '<span class="mfm-pin__ponto mfm-cor-' + obra.status + '"></span>',
				iconSize: [18, 24],
				iconAnchor: [9, 22],
				popupAnchor: [0, -20]
			});

			var marcador = L.marker([obra.lat, obra.lng], {
				icon: icone,
				title: obra.titulo,
				alt: obra.titulo
			});
			marcador.bindPopup(montaPopup(obra), { className: 'mfm-popup' });

			// Card da obra selecionada abaixo do mapa (padrão do wireframe).
			marcador.on('click', function () {
				selecionada.innerHTML = '';
				selecionada.appendChild(montaCardObra(obra));
			});

			return { obra: obra, marcador: marcador };
		});

		var selects = {
			status: document.getElementById('mfm-filtro-status'),
			bairro: document.getElementById('mfm-filtro-bairro'),
			eixo: document.getElementById('mfm-filtro-eixo')
		};
		var contagem = document.getElementById('mfm-mapa-contagem');
		var limpar = document.getElementById('mfm-filtro-limpar');

		// Chegou com filtro na URL (?status=…&bairro=…&eixo=…): pré-aplica.
		var params = new URLSearchParams(window.location.search);
		Object.keys(selects).forEach(function (chave) {
			var valor = params.get(chave);
			if (valor && selects[chave].querySelector('option[value="' + valor + '"]')) {
				selects[chave].value = valor;
			}
		});

		function aplicaFiltros(enquadra) {
			grupo.clearLayers();
			var pontos = [];

			marcadores.forEach(function (item) {
				var entra = (!selects.status.value || item.obra.status === selects.status.value)
					&& (!selects.bairro.value || item.obra.bairroSlug === selects.bairro.value)
					&& (!selects.eixo.value || item.obra.eixo === selects.eixo.value);
				if (entra) {
					grupo.addLayer(item.marcador);
					pontos.push([item.obra.lat, item.obra.lng]);
				}
			});

			if (contagem) {
				if (!marcadores.length) {
					contagem.textContent = 'Nenhuma obra com localização cadastrada ainda.';
				} else {
					contagem.textContent = 1 === pontos.length ? '1 obra no mapa' : pontos.length + ' obras no mapa';
				}
			}

			if (enquadra && pontos.length) {
				mapa.fitBounds(pontos, { padding: [36, 36], maxZoom: 15 });
			} else if (enquadra) {
				mapa.setView(dados.centro, dados.zoom);
			}
		}

		Object.keys(selects).forEach(function (chave) {
			selects[chave].addEventListener('change', function () {
				aplicaFiltros(false);
			});
		});

		limpar.addEventListener('click', function () {
			Object.keys(selects).forEach(function (chave) {
				selects[chave].value = '';
			});
			selecionada.innerHTML = '';
			aplicaFiltros(true);
		});

		aplicaFiltros(true);
	}

	if (caixaMapa && window.L && window.mfmMapa) {
		iniciaMapaPagina();
	}

	/* ---------- Página Galeria: filtros + lightbox ---------- */
	var grade = document.getElementById('mfm-galeria-grade');
	if (grade) {
		var itens = Array.prototype.slice.call(grade.querySelectorAll('.mfm-galeria__item'));
		var buscaGaleria = document.getElementById('mfm-galeria-busca');
		var selectBairro = document.getElementById('mfm-galeria-bairro');
		var selectEixo = document.getElementById('mfm-galeria-eixo');
		var contagemGaleria = document.getElementById('mfm-galeria-contagem');
		var vazioGaleria = document.getElementById('mfm-galeria-vazio');
		var limparGaleria = document.getElementById('mfm-galeria-limpar');
		var maisGaleria = document.getElementById('mfm-galeria-mais');

		// "Carregar mais": quantas fotos aparecem por vez (12 = 4 linhas de 3).
		var BLOCO_GALERIA = 12;
		var limiteGaleria = BLOCO_GALERIA;

		// Busca sem acento: "duplicacao" acha "Duplicação".
		var normaliza = function (texto) {
			return texto.normalize('NFD').replace(/[\u0300-\u036f]/g, '').toLowerCase();
		};

		var filtraGaleria = function () {
			var termo = buscaGaleria ? normaliza(buscaGaleria.value.trim()) : '';
			var bairro = selectBairro ? selectBairro.value : '';
			var eixo = selectEixo ? selectEixo.value : '';

			var casam = itens.filter(function (item) {
				return (!termo || normaliza(item.dataset.busca || '').indexOf(termo) !== -1)
					&& (!bairro || item.dataset.bairro === bairro)
					&& (!eixo || item.dataset.eixo === eixo);
			});

			// Dos que casam com o filtro, só o bloco atual fica visível.
			itens.forEach(function (item) {
				item.hidden = true;
			});
			casam.forEach(function (item, i) {
				item.hidden = i >= limiteGaleria;
			});

			var mostrados = Math.min(casam.length, limiteGaleria);
			if (contagemGaleria) {
				if (casam.length > mostrados) {
					contagemGaleria.textContent = 'Mostrando ' + mostrados + ' de ' + casam.length + ' itens na galeria';
				} else {
					contagemGaleria.textContent = 1 === casam.length ? '1 item na galeria' : casam.length + ' itens na galeria';
				}
			}
			if (vazioGaleria) {
				vazioGaleria.hidden = casam.length > 0;
			}
			if (limparGaleria) {
				limparGaleria.hidden = !termo && !bairro && !eixo;
			}
			if (maisGaleria) {
				maisGaleria.hidden = casam.length <= limiteGaleria;
			}
		};

		// Mudou o filtro, o bloco volta pro tamanho inicial.
		var refiltra = function () {
			limiteGaleria = BLOCO_GALERIA;
			filtraGaleria();
		};

		[selectBairro, selectEixo].forEach(function (select) {
			if (select) {
				select.addEventListener('change', refiltra);
			}
		});
		if (buscaGaleria) {
			buscaGaleria.addEventListener('input', refiltra);
		}
		if (limparGaleria) {
			limparGaleria.addEventListener('click', function () {
				if (buscaGaleria) {
					buscaGaleria.value = '';
				}
				if (selectBairro) {
					selectBairro.value = '';
				}
				if (selectEixo) {
					selectEixo.value = '';
				}
				refiltra();
				if (buscaGaleria) {
					buscaGaleria.focus();
				}
			});
		}
		if (maisGaleria) {
			maisGaleria.addEventListener('click', function () {
				limiteGaleria += BLOCO_GALERIA;
				filtraGaleria();
			});
		}
		filtraGaleria();

		// Lightbox
		var modal = document.getElementById('mfm-galeria-modal');
		var alvo = document.getElementById('mfm-galeria-modal-alvo');
		var legenda = document.getElementById('mfm-galeria-modal-legenda');
		var itemAberto = null;

		var fechaModal = function () {
			modal.hidden = true;
			alvo.innerHTML = ''; // remove o player = para o áudio na hora
			legenda.textContent = '';
			document.body.style.overflow = '';
			if (itemAberto) {
				itemAberto.focus();
				itemAberto = null;
			}
		};

		if (modal) {
			itens.forEach(function (item) {
				item.addEventListener('click', function () {
					alvo.innerHTML = '';
					if ('video' === item.dataset.tipo && item.dataset.video) {
						alvo.appendChild(criaPlayer(item.dataset.video, item.dataset.legenda));
					} else if (item.dataset.grande) {
						var img = document.createElement('img');
						img.src = item.dataset.grande;
						img.alt = item.dataset.legenda || '';
						alvo.appendChild(img);
					} else {
						return;
					}

					legenda.textContent = item.dataset.legenda || '';
					itemAberto = item;
					modal.hidden = false;
					document.body.style.overflow = 'hidden';
					modal.querySelector('.mfm-modal__fechar').focus();
				});
			});

			modal.addEventListener('click', function (e) {
				if (e.target.hasAttribute('data-fechar')) {
					fechaModal();
				}
			});

			document.addEventListener('keydown', function (e) {
				if ('Escape' === e.key && !modal.hidden) {
					fechaModal();
				}
			});
		}
	}
})();
