/* ==========================================================================
   Menu mobile · foglio blindato

   Stesso impianto di `drawer.css`, e per le stesse ragioni: il kit di
   Elementor scrive `.elementor-kit-N button` con la classe sul <body>, quindi
   raggiunge anche il footer a (0,2,0). Uscire dal DOM di Elementor non basta:
   serve un'ancora che non si possa battere senza !important, e nel kit
   !important non c'e'. Da qui in poi ogni selettore parte da #webell-menu.

   I valori di movimento sono gli stessi del drawer, ripetuti e non ereditati:
   i due fogli non si vedono fra loro, e una durata che diverge di cinquanta
   millisecondi si nota. Se un giorno cambiano, cambiano in due punti.

   L'unica differenza voluta e' il lato: il drawer entra da destra, questo da
   sinistra. Due pannelli che entrano dallo stesso lato si leggerebbero come
   lo stesso pannello con dentro cose diverse.
   ========================================================================== */


/* --------------------------------------------------------------------------
   1 · RESET DI ANCORAGGIO
   -------------------------------------------------------------------------- */

#webell-menu,
#webell-menu :where(*:not(svg, svg *)),
#webell-menu :where(*:not(svg, svg *))::before,
#webell-menu :where(*:not(svg, svg *))::after {
	all: revert;
	box-sizing: border-box;
}

#webell-menu :where(*:not(svg, svg *)) {
	border-radius: 0 !important;
	box-shadow: none !important;
}


/* --------------------------------------------------------------------------
   2 · RADICE
   -------------------------------------------------------------------------- */

#webell-menu {
	--wm-verde: #2D4A3E;
	--wm-terra: #B85C38;
	--wm-pietra: #F5F2EC;
	--wm-hair: rgba(45, 74, 62, .16);
	--wm-hair-forte: rgba(45, 74, 62, .28);
	--wm-muted: rgba(45, 74, 62, .62);
	--wm-faint: rgba(45, 74, 62, .42);
	--wm-larghezza: 420px;
	--wm-pad: 26px;
	--wm-durata: .34s;
	--wm-ease: cubic-bezier(.4, 0, .2, 1);

	position: fixed;
	inset: 0;
	z-index: 99992;
	visibility: hidden;
	pointer-events: none;
	transition: visibility 0s linear var(--wm-durata);

	font-family: "DM Sans", system-ui, -apple-system, "Segoe UI", sans-serif;
	font-size: 15px;
	font-weight: 400;
	line-height: 1.55;
	color: var(--wm-verde);
	text-align: left;
	letter-spacing: normal;
	text-transform: none;
}

#webell-menu[data-wm-stato="aperto"] {
	visibility: visible;
	pointer-events: auto;
	transition-delay: 0s;
}

body.admin-bar #webell-menu { top: 32px; }

@media screen and (max-width: 782px) {
	body.admin-bar #webell-menu { top: 46px; }
}

html.wm-lock {
	overflow: hidden;
	padding-right: var(--wm-sbw, 0px);
}


/* --------------------------------------------------------------------------
   3 · VELO
   -------------------------------------------------------------------------- */

#webell-menu .wm__velo {
	position: absolute;
	inset: 0;
	background: rgba(45, 74, 62, .40);
	opacity: 0;
	transition: opacity var(--wm-durata) var(--wm-ease);
	cursor: pointer;
}

#webell-menu[data-wm-stato="aperto"] .wm__velo { opacity: 1; }


/* --------------------------------------------------------------------------
   4 · PANNELLO
   Ancorato a sinistra, quindi entra da sinistra: e' l'unica differenza di
   sostanza rispetto al drawer.
   -------------------------------------------------------------------------- */

#webell-menu .wm__pannello {
	position: absolute;
	top: 0;
	left: 0;
	display: flex;
	flex-direction: column;
	width: min(88vw, var(--wm-larghezza));
	height: 100%;
	max-height: 100%;
	margin: 0;
	padding: 0;
	background: var(--wm-pietra);
	border: 0;
	border-right: 1px solid var(--wm-hair-forte);
	transform: translateX(-100%);
	transition: transform var(--wm-durata) var(--wm-ease);
}

