/* =========================================================================
   Nuvola B Studio - main.css
   Mobile-first. Le variabili colore/font di base sono definite qui come
   fallback; inc/customizer.php le sovrascrive in <head> con i valori
   scelti dall'utente nel Customizer, quindi qualsiasi cambiamento è
   immediato e non richiede il ricaricamento di questo file.
   ========================================================================= */

:root {
	--nuvolab-primary: #B39DDB;
	--nuvolab-secondary: #D8B4FE;
	--nuvolab-accent: #7C3AED;
	--nuvolab-text: #1F1B24;
	--nuvolab-background: #FDFBFF;
	--nuvolab-font-size-base: 16px;
	--nuvolab-font-heading: "Poppins", sans-serif;
	--nuvolab-font-body: "Inter", sans-serif;
	--nuvolab-products-per-row: 3;

	/* Derivati */
	--nuvolab-primary-light: color-mix(in srgb, var(--nuvolab-primary) 40%, white);
	--nuvolab-primary-dark: color-mix(in srgb, var(--nuvolab-primary) 70%, black);
	--nuvolab-border: color-mix(in srgb, var(--nuvolab-primary) 25%, white);
	--nuvolab-shadow: 0 10px 30px color-mix(in srgb, var(--nuvolab-primary) 30%, transparent);
	--nuvolab-radius: 18px;
	--nuvolab-radius-sm: 10px;
	--nuvolab-transition: 0.35s cubic-bezier(0.22, 1, 0.36, 1);
	--nuvolab-max-width: 1280px;
	--nuvolab-header-bg: #FDFBFFE6;
	--nuvolab-footer-bg: #F3ECFC;
	--nuvolab-link-hover: #7C3AED;
	--nuvolab-sale-badge: #7C3AED;
	--nuvolab-darkmode-bg: #15121A;
	--nuvolab-heading-scale: 1.25;
	--nuvolab-line-height: 1.6;
	--nuvolab-heading-transform: none;
	--nuvolab-image-ratio: 1/1;
	--nuvolab-logo-width: 150px;
	--nuvolab-hero-overlay: 0.35;
	--nuvolab-density: 1;
	--nuvolab-anim-speed: 0.6s;
	--nuvolab-card-min-width: 290px;
}

/* -------------------------------------------------------------------------
   Dark Mode
   Attivata aggiungendo data-theme="dark" su <html> (vedi header.php e
   assets/js/darkmode.js). Le variabili colore vengono ridefinite mantenendo
   la stessa palette lilla come accento.
   ---------------------------------------------------------------------- */
html[data-theme="dark"] {
	--nuvolab-background: var(--nuvolab-darkmode-bg);
	--nuvolab-text: #F1EAFB;
	--nuvolab-header-bg: color-mix(in srgb, var(--nuvolab-darkmode-bg) 92%, white);
	--nuvolab-footer-bg: color-mix(in srgb, var(--nuvolab-darkmode-bg) 85%, black);
	--nuvolab-border: color-mix(in srgb, var(--nuvolab-primary) 35%, black);
}
html[data-theme="dark"] body {
	background-color: var(--nuvolab-background);
}
html[data-theme="dark"] ul.products li.product,
html[data-theme="dark"] .nuvolab-card,
html[data-theme="dark"] .nuvolab-testimonial-card,
html[data-theme="dark"] .nuvolab-blog-card,
html[data-theme="dark"] .nuvolab-personalization,
html[data-theme="dark"] .woocommerce-checkout #order_review,
html[data-theme="dark"] .cart-collaterals .cart_totals,
html[data-theme="dark"] .shop-widget,
html[data-theme="dark"] .blog-widget,
html[data-theme="dark"] .nuvolab-mobile-menu,
html[data-theme="dark"] .nuvolab-mobile-menu__header,
html[data-theme="dark"] .nuvolab-shop-sidebar,
html[data-theme="dark"] .nuvolab-shop-sidebar__header,
html[data-theme="dark"] .nuvolab-category-menu__panel,
html[data-theme="dark"] .nuvolab-menu--header .sub-menu,
html[data-theme="dark"] .nuvolab-sticky-atc,
html[data-theme="dark"] .nuvolab-deal__card {
	background: color-mix(in srgb, var(--nuvolab-darkmode-bg) 80%, white);
	border-color: var(--nuvolab-border);
}
html[data-theme="dark"] .nuvolab-header {
	background: var(--nuvolab-header-bg);
	border-color: var(--nuvolab-border);
}

/* Le righe sopra sistemano gli SFONDI dei contenitori a tema, ma alcuni
   campi di modulo dentro quei contenitori (input di ricerca a fuoco,
   select della personalizzazione prodotto) forzavano ANCH'ESSI uno sfondo
   bianco fisso, indipendente dal contenitore: risultato, testo quasi
   bianco (colore di dark mode) su sfondo ancora bianco, illeggibile,
   proprio nei punti dove si scrive/seleziona qualcosa. */
html[data-theme="dark"] .widget_product_search .search-field,
html[data-theme="dark"] .widget_product_search .search-field:focus,
html[data-theme="dark"] .nuvolab-personalization__field input,
html[data-theme="dark"] .nuvolab-personalization__field select,
html[data-theme="dark"] .search-form .search-field {
	background: color-mix(in srgb, var(--nuvolab-darkmode-bg) 88%, white);
	color: var(--nuvolab-text);
	border-color: var(--nuvolab-border);
}

/* Alcuni stati ":hover" schiarivano lo sfondo verso il bianco assumendo un
   tema chiaro (es. "mix 10% primario, 90% bianco"): in dark mode questo
   crea una toppa chiara dentro un pannello scuro, e nei casi dove il testo
   non aveva un colore esplicito (ereditava --nuvolab-text, quasi bianco in
   dark mode) diventava a sua volta poco leggibile sopra quella toppa
   chiara. Qui invertiamo la stessa logica verso il nero invece del bianco,
   cosi' l'hover resta visibile ma coerente con l'interfaccia scura, e
   fissiamo il colore testo dove prima veniva solo ereditato. */
html[data-theme="dark"] .nuvolab-mobile-menu nav a:hover {
	background: color-mix(in srgb, var(--nuvolab-primary) 20%, black);
	color: var(--nuvolab-text);
}
html[data-theme="dark"] .woocommerce-widget-layered-nav-list a:hover {
	background: color-mix(in srgb, var(--nuvolab-primary) 18%, black);
	color: var(--nuvolab-text);
}
html[data-theme="dark"] .nuvolab-category-menu__list > li > a:hover,
html[data-theme="dark"] .product-categories li:hover {
	background: color-mix(in srgb, var(--nuvolab-primary) 22%, black);
}
html[data-theme="dark"] .shop-widget ul.product_list_widget li:hover,
html[data-theme="dark"] .blog-widget ul.product_list_widget li:hover {
	background: color-mix(in srgb, var(--nuvolab-primary) 14%, black);
}

.nuvolab-icon-moon { display: none; }
html[data-theme="dark"] .nuvolab-icon-sun { display: none; }
html[data-theme="dark"] .nuvolab-icon-moon { display: inline-block; }

/* -------------------------------------------------------------------------
   Reset essenziale
   ---------------------------------------------------------------------- */
*,
*::before,
*::after {
	box-sizing: border-box;
}

html {
	-webkit-text-size-adjust: 100%;
	scroll-behavior: smooth;
}

body {
	margin: 0;
	font-family: var(--nuvolab-font-body);
	font-size: var(--nuvolab-font-size-base);
	color: var(--nuvolab-text);
	background-color: var(--nuvolab-background);
	line-height: var(--nuvolab-line-height, 1.6);
	overflow-x: hidden;
	transition: background-color var(--nuvolab-transition), color var(--nuvolab-transition);
}

img {
	max-width: 100%;
	height: auto;
	display: block;
}

a {
	color: inherit;
	text-decoration: none;
}

h1, h2, h3, h4, h5, h6 {
	font-family: var(--nuvolab-font-heading);
	font-weight: 700;
	line-height: 1.2;
	margin: 0 0 0.6em;
	color: var(--nuvolab-text);
	text-transform: var(--nuvolab-heading-transform, none);
}

/* La "scala titoli" del Customizer (--nuvolab-heading-scale, default 1.25)
   agisce come moltiplicatore lineare sulle dimensioni base: valori più alti
   rendono i titoli proporzionalmente più grandi rispetto al testo. */
h1 { font-size: clamp(2.1rem, calc(5vw * var(--nuvolab-heading-scale, 1.25) / 1.25), calc(3.8rem * var(--nuvolab-heading-scale, 1.25) / 1.25)); }
h2 { font-size: clamp(1.7rem, calc(3.2vw * var(--nuvolab-heading-scale, 1.25) / 1.25), calc(2.5rem * var(--nuvolab-heading-scale, 1.25) / 1.25)); }
h3 { font-size: clamp(1.35rem, calc(2.4vw * var(--nuvolab-heading-scale, 1.25) / 1.25), calc(1.85rem * var(--nuvolab-heading-scale, 1.25) / 1.25)); }
h4 { font-size: calc(1.15rem * var(--nuvolab-heading-scale, 1.25) / 1.25); }
h5 { font-size: calc(1.02rem * var(--nuvolab-heading-scale, 1.25) / 1.25); }
h6 { font-size: calc(0.92rem * var(--nuvolab-heading-scale, 1.25) / 1.25); }

p {
	margin: 0 0 1em;
}

button {
	font-family: inherit;
	cursor: pointer;
}

.screen-reader-text {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip: rect(1px, 1px, 1px, 1px);
}

.skip-link {
	position: absolute;
	top: -100px;
	left: 0;
	background: var(--nuvolab-primary);
	color: #fff;
	padding: 10px 20px;
	z-index: 10000;
	transition: top 0.3s;
}
.skip-link:focus {
	top: 0;
}

/* -------------------------------------------------------------------------
   Layout / container
   ---------------------------------------------------------------------- */
