.ipm-map-container {
	position: relative;
	width: 100%;
	min-width: 280px;
	height: var(--ipm-height, 520px);
	font-family: var(--ipm-font-family, inherit);
	/*
	 * Todo o conteúdo do mapa (camada do mapa, painel lateral) usa
	 * position:absolute para o desenho funcionar. Isso significa que este
	 * elemento não tem, por si só, nenhum conteúdo "em fluxo normal" — e em
	 * containers flex do Elementor (Container em modo flex), o browser pode
	 * calcular a largura intrínseca deste elemento como 0px e encolhê-lo
	 * para 0, mesmo com width:100% definido, porque o auto-dimensionamento
	 * do container à volta não tem nada de concreto para medir. O
	 * min-width acima garante que nunca colapsa, e o flex/align-self
	 * abaixo força-o a esticar/preencher o espaço disponível caso ele
	 * próprio seja um item flex (ex: coluna de um Container do Elementor).
	 */
	flex: 1 1 auto;
	align-self: stretch;
}

/*
 * Mesma blindagem aplicada ao próprio wrapper que o Elementor gera à volta
 * do widget — nalguns layouts é este elemento (não o .ipm-map-container
 * lá dentro) que fica com largura 0 por ser ele o item flex real.
 */
.elementor-widget-interactive_points_map,
.elementor-widget-interactive_points_map > .elementor-widget-container {
	width: 100%;
	flex: 1 1 auto;
	align-self: stretch;
}

/*
 * O recorte de cantos arredondados (overflow:hidden) fica só nesta camada
 * interior, que contém apenas o mapa. Assim, um ponto perto da borda nunca
 * fica cortado pelo hidden do painel, e o painel lateral (fora desta camada)
 * pode ter uma altura própria, maior do que a altura do mapa.
 */
.ipm-map-inner {
	position: absolute;
	inset: 0;
	overflow: hidden;
	border-radius: var(--ipm-map-radius, 12px);
	box-shadow: 0 10px 40px rgba(0, 0, 0, 0.08);
	/*
	 * Fundo cinza claro por defeito: sem isto, se os tiles do Leaflet ainda
	 * não carregaram (ou falharem a carregar), o mapa fica um retângulo
	 * branco sobre fundo branco — parece "não aparecer nada" quando na
	 * verdade o espaço está lá, só que invisível. Com este fundo, o
	 * contentor é sempre visível mesmo antes/sem os tiles.
	 */
	background: #e5e3df;
}

.ipm-map-canvas {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
}

/*
 * Fundo escurecido por trás do cartão: dá foco ao conteúdo e deixa claro
 * que é uma camada temporária sobre o mapa, independente do tamanho deste.
 */
.ipm-map-backdrop {
	position: absolute;
	inset: 0;
	background: var(--ipm-backdrop-bg, rgba(20, 20, 20, 0.5));
	border-radius: var(--ipm-map-radius, 12px);
	opacity: 0;
	pointer-events: none;
	transition: opacity 0.3s ease;
	z-index: 999;
}

.ipm-map-container.ipm-panel-open .ipm-map-backdrop {
	opacity: 1;
	pointer-events: auto;
}

/*
 * Cartão de informação: flutua centrado por cima do mapa, com o seu próprio
 * tamanho consoante o conteúdo (até um limite razoável, com scroll interno
 * só se for mesmo preciso). Ao não depender da altura/largura do mapa,
 * fica sempre bem proporcionado, seja o mapa grande ou pequeno.
 */