#webell-menu[data-wm-stato="aperto"] .wm__pannello { transform: translateX(0); }


/* --------------------------------------------------------------------------
   5 · TESTA
   -------------------------------------------------------------------------- */

#webell-menu .wm__testa {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 12px;
	flex: 0 0 auto;
	margin: 0;
	padding: 22px var(--wm-pad) 16px;
	border-bottom: 1px solid var(--wm-hair);
}

#webell-menu .wm__etichetta {
	font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, monospace;
	font-size: 11px;
	font-weight: 500;
	line-height: 1;
	letter-spacing: .16em;
	text-transform: uppercase;
	color: var(--wm-muted);
}

#webell-menu .wm__chiudi {
	flex: 0 0 auto;
	width: 34px;
	height: 34px;
	margin: 0;
	padding: 0;
	background: transparent;
	border: 1px solid transparent;
	color: var(--wm-verde);
	opacity: .55;
	cursor: pointer;
	transition: opacity .2s var(--wm-ease), border-color .2s var(--wm-ease);
}

#webell-menu .wm__chiudi:hover,
#webell-menu .wm__chiudi:focus-visible {
	opacity: 1;
	border-color: var(--wm-hair-forte);
}

#webell-menu .wm__chiudi svg {
	display: block;
	width: 15px;
	height: 15px;
	margin: 0 auto;
	fill: none;
	stroke: currentColor;
	stroke-width: 1.4;
	stroke-linecap: round;
}


/* --------------------------------------------------------------------------
   6 · CORPO E VOCI
   Le voci sono in Cormorant e grandi: su mobile il menu e' una pagina, non
   una tendina, e ha lo spazio per esserlo. La riga di separazione e' un
   capello, non un bordo.
   -------------------------------------------------------------------------- */

#webell-menu .wm__corpo {
	flex: 1 1 auto;
	min-height: 0;
	overflow-y: auto;
	overscroll-behavior: contain;
	-webkit-overflow-scrolling: touch;
	padding: 6px 0 18px;
}

#webell-menu .wm__lista,
#webell-menu .sub-menu {
	list-style: none;
	margin: 0;
	padding: 0;
}

#webell-menu .wm__lista > li {
	margin: 0;
	padding: 0;
	border-bottom: 1px solid var(--wm-hair);
}

/* Il link di una voce con figli viene spostato dentro `.wm__riga` dal
   JavaScript, quindi smette di essere figlio diretto del <li>: entrambe le
   forme devono ricevere la stessa tipografia, o meta' menu si rimpicciolisce
   appena c'e' un sottomenu. */
#webell-menu .wm__lista > li > a,
#webell-menu .wm__lista > li > .wm__riga > a {
	display: block;
	padding: 15px var(--wm-pad);
	font-family: "Cormorant", "Cormorant Garamond", Georgia, serif;
	font-size: 27px;
	font-weight: 600;
	line-height: 1.15;
	letter-spacing: -.01em;
	color: var(--wm-verde);
	text-decoration: none;
}

#webell-menu .wm__lista > li > a:hover,
#webell-menu .wm__lista > li > .wm__riga > a:hover,
#webell-menu .wm__lista > li > a:focus-visible,
#webell-menu .wm__lista > li > .wm__riga > a:focus-visible { text-decoration: none; }

#webell-menu .wm__lista > li > a:focus-visible,
#webell-menu .wm__lista > li > .wm__riga > a:focus-visible {
	outline: 2px solid var(--wm-verde);
	outline-offset: -4px;
}

/* La voce corrente e' segnata da un capello verticale, non da un colore:
   il terracotta e' impegnato altrove e un secondo verde non si vedrebbe. */
#webell-menu .wm__lista > li.current-menu-item > a,
#webell-menu .wm__lista > li.current-menu-parent > a,
#webell-menu .wm__lista > li.current-menu-ancestor > a,
#webell-menu .wm__lista > li.current-menu-item > .wm__riga > a,
#webell-menu .wm__lista > li.current-menu-parent > .wm__riga > a,
#webell-menu .wm__lista > li.current-menu-ancestor > .wm__riga > a {
	border-left: 2px solid var(--wm-verde);
	padding-left: calc(var(--wm-pad) - 2px);
}