.nuvolab-container {
	width: 100%;
	max-width: var(--nuvolab-max-width);
	margin-inline: auto;
	padding-inline: 20px;
}

.nuvolab-content-grid {
	display: grid;
	grid-template-columns: 1fr;
	gap: 32px;
	padding-block: 40px;
}

/* -------------------------------------------------------------------------
   Bottoni
   ---------------------------------------------------------------------- */
.nuvolab-btn {
	position: relative;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	padding: 14px 30px;
	border-radius: 999px;
	font-weight: 600;
	font-size: 0.95rem;
	border: 2px solid transparent;
	transition: transform var(--nuvolab-transition), box-shadow var(--nuvolab-transition), background var(--nuvolab-transition), color var(--nuvolab-transition);
	white-space: nowrap;
	overflow: visible;
}

/* Piccolo "timbro" a forma di zampetta sui bottoni principali: appare con
   una leggera rotazione al passaggio del mouse, un dettaglio giocoso ma
   discreto legato al tema felino del brand ("ispirazione gatti per i
   tasti" del sito). */
.nuvolab-btn--primary::after {
	content: "";
	position: absolute;
	top: -8px;
	right: -8px;
	width: 20px;
	height: 20px;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='white'%3E%3Cellipse cx='12' cy='16' rx='5.2' ry='4.4'/%3E%3Cellipse cx='5.2' cy='9.3' rx='2' ry='2.6' transform='rotate(-20 5.2 9.3)'/%3E%3Cellipse cx='9.6' cy='5.6' rx='2' ry='2.7' transform='rotate(-8 9.6 5.6)'/%3E%3Cellipse cx='14.4' cy='5.6' rx='2' ry='2.7' transform='rotate(8 14.4 5.6)'/%3E%3Cellipse cx='18.8' cy='9.3' rx='2' ry='2.6' transform='rotate(20 18.8 9.3)'/%3E%3C/svg%3E");
	background-size: contain;
	background-repeat: no-repeat;
	opacity: 0;
	transform: scale(0.5) rotate(-25deg);
	transition: opacity var(--nuvolab-transition), transform var(--nuvolab-transition);
	pointer-events: none;
}
.nuvolab-btn--primary:hover::after {
	opacity: 0.9;
	transform: scale(1) rotate(0deg);
}

.nuvolab-btn--primary {
	background: linear-gradient(135deg, var(--nuvolab-primary), var(--nuvolab-secondary));
	color: #fff;
	box-shadow: var(--nuvolab-shadow);
}
.nuvolab-btn--primary:hover {
	transform: translateY(-3px) scale(1.02);
	box-shadow: 0 16px 36px color-mix(in srgb, var(--nuvolab-primary) 45%, transparent);
}

.nuvolab-btn--outline {
	background: transparent;
	color: var(--nuvolab-primary-dark);
	border-color: var(--nuvolab-primary);
}
.nuvolab-btn--outline:hover {
	background: var(--nuvolab-primary);
	color: #fff;
}

.nuvolab-btn--outline-light {
	background: transparent;
	color: #fff;
	border-color: rgba(255, 255, 255, 0.75);
}
.nuvolab-btn--outline-light:hover {
	background: #fff;
	color: var(--nuvolab-primary-dark);
	transform: translateY(-3px);
}

/* -------------------------------------------------------------------------
   Barra utility (sopra l'header): social + link rapidi
   ---------------------------------------------------------------------- */
.nuvolab-utility-bar {
	background: var(--nuvolab-text);
	color: rgba(255, 255, 255, 0.85);
	font-size: 0.78rem;
}
.nuvolab-utility-bar__inner {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 14px;
	padding-block: 8px;
}
.nuvolab-utility-bar__socials {
	display: flex;
	align-items: center;
	gap: 12px;
}
.nuvolab-utility-bar__socials a {
	color: inherit;
	display: inline-flex;
	opacity: 0.8;
	transition: opacity 0.2s ease, transform 0.2s ease;
}
.nuvolab-utility-bar__socials a:hover {
	opacity: 1;
	transform: translateY(-1px);
	color: var(--nuvolab-secondary);
}
.nuvolab-utility-bar__socials svg {
	width: 14px;
	height: 14px;
}
.nuvolab-utility-bar__links {
	display: flex;
	gap: 18px;
}
.nuvolab-utility-bar__links a {
	color: inherit;
	opacity: 0.85;
	transition: opacity 0.2s ease;
}
.nuvolab-utility-bar__links a:hover {
	opacity: 1;
	text-decoration: underline;
}
@media (max-width: 599px) {
	.nuvolab-utility-bar__links a:not(:first-child) {
		display: none;
	}
}

/* -------------------------------------------------------------------------
   Pulsante "Sfoglia le categorie" + pannello a tendina nell'header
   ---------------------------------------------------------------------- */
.nuvolab-category-menu {
	position: relative;
	display: inline-block;
	margin-right: 18px;
	vertical-align: middle;
}
.nuvolab-category-menu__toggle {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	padding: 10px 16px;
	border: none;
	border-radius: 999px;
	background: var(--nuvolab-primary);
	color: #fff;
	font-weight: 600;
	font-size: 0.85rem;
	cursor: pointer;
	transition: background var(--nuvolab-transition);
}
.nuvolab-category-menu__toggle:hover {
	background: var(--nuvolab-primary-dark);
}
.nuvolab-category-menu__chevron {
	transition: transform var(--nuvolab-transition);
}
.nuvolab-category-menu.is-open .nuvolab-category-menu__chevron {
	transform: rotate(180deg);
}
.nuvolab-category-menu__panel {
	position: absolute;
	top: calc(100% + 10px);
	left: 0;
	width: 280px;
	max-height: 70vh;
	overflow-y: auto;
	background: #fff;
	border-radius: var(--nuvolab-radius);
	box-shadow: 0 20px 45px rgba(0, 0, 0, 0.16);
	border: 1px solid var(--nuvolab-border);
	padding: 12px;
	opacity: 0;
	visibility: hidden;
	transform: translateY(-6px);
	transition: opacity 0.2s ease, transform 0.2s ease, visibility 0.2s ease;
	z-index: 500;
}
.nuvolab-category-menu.is-open .nuvolab-category-menu__panel {
	opacity: 1;
	visibility: visible;
	transform: translateY(0);
}
.nuvolab-category-menu__list {
	list-style: none;
	margin: 0;
	padding: 0;
}
.nuvolab-category-menu__list > li {
	border-bottom: 1px solid var(--nuvolab-border);
}
.nuvolab-category-menu__list > li:last-child {
	border-bottom: none;
}
.nuvolab-category-menu__list > li > a {
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding: 10px 8px;
	font-weight: 600;
	border-radius: var(--nuvolab-radius-sm, 8px);
}
.nuvolab-category-menu__list > li > a:hover {
	background: color-mix(in srgb, var(--nuvolab-primary) 8%, white);
	color: var(--nuvolab-primary-dark);
}
.nuvolab-category-menu__list ul {
	list-style: none;
	margin: 2px 0 8px;
	padding-left: 16px;
	border-left: 2px solid var(--nuvolab-border);
}
.nuvolab-category-menu__list ul li a {
	display: block;
	padding: 6px 8px;
	font-size: 0.88rem;
	color: color-mix(in srgb, var(--nuvolab-text) 78%, transparent);
}
.nuvolab-category-menu__list ul li a:hover {
	color: var(--nuvolab-primary-dark);
}

/* Versione mobile: accordion nativo <details>/<summary> dentro il drawer
   del menu, nessun JS necessario per aprire/chiudere. */
.nuvolab-mobile-menu__categories {
	margin-bottom: 14px;
	border: 1px solid var(--nuvolab-border);
	border-radius: var(--nuvolab-radius);
	padding: 4px 14px;
}
.nuvolab-mobile-menu__categories summary {
	padding: 12px 2px;
	font-weight: 700;
	cursor: pointer;
	list-style: none;
}
.nuvolab-mobile-menu__categories summary::-webkit-details-marker {
	display: none;
}
.nuvolab-mobile-menu__categories summary::after {
	content: "\25BE";
	float: right;
	transition: transform 0.2s ease;
}
.nuvolab-mobile-menu__categories[open] summary::after {
	transform: rotate(180deg);
}
.nuvolab-mobile-menu__categories .nuvolab-category-menu__list {
	padding-bottom: 10px;
}

/* -------------------------------------------------------------------------
   Header
   ---------------------------------------------------------------------- */
.nuvolab-header {
	position: relative;
	z-index: 999;
	background: rgba(253, 251, 255, 0.9);
	backdrop-filter: blur(10px);
	border-bottom: 1px solid var(--nuvolab-border);
}

.nuvolab-header.is-sticky {
	position: sticky;
	top: 0;
}

.nuvolab-header__inner {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	padding-block: 16px;
}

.nuvolab-header__inner--split {
	justify-content: space-between;
}

.nuvolab-header__logo img {
	max-height: 48px;
	width: auto;
}

.nuvolab-site-title {
	font-family: var(--nuvolab-font-heading);
	font-size: 1.4rem;
	font-weight: 800;
	background: linear-gradient(135deg, var(--nuvolab-primary-dark), var(--nuvolab-accent));
	-webkit-background-clip: text;
	background-clip: text;
	color: transparent;
}

.nuvolab-header__nav {
	display: none;
}

.nuvolab-menu {
	display: flex;
	gap: 28px;
	list-style: none;
	margin: 0;
	padding: 0;
}

.nuvolab-menu a {
	position: relative;
	font-weight: 500;
	padding: 6px 0;
}

.nuvolab-menu a::after {
	content: "";
	position: absolute;
	left: 0;
	bottom: 0;
	width: 0;
	height: 2px;
	background: var(--nuvolab-primary);
	transition: width var(--nuvolab-transition);
}

.nuvolab-menu a:hover::after,
.nuvolab-menu .current-menu-item > a::after {
	width: 100%;
}