.ipm-info-panel {
	position: absolute;
	top: 50%;
	left: 50%;
	width: var(--ipm-panel-width, min(420px, 92%));
	max-height: min(80%, 620px);
	background: var(--ipm-panel-bg, #ffffff);
	color: var(--ipm-panel-text, #333333);
	box-shadow: 0 24px 60px rgba(0, 0, 0, 0.28);
	border-radius: var(--ipm-map-radius, 12px);
	z-index: 1000;
	overflow-y: auto;
	overflow-x: hidden;
	/*
	 * Opacidade 0 + pointer-events:none garantem que fica mesmo invisível
	 * (e não bloqueia cliques) enquanto fechado — o transform sozinho só
	 * desloca a caixa, não a esconde de facto, e esta camada está fora do
	 * .ipm-map-inner, que é o único sítio com overflow:hidden a "cortar"
	 * o que sai da área do mapa.
	 */
	opacity: 0;
	pointer-events: none;
	transform: translate(-50%, -50%) scale(0.94);
	transition: opacity 0.3s ease, transform 0.3s cubic-bezier(0.22, 1, 0.36, 1);
}

.ipm-map-container.ipm-panel-open .ipm-info-panel {
	opacity: 1;
	pointer-events: auto;
	transform: translate(-50%, -50%) scale(1);
}

/*
 * Botão fechar: por defeito é só o "×", sem fundo — apenas uma sombra subtil
 * no texto para se manter legível em qualquer foto. Todas as propriedades
 * levam !important porque temas/Elementor costumam ter uma regra global
 * para <button> mais específica do que a nossa classe; sem isto, o valor
 * escolhido no separador Estilo fica definido mas nunca chega a aparecer,
 * porque a regra do tema continua a ganhar o cascade.
 */
.ipm-panel-close {
	all: unset;
	box-sizing: border-box !important;
	position: absolute !important;
	top: 14px !important;
	right: 14px !important;
	width: var(--ipm-close-size, 34px) !important;
	height: var(--ipm-close-size, 34px) !important;
	min-width: 0 !important;
	min-height: 0 !important;
	margin: 0 !important;
	padding: 0 !important;
	display: flex !important;
	align-items: center !important;
	justify-content: center !important;
	background: var(--ipm-close-bg, transparent) !important;
	border: 0 !important;
	outline: 0 !important;
	box-shadow: none !important;
	border-radius: 50% !important;
	color: var(--ipm-close-color, #ffffff) !important;
	cursor: pointer !important;
	font-family: Arial, Helvetica, sans-serif !important;
	font-size: var(--ipm-close-icon-size, 22px) !important;
	font-weight: 400 !important;
	line-height: 1 !important;
	z-index: 5 !important;
	text-shadow: var(--ipm-close-text-shadow, 0 1px 4px rgba(0, 0, 0, 0.5)) !important;
	transition: background 0.2s ease, transform 0.2s ease !important;
}

.ipm-panel-close:hover {
	background: var(--ipm-close-bg-hover, rgba(0, 0, 0, 0.12)) !important;
	transform: scale(1.08);
}

.ipm-theme-dark .ipm-panel-close {
	text-shadow: var(--ipm-close-text-shadow, 0 1px 4px rgba(0, 0, 0, 0.7)) !important;
}

.ipm-panel-content {
	padding: var(--ipm-panel-padding-y, 26px) var(--ipm-panel-padding-x, 26px);
}

/* Cabeçalho: avatar circular (logo/foto do ponto, ou inicial do título) + título/morada */
.ipm-panel-header {
	display: flex;
	align-items: center;
	gap: 14px;
	margin: 0 0 18px;
	padding-right: 30px;
}

.ipm-panel-avatar {
	flex: 0 0 auto;
	width: var(--ipm-avatar-size, 52px);
	height: var(--ipm-avatar-size, 52px);
	border-radius: 50%;
	background: var(--ipm-avatar-bg, rgba(127, 127, 127, 0.15)) center/cover no-repeat;
	display: flex;
	align-items: center;
	justify-content: center;
	overflow: hidden;
}

.ipm-panel-avatar-initial {
	font-family: var(--ipm-title-font-family, inherit);
	font-size: calc(var(--ipm-avatar-size, 52px) * 0.4);
	font-weight: 700;
	color: var(--ipm-avatar-initial-color, #ffffff);
}

.ipm-panel-headings {
	min-width: 0;
}

.ipm-panel-headings h3 {
	margin: 0 0 2px;
	font-family: var(--ipm-title-font-family, inherit);
	font-size: var(--ipm-title-size, 19px);
	font-weight: var(--ipm-title-weight, 600);
	color: var(--ipm-title-color, inherit);
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

.ipm-panel-subtitle {
	margin: 0;
	font-size: 13px;
	line-height: 1.4;
	color: var(--ipm-label-color, currentColor);
	/*
	 * Por defeito fica a 60% de opacidade (esbatido, como um subtítulo). Ao
	 * escolher uma cor no separador Estilo, o controlo do Elementor também
	 * define --ipm-label-opacity:1, para a cor escolhida aparecer exatamente
	 * como escolhida, sem ficar esbatida por cima.
	 */
	opacity: var(--ipm-label-opacity, 0.6);
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

/* Contactos (telefone/email/fax) como "pills" com ícone, em vez de linhas rotuladas */
.ipm-panel-facts {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin: 0 0 18px;
}

/*
 * Os pills de telefone/email são <a> — temas WordPress costumam ter uma cor
 * global para links (às vezes com !important) que ganha ao color: inherit
 * comum. Tal como no botão fechar, força-se aqui com !important para a cor
 * escolhida no separador Estilo do Elementor ser sempre a que aparece.
 */
.ipm-fact-pill {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	max-width: 100%;
	padding: 7px 12px;
	border-radius: 999px;
	background: var(--ipm-pill-bg, rgba(127, 127, 127, 0.12)) !important;
	color: var(--ipm-value-color, inherit) !important;
	font-family: var(--ipm-value-font-family, inherit);
	font-size: var(--ipm-value-size, 13px);
	font-weight: var(--ipm-value-weight, 500);
	text-decoration: none !important;
	line-height: 1.2;
}

.ipm-fact-pill svg {
	flex: 0 0 auto;
	width: 14px;
	height: 14px;
	opacity: 0.65;
}

.ipm-fact-pill span {
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}

a.ipm-fact-pill:hover {
	background: var(--ipm-pill-bg-hover, rgba(127, 127, 127, 0.2));
}

.ipm-panel-content .ipm-panel-body {
	font-family: var(--ipm-body-font-family, inherit);
	font-size: var(--ipm-body-size, 15px);
	font-weight: var(--ipm-body-weight, 400);
	line-height: 1.6;
	color: var(--ipm-body-color, inherit);
}

.ipm-panel-content .ipm-panel-link {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 100%;
	box-sizing: border-box;
	margin-top: 18px;
	padding: var(--ipm-link-padding, 13px 20px);
	background: var(--ipm-link-bg, var(--ipm-pin-color, #1a1a1a)) !important;
	color: var(--ipm-link-text, #ffffff) !important;
	text-decoration: none !important;
	text-align: center;
	border-radius: var(--ipm-link-radius, 12px);
	font-family: var(--ipm-link-font-family, inherit);
	font-size: var(--ipm-link-size, 14px);
	font-weight: var(--ipm-link-weight, 600);
	transition: opacity 0.2s ease, background 0.2s ease;
}

.ipm-panel-content .ipm-panel-link:hover {
	background: var(--ipm-link-bg-hover, var(--ipm-link-bg, var(--ipm-pin-color, #1a1a1a))) !important;
	opacity: 0.85;
	color: var(--ipm-link-text, #fff) !important;
}

/* Marcadores: círculo com a imagem do ponto (ou a inicial do título, sem imagem) */
.ipm-marker {
	width: var(--ipm-marker-size, 40px);
	height: var(--ipm-marker-size, 40px);
	border-radius: 50%;
	background: var(--ipm-pin-color, #1a1a1a) center/cover no-repeat;
	border: var(--ipm-marker-border-width, 3px) solid var(--ipm-marker-border-color, #ffffff);
	box-shadow: 0 4px 14px rgba(0, 0, 0, 0.35);
	cursor: pointer;
	display: flex;
	align-items: center;
	justify-content: center;
	transition: transform 0.2s ease;
}

.ipm-marker-initial {
	font-size: calc(var(--ipm-marker-size, 40px) * 0.4);
	font-weight: 700;
	line-height: 1;
	color: var(--ipm-marker-initial-color, #ffffff);
	user-select: none;
}

.ipm-marker:hover,
.ipm-marker.ipm-marker-active {
	transform: scale(1.12);
}

/* Popup do Leaflet simplificado (usado só em telemóvel/fallback) */
.leaflet-popup-content-wrapper {
	border-radius: 8px;
}

/* Tema escuro (aplica defaults só onde não haja override específico) */
.ipm-theme-dark .ipm-info-panel {
	background: var(--ipm-panel-bg, #1c1c1e);
	color: var(--ipm-panel-text, #f2f2f2);
}

/* Responsivo */
@media (max-width: 600px) {
	.ipm-info-panel {
		width: 94%;
		max-height: 86%;
	}
}