#webell-menu .sub-menu > li.current-menu-item > a {
	border-left: 2px solid var(--wm-verde);
	padding-left: calc(var(--wm-pad) + 14px);
	color: var(--wm-verde);
}

/* ---- voci con figli ----
   Il pulsante lo inietta il JavaScript. Senza JavaScript i sottomenu
   restano aperti: una voce che non si puo' espandere e' peggio di una
   lista lunga. */
#webell-menu .wm__riga {
	display: flex;
	align-items: stretch;
}

#webell-menu .wm__riga > a { flex: 1 1 auto; }

#webell-menu .wm__espandi {
	flex: 0 0 auto;
	width: 56px;
	margin: 0;
	padding: 0;
	background: transparent;
	border: 0;
	border-left: 1px solid var(--wm-hair);
	color: var(--wm-muted);
	cursor: pointer;
}

#webell-menu .wm__espandi svg {
	display: block;
	width: 13px;
	height: 13px;
	margin: 0 auto;
	fill: none;
	stroke: currentColor;
	stroke-width: 1.6;
	stroke-linecap: round;
	stroke-linejoin: round;
	transition: transform var(--wm-durata) var(--wm-ease);
}

#webell-menu li.is-aperto > .wm__riga > .wm__espandi svg { transform: rotate(180deg); }

#webell-menu .wm__espandi:focus-visible {
	outline: 2px solid var(--wm-verde);
	outline-offset: -4px;
}

/* Il sottomenu si apre con le righe della griglia invece che con
   `max-height`: non serve misurare l'altezza in JavaScript e non c'e' un
   valore inventato che tronca le liste lunghe.

   La griglia va sull'involucro che il JavaScript inserisce, non sulla lista:
   `grid-template-rows: 0fr` dimensiona la prima riga, e una lista con piu'
   voci ha piu' righe: dalla seconda in giu' resterebbero visibili. Con un
   solo figlio la riga da chiudere e' una sola.

   Dove l'interpolazione di `grid-template-rows` non e' supportata il
   sottomenu si apre di scatto invece che in scorrimento: perde l'animazione,
   non la funzione. */
#webell-menu li.js-pronto > .wm__sub {
	display: grid;
	grid-template-rows: 0fr;
	transition: grid-template-rows var(--wm-durata) var(--wm-ease);
}

#webell-menu li.js-pronto.is-aperto > .wm__sub {
	grid-template-rows: 1fr;
}

#webell-menu .wm__sub > .sub-menu {
	min-height: 0;
	overflow: hidden;
}

#webell-menu .sub-menu > li {
	margin: 0;
	padding: 0;
	min-height: 0;
}

#webell-menu .sub-menu > li > a {
	display: block;
	padding: 11px var(--wm-pad) 11px calc(var(--wm-pad) + 16px);
	font-size: 15px;
	line-height: 1.3;
	color: var(--wm-muted);
	text-decoration: none;
}

#webell-menu .sub-menu > li:first-child > a { padding-top: 4px; }
#webell-menu .sub-menu > li:last-child > a { padding-bottom: 16px; }

#webell-menu .sub-menu > li > a:focus-visible {
	outline: 2px solid var(--wm-verde);
	outline-offset: -4px;
}

/* Entrata scaglionata: le voci arrivano appena dopo il pannello, non
   insieme. Trenta millisecondi di scarto bastano a far leggere la lista
   come una sequenza invece che come un blocco. */
#webell-menu .wm__lista > li {
	opacity: 0;
	transform: translateX(-10px);
	transition: opacity .3s var(--wm-ease), transform .3s var(--wm-ease);
}

#webell-menu[data-wm-stato="aperto"] .wm__lista > li {
	opacity: 1;
	transform: translateX(0);
}