/* -------------------------------------------------------------------------
   Mega-menu / dropdown desktop
   WordPress aggiunge automaticamente la classe "menu-item-has-children" e
   un <ul class="sub-menu"> annidato quando una voce di menu ha sottovoci
   (Aspetto > Menu > trascina una voce sotto un'altra). Qui li trasformiamo
   in un pannello a comparsa elegante, con apertura via hover/focus per
   mouse e tastiera, e via classe "is-open" aggiunta da ui.js per il tocco.
   ---------------------------------------------------------------------- */
.nuvolab-menu--header li {
	position: relative;
}
.nuvolab-menu--header .menu-item-has-children > a {
	padding-right: 18px;
}
.nuvolab-menu--header .menu-item-has-children > a::before {
	content: "";
	position: absolute;
	right: 0;
	top: 40%;
	width: 6px;
	height: 6px;
	border-right: 2px solid currentColor;
	border-bottom: 2px solid currentColor;
	transform: translateY(-50%) rotate(45deg);
	transition: transform var(--nuvolab-transition);
	opacity: 0.7;
}
.nuvolab-menu--header .menu-item-has-children:hover > a::before,
.nuvolab-menu--header .menu-item-has-children.is-open > a::before {
	transform: translateY(-20%) rotate(225deg);
}

.nuvolab-menu--header .sub-menu {
	position: absolute;
	top: 100%;
	left: 0;
	margin-top: 14px;
	min-width: 230px;
	background: #fff;
	border-radius: var(--nuvolab-radius-sm);
	border: 1px solid var(--nuvolab-border);
	box-shadow: 0 24px 48px rgba(20, 10, 30, 0.14);
	padding: 10px;
	list-style: none;
	display: flex;
	flex-direction: column;
	gap: 2px;
	opacity: 0;
	visibility: hidden;
	transform: translateY(8px);
	transition: opacity var(--nuvolab-transition), transform var(--nuvolab-transition), visibility var(--nuvolab-transition);
	z-index: 60;
}
.nuvolab-menu--header .menu-item-has-children:hover > .sub-menu,
.nuvolab-menu--header .menu-item-has-children:focus-within > .sub-menu,
.nuvolab-menu--header .menu-item-has-children.is-open > .sub-menu {
	opacity: 1;
	visibility: visible;
	transform: none;
}
.nuvolab-menu--header .sub-menu a {
	display: block;
	padding: 10px 12px;
	border-radius: calc(var(--nuvolab-radius-sm) - 2px);
	font-weight: 500;
	font-size: 0.92rem;
	white-space: nowrap;
}
.nuvolab-menu--header .sub-menu a::after {
	display: none;
}
.nuvolab-menu--header .sub-menu a:hover {
	background: color-mix(in srgb, var(--nuvolab-primary) 12%, white);
	color: var(--nuvolab-primary-dark);
}

.nuvolab-header__actions {
	display: flex;
	align-items: center;
	gap: 16px;
}

.nuvolab-header__icon {
	position: relative;
	display: inline-flex;
	color: var(--nuvolab-text);
	transition: color var(--nuvolab-transition), transform var(--nuvolab-transition);
}
.nuvolab-header__icon:hover {
	color: var(--nuvolab-primary-dark);
	transform: scale(1.1);
}

.nuvolab-cart-count {
	position: absolute;
	top: -8px;
	right: -10px;
	background: var(--nuvolab-accent);
	color: #fff;
	font-size: 0.65rem;
	font-weight: 700;
	width: 18px;
	height: 18px;
	border-radius: 50%;
	display: flex;
	align-items: center;
	justify-content: center;
}

.nuvolab-menu-toggle {
	display: flex;
	flex-direction: column;
	justify-content: center;
	gap: 5px;
	width: 32px;
	height: 32px;
	background: transparent;
	border: none;
	padding: 0;
}
.nuvolab-menu-toggle span {
	display: block;
	height: 2px;
	background: var(--nuvolab-text);
	border-radius: 2px;
	transition: transform var(--nuvolab-transition), opacity var(--nuvolab-transition);
}
.nuvolab-menu-toggle[aria-expanded="true"] span:nth-child(1) {
	transform: translateY(7px) rotate(45deg);
}
.nuvolab-menu-toggle[aria-expanded="true"] span:nth-child(2) {
	opacity: 0;
}
.nuvolab-menu-toggle[aria-expanded="true"] span:nth-child(3) {
	transform: translateY(-7px) rotate(-45deg);
}

/* Sfondo scuro dietro al pannello, per concentrare l'attenzione e permettere
   di chiudere il menu con un click fuori dal pannello. */
.nuvolab-menu-backdrop {
	position: fixed;
	inset: 0;
	background: rgba(15, 10, 20, 0.45);
	backdrop-filter: blur(2px);
	opacity: 0;
	visibility: hidden;
	transition: opacity var(--nuvolab-transition), visibility var(--nuvolab-transition);
	z-index: 999;
}
.nuvolab-menu-backdrop.is-open {
	opacity: 1;
	visibility: visible;
}

/* Menu mobile: stato iniziale nascosto, animato via JS (Motion.dev).
   Un piccolo dettaglio a forma di "orecchio" nell'angolo superiore del
   pannello richiama il tema felino del brand senza appesantire l'interfaccia. */
.nuvolab-mobile-menu {
	position: fixed;
	inset: 0 0 0 auto;
	width: min(88vw, 380px);
	height: 100vh;
	height: 100dvh;
	background: #fff;
	box-shadow: -10px 0 40px rgba(0, 0, 0, 0.18);
	padding: 0 28px 28px;
	display: flex;
	flex-direction: column;
	transform: translateX(100%);
	z-index: 1000;
	overflow-y: auto;
}
.nuvolab-mobile-menu.is-open {
	transform: none;
}

.nuvolab-mobile-menu__header {
	position: sticky;
	top: 0;
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding-block: 22px;
	background: #fff;
	border-bottom: 1px solid var(--nuvolab-border);
	margin-bottom: 26px;
}
.nuvolab-mobile-menu__title {
	font-family: var(--nuvolab-font-heading);
	font-weight: 700;
	font-size: 1.05rem;
}
.nuvolab-mobile-menu__close {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 36px;
	height: 36px;
	border-radius: 50%;
	background: color-mix(in srgb, var(--nuvolab-primary) 12%, white);
	color: var(--nuvolab-text);
	border: none;
	transition: background var(--nuvolab-transition), transform var(--nuvolab-transition);
}
.nuvolab-mobile-menu__close:hover {
	background: var(--nuvolab-primary);
	color: #fff;
	transform: rotate(90deg);
}

.nuvolab-mobile-menu nav ul {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: 6px;
}
.nuvolab-mobile-menu nav a {
	display: block;
	padding: 12px 6px;
	font-size: 1.08rem;
	font-weight: 600;
	border-radius: var(--nuvolab-radius-sm);
	transition: background var(--nuvolab-transition), padding-left var(--nuvolab-transition);
}
.nuvolab-mobile-menu nav a:hover {
	background: color-mix(in srgb, var(--nuvolab-primary) 10%, white);
	padding-left: 14px;
}
.nuvolab-mobile-menu .sub-menu {
	padding-left: 16px;
	margin-top: 4px;
	border-left: 2px solid var(--nuvolab-border);
}
.nuvolab-mobile-menu .sub-menu a {
	font-size: 0.98rem;
	font-weight: 500;
}

.nuvolab-mobile-menu__footer {
	margin-top: auto;
	padding-top: 24px;
}
.nuvolab-mobile-menu__footer .nuvolab-btn {
	width: 100%;
}

@media (min-width: 900px) {
	/* .nuvolab-header__nav contiene sia il pulsante "Sfoglia le categorie"
	   (.nuvolab-category-menu, inline-block) sia il menu principale (un
	   <ul> che internamente è flex ma il cui "outer display" resta block):
	   un elemento block va sempre a capo rispetto a un inline-block che lo
	   precede, quindi senza display:flex qui il pulsante categorie finiva
	   isolato su una riga sopra al menu invece di stare allineato accanto
	   ad esso — il difetto segnalato ("messo così a caso sopra il menu"). */
	.nuvolab-header__nav {
		display: flex;
		align-items: center;
		gap: 22px;
	}
	.nuvolab-category-menu {
		margin-right: 0;
	}
	.nuvolab-menu-toggle,
	.nuvolab-mobile-menu,
	.nuvolab-menu-backdrop {
		display: none;
	}
}

/* -------------------------------------------------------------------------
   Layout negozio: sidebar filtri + griglia prodotti.
   Su mobile la sidebar diventa un drawer a comparsa da sinistra (stesso
   schema del menu mobile: pannello fisso + sfondo scuro), attivato dal
   pulsante "Filtri" mostrato sopra la griglia. Da tablet in su la sidebar
   torna in flusso normale, sempre visibile, come colonna fissa.
   ---------------------------------------------------------------------- */
.nuvolab-shop-layout--with-sidebar {
	display: block;
}

.nuvolab-shop-filters-toggle {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	padding: 11px 20px;
	margin-bottom: 20px;
	border: none;
	border-radius: 999px;
	background: var(--nuvolab-primary);
	color: #fff;
	font-weight: 600;
	font-size: 0.9rem;
	cursor: pointer;
	transition: background var(--nuvolab-transition), transform var(--nuvolab-transition);
}
.nuvolab-shop-filters-toggle:hover {
	background: var(--nuvolab-primary-dark);
	transform: translateY(-1px);
}

.nuvolab-shop-filters-backdrop {
	position: fixed;
	inset: 0;
	background: rgba(15, 10, 20, 0.45);
	backdrop-filter: blur(2px);
	opacity: 0;
	visibility: hidden;
	transition: opacity var(--nuvolab-transition), visibility var(--nuvolab-transition);
	z-index: 999;
}
.nuvolab-shop-filters-backdrop.is-open {
	opacity: 1;
	visibility: visible;
}

