/* Os filtros e o índice do atlas.
 *
 * **Por que estas regras existem duas vezes.** O empacotador recusa módulo que
 * declara asset de outro — e faz bem: um módulo que some não pode levar o
 * estilo do vizinho junto. As regras de `.a12-filtros` são as mesmas do Santo
 * do Dia porque o formulário é o mesmo desenho; se um dos dois mudar, o outro
 * não muda sozinho, e isso é deliberado.
 *
 * O que é só daqui é `.a12-letras`: o índice alfabético, que no atlas faz o
 * papel que o calendário faz no serviço diário.
 *
 * A paleta não está aqui. Vem dos tokens `--a12-*` que o `<body>` define pela
 * classe do núcleo. Cada `var()` traz um valor de reserva, para o componente
 * não sumir onde não houver paleta.
 */

.a12-filtros {
	display: grid;
	grid-template-columns: repeat(3, minmax(0, 1fr));
	gap: .4rem 1.5rem;
	margin: 0 0 1.25rem;
	align-items: end;
}

.a12-filtros--texto { grid-template-columns: 1fr; }

.a12-filtros__campo { display: flex; flex-direction: column; gap: .3rem; min-width: 0; }

.a12-filtros__rotulo {
	margin: 0;
	color: var(--a12-secundaria, #4b2d22);
	font-size: .9rem;
	font-weight: 400;
	line-height: 1.3;
}

.a12-filtros select,
.a12-filtros input[type="search"] {
	width: 100%;
	min-height: 48px;
	padding: .6rem 2.4rem .6rem 1rem;
	border: 1px solid #d5d4d4;
	border-radius: 10px;
	background: #fff;
	color: var(--a12-secundaria, #4b2d22);
	font: inherit;
	font-size: 1rem;
	font-weight: 400;          
	appearance: none;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' fill='none' stroke='%23616161' stroke-width='2' stroke-linecap='round'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right 1rem center;
}

.a12-filtros input[type="search"] {
	background-image: none;
	padding-right: 1rem;
	color: var(--a12-secundaria, #4b2d22);
	font-weight: 400;
}

.a12-filtros input[type="search"]::placeholder { color: #8a7a70; font-weight: 400; }

.a12-filtros select:focus-visible,
.a12-filtros input[type="search"]:focus-visible {
	outline: 2px solid var(--a12-secundaria, #4b2d22);
	outline-offset: 1px;
	border-color: var(--a12-secundaria, #4b2d22);
}

.a12-filtros__acoes {
	grid-column: 1 / -1;
	display: flex;
	align-items: center;
	justify-content: flex-end;
	gap: 1rem;
	margin-top: .25rem;
}

.a12-filtros__enviar {
	display: inline-flex;
	align-items: center;
	gap: .5rem;
	min-height: 48px;
	padding: .6rem 1.8rem;
	border: 1px solid var(--a12-secundaria, #4b2d22);
	border-radius: 10px;
	background: var(--a12-secundaria, #4b2d22);
	color: var(--a12-on-secundaria, #fff);
	font: inherit;
	font-weight: 500;
	cursor: pointer;
	transition: background-color .15s ease;
}

.a12-filtros__enviar:hover,
.a12-filtros__enviar:focus,
.a12-filtros__enviar:active {
	border-color: var(--a12-principal, #6b4227);
	background: var(--a12-principal, #6b4227);
	color: var(--a12-on-secundaria, #fff);
}

.a12-filtros__enviar:focus-visible { outline: 3px solid var(--a12-secundaria, #4b2d22); outline-offset: 2px; }

.a12-filtros__limpar {
	display: inline-flex;
	align-items: center;
	min-height: 44px;
	padding: 0 .25rem;
	color: var(--a12-principal, #6b4227);            
	font-size: .95rem;
	font-weight: 400;
	text-decoration: none;
}

.a12-filtros__limpar:hover { color: var(--a12-secundaria, #4b2d22); text-decoration: underline; text-underline-offset: 3px; }

.a12-filtros__girando { display: none; }

.a12-filtros--ocupado .a12-filtros__lupa { display: none; }

.a12-filtros--ocupado .a12-filtros__girando {
	display: inline-block;
	animation: a12-girar .8s linear infinite;
}

@media (prefers-reduced-motion: reduce) {
	.a12-filtros--ocupado .a12-filtros__girando { animation: none; }
}

.a12-filtros--ocupado .a12-filtros__enviar { cursor: progress; }

.a12-filtros--ocupado .a12-filtros__campo { opacity: .75; transition: opacity .1s ease; }

@media (max-width: 760px) {
	.a12-filtros { grid-template-columns: 1fr; }
}

.a12-letras { margin: 0 0 1.5rem; }

.a12-letras__lista {
	display: flex;
	flex-wrap: wrap;
	gap: .375rem;
	margin: 0;
	padding: 0;
	list-style: none;
}

.a12-letras__letra {
	display: grid;
	place-items: center;
	min-width: 2.25rem;
	min-height: 2.25rem;
	padding: 0 .4rem;
	border-radius: .5rem;
	font-weight: 700;
	font-variant-numeric: tabular-nums;
	text-decoration: none;
	color: var(--a12-principal, #6b4227);
	background: var(--a12-fundo-suave, #f2e7df);
	transition: background .12s ease, color .12s ease;
}

.a12-letras__letra:hover { background: var(--a12-intermediaria, #7a5438); color: var(--a12-on-intermediaria, #fff); }

.a12-letras__letra--ativa,
.a12-letras__letra--ativa:hover {
	background: var(--a12-secundaria, #4b2d22);
	color: var(--a12-on-secundaria, #fff);
}

.a12-letras__letra:focus-visible {
	outline: 3px solid var(--a12-principal, #6b4227);
	outline-offset: 2px;
}

.a12-filtros__titulo {
	grid-column: 1 / -1;
	margin: 0 0 .25rem;
	font-size: 1.25rem;
	font-weight: 800;
	color: var(--a12-principal, #6b4227);
}

/* ------------------------------------------------- colisão de nome de classe
 *
 * O WordPress põe o nome do tipo de post como classe no item do loop, então
 * cada cartão sai com `class="… titulo type-titulo …"`. E o portal tem uma
 * regra de utilidade escrita para o **título de um cartão**:
 *
 *     .titulo { height: 84px; -webkit-line-clamp: 3 !important; }
 *
 * Três linhas de texto. Aplicada ao cartão inteiro, ela o corta em 84 px com
 * `overflow: hidden` — a imagem de 272 px transborda e o nome fica pela
 * metade. Foi o que apareceu na primeira montagem desta página.
 *
 * O Santo do Dia não sofre porque a classe dele é `santo`, e ninguém escreveu
 * `.santo`. É sorte, não desenho: qualquer CPT cujo nome coincida com uma
 * classe de utilidade do tema cai no mesmo buraco.
 *
 * Na ficha individual o estrago é maior: o invólucro
 * `.elementor-location-single` também carrega a classe, e a **página inteira**
 * fica com 84 px de altura e o resto cortado — 84 px contra os 2.791 px da
 * mesma página no Santo do Dia.
 *
 * Desfaz-se só onde é nosso: elemento que é invólucro do Elementor **e** carrega
 * a classe do tipo. Um `.titulo` de verdade — o título de um cartão, que foi
 * para quem a regra foi escrita — não tem `.elementor` junto, e continua
 * intacto.
 */

.elementor.titulo,
.elementor.type-titulo,
.e-loop-item.titulo,
.e-loop-item.type-titulo {
	height: auto;
	max-height: none;
	overflow: visible;
	-webkit-line-clamp: none !important;
	display: block;
}

/* ------------------------------------------------------- a ficha sem recheio
 *
 * O acervo dos Títulos é desigual de um jeito que o do Santo do Dia não é:
 * **221 das 265 fichas não têm reflexão**, 29 não têm oração, 55 não têm lugar
 * e 157 não têm padroado. No Santo do Dia falta reflexão em uma ficha de 407 —
 * daí o modelo nunca ter precisado pensar no vazio.
 *
 * O Elementor já não imprime um widget cujo conteúdo dinâmico é vazio. O que
 * sobra é a moldura em volta dele: o olho "PARA SUA CAMINHADA", o título
 * "Reflexão de …", o traço — uma seção que anuncia um texto que não existe.
 *
 * O modelo marca essas seções com `a12-secao-opcional`, e aqui elas somem
 * quando o widget que era o motivo delas não veio. O olho e o título ficam num
 * contêiner interno, então `>` os exclui da conta de propósito.
 */

.a12-secao-opcional:not(:has(> .elementor-widget-text-editor)) { display: none; }

/* Mesma história na linha de dados do topo: sem data, sem lugar ou sem
 * padroado, o item continua ocupando o seu lugar na lista — com o ícone, e com
 * o traço separador que o antecede. É o `| 📍 Alemanha` que aparecia na ficha
 * da Desatadora dos Nós: o traço era o padroado vazio. */

.elementor.type-titulo .elementor-icon-list-item:has(> .elementor-icon-list-text:empty) { display: none; }

/* O traço separador é `::after` do item, e some junto com ele — menos quando o
 * item escondido é o último: aí o traço que sobra é o do vizinho anterior, e a
 * linha termina com uma barra solta. Tira-se o traço de quem não tem, depois de
 * si, nenhum item com texto. */

.elementor.type-titulo .elementor-icon-list-item:not(:has(~ .elementor-icon-list-item > .elementor-icon-list-text:not(:empty)))::after {
	content: none;
}

/* =========================================================== o calendário
 *
 * As classes são as do Santo do Dia de propósito — `.a12-cal*` — e as regras
 * vêm de lá. Não é cópia por pressa: o calendário é o mesmo objeto de tela nos
 * dois serviços, e o que diverge é o **dado** (lá todo dia tem verbete, aqui 232
 * dos 366 não têm festa) e a **navegação** (lá o dia é rota, aqui é recorte).
 *
 * Três diferenças estão escritas abaixo, nos comentários de cada uma:
 * o dia sem festa deixou de usar um cinza da paleta terracota; o painel flutua
 * por CSS em vez de por ilha React; e as regras da ilha não vieram, porque aqui
 * não há ilha.
 *
 * Se um dia a folha do santo mudar, esta não muda com ela. É o preço de os
 * módulos não compartilharem assets — e é menor que o de um módulo declarar a
 * folha do outro, que o empacotador recusa, com razão.
 */
/* ---------------------------------------------- o gatilho e o painel
 *
 * O calendário não ocupa mais a página: fica atrás de um botão com a data em
 * foco e aparece por cima quando alguém pede. Sem JavaScript o mesmo HTML é um
 * `<details>`, que abre no lugar — o conteúdo não some, muda de forma.
 */

.a12-cal-caixa {
	position: relative;
	display: inline-block;
	max-width: 100%;
}

/* O gatilho do santo é um `<button>`, e o reset do tema lhe dá `padding: 1rem` e
 * `border-radius: 32px` — o que está na tela, e não o que a folha dele pede.
 * Este é um `<summary>`, que escapa do reset e por isso saía 13 px mais baixo
 * que o irmão. As medidas aqui são as do que se vê, para os dois serem gêmeos
 * lado a lado. */
.a12-cal-gatilho {
	display: inline-flex;
	align-items: center;
	gap: .85rem;
	padding: 1rem;
	border: 0;
	border-radius: 32px;
	background: none;
	color: var(--a12-secundaria, #4b2d22);
	font: inherit;
	text-align: left;
	cursor: pointer;
	list-style: none;          /* o marcador do <summary> */
}

.a12-cal-gatilho::-webkit-details-marker { display: none; }

.a12-cal-gatilho,
.a12-cal-gatilho:hover,
.a12-cal-gatilho:focus,
.a12-cal-gatilho:active,
.a12-cal-gatilho[aria-expanded="true"] {
	border: 0;
	background: none;
	color: var(--a12-secundaria, #4b2d22);
}

.a12-cal-gatilho:hover,
.a12-cal-gatilho:focus,
.a12-cal-gatilho[aria-expanded="true"] { background: color-mix(in srgb, var(--a12-principal, #6b4227) 6%, transparent); }

.a12-cal-gatilho:focus-visible { outline: 3px solid var(--a12-principal, #6b4227); outline-offset: 2px; }

.a12-cal-gatilho__icone {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	flex: 0 0 auto;
	width: 52px;
	height: 52px;
	border-radius: 12px;
	background: var(--a12-principal, #6b4227);
	color: var(--a12-on-principal, #fff);
}

.a12-cal-gatilho__texto { display: flex; flex-direction: column; gap: .1rem; }

.a12-cal-gatilho__rotulo {
	color: var(--a12-intermediaria, #7a5438);
	font-size: .9rem;
	font-weight: 400;
	line-height: 1.2;
}

.a12-cal-gatilho__data {
	color: var(--a12-secundaria, #4b2d22);
	font-size: 1.15rem;
	font-weight: 700;
	line-height: 1.2;
}

.a12-cal-caixa--aberto { display: block; }

/* O painel flutua sobre a página quando o gatilho abre — e aqui isso é CSS, não
 * JavaScript. No Santo do Dia quem levanta o painel é a ilha React; este
 * calendário não tem ilha, e um `<details open>` com o `<nav>` posicionado faz o
 * mesmo serviço: a grade sobe por cima em vez de empurrar o acervo para baixo da
 * dobra, e continua funcionando com o JavaScript desligado. */
details.a12-cal-caixa[open] > .a12-cal {
	position: absolute;
	z-index: 30;
	top: calc(100% + .4rem);
	left: 0;
	min-width: 18rem;
	box-shadow: 0 12px 34px color-mix(in srgb, var(--a12-secundaria, #4b2d22) 22%, transparent);
}

@media (max-width: 420px) {
	details.a12-cal-caixa[open] > .a12-cal {
		left: 50%;
		transform: translateX(-50%);
	}
}

/* ------------------------------------------------- as medidas são as do irmão
 *
 * O calendário do Santo do Dia que está na tela é o da **ilha React**, e as
 * regras `.a12-cal*` da folha dele são o desenho do fallback — que ninguém vê,
 * porque a ilha o substitui antes da primeira pintura. Copiar aquelas regras foi
 * o que fez este calendário sair 17% maior que o original: painel de 338 px
 * contra 288, mês em 30 px contra 18, dia de 44 px contra 40.
 *
 * O que vale aqui são as medidas da ilha, portadas para a marcação de servidor:
 *
 *     painel      18rem          (`.a12-cal-painel { min-width }`)
 *     topo        .35rem .4rem   (`__navigation`)
 *     mês         clamp(1rem, .85rem + .7vw, 1.3rem), 600
 *     semana      .8rem, 700, .55rem 0
 *     grade       .4rem .3rem .7rem
 *     dia         .85rem numa caixa de 40 px, com o círculo de 1.8rem dentro
 */

.a12-cal {
	--cal-tinta: var(--a12-principal, #6b4227);
	--cal-faixa: var(--a12-fundo-suave, #f2e7df);
	--cal-dia: var(--a12-intermediaria, #7a5438);

	width: 18rem;
	max-width: 100%;
	margin-inline: auto;
	border-radius: 16px;
	overflow: hidden;
	background: #fff;
	font-family: inherit;
	line-height: 1.2;
}

/* ------------------------------------------------------------------- topo */

.a12-cal__topo {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: .25rem;
	padding: .35rem .4rem;
	background: var(--a12-principal, #6b4227);
	color: var(--a12-on-principal, #fff);
}

.a12-cal__mes {
	flex-grow: 1;
	margin: 0;
	color: var(--a12-on-principal, #fff);
	/* o `clamp` é o que a folha do santo pede para o rótulo; o que está na tela
	 * é 1.15rem, porque `__navigation button` vem depois e vence. Aqui vale o
	 * que se vê — 20.8px contra 18.4px era a última diferença de tamanho. */
	font-size: 1.15rem;
	font-weight: 600;
	letter-spacing: .02em;
	text-align: center;
	text-transform: uppercase;
}

.a12-cal__seta {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	flex: 0 0 auto;
	min-width: 32px;
	height: 32px;
	border-radius: 50%;
	color: var(--a12-on-principal, #fff);
	text-decoration: none;
	line-height: 1;
}

.a12-cal__seta:hover,
.a12-cal__seta:focus-visible { background: color-mix(in srgb, var(--a12-on-principal, #fff) 18%, transparent); color: var(--a12-on-principal, #fff); }

.a12-cal__grade {
	display: grid;
	grid-template-columns: repeat(7, 1fr);
	justify-items: center;
	align-items: center;
	padding: .4rem .3rem .7rem;
	background: #fff;
}

.a12-cal__semana {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 100%;
	padding: .55rem 0;
	background: var(--cal-faixa);
	color: var(--cal-tinta);
	font-size: .8rem;
	font-weight: 700;
	text-decoration: none;           /* abbr[title] vem pontilhado */
	text-transform: uppercase;
}

/* a faixa é contínua: a margem lateral do primeiro e do último a completa */
.a12-cal__semana:nth-child(1) { margin-left: -.5rem; padding-left: .5rem; width: calc(100% + .5rem); }

.a12-cal__semana:nth-child(7) { margin-right: -.5rem; padding-right: .5rem; width: calc(100% + .5rem); }

.a12-cal__dia {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	/* fluida, e não 40 px fixos: na raiz a coluna dá 288 px e a célula chega no
	 * tamanho do irmão; na ficha a coluna tem 223 px, e com largura fixa a grade
	 * pedia 280 e o sábado saía cortado pela borda do painel. O `react-calendar`
	 * do santo não sofre disso porque as células dele são porcentagem. */
	width: 100%;
	max-width: 40px;
	aspect-ratio: 1;
	color: var(--cal-dia);
	font-size: .85rem;
	font-weight: 500;
	text-decoration: none;           /* o tema sublinha link */
	box-shadow: none;
}

/* O círculo é menor que a célula, como no original: a caixa de 40 px é o alvo
 * do toque, e o que se pinta é 1.8rem no meio dela. Pintar a célula inteira
 * fazia o dia de hoje sair com o dobro da mancha do calendário do santo. */
.a12-cal__dia > span {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: min(1.8rem, 100%);
	aspect-ratio: 1;
	border-radius: 50%;
	transition: background-color .15s ease, color .15s ease;
}

a.a12-cal__dia:hover > span { background: var(--cal-faixa); color: var(--cal-tinta); }

a.a12-cal__dia:focus-visible > span { outline: 3px solid var(--cal-tinta); outline-offset: 2px; }

.a12-cal__dia--ativo > span,
a.a12-cal__dia--ativo:hover > span {
	background: var(--cal-tinta);
	color: var(--a12-on-principal, #fff);
	font-weight: 700;
}

/* o dia sem festa é a maioria — 232 de 366 — e precisa ser legível como
 * ausência, não como link apagado. Derivado da cor do texto e não escrito à
 * mão: o cinza da folha do santo era da paleta terracota, e saía quente no
 * azul da Academia Marial. */
.a12-cal__dia--sem {
	color: color-mix(in srgb, var(--cal-dia) 42%, transparent);
	cursor: default;
}

@media (max-width: 380px) {
	.a12-cal__dia, .a12-cal__seta { width: 36px; height: 36px; }
	.a12-cal__semana { height: 2.2rem; }
}

/* As iniciais da semana são `<abbr title>`, e o tema estiliza `abbr[title]`
 * com sublinhado pontilhado — com peso maior que um seletor de classe, então o
 * `text-decoration: none` de `.a12-cal__semana` não vence sozinho. Na folha do
 * santo o remédio está escrito só para dentro da ilha React, que aqui não
 * existe: o calendário visível é o do servidor, e é ele que precisa. */
.a12-cal abbr,
.a12-cal abbr[title] {
	text-decoration: none;
	border-bottom: 0;
	cursor: default;
}