#webell-menu[data-wm-stato="aperto"] .wm__lista > li:nth-child(1) { transition-delay: .10s; }
#webell-menu[data-wm-stato="aperto"] .wm__lista > li:nth-child(2) { transition-delay: .13s; }
#webell-menu[data-wm-stato="aperto"] .wm__lista > li:nth-child(3) { transition-delay: .16s; }
#webell-menu[data-wm-stato="aperto"] .wm__lista > li:nth-child(4) { transition-delay: .19s; }
#webell-menu[data-wm-stato="aperto"] .wm__lista > li:nth-child(5) { transition-delay: .22s; }
#webell-menu[data-wm-stato="aperto"] .wm__lista > li:nth-child(6) { transition-delay: .25s; }
#webell-menu[data-wm-stato="aperto"] .wm__lista > li:nth-child(7) { transition-delay: .28s; }
#webell-menu[data-wm-stato="aperto"] .wm__lista > li:nth-child(8) { transition-delay: .31s; }
#webell-menu[data-wm-stato="aperto"] .wm__lista > li:nth-child(n+9) { transition-delay: .34s; }


/* --------------------------------------------------------------------------
   7 · PIEDE
   Quello che su mobile si cerca nel menu e non e' una pagina: come si
   ordina, come si accede, come si chiama.
   -------------------------------------------------------------------------- */

#webell-menu .wm__pie {
	flex: 0 0 auto;
	display: flex;
	flex-direction: column;
	gap: 14px;
	margin: 0;
	padding: 18px var(--wm-pad) calc(18px + env(safe-area-inset-bottom, 0px));
	border-top: 1px solid var(--wm-hair);
}

#webell-menu .wm__cta,
#webell-menu .wm__cta:link,
#webell-menu .wm__cta:visited {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 10px;
	min-height: 52px;
	padding: 0 22px;
	background: var(--wm-verde);
	border: 1px solid var(--wm-verde);
	color: var(--wm-pietra);
	font-size: 15px;
	line-height: 1;
	text-align: center;
	text-decoration: none;
	cursor: pointer;
	transition: background-color .2s var(--wm-ease), color .2s var(--wm-ease);
}

#webell-menu .wm__cta:hover,
#webell-menu .wm__cta:focus-visible {
	background: transparent;
	color: var(--wm-verde);
}

#webell-menu .wm__cta:focus-visible {
	outline: 2px solid var(--wm-verde);
	outline-offset: 2px;
}

#webell-menu .wm__account,
#webell-menu .wm__account:link,
#webell-menu .wm__account:visited {
	align-self: flex-start;
	color: var(--wm-verde);
	font-size: 14px;
	text-decoration: underline;
	text-underline-offset: 3px;
}

#webell-menu .wm__contatti {
	list-style: none;
	display: flex;
	flex-wrap: wrap;
	gap: 6px 18px;
	margin: 0;
	padding: 0;
}

#webell-menu .wm__contatti a {
	font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, monospace;
	font-size: 12px;
	letter-spacing: .02em;
	color: var(--wm-muted);
	text-decoration: none;
}

#webell-menu .wm__contatti a:hover,
#webell-menu .wm__contatti a:focus-visible {
	color: var(--wm-verde);
	text-decoration: underline;
	text-underline-offset: 3px;
}

#webell-menu .wm__nota {
	margin: 0;
	padding: 0;
	font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, monospace;
	font-size: 10px;
	letter-spacing: .16em;
	text-transform: uppercase;
	color: var(--wm-faint);
}


/* --------------------------------------------------------------------------
   8 · SCHERMI BASSI E MOVIMENTO RIDOTTO
   -------------------------------------------------------------------------- */

@media screen and (max-height: 620px) {
	#webell-menu .wm__lista > li > a {
		padding: 11px var(--wm-pad);
		font-size: 22px;
	}
	#webell-menu .wm__testa { padding-top: 14px; padding-bottom: 12px; }
	#webell-menu .wm__cta { min-height: 46px; }
}

@media (prefers-reduced-motion: reduce) {
	#webell-menu,
	#webell-menu .wm__velo,
	#webell-menu .wm__pannello,
	#webell-menu .wm__lista > li,
	#webell-menu .wm__espandi svg,
	#webell-menu li.js-pronto > .wm__sub {
		transition: none !important;
	}
	#webell-menu[data-wm-stato="aperto"] .wm__lista > li { transition-delay: 0s !important; }
}