.nuvolab-shop-sidebar {
	position: fixed;
	inset: 0 auto 0 0;
	width: min(86vw, 340px);
	height: 100vh;
	height: 100dvh;
	background: #fff;
	box-shadow: 10px 0 40px rgba(0, 0, 0, 0.18);
	transform: translateX(-100%);
	transition: transform 0.35s cubic-bezier(0.22, 1, 0.36, 1);
	z-index: 1000;
	overflow-y: auto;
	padding: 0 22px 28px;
}
.nuvolab-shop-sidebar.is-open {
	transform: translateX(0);
}
.nuvolab-shop-sidebar__header {
	position: sticky;
	top: 0;
	display: flex;
	align-items: center;
	justify-content: space-between;
	padding-block: 20px;
	background: #fff;
	border-bottom: 1px solid var(--nuvolab-border);
	margin-bottom: 20px;
}
.nuvolab-shop-sidebar__header h2 {
	margin: 0;
	font-size: 1.1rem;
}
.nuvolab-shop-sidebar__close {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 34px;
	height: 34px;
	border-radius: 50%;
	background: color-mix(in srgb, var(--nuvolab-primary) 12%, white);
	border: none;
	color: var(--nuvolab-text);
	transition: background var(--nuvolab-transition), transform var(--nuvolab-transition);
}
.nuvolab-shop-sidebar__close:hover {
	background: var(--nuvolab-primary);
	color: #fff;
	transform: rotate(90deg);
}
/* Nota: i widget filtro dentro la sidebar/drawer mantengono la stessa
   "card" curata (bordo, ombra, barra colorata al passaggio) definita in
   woocommerce.css — qui restava prima un override che la appiattiva
   completamente (nessun bordo, nessuna ombra), il che è esattamente il
   motivo per cui i filtri sembravano grezzi anche su desktop. */
.nuvolab-shop-sidebar__body .shop-widget:last-child {
	margin-bottom: 0;
}

@media (min-width: 960px) {
	.nuvolab-shop-layout--with-sidebar {
		display: grid;
		grid-template-columns: 270px 1fr;
		gap: 36px;
		align-items: start;
	}
	.nuvolab-shop-filters-toggle,
	.nuvolab-shop-filters-backdrop {
		display: none;
	}
	.nuvolab-shop-sidebar {
		position: sticky;
		top: 100px;
		inset: auto;
		width: auto;
		height: auto;
		transform: none;
		box-shadow: none;
		background: transparent;
		padding: 0;
		overflow: visible;
		z-index: 1;
	}
	/* Bagliore decorativo, molto discreto, dietro la colonna filtri: resta
	   contenuto nell'area della sidebar (nessun overflow verso il resto
	   della pagina). È un elemento vero (non uno pseudo-elemento) marcato
	   data-parallax, cosi' si muove leggermente con lo scroll (vedi
	   animations.js) senza toccare il transform della sidebar sticky stessa
	   — altrimenti il parallax "romperebbe" l'effetto sticky. */
	.nuvolab-shop-sidebar__glow {
		position: absolute;
		top: -60px;
		left: -40px;
		width: 220px;
		height: 220px;
		border-radius: 50%;
		background: radial-gradient(circle, color-mix(in srgb, var(--nuvolab-primary) 22%, transparent), transparent 70%);
		filter: blur(6px);
		pointer-events: none;
		z-index: -1;
	}
	.nuvolab-shop-sidebar__header {
		display: none;
	}
}

/* -------------------------------------------------------------------------
   Hero
   ---------------------------------------------------------------------- */
.nuvolab-hero {
	position: relative;
	padding: 90px 20px;
	text-align: center;
	background: radial-gradient(circle at 30% 20%, color-mix(in srgb, var(--nuvolab-secondary) 40%, transparent), transparent 60%),
		radial-gradient(circle at 80% 80%, color-mix(in srgb, var(--nuvolab-primary) 35%, transparent), transparent 60%);
	overflow: hidden;
}

.hero-title {
	font-size: clamp(2.2rem, 6vw, 4rem);
	margin-bottom: 0.3em;
	opacity: 0; /* animato via Motion.dev in animations.js */
}

.hero-subtitle {
	font-size: 1.15rem;
	max-width: 600px;
	margin: 0 auto 2em;
	color: color-mix(in srgb, var(--nuvolab-text) 75%, transparent);
	opacity: 0;
}

.nuvolab-hero .nuvolab-btn {
	opacity: 0;
}

/* -------------------------------------------------------------------------
   Prodotti / griglia (generico, riusato da woocommerce.css)
   Lo stato "nascosto in attesa di animazione" si applica SOLO quando la
   classe .js è presente su <html> (aggiunta da un piccolo script inline in
   header.php). Senza JavaScript, o se il modulo Motion.dev non riesce a
   caricarsi da CDN, questi elementi restano visibili di default: meglio un
   sito senza animazioni che un sito con contenuti invisibili.
   ---------------------------------------------------------------------- */
.js .nuvolab-anim-fade-up,
.js .nuvolab-anim-fade-in,
.js .nuvolab-anim-hero {
	opacity: 0;
}

/* -------------------------------------------------------------------------
   Footer
   ---------------------------------------------------------------------- */
.nuvolab-footer {
	position: relative;
	margin-top: 60px;
	background: linear-gradient(180deg, transparent, color-mix(in srgb, var(--nuvolab-primary) 8%, transparent));
	border-top: 1px solid var(--nuvolab-border);
	overflow: hidden;
}
/* Trama di zampette molto discreta sullo sfondo del footer: un piccolo
   tocco a tema gatto, coerente con l'identità del brand, che si vede solo
   da vicino e non interferisce con la leggibilità del testo. */
.nuvolab-footer::before {
	content: "";
	position: absolute;
	inset: 0;
	opacity: 0.05;
	pointer-events: none;
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='120' viewBox='0 0 120 120'%3E%3Cg fill='%237C3AED'%3E%3Cellipse cx='60' cy='70' rx='16' ry='13'/%3E%3Cellipse cx='38' cy='45' rx='7' ry='9' transform='rotate(-20 38 45)'/%3E%3Cellipse cx='52' cy='32' rx='7' ry='9.5' transform='rotate(-8 52 32)'/%3E%3Cellipse cx='68' cy='32' rx='7' ry='9.5' transform='rotate(8 68 32)'/%3E%3Cellipse cx='82' cy='45' rx='7' ry='9' transform='rotate(20 82 45)'/%3E%3C/g%3E%3C/svg%3E");
	background-size: 160px 160px;
	background-repeat: repeat;
}
.nuvolab-footer > * {
	position: relative;
	z-index: 1;
}

/* Fascia brand: logo + tagline + social ben in vista, separata dalle
   colonne widget cosi' il footer si legge come "identità del brand, poi
   informazioni", invece di un unico blocco indistinto di testo. */
.nuvolab-footer__brand {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 16px;
	text-align: center;
	padding-top: 46px;
	padding-bottom: 30px;
}
.nuvolab-footer__brand-identity {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 10px;
}
.nuvolab-footer__logo {
	font-family: var(--nuvolab-font-heading);
	font-size: 1.5rem;
	font-weight: 800;
	background: linear-gradient(135deg, var(--nuvolab-primary-dark), var(--nuvolab-accent));
	-webkit-background-clip: text;
	background-clip: text;
	color: transparent;
}
.nuvolab-footer__logo img {
	max-height: 44px;
	width: auto;
}
.nuvolab-footer__tagline {
	max-width: 440px;
	margin: 0;
	font-size: 0.92rem;
	color: color-mix(in srgb, var(--nuvolab-text) 65%, transparent);
}
.nuvolab-footer__brand .nuvolab-footer__socials {
	margin-top: 0;
}

.nuvolab-footer__widgets {
	display: grid;
	grid-template-columns: 1fr;
	gap: 32px;
	padding-block: 36px 50px;
	border-top: 1px solid var(--nuvolab-border);
}

.footer-widget-title,
.shop-widget-title,
.blog-widget-title {
	font-size: 1.05rem;
	margin-bottom: 0.8em;
	position: relative;
	padding-bottom: 0.5em;
}
.shop-widget-title::after,
.blog-widget-title::after {
	content: "";
	position: absolute;
	left: 0;
	bottom: 0;
	width: 34px;
	height: 3px;
	border-radius: 2px;
	background: var(--nuvolab-accent);
}

/* Piccola icona prima del titolo di ogni widget filtro, cosi' si
   riconoscono a colpo d'occhio invece di essere tutti uguali. Le classi
   qui sotto (widget_search, widget_product_categories, ecc.) arrivano dal
   segnaposto %2$s in "before_widget" (vedi nuvolab_widgets_init in
   functions.php), che WordPress sostituisce con la classe reale del
   widget — cosi' possiamo distinguerli via CSS senza toccare il PHP di
   WooCommerce. */
.shop-widget-title::before,
.blog-widget-title::before {
	content: "";
	display: inline-block;
	width: 16px;
	height: 16px;
	margin-right: 8px;
	vertical-align: -3px;
	background-size: contain;
	background-repeat: no-repeat;
	background-position: center;
	opacity: 0.8;
}
.widget_search .shop-widget-title::before,
.widget_product_search .shop-widget-title::before {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%237C3AED' stroke-width='2'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='M21 21l-4.3-4.3'/%3E%3C/svg%3E");
}
.widget_product_categories .shop-widget-title::before,
.widget_categories .blog-widget-title::before {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%237C3AED' stroke-width='2'%3E%3Crect x='3' y='3' width='7' height='7' rx='1.5'/%3E%3Crect x='14' y='3' width='7' height='7' rx='1.5'/%3E%3Crect x='3' y='14' width='7' height='7' rx='1.5'/%3E%3Crect x='14' y='14' width='7' height='7' rx='1.5'/%3E%3C/svg%3E");
}
.widget_price_filter .shop-widget-title::before {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%237C3AED' stroke-width='2'%3E%3Cline x1='4' y1='12' x2='20' y2='12'/%3E%3Ccircle cx='9' cy='12' r='2.5' fill='%237C3AED' stroke='none'/%3E%3C/svg%3E");
}
.widget_rating_filter .shop-widget-title::before {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%237C3AED' stroke='none'%3E%3Cpath d='M12 2l3 6.5 7 .9-5.2 4.9 1.4 7-6.2-3.5-6.2 3.5 1.4-7L1 9.4l7-.9z'/%3E%3C/svg%3E");
}
.widget_products .shop-widget-title::before,
.widget_recent-posts .blog-widget-title::before {
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%237C3AED' stroke-width='2'%3E%3Cpath d='M12 2l1.5 4.5L18 8l-4.5 1.5L12 14l-1.5-4.5L6 8l4.5-1.5z'/%3E%3Cpath d='M19 15l.7 2 2 .7-2 .7-.7 2-.7-2-2-.7 2-.7z'/%3E%3C/svg%3E");
}

