/**
 * Attributi per Categoria - stile del pannello filtri.
 *
 * Nato dentro il tema figlio frost-child (Gioielleria Sessa) e spostato qui
 * perche' il markup e' del plugin: chi lo installa su un altro tema deve
 * vederlo gia' presentabile, senza copiare regole a mano.
 *
 * I colori e i corpi testo passano tutti dai token --apc-* definiti sotto:
 * ognuno prende il preset del tema se esiste e ripiega su un valore neutro
 * altrimenti. Un tema con la sua palette (frost-child) continua quindi a
 * dettare l'aspetto; un tema che quei preset non li ha (zavixtech, che ha
 * solo base/contrast/primary/secondary/neutral) non resta senza colori.
 */

:root {
	/* ponytail: i token stanno su :root, non sul wrap, perche' il pannello del
	   dropdown custom viene appeso a <body> in JS e fuori dal wrap non
	   erediterebbe nulla. */
	--apc-primary: var(--wp--preset--color--primary, #1c1b1b);
	--apc-primary-hover: var(--wp--preset--color--primary-container, var(--wp--preset--color--secondary, #4a4a4a));
	--apc-surface: var(--wp--preset--color--surface, var(--wp--preset--color--base, #fff));
	--apc-surface-hover: var(--wp--preset--color--surface-container-low, var(--wp--preset--color--neutral, #f4f2ef));
	--apc-surface-option-hover: var(--wp--preset--color--surface-warm, var(--wp--preset--color--neutral, #f6f1e9));
	--apc-text: var(--wp--preset--color--on-surface, var(--wp--preset--color--contrast, #1c1b1b));
	--apc-text-muted: var(--wp--preset--color--on-surface-variant, #5c5c5c);
	--apc-line: var(--wp--preset--color--outline-variant, #dcdcdc);
	--apc-line-strong: var(--wp--preset--color--outline, #9a9a9a);
	--apc-font: var(--wp--preset--font-family--primary, inherit);
	--apc-font-size-label: var(--wp--preset--font-size--label, 0.8125rem);
	--apc-font-size-value: var(--wp--preset--font-size--x-small, 0.875rem);
}

/* ---------- Pagina categoria: filtri per attributo ---------- */

/* Il filo di separazione dai risultati sta sul contenitore, non sul form:
   deve restare visibile anche a pannello chiuso. */
.apc-category-filters-wrap {
	margin-top: 2rem; /* la descrizione categoria sopra finiva incollata,
	   0px di distanza: il blockGap del tema non arriva a un blocco Shortcode */
	margin-bottom: 2rem;
	padding-bottom: 1rem;
	border-bottom: 1px solid var(--apc-line);
}

/* Il blocco shortcode nasce "constrained" (~750px) dentro il contenuto, mentre
   la griglia prodotti sotto e' "wide": per tenere tutti i campi su una riga
   sola (e allineare i filtri ai bordi della griglia) il wrap prende la
   larghezza wide. I margini auto del layout constrained restano e lo centrano.
   Due selettori perche' il wrapper del contenuto cambia nome da tema a tema. */
.site-content > .apc-category-filters-wrap,
.wp-site-blocks > .apc-category-filters-wrap {
	max-width: var(--wp--style--global--wide-size);
}

.apc-filters-bar {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 1rem;
}

/* Toggle in stile terziario: solo icona + testo maiuscolo, nessun box.
   Padding laterale a zero per allineare l'icona al margine del contenuto. */
.apc-filters-toggle {
	display: inline-flex;
	align-items: center;
	gap: 0.5rem;
	padding: 0.5rem 0;
	background: transparent;
	border: 0;
	color: var(--apc-primary);
	font-family: var(--apc-font);
	font-size: var(--apc-font-size-label);
	text-transform: uppercase;
	letter-spacing: 0.05em;
	cursor: pointer;
}
.apc-filters-toggle:hover,
.apc-filters-toggle[aria-expanded="true"] {
	background: transparent;
	color: var(--apc-primary-hover);
}

/* Filtri attivi: chip rimovibile singolarmente + reset, visibili anche a
   pannello chiuso cosi' un filtro applicato non resta "invisibile". */
.apc-active-filters {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 0.5rem;
}
.apc-active-filters__chip {
	display: inline-flex;
	align-items: center;
	gap: 0.4rem;
	padding: 0.35rem 0.7rem;
	background: transparent;
	border: 1px solid var(--apc-line);
	border-radius: 999px;
	color: var(--apc-text);
	font-family: var(--apc-font);
	font-size: var(--apc-font-size-label);
	text-decoration: none;
	transition: border-color 150ms ease, color 150ms ease;
}
.apc-active-filters__chip:hover {
	border-color: var(--apc-primary);
	color: var(--apc-primary);
}
.apc-active-filters__chip svg {
	flex-shrink: 0;
}
.apc-active-filters__reset {
	font-family: var(--apc-font);
	font-size: var(--apc-font-size-label);
	text-transform: uppercase;
	letter-spacing: 0.05em;
	color: var(--apc-text-muted);
	text-decoration: underline;
}
.apc-active-filters__reset:hover {
	color: var(--apc-primary);
}

/* Fisarmonica: una griglia a riga singola che passa da 0fr a 1fr. E' l'unico
   modo di animare fino all'altezza reale del contenuto senza calcolarla in JS.
   La visibility toglie i select dall'ordine di tabulazione a pannello chiuso
   (l'overflow da solo non basta: restano raggiungibili da tastiera). */
.apc-filters-panel {
	display: grid;
	grid-template-rows: 0fr;
	transition: grid-template-rows 300ms ease;
}
/* Contenitore interno senza padding proprio: e' lui a collassare a zero. Il
   padding del form, se stesse qui, resterebbe visibile anche a pannello chiuso,
   perche' min-height:0 azzera l'altezza del contenuto ma non il padding. */
.apc-filters-panel > .apc-filters-panel__inner {
	min-height: 0;
	overflow: hidden;
	visibility: hidden;
	transition: visibility 0s 300ms;
}
.apc-category-filters-wrap.is-open .apc-filters-panel {
	grid-template-rows: 1fr;
}
.apc-category-filters-wrap.is-open .apc-filters-panel > .apc-filters-panel__inner {
	visibility: visible;
	transition: visibility 0s;
}
@media (prefers-reduced-motion: reduce) {
	.apc-filters-panel {
		transition: none;
	}
}

/* Form su riga singola: ogni campo occupa una frazione uguale della larghezza.
   flex-wrap resta come rete di sicurezza per categorie con molti attributi
   (oltre ~8 campi la riga va a capo invece di schiacciarsi). */
.apc-category-filters {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-end;
	gap: 1.5rem;
	margin-top: 1rem;
	padding: 1rem 0 0;
	background: transparent;
}
.apc-category-filters__field {
	display: flex;
	flex-direction: column;
	gap: 0.35rem;
	flex: 1 1 0;
	min-width: 130px;
}
.apc-category-filters__field label {
	font-size: var(--apc-font-size-label);
	text-transform: uppercase;
	letter-spacing: 0.05em;
	color: var(--apc-text-muted);
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}
/* Select "minimalist underline": solo sottolineatura 1px, niente box.
   appearance:none rimuove il fondo di sistema; la freccia custom sostituisce
   quella nativa, che varia per OS. Da 601px in su questo <select> e' nascosto
   e al suo posto c'e' il dropdown custom, quindi la freccia si vede di fatto
   solo su mobile. overflow/ellipsis: le opzioni lunghe non rompono la riga. */
.apc-category-filters__field select {
	width: 100%;
	min-width: 0;
	height: 44px;
	padding: 0 1.5rem 0 0;
	appearance: none;
	-webkit-appearance: none;
	background-color: transparent;
	/* ponytail: stroke fisso nel data URI. Una mask colorabile con var() qui
	   non si puo' usare: ritaglierebbe l'intero elemento, testo compreso.
	   Il grigio neutro regge su qualunque palette; questa freccia si vede solo
	   sotto i 601px, sopra c'e' il dropdown custom. */
	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 fill='none' stroke='%23666666' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round' d='M1 1l5 5 5-5'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right 0.25rem center;
	border: 0;
	border-bottom: 1px solid var(--apc-line);
	border-radius: 0;
	color: var(--apc-text);
	font-family: var(--apc-font);
	font-size: var(--apc-font-size-value);
	cursor: pointer;
	overflow: hidden;
	white-space: nowrap;
	text-overflow: ellipsis;
}
.apc-category-filters__field select:hover {
	border-bottom-color: var(--apc-primary);
}
/* Al focus la linea si ispessisce via box-shadow (non via border-width, che
   sposterebbe il layout di 1px): stato visibile anche senza percepire il colore. */
.apc-category-filters__field select:focus-visible {
	outline: none;
	border-bottom-color: var(--apc-primary);
	box-shadow: 0 1px 0 var(--apc-primary);
}
.apc-category-filters__actions {
	display: flex;
}
/* Pulsante secondario: trasparente con bordo 1px. Specificita' doppia classe
   per vincere su .wp-element-button del core, che impone sfondo/colore pieni
   con la stessa specificita' di classe singola. */
.apc-category-filters .apc-category-filters__submit {
	height: 44px;
	display: inline-flex;
	align-items: center;
	padding: 0 1.25rem;
	background-color: transparent;
	border: 1px solid var(--apc-primary);
	border-radius: 4px;
	color: var(--apc-primary);
	font-size: var(--apc-font-size-label);
	text-transform: uppercase;
	letter-spacing: 0.05em;
	white-space: nowrap;
}
.apc-category-filters .apc-category-filters__submit:hover {
	background-color: var(--apc-surface-hover);
}

/* Dropdown custom dei filtri (Marchio e affini), da 601px in su: sostituisce
   lo <select> nativo (script in apc_filters_toggle_script()) il cui popup non
   e' stilizzabile e varia per browser/OS. Lo <select> resta nel form ma
   nascosto (.apc-select__native): invio dati invariato. Il pannello e' in
   position:fixed e appeso a <body> in JS, cosi' non viene tagliato
   dall'overflow:hidden dell'accordion filtri. */
/* Doppio selettore: .apc-category-filters__field select qui sopra vale (0,1,1)
   e batterebbe .apc-select__native (0,1,0) su width/height, lasciando lo
   <select> a tutta larghezza fuori schermo (overflow orizzontale). */
.apc-category-filters__field select.apc-select__native {
	position: absolute;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip: rect(0, 0, 0, 0);
	white-space: nowrap;
	border: 0;
}
.apc-select__trigger {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 0.5rem;
	width: 100%;
	height: 44px;
	padding: 0;
	background: transparent;
	border: 0;
	border-bottom: 1px solid var(--apc-line);
	border-radius: 0;
	color: var(--apc-text);
	font-family: var(--apc-font);
	font-size: var(--apc-font-size-value);
	text-align: left;
	cursor: pointer;
}
.apc-select__trigger:hover,
.apc-select__trigger[aria-expanded="true"] {
	border-bottom-color: var(--apc-primary);
}
.apc-select__trigger:focus-visible {
	outline: none;
	box-shadow: 0 1px 0 var(--apc-primary);
}
.apc-select__value {
	overflow: hidden;
	white-space: nowrap;
	text-overflow: ellipsis;
}
.apc-select__trigger svg {
	flex-shrink: 0;
	color: var(--apc-primary);
	transition: transform 150ms ease;
}
.apc-select__trigger[aria-expanded="true"] svg {
	transform: rotate(180deg);
}
/* min-width impostato in JS = larghezza del trigger + 20px ("leggermente
   piu' largo del campo"); max-width tiene a bada i valori con nome lungo. */
.apc-select__panel {
	position: fixed;
	display: flex;
	flex-direction: column;
	max-width: 340px;
	background-color: var(--apc-surface);
	border: 1px solid var(--apc-line);
	border-radius: 0;
	box-shadow: 0 8px 24px rgba(28, 27, 27, 0.12);
	z-index: 1000;
}
/* "display:flex" sopra vince, per specificita' d'autore, sulla regola
   user-agent "[hidden]{display:none}": senza questa riga il pannello
   chiuso (e le opzioni filtrate dalla ricerca, stesso problema sotto)
   resterebbero visibili. */
.apc-select__panel[hidden] {
	display: none;
}
.apc-select__search {
	padding: 0.5rem 0.75rem;
	border-bottom: 1px solid var(--apc-line);
}
.apc-select__search input {
	width: 100%;
	padding: 0.3rem 0;
	background: transparent;
	border: 0;
	color: var(--apc-text);
	font-family: var(--apc-font);
	font-size: var(--apc-font-size-value);
}
.apc-select__search input:focus {
	outline: none;
}
.apc-select__search input::placeholder {
	color: var(--apc-line-strong);
}
.apc-select__list {
	list-style: none;
	margin: 0;
	padding: 0.25rem 0;
	max-height: 280px;
	overflow-y: auto;
}
/* Hover tenue al posto dell'evidenziazione blu di sistema dello <select>. */
.apc-select__option {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 0.75rem;
	padding: 0.6rem 0.9rem;
	color: var(--apc-text);
	font-size: var(--apc-font-size-value);
	cursor: pointer;
}
.apc-select__option:hover,
.apc-select__option.is-active {
	background-color: var(--apc-surface-option-hover);
}
.apc-select__option[hidden] {
	display: none;
}
.apc-select__option.is-selected {
	font-weight: 700;
}
.apc-select__check {
	flex-shrink: 0;
	opacity: 0;
	color: var(--apc-primary);
}
.apc-select__option.is-selected .apc-select__check {
	opacity: 1;
}
.apc-select__list--empty::after {
	content: "Nessun risultato";
	display: block;
	padding: 0.6rem 0.9rem;
	color: var(--apc-line-strong);
	font-size: var(--apc-font-size-value);
}

/* Intestazione del pannello filtri: serve solo dentro il bottom sheet mobile
   (la X per chiuderlo), su desktop il pannello resta l'accordion inline di
   sempre e questa riga non ha senso li'. */
.apc-filters-panel__header {
	display: none;
}

/* Sotto i 600px: un campo per riga, pulsante a tutta larghezza, e il pannello
   filtri diventa un bottom sheet invece dell'accordion. */
@media (max-width: 600px) {
	.apc-category-filters__field {
		flex-basis: 100%;
	}
	.apc-category-filters__actions {
		flex-basis: 100%;
	}
	.apc-category-filters .apc-category-filters__submit {
		justify-content: center;
		width: 100%;
	}

	.apc-filters-bar {
		flex-wrap: nowrap;
		gap: 0;
		border: 1px solid var(--apc-primary);
		border-radius: 4px;
		overflow: hidden;
	}
	.apc-filters-toggle {
		display: inline-flex;
		flex: 1 1 0;
		min-width: 0;
		justify-content: center;
		padding: 0.85rem 0.5rem;
	}
	.apc-active-filters {
		flex-basis: 100%;
		margin-top: 0.75rem;
	}

	.apc-filters-panel__header {
		display: flex;
		align-items: center;
		justify-content: space-between;
		margin-bottom: 1rem;
		padding-bottom: 0.75rem;
		border-bottom: 1px solid var(--apc-line);
	}
	.apc-filters-panel__title {
		font-family: var(--apc-font);
		font-size: var(--apc-font-size-label);
		font-weight: 700;
		text-transform: uppercase;
		letter-spacing: 0.05em;
	}
	.apc-filters-panel__close {
		display: flex;
		background: transparent;
		border: 0;
		color: var(--apc-text-muted);
		padding: 0.25rem;
		cursor: pointer;
	}

	/* L'accordion desktop (grid-template-rows 0fr/1fr + inner collassato)
	   lascia il posto a un pannello ancorato in basso: stessa classe
	   ".is-open", comportamento CSS completamente diverso. */
	.apc-filters-panel {
		position: fixed;
		left: 0;
		right: 0;
		bottom: 0;
		z-index: 1000;
		display: block;
		max-height: 80vh;
		overflow-y: auto;
		background-color: var(--apc-surface);
		border-radius: 0;
		box-shadow: 0 -4px 24px rgba(0, 0, 0, 0.15);
		padding: 1.25rem 1.25rem calc(1.25rem + env(safe-area-inset-bottom));
		transform: translateY(100%);
		transition: transform 300ms ease;
	}
	.apc-filters-panel > .apc-filters-panel__inner {
		min-height: auto;
		overflow: visible;
		visibility: visible;
		transition: none;
	}
	.apc-category-filters-wrap.is-open .apc-filters-panel {
		transform: translateY(0);
	}
	.apc-category-filters {
		flex-direction: column;
		align-items: stretch;
		gap: 1.25rem;
	}
	@media (prefers-reduced-motion: reduce) {
		.apc-filters-panel {
			transition: none;
		}
	}
}