/* -------------------------------------------------------------------------
   Widget "classici" di WordPress (Ricerca, Pagine, Archivi, Categorie,
   Tag cloud, Calendario, Meta, RSS, Articoli recenti...).
   Queste regole si applicano ovunque un widget di questo tipo compaia
   (footer, sidebar blog/shop) cosi che, invece di elenchi puntati grezzi
   col solo stile di default del browser, appaiano sempre contenuti,
   spaziati e coerenti con il resto del tema.
   ---------------------------------------------------------------------- */
.footer-widget,
.shop-widget,
.blog-widget {
	background: transparent;
}
.shop-widget,
.blog-widget {
	background: var(--nuvolab-surface, #fff);
	border: 1px solid var(--nuvolab-border);
	border-radius: var(--nuvolab-radius);
	padding: 22px 24px;
	margin-bottom: 22px;
}

.footer-widget ul,
.shop-widget ul,
.blog-widget ul,
.widget ul {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: 9px;
}
.footer-widget ul ul,
.shop-widget ul ul,
.blog-widget ul ul,
.widget ul ul {
	padding-left: 16px;
	margin-top: 9px;
}
.footer-widget li,
.shop-widget li,
.blog-widget li,
.widget li {
	line-height: 1.4;
}
.footer-widget a,
.shop-widget a,
.blog-widget a,
.widget a {
	color: color-mix(in srgb, var(--nuvolab-text) 82%, transparent);
	text-decoration: none;
	transition: color 0.2s ease, padding-left 0.2s ease;
	display: inline-block;
}
.footer-widget a::before,
.shop-widget a::before,
.blog-widget a::before,
.widget li > a::before {
	content: "";
}
.shop-widget li > a,
.blog-widget li > a,
.widget li > a {
	position: relative;
	padding-left: 14px;
}
.shop-widget li > a::before,
.blog-widget li > a::before,
.widget li > a::before {
	content: "\2192";
	position: absolute;
	left: -3px;
	top: 0;
	opacity: 0;
	transform: translateX(-4px);
	transition: opacity 0.2s ease, transform 0.2s ease;
	color: var(--nuvolab-accent);
}
.footer-widget a:hover,
.footer-widget a:focus-visible,
.shop-widget a:hover,
.shop-widget a:focus-visible,
.blog-widget a:hover,
.blog-widget a:focus-visible,
.widget a:hover,
.widget a:focus-visible {
	color: var(--nuvolab-accent);
}
.shop-widget li > a:hover::before,
.blog-widget li > a:hover::before,
.widget li > a:hover::before {
	opacity: 1;
	transform: translateX(0);
}

/* Contatore accanto a voci di Categorie / Archivi (es. "(4)") */
.widget .count,
.shop-widget .count,
.blog-widget .count {
	display: inline-block;
	margin-left: 6px;
	padding: 1px 8px;
	border-radius: 999px;
	background: color-mix(in srgb, var(--nuvolab-primary) 18%, transparent);
	color: var(--nuvolab-text);
	font-size: 0.75rem;
}

/* Modulo di ricerca (widget Ricerca + pagina 404) */
.widget_search .search-form,
.widget_product_search form,
.shop-widget .search-form,
.blog-widget .search-form {
	display: flex;
	gap: 8px;
}
.search-form .search-field,
.widget_product_search .search-field {
	flex: 1;
	padding: 10px 14px;
	border-radius: var(--nuvolab-radius-sm, 8px);
	border: 1px solid var(--nuvolab-border);
	background: var(--nuvolab-bg, #fff);
	color: var(--nuvolab-text);
	font: inherit;
}
.search-form .search-submit,
.widget_product_search .search-submit,
.woocommerce-product-search button {
	border: none;
	border-radius: var(--nuvolab-radius-sm, 8px);
	padding: 10px 16px;
	background: var(--nuvolab-primary);
	color: #fff;
	font-weight: 600;
	cursor: pointer;
	transition: background 0.2s ease, transform 0.15s ease;
}
.search-form .search-submit:hover,
.woocommerce-product-search button:hover {
	background: var(--nuvolab-accent);
	transform: translateY(-1px);
}

/* Tag cloud */
.tagcloud {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
}
.tagcloud a {
	padding: 5px 12px !important;
	border-radius: 999px;
	background: color-mix(in srgb, var(--nuvolab-primary) 12%, transparent);
	font-size: 0.8rem !important;
}
.tagcloud a:hover {
	background: var(--nuvolab-primary);
	color: #fff !important;
}

/* Calendario */
.widget_calendar table {
	width: 100%;
	border-collapse: collapse;
	font-size: 0.85rem;
}
.widget_calendar caption {
	font-weight: 600;
	padding-bottom: 8px;
	text-align: left;
}
.widget_calendar th,
.widget_calendar td {
	text-align: center;
	padding: 6px 2px;
	border: none;
}
.widget_calendar #today {
	background: var(--nuvolab-primary);
	color: #fff;
	border-radius: 6px;
}
.widget_calendar a {
	color: var(--nuvolab-accent);
	font-weight: 700;
}
.widget_calendar tfoot a {
	font-size: 0.8rem;
}

/* RSS widget */
.widget_rss ul li {
	border-bottom: 1px dashed var(--nuvolab-border);
	padding-bottom: 9px;
}
.widget_rss .rss-date {
	display: block;
	font-size: 0.75rem;
	opacity: 0.65;
}
.widget_rss cite {
	display: block;
	font-size: 0.75rem;
	opacity: 0.7;
}

.nuvolab-menu--footer {
	flex-direction: column;
	gap: 10px;
}

.nuvolab-footer__bottom {
	border-top: 1px solid var(--nuvolab-border);
	padding-block: 20px;
	font-size: 0.85rem;
	text-align: center;
	color: color-mix(in srgb, var(--nuvolab-text) 60%, transparent);
}

/* Righe di link "a tag" (categorie/tag prodotto, categorie blog): testo
   compatto, pensato per essere scansionabile senza rubare attenzione alle
   colonne principali sopra. */
.nuvolab-footer__link-clusters {
	border-top: 1px solid var(--nuvolab-border);
	padding-block: 22px;
}
.nuvolab-footer__link-cluster {
	margin: 0 0 10px;
	font-size: 0.8rem;
	line-height: 1.7;
	color: color-mix(in srgb, var(--nuvolab-text) 60%, transparent);
}
.nuvolab-footer__link-cluster:last-child {
	margin-bottom: 0;
}
.nuvolab-footer__link-cluster strong {
	color: var(--nuvolab-text);
	margin-right: 6px;
}
.nuvolab-footer__link-cluster a {
	color: inherit;
}
.nuvolab-footer__link-cluster a:hover {
	color: var(--nuvolab-primary-dark);
	text-decoration: underline;
}

@media (min-width: 700px) {
	.nuvolab-footer__brand {
		flex-direction: row;
		justify-content: space-between;
		text-align: left;
	}
	.nuvolab-footer__brand-identity {
		align-items: flex-start;
	}
	/* Il numero di colonne renderizzate segue quello scelto nel Customizer
	   (nuvolab_footer_columns): prima questa regola era fissa a 3 a
	   prescindere dal valore reale, lasciando celle vuote o sproporzionate
	   quando l'utente sceglieva 2 o 4 colonne. */
	.nuvolab-footer__widgets--cols-1 {
		grid-template-columns: minmax(0, 420px);
		justify-content: center;
	}
	.nuvolab-footer__widgets--cols-2 {
		grid-template-columns: repeat(2, 1fr);
	}
	.nuvolab-footer__widgets--cols-3 {
		grid-template-columns: repeat(3, 1fr);
	}
	.nuvolab-footer__widgets--cols-4 {
		grid-template-columns: repeat(4, 1fr);
	}
}
@media (min-width: 700px) and (max-width: 959px) {
	/* Con 4 colonne lo spazio per riga è comunque poco su tablet: passiamo
	   a 2x2 invece di 4 colonne troppo strette per leggere bene il testo. */
	.nuvolab-footer__widgets--cols-4 {
		grid-template-columns: repeat(2, 1fr);
	}
}

/* -------------------------------------------------------------------------
   Articoli / pagine generiche
   ---------------------------------------------------------------------- */
.nuvolab-article,
.nuvolab-page {
	max-width: 780px;
	margin: 0 auto;
}

.nuvolab-article__thumbnail,
.nuvolab-page__thumbnail {
	border-radius: var(--nuvolab-radius);
	overflow: hidden;
	margin-bottom: 24px;
}

.nuvolab-article__title,
.nuvolab-page__title {
	font-size: clamp(1.8rem, 4vw, 2.6rem);
}

.nuvolab-article__meta {
	display: flex;
	gap: 16px;
	font-size: 0.85rem;
	color: color-mix(in srgb, var(--nuvolab-text) 55%, transparent);
	margin-bottom: 24px;
}

/* -------------------------------------------------------------------------
   404 e ricerca
   ---------------------------------------------------------------------- */
.nuvolab-404 {
	text-align: center;
	padding: 80px 20px 100px;
}
.nuvolab-404__cat {
	margin-bottom: 12px;
}
.nuvolab-404__code {
	font-size: clamp(3.2rem, 9vw, 6rem);
	color: var(--nuvolab-primary);
	margin-bottom: 0;
}

.search-form {
	display: flex;
	gap: 10px;
	max-width: 480px;
	margin: 24px auto;
}
.search-form input[type="search"] {
	flex: 1;
	padding: 12px 16px;
	border: 1px solid var(--nuvolab-border);
	border-radius: var(--nuvolab-radius-sm);
	font-size: 1rem;
}
.search-form button {
	padding: 12px 22px;
	background: var(--nuvolab-primary);
	color: #fff;
	border: none;
	border-radius: var(--nuvolab-radius-sm);
	font-weight: 600;
}

/* -------------------------------------------------------------------------
   Utility responsive generiche
   ---------------------------------------------------------------------- */
@media (min-width: 1024px) {
	.nuvolab-content-grid {
		gap: 40px;
	}
}

/* -------------------------------------------------------------------------
   Barra Annunci
   ---------------------------------------------------------------------- */
.nuvolab-announcement {
	display: block;
	background: linear-gradient(135deg, var(--nuvolab-primary), var(--nuvolab-accent));
	color: #fff;
	text-decoration: none;
}
.nuvolab-announcement__inner {
	padding: 10px 20px;
	font-size: 0.85rem;
	font-weight: 600;
	text-align: center;
}

/* -------------------------------------------------------------------------
   Pannello di ricerca a comparsa
   ---------------------------------------------------------------------- */
.nuvolab-search-panel {
	max-height: 0;
	overflow: hidden;
	background: var(--nuvolab-header-bg);
	transition: max-height var(--nuvolab-transition), padding var(--nuvolab-transition);
}
.nuvolab-search-panel.is-open {
	max-height: 120px;
	padding-block: 16px;
	border-top: 1px solid var(--nuvolab-border);
}

/* -------------------------------------------------------------------------
   Icone header aggiuntive (ricerca, dark mode, wishlist)
   ---------------------------------------------------------------------- */
.nuvolab-header__search-toggle,
.nuvolab-darkmode-toggle {
	background: transparent;
	border: none;
	padding: 4px;
}
.nuvolab-header__wishlist {
	position: relative;
}
.nuvolab-wishlist-count {
	position: absolute;
	top: -8px;
	right: -10px;
	background: var(--nuvolab-primary);
	color: #fff;
	font-size: 0.65rem;
	font-weight: 700;
	width: 18px;
	height: 18px;
	border-radius: 50%;
	display: flex;
	align-items: center;
	justify-content: center;
}

/* -------------------------------------------------------------------------
   Sezioni generiche di homepage
   ---------------------------------------------------------------------- */
.nuvolab-section {
	padding-block: calc(50px * var(--nuvolab-density, 1));
}
.nuvolab-container--narrow {
	max-width: 820px;
}
.nuvolab-section__title {
	text-align: center;
	margin-bottom: 36px;
}
.nuvolab-section__header {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	margin-bottom: 30px;
	flex-wrap: wrap;
}
.nuvolab-section__header .nuvolab-section__title {
	margin-bottom: 0;
	text-align: left;
}

/* -------------------------------------------------------------------------
   Offerta del giorno (countdown)
   ---------------------------------------------------------------------- */
.nuvolab-deal {
	background: linear-gradient(180deg, color-mix(in srgb, var(--nuvolab-primary) 6%, transparent), transparent);
	border-radius: var(--nuvolab-radius-lg, 24px);
}
.nuvolab-deal__header {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: 20px;
	margin-bottom: 30px;
}
.nuvolab-deal__header .nuvolab-section__title {
	margin-bottom: 0;
	text-align: left;
}
.nuvolab-deal__countdown {
	display: flex;
	gap: 10px;
}
.nuvolab-deal__unit {
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	min-width: 56px;
	padding: 10px 6px;
	border-radius: var(--nuvolab-radius-sm, 10px);
	background: var(--nuvolab-primary);
	color: #fff;
}
.nuvolab-deal__unit span {
	font-family: var(--nuvolab-font-heading);
	font-size: 1.3rem;
	font-weight: 700;
	line-height: 1;
}
.nuvolab-deal__unit small {
	font-size: 0.65rem;
	text-transform: uppercase;
	letter-spacing: 0.05em;
	opacity: 0.85;
	margin-top: 3px;
}

.nuvolab-deal__grid {
	display: grid;
	grid-template-columns: repeat(auto-fill, minmax(min(100%, 260px), 1fr));
	gap: 22px;
}
.nuvolab-deal__card {
	display: flex;
	align-items: center;
	gap: 16px;
	background: #fff;
	border: 1px solid var(--nuvolab-border);
	border-radius: var(--nuvolab-radius);
	padding: 14px;
	transition: transform var(--nuvolab-transition), box-shadow var(--nuvolab-transition);
}
.nuvolab-deal__card:hover {
	transform: translateY(-3px);
	box-shadow: var(--nuvolab-shadow);
}
.nuvolab-deal__card-image {
	flex-shrink: 0;
	width: 76px;
	height: 76px;
	border-radius: var(--nuvolab-radius-sm, 10px);
	overflow: hidden;
}
.nuvolab-deal__card-image img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}
.nuvolab-deal__card-body {
	display: flex;
	flex-direction: column;
	gap: 6px;
	min-width: 0;
}
.nuvolab-deal__card-title {
	font-weight: 600;
	font-size: 0.95rem;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
}
.nuvolab-deal__card-price {
	font-weight: 700;
	color: var(--nuvolab-primary-dark);
}
.nuvolab-deal__card-price del {
	opacity: 0.5;
	font-weight: 400;
	margin-right: 4px;
}
.nuvolab-deal__card-price ins {
	text-decoration: none;
	color: var(--nuvolab-accent);
}

@media (max-width: 480px) {
	.nuvolab-deal__unit {
		min-width: 46px;
		padding: 8px 4px;
	}
	.nuvolab-deal__unit span {
		font-size: 1.05rem;
	}
}

/* -------------------------------------------------------------------------
   Prodotti a tab (Più venduti / Popolari / Novità)
   ---------------------------------------------------------------------- */
.nuvolab-product-tabs__nav {
	display: flex;
	gap: 8px;
	flex-wrap: wrap;
}
.nuvolab-product-tabs__tab {
	padding: 9px 18px;
	border: 1px solid var(--nuvolab-border);
	border-radius: 999px;
	background: transparent;
	color: var(--nuvolab-text);
	font-weight: 600;
	font-size: 0.86rem;
	cursor: pointer;
	transition: background var(--nuvolab-transition), color var(--nuvolab-transition), border-color var(--nuvolab-transition);
}
.nuvolab-product-tabs__tab:hover {
	border-color: var(--nuvolab-primary);
}
.nuvolab-product-tabs__tab.is-active {
	background: var(--nuvolab-primary);
	border-color: var(--nuvolab-primary);
	color: #fff;
}
.nuvolab-product-tabs__panel {
	display: none;
}
.nuvolab-product-tabs__panel.is-active {
	display: block;
	animation: nuvolab-tab-fade 0.3s ease;
}
@keyframes nuvolab-tab-fade {
	from { opacity: 0; transform: translateY(6px); }
	to { opacity: 1; transform: translateY(0); }
}

/* -------------------------------------------------------------------------
   Fascia vantaggi (USP) + badge qualità
   ---------------------------------------------------------------------- */
.nuvolab-trust__usp {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: 22px;
	padding: 28px 0;
	border-top: 1px solid var(--nuvolab-border);
	border-bottom: 1px solid var(--nuvolab-border);
}
.nuvolab-trust__usp-item {
	display: flex;
	align-items: flex-start;
	gap: 14px;
}
.nuvolab-trust__usp-icon {
	flex-shrink: 0;
	width: 48px;
	height: 48px;
	display: flex;
	align-items: center;
	justify-content: center;
	border-radius: 50%;
	background: color-mix(in srgb, var(--nuvolab-primary) 12%, white);
	color: var(--nuvolab-primary-dark);
}
.nuvolab-trust__usp-body {
	display: flex;
	flex-direction: column;
	gap: 2px;
}
.nuvolab-trust__usp-body strong {
	font-size: 0.95rem;
}
.nuvolab-trust__usp-body small {
	font-size: 0.8rem;
	color: color-mix(in srgb, var(--nuvolab-text) 65%, transparent);
	line-height: 1.35;
}

.nuvolab-trust__badges {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 34px;
	padding-top: 30px;
}
.nuvolab-trust__badge {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 8px;
	width: 100px;
	text-align: center;
	font-size: 0.72rem;
	font-weight: 600;
	letter-spacing: 0.02em;
	color: color-mix(in srgb, var(--nuvolab-text) 55%, transparent);
	opacity: 0.75;
	transition: opacity 0.2s ease, color 0.2s ease;
}
.nuvolab-trust__badge:hover {
	opacity: 1;
	color: var(--nuvolab-primary-dark);
}

@media (min-width: 700px) {
	.nuvolab-trust__usp {
		grid-template-columns: repeat(4, 1fr);
	}
}

/* -------------------------------------------------------------------------
   Tile promozionali categoria
   ---------------------------------------------------------------------- */
.nuvolab-promo-tiles__grid {
	display: grid;
	grid-template-columns: 1fr;
	gap: 20px;
}
.nuvolab-promo-tiles__tile {
	position: relative;
	display: flex;
	align-items: flex-end;
	min-height: 240px;
	border-radius: var(--nuvolab-radius-lg, 20px);
	overflow: hidden;
	background-size: cover;
	background-position: center;
	transition: transform var(--nuvolab-transition);
}
.nuvolab-promo-tiles__tile:hover {
	transform: translateY(-4px);
}
.nuvolab-promo-tiles__tile:hover .nuvolab-promo-tiles__cta svg {
	transform: translateX(4px);
}
.nuvolab-promo-tiles__overlay {
	position: absolute;
	inset: 0;
	background: linear-gradient(0deg, rgba(15, 10, 20, 0.72), rgba(15, 10, 20, 0.1) 60%);
}
.nuvolab-promo-tiles__content {
	position: relative;
	z-index: 1;
	padding: 26px;
	color: #fff;
	display: flex;
	flex-direction: column;
	gap: 4px;
}
.nuvolab-promo-tiles__eyebrow {
	font-size: 0.72rem;
	text-transform: uppercase;
	letter-spacing: 0.08em;
	opacity: 0.85;
}
.nuvolab-promo-tiles__title {
	font-family: var(--nuvolab-font-heading);
	font-size: 1.5rem;
	font-weight: 700;
}
.nuvolab-promo-tiles__cta {
	display: inline-flex;
	align-items: center;
	gap: 6px;
	margin-top: 6px;
	font-weight: 600;
	font-size: 0.85rem;
}
.nuvolab-promo-tiles__cta svg {
	transition: transform var(--nuvolab-transition);
}

@media (min-width: 700px) {
	.nuvolab-promo-tiles__grid {
		grid-template-columns: repeat(3, 1fr);
	}
	.nuvolab-promo-tiles__tile--wide {
		grid-column: span 2;
	}
}

/* Hero con immagine di sfondo */
.nuvolab-hero--has-bg {
	background: none;
	color: #fff;
}
.nuvolab-hero__bg {
	position: absolute;
	inset: 0;
	background-size: cover;
	background-position: center;
	z-index: 0;
}
.nuvolab-hero__overlay {
	position: absolute;
	inset: 0;
	background: var(--nuvolab-text);
	opacity: var(--nuvolab-hero-overlay, 0.35);
	z-index: 1;
}
.nuvolab-hero__inner {
	position: relative;
	z-index: 2;
}
.nuvolab-hero--has-bg .hero-subtitle {
	color: rgba(255, 255, 255, 0.9);
}

/* Hero come slideshow fotografico: più slide impilate, quella attiva in
   dissolvenza sopra le altre. Nessun layout shift: sono tutte position:
   absolute nello stesso spazio del wrapper .nuvolab-hero__slides. */
.nuvolab-hero--carousel {
	min-height: clamp(420px, 60vh, 640px);
	display: flex;
	align-items: center;
}
.nuvolab-hero__slides {
	position: absolute;
	inset: 0;
	z-index: 0;
}
.nuvolab-hero--carousel .nuvolab-hero__bg {
	opacity: 0;
	transition: opacity 1.1s ease;
	transform: scale(1.04);
}
.nuvolab-hero--carousel .nuvolab-hero__bg.is-active {
	opacity: 1;
	transition: opacity 1.1s ease, transform 8s ease-out;
	transform: scale(1);
}
.nuvolab-hero__dots {
	position: absolute;
	left: 50%;
	bottom: 22px;
	transform: translateX(-50%);
	z-index: 3;
	display: flex;
	gap: 10px;
}
.nuvolab-hero__dot {
	width: 9px;
	height: 9px;
	border-radius: 50%;
	border: 1.5px solid rgba(255, 255, 255, 0.85);
	background: transparent;
	padding: 0;
	cursor: pointer;
	transition: background 0.25s ease, transform 0.25s ease, width 0.25s ease;
}
.nuvolab-hero__dot:hover {
	transform: scale(1.15);
}
.nuvolab-hero__dot.is-active {
	background: #fff;
	width: 22px;
	border-radius: 5px;
}

/* -------------------------------------------------------------------------
   Banner promozionale (tra Hero e Categorie)
   ---------------------------------------------------------------------- */
.nuvolab-banner {
	position: relative;
	overflow: hidden;
	background: linear-gradient(120deg, var(--nuvolab-primary-dark, var(--nuvolab-primary)), var(--nuvolab-primary), var(--nuvolab-secondary));
	color: #fff;
}

/* Striscia decorativa a scorrimento continuo: puro CSS, nessuna dipendenza
   da JS/Motion.dev, quindi resta sempre visibile e sempre in movimento —
   un piccolo elemento "vivo" richiesto per rendere il sito più dinamico. */
.nuvolab-banner__marquee {
	overflow: hidden;
	white-space: nowrap;
	border-bottom: 1px solid rgba(255, 255, 255, 0.18);
	opacity: 0.55;
}
.nuvolab-banner__marquee-track {
	display: inline-flex;
	align-items: center;
	gap: 28px;
	padding-block: 8px;
	animation: nuvolab-marquee 24s linear infinite;
	will-change: transform;
}
.nuvolab-banner__marquee-item {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	font-size: 0.75rem;
	font-weight: 700;
	letter-spacing: 0.06em;
	text-transform: uppercase;
}
@keyframes nuvolab-marquee {
	from { transform: translateX(0); }
	to { transform: translateX(-50%); }
}
@media (prefers-reduced-motion: reduce) {
	.nuvolab-banner__marquee-track {
		animation: none;
	}
}

.nuvolab-banner__inner {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	gap: 18px;
	padding-block: 26px;
	text-align: center;
}
.nuvolab-banner__text {
	margin: 0;
	font-size: clamp(1rem, 2.4vw, 1.25rem);
	font-weight: 600;
}
.nuvolab-banner__cta {
	padding: 10px 24px;
	font-size: 0.85rem;
	flex-shrink: 0;
}

@media (max-width: 599px) {
	.nuvolab-banner__inner {
		flex-direction: column;
		text-align: center;
		padding-block: 22px;
	}
	.nuvolab-hero--carousel {
		min-height: clamp(360px, 70vh, 520px);
	}
	.nuvolab-hero__dots {
		bottom: 14px;
	}
	.nuvolab-hero__dot {
		width: 7px;
		height: 7px;
	}
	.nuvolab-hero__dot.is-active {
		width: 18px;
	}
}

/* Strip categorie a icona tonda: scorrimento orizzontale a tocco su
   mobile (con "snap" cosi' ogni icona si allinea bene durante lo swipe),
   riga centrata e senza scroll su schermi più larghi. */
.nuvolab-category-icons {
	padding-block: 34px;
}
.nuvolab-category-icons__track {
	display: flex;
	gap: 26px;
	overflow-x: auto;
	scroll-snap-type: x proximity;
	padding-bottom: 6px;
	scrollbar-width: thin;
}
.nuvolab-category-icons__item {
	flex: 0 0 auto;
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 10px;
	width: 88px;
	text-align: center;
	scroll-snap-align: start;
}
.nuvolab-category-icons__circle {
	width: 80px;
	height: 80px;
	border-radius: 50%;
	overflow: hidden;
	display: flex;
	align-items: center;
	justify-content: center;
	background: linear-gradient(135deg, color-mix(in srgb, var(--nuvolab-primary) 20%, white), color-mix(in srgb, var(--nuvolab-secondary) 20%, white));
	border: 2px solid var(--nuvolab-border);
	transition: transform var(--nuvolab-transition), border-color var(--nuvolab-transition);
}
.nuvolab-category-icons__item:hover .nuvolab-category-icons__circle {
	transform: translateY(-4px) scale(1.05);
	border-color: var(--nuvolab-primary);
}
.nuvolab-category-icons__circle img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}
.nuvolab-category-icons__initial {
	font-family: var(--nuvolab-font-heading);
	font-size: 1.6rem;
	font-weight: 700;
	color: var(--nuvolab-primary-dark);
}
.nuvolab-category-icons__label {
	font-size: 0.82rem;
	font-weight: 600;
	line-height: 1.25;
}
@media (min-width: 700px) {
	.nuvolab-category-icons__track {
		justify-content: center;
		flex-wrap: wrap;
		overflow-x: visible;
	}
}

/* Categorie in evidenza. Stessa logica auto-fill/minmax delle card
   prodotto: con 4 categorie e colonne fisse, a larghezze di laptop comuni
   (900-1100px) le card diventavano strette e sproporzionate rispetto
   all'altezza (aspect-ratio 4/5); con minmax restano sempre leggibili e si
   dispongono su 2, 3 o 4 colonne in base allo spazio reale. */
.nuvolab-categories__grid {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: 18px;
}
@media (min-width: 560px) {
	.nuvolab-categories__grid {
		grid-template-columns: repeat(auto-fit, minmax(min(100%, 240px), 1fr));
		gap: 24px;
	}
}
.nuvolab-category-card {
	position: relative;
	display: block;
	border-radius: var(--nuvolab-radius);
	overflow: hidden;
	aspect-ratio: 4/5;
	color: #fff;
	box-shadow: 0 1px 3px rgba(0,0,0,0.08);
	transition: transform var(--nuvolab-transition), box-shadow var(--nuvolab-transition);
}
.nuvolab-category-card:hover {
	transform: translateY(-6px);
	box-shadow: 0 20px 40px color-mix(in srgb, var(--nuvolab-primary) 35%, transparent);
}
.nuvolab-category-card__image {
	position: absolute;
	inset: 0;
	background-size: cover;
	background-position: center;
	transition: transform 0.6s ease;
}
.nuvolab-category-card:hover .nuvolab-category-card__image {
	transform: scale(1.08);
}
.nuvolab-category-card::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, transparent 35%, rgba(0,0,0,0.6));
}
.nuvolab-category-card__label {
	position: absolute;
	left: 22px;
	right: 22px;
	bottom: 20px;
	z-index: 2;
	font-family: var(--nuvolab-font-heading);
	font-weight: 700;
	font-size: clamp(1.05rem, 1.6vw, 1.3rem);
	display: flex;
	align-items: flex-end;
	justify-content: space-between;
	gap: 8px;
	text-shadow: 0 2px 10px rgba(0,0,0,0.25);
}
.nuvolab-category-card__label-text {
	display: flex;
	flex-direction: column;
	gap: 3px;
}
.nuvolab-category-card__label small {
	font-family: var(--nuvolab-font-body);
	font-weight: 400;
	font-size: 0.78rem;
	opacity: 0.9;
}
.nuvolab-category-card__arrow {
	flex-shrink: 0;
	width: 34px;
	height: 34px;
	border-radius: 50%;
	background: rgba(255,255,255,0.2);
	backdrop-filter: blur(4px);
	display: flex;
	align-items: center;
	justify-content: center;
	transform: translateX(-6px);
	opacity: 0.85;
	transition: transform var(--nuvolab-transition), opacity var(--nuvolab-transition), background var(--nuvolab-transition);
}
.nuvolab-category-card:hover .nuvolab-category-card__arrow {
	transform: translateX(0);
	opacity: 1;
	background: var(--nuvolab-primary);
}

/* Testimonianze */
.nuvolab-testimonials {
	background: color-mix(in srgb, var(--nuvolab-secondary) 10%, transparent);
}
.nuvolab-testimonials__grid {
	display: grid;
	grid-template-columns: 1fr;
	gap: 24px;
}
.nuvolab-testimonial-card {
	background: #fff;
	border-radius: var(--nuvolab-radius);
	padding: 26px;
	border: 1px solid var(--nuvolab-border);
}
.nuvolab-testimonial-card__paw {
	color: color-mix(in srgb, var(--nuvolab-primary) 55%, white);
	margin-bottom: 10px;
}
.nuvolab-stars {
	display: inline-flex;
	gap: 2px;
	color: var(--nuvolab-accent);
	margin-bottom: 12px;
}
.nuvolab-testimonial-card__text {
	font-style: italic;
	color: color-mix(in srgb, var(--nuvolab-text) 85%, transparent);
}
.nuvolab-testimonial-card__author {
	display: flex;
	align-items: center;
	gap: 12px;
	margin-top: 16px;
}
.nuvolab-testimonial-card__avatar {
	width: 44px;
	height: 44px;
	border-radius: 50%;
	object-fit: cover;
}
.nuvolab-testimonial-card__author span {
	display: block;
	font-size: 0.8rem;
	color: color-mix(in srgb, var(--nuvolab-text) 60%, transparent);
}
@media (min-width: 700px) {
	.nuvolab-testimonials__grid {
		grid-template-columns: repeat(3, 1fr);
	}
}

/* Griglia stile Instagram */
/* Stessa logica responsive delle card prodotto: auto-fill/minmax invece di
   un numero di colonne fisso, cosi' i riquadri restano sempre ben
   proporzionati (non troppo piccoli su schermi larghi, non troppo grandi
   su mobile) senza bisogno di tante media query manuali. */
.nuvolab-instagram__grid {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: 12px;
}
@media (min-width: 480px) {
	.nuvolab-instagram__grid {
		grid-template-columns: repeat(auto-fill, minmax(min(100%, 170px), 1fr));
		gap: 14px;
	}
}
.nuvolab-instagram__item {
	display: block;
	position: relative;
	aspect-ratio: 1/1;
	overflow: hidden;
	border-radius: var(--nuvolab-radius-sm);
	border: 1px solid var(--nuvolab-border);
}
.nuvolab-instagram__item img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 0.5s ease;
}
.nuvolab-instagram__item:hover img {
	transform: scale(1.1);
}
/* Overlay con icona Instagram al passaggio del mouse, per rendere chiaro
   che i riquadri portano al profilo social. */
.nuvolab-instagram__item::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(135deg, color-mix(in srgb, var(--nuvolab-primary) 75%, transparent), color-mix(in srgb, var(--nuvolab-accent) 75%, transparent));
	opacity: 0;
	transition: opacity var(--nuvolab-transition);
}
.nuvolab-instagram__item::before {
	content: "";
	position: absolute;
	top: 50%;
	left: 50%;
	width: 26px;
	height: 26px;
	transform: translate(-50%, -50%) scale(0.7);
	opacity: 0;
	z-index: 1;
	transition: opacity var(--nuvolab-transition), transform var(--nuvolab-transition);
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='white' stroke-width='2'%3E%3Crect x='3' y='3' width='18' height='18' rx='5'/%3E%3Ccircle cx='12' cy='12' r='4'/%3E%3Ccircle cx='17.5' cy='6.5' r='1' fill='white'/%3E%3C/svg%3E");
	background-size: contain;
	background-repeat: no-repeat;
}
.nuvolab-instagram__item:hover::after,
.nuvolab-instagram__item:hover::before {
	opacity: 1;
}
.nuvolab-instagram__item:hover::before {
	transform: translate(-50%, -50%) scale(1);
}

/* Newsletter */
.nuvolab-newsletter {
	background: linear-gradient(135deg, var(--nuvolab-primary), var(--nuvolab-secondary));
	border-radius: var(--nuvolab-radius);
	margin-inline: 20px;
	color: #fff;
}
.nuvolab-newsletter__inner {
	display: flex;
	flex-direction: column;
	gap: 24px;
	align-items: center;
	text-align: center;
	padding-block: 50px;
}
.nuvolab-newsletter__text h2 { color: #fff; }
.nuvolab-newsletter__text p { color: rgba(255,255,255,0.9); }
.nuvolab-newsletter__form {
	display: flex;
	gap: 10px;
	width: 100%;
	max-width: 420px;
}
.nuvolab-newsletter__form input {
	flex: 1;
	padding: 14px 18px;
	border-radius: 999px;
	border: none;
	font-size: 1rem;
}
@media (min-width: 900px) {
	.nuvolab-newsletter__inner {
		flex-direction: row;
		justify-content: space-between;
		text-align: left;
	}
}

/* Blog preview */
.nuvolab-blog-preview__grid {
	display: grid;
	grid-template-columns: 1fr;
	gap: 24px;
}
.nuvolab-blog-card {
	display: block;
	color: var(--nuvolab-text);
}
.nuvolab-blog-card__image {
	display: block;
	border-radius: var(--nuvolab-radius);
	overflow: hidden;
	aspect-ratio: 3/2;
	margin-bottom: 14px;
}
.nuvolab-blog-card__image img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	transition: transform 0.5s ease;
}
.nuvolab-blog-card:hover .nuvolab-blog-card__image img {
	transform: scale(1.06);
}
.nuvolab-blog-card__category {
	font-size: 0.75rem;
	font-weight: 700;
	text-transform: uppercase;
	color: var(--nuvolab-primary-dark);
	letter-spacing: 0.04em;
}
.nuvolab-blog-card__title {
	margin: 6px 0;
	font-size: 1.15rem;
}
.nuvolab-blog-card__excerpt {
	font-size: 0.9rem;
	color: color-mix(in srgb, var(--nuvolab-text) 70%, transparent);
}
@media (min-width: 700px) {
	.nuvolab-blog-preview__grid {
		grid-template-columns: repeat(3, 1fr);
	}
}

/* FAQ / Accordion */
.nuvolab-accordion__item {
	border-bottom: 1px solid var(--nuvolab-border);
}
.nuvolab-accordion__trigger {
	width: 100%;
	display: flex;
	align-items: center;
	justify-content: space-between;
	background: none;
	border: none;
	padding: 18px 4px;
	font-family: var(--nuvolab-font-heading);
	font-weight: 600;
	font-size: 1rem;
	text-align: left;
	color: var(--nuvolab-text);
}
.nuvolab-accordion__trigger svg {
	transition: transform var(--nuvolab-transition);
	flex-shrink: 0;
}
.nuvolab-accordion__trigger[aria-expanded="true"] svg {
	transform: rotate(180deg);
}
.nuvolab-accordion__panel {
	max-height: 0;
	overflow: hidden;
	transition: max-height 0.35s ease;
}
.nuvolab-accordion__panel-inner {
	padding: 0 4px 18px;
	color: color-mix(in srgb, var(--nuvolab-text) 75%, transparent);
}

/* Footer: social e pagamenti */
.nuvolab-footer__socials {
	display: flex;
	gap: 10px;
	margin-top: 14px;
}
.nuvolab-footer__social-icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 36px;
	height: 36px;
	border-radius: 50%;
	border: 1px solid var(--nuvolab-border);
	color: var(--nuvolab-primary-dark);
	transition: background var(--nuvolab-transition), color var(--nuvolab-transition);
}
.nuvolab-footer__social-icon:hover {
	background: var(--nuvolab-primary);
	color: #fff;
}
.nuvolab-footer__bottom-inner {
	display: flex;
	flex-direction: column;
	gap: 12px;
	align-items: center;
}
.nuvolab-footer__payments {
	display: flex;
	gap: 10px;
	flex-wrap: wrap;
	justify-content: center;
}
.nuvolab-payment-icon {
	font-size: 0.7rem;
	font-weight: 700;
	padding: 4px 10px;
	border: 1px solid var(--nuvolab-border);
	border-radius: 6px;
	opacity: 0.75;
}
@media (min-width: 700px) {
	.nuvolab-footer__bottom-inner {
		flex-direction: row;
		justify-content: space-between;
	}
}

/* Pulsante "Torna su" */
.nuvolab-back-to-top {
	position: fixed;
	right: 20px;
	bottom: 20px;
	width: 44px;
	height: 44px;
	border-radius: 50%;
	background: var(--nuvolab-primary);
	color: #fff;
	border: none;
	display: flex;
	align-items: center;
	justify-content: center;
	box-shadow: 0 8px 24px rgba(0,0,0,0.2);
	opacity: 0;
	visibility: hidden;
	transform: translateY(10px);
	transition: opacity var(--nuvolab-transition), transform var(--nuvolab-transition), visibility var(--nuvolab-transition);
	z-index: 900;
}
.nuvolab-back-to-top.is-visible {
	opacity: 1;
	visibility: visible;
	transform: none;
}
.nuvolab-back-to-top:hover {
	background: var(--nuvolab-accent);
}

/* Link hover globale (colore personalizzabile) */
a:hover {
	color: var(--nuvolab-link-hover);
}
.nuvolab-menu a:hover,
.nuvolab-footer__social-icon:hover {
	color: inherit;
}

/* Rispetta le preferenze di riduzione del movimento */
@media (prefers-reduced-motion: reduce) {
	*, *::before, *::after {
		animation-duration: 0.01ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: 0.01ms !important;
		scroll-behavior: auto !important;
	}
	.nuvolab-anim-fade-up,
	.nuvolab-anim-fade-in,
	.nuvolab-anim-hero,
	.hero-title,
	.hero-subtitle,
	.nuvolab-hero .nuvolab-btn {
		opacity: 1 !important;
		transform: none !important;
	}
}
