/*!
 * Avviso Laterale — Side Notice Popup
 * Front-end styles. Tutti i selettori sono prefissati .snp- per non toccare il tema.
 */

.snp-root {
	--snp-z: 999990;
	--snp-x: 24px;
	--snp-y: 24px;
	--snp-badge-bg: #fff;
	--snp-badge-color: #0f172a;
	--snp-badge-border: #e6ebf2;
	--snp-icon-bg: #0ea5e9;
	--snp-icon-color: #fff;
	--snp-icon-glow: rgba(14, 165, 233, .45);
	--snp-badge-radius: 18px;
	--snp-badge-fs: 14px;
	--snp-badge-fw: 600;
	--snp-badge-max: 270px;
	--snp-badge-shadow: 0 18px 45px rgba(15, 23, 42, .16), 0 4px 12px rgba(15, 23, 42, .08);
	--snp-modal-bg: #fff;
	--snp-modal-color: #0f172a;
	--snp-modal-muted: #64748b;
	--snp-modal-accent: #0ea5e9;
	--snp-modal-soft: rgba(14, 165, 233, .1);
	--snp-modal-w: 900px;
	--snp-modal-radius: 22px;
	--snp-overlay-bg: rgba(11, 18, 32, .55);
	--snp-blur: 10px;
	--snp-line: rgba(15, 23, 42, .1);

	font-family: var(--snp-font, inherit);
}

/* -------------------------------------------------------------------------
   1. Badge laterale — sempre visibile, senza pulsante di chiusura
   ------------------------------------------------------------------------- */

.snp-root .snp-badge {
	position: fixed;
	z-index: var(--snp-z);
	display: flex;
	align-items: center;
	gap: 12px;
	box-sizing: border-box;
	width: auto;
	max-width: var(--snp-badge-max);
	margin: 0;
	padding: 10px 14px 10px 10px;
	border: 1px solid var(--snp-badge-border);
	border-radius: var(--snp-badge-radius);
	background: var(--snp-badge-bg);
	box-shadow: var(--snp-badge-shadow);
	color: var(--snp-badge-color);
	font-family: inherit;
	font-size: var(--snp-badge-fs);
	font-weight: var(--snp-badge-fw);
	line-height: 1.35;
	text-align: left;
	text-transform: none;
	letter-spacing: 0;
	cursor: pointer;
	opacity: 0;
	transform: translateY(14px) scale(.96);
	transition: opacity .45s cubic-bezier(.16, 1, .3, 1), transform .45s cubic-bezier(.16, 1, .3, 1), box-shadow .25s ease;
	pointer-events: none;
	-webkit-tap-highlight-color: transparent;
}

.snp-root.is-ready .snp-badge {
	opacity: 1;
	transform: translateY(0) scale(1);
	pointer-events: auto;
}

.snp-root .snp-badge:hover {
	transform: translateY(-3px) scale(1.015);
	box-shadow: 0 24px 55px rgba(15, 23, 42, .2), 0 6px 14px rgba(15, 23, 42, .1);
}

.snp-root .snp-badge:focus-visible {
	outline: 3px solid var(--snp-icon-bg);
	outline-offset: 3px;
}

.snp-root .snp-badge:active {
	transform: translateY(-1px) scale(.99);
}

/* Posizioni */
.snp-pos-bottom-left .snp-badge  { left: var(--snp-x);  bottom: var(--snp-y); }
.snp-pos-bottom-right .snp-badge { right: var(--snp-x); bottom: var(--snp-y); }

.snp-pos-middle-left .snp-badge {
	left: var(--snp-x);
	top: 50%;
	translate: 0 -50%;
}

.snp-pos-middle-right .snp-badge {
	right: var(--snp-x);
	top: 50%;
	translate: 0 -50%;
}

/* Icona */
.snp-root .snp-badge__icon {
	position: relative;
	flex: 0 0 auto;
	display: grid;
	place-items: center;
	width: 44px;
	height: 44px;
	border-radius: 50%;
	background: var(--snp-icon-bg);
	color: var(--snp-icon-color);
	overflow: hidden;
}

.snp-root .snp-badge__icon .snp-svg {
	width: 23px;
	height: 23px;
	display: block;
}

.snp-root .snp-badge__img {
	width: 100%;
	height: 100%;
	object-fit: cover;
	border-radius: 50%;
	display: block;
}

.snp-root .snp-badge__emoji {
	font-size: 22px;
	line-height: 1;
}

/* Alone pulsante attorno all'icona */
.snp-has-pulse .snp-badge__icon::after {
	content: "";
	position: absolute;
	inset: 0;
	border-radius: 50%;
	box-shadow: 0 0 0 0 var(--snp-icon-glow);
	animation: snp-pulse 2.4s cubic-bezier(.4, 0, .6, 1) infinite;
}

@keyframes snp-pulse {
	0%   { box-shadow: 0 0 0 0 var(--snp-icon-glow); }
	70%  { box-shadow: 0 0 0 14px rgba(0, 0, 0, 0); }
	100% { box-shadow: 0 0 0 0 rgba(0, 0, 0, 0); }
}

.snp-root .snp-badge__text {
	display: block;
	min-width: 0;
	color: inherit;
	font-size: inherit;
	font-weight: inherit;
}

.snp-root .snp-badge__arrow {
	flex: 0 0 auto;
	display: grid;
	place-items: center;
	width: 18px;
	height: 18px;
	margin-left: -2px;
	opacity: .45;
	transition: transform .25s ease, opacity .25s ease;
}

.snp-root .snp-badge__arrow svg {
	width: 16px;
	height: 16px;
	display: block;
}

.snp-root .snp-badge:hover .snp-badge__arrow {
	opacity: .9;
	transform: translateX(3px);
}

/* -------------------------------------------------------------------------
   2. Overlay a tutto schermo con sfocatura
   ------------------------------------------------------------------------- */

.snp-root .snp-overlay {
	position: fixed;
	inset: 0;
	z-index: calc(var(--snp-z) + 5);
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 24px;
	box-sizing: border-box;
	background: var(--snp-overlay-bg);
	-webkit-backdrop-filter: blur(var(--snp-blur)) saturate(1.1);
	backdrop-filter: blur(var(--snp-blur)) saturate(1.1);
	opacity: 0;
	visibility: hidden;
	overflow-y: auto;
	overscroll-behavior: contain;
	transition: opacity .32s ease, visibility 0s linear .32s;
	pointer-events: none;
}

.snp-root .snp-overlay.is-open {
	opacity: 1;
	visibility: visible;
	transition: opacity .32s ease, visibility 0s;
	pointer-events: auto;
}

.snp-root .snp-modal {
	position: relative;
	box-sizing: border-box;
	width: 100%;
	max-width: var(--snp-modal-w);
	max-height: calc(100vh - 48px);
	max-height: calc(100dvh - 48px);
	margin: auto;
	padding: 0;
	border-radius: var(--snp-modal-radius);
	background: var(--snp-modal-bg);
	color: var(--snp-modal-color);
	box-shadow: 0 40px 90px rgba(2, 6, 23, .35);
	overflow: hidden auto;
	overscroll-behavior: contain;
	opacity: 0;
	transform: translateY(22px) scale(.97);
	transition: opacity .35s cubic-bezier(.16, 1, .3, 1), transform .35s cubic-bezier(.16, 1, .3, 1);
	-webkit-overflow-scrolling: touch;
}

.snp-root .snp-overlay.is-open .snp-modal {
	opacity: 1;
	transform: translateY(0) scale(1);
}

.snp-modal-fullscreen .snp-overlay { padding: 0; }

.snp-modal-fullscreen .snp-modal {
	max-width: none;
	width: 100%;
	height: 100vh;
	height: 100dvh;
	max-height: none;
	border-radius: 0;
}

/* Pulsante di chiusura (solo nella modale) */
.snp-root .snp-modal__close {
	position: absolute;
	top: 16px;
	right: 16px;
	z-index: 3;
	display: grid;
	place-items: center;
	width: 40px;
	height: 40px;
	padding: 0;
	border: 1px solid var(--snp-line);
	border-radius: 50%;
	background: var(--snp-modal-bg);
	color: var(--snp-modal-muted);
	cursor: pointer;
	transition: background .2s ease, color .2s ease, transform .2s ease;
}

.snp-root .snp-modal__close svg {
	width: 18px;
	height: 18px;
	display: block;
}

.snp-root .snp-modal__close:hover {
	background: var(--snp-modal-color);
	color: var(--snp-modal-bg);
	transform: rotate(90deg);
}

.snp-root .snp-modal__close:focus-visible {
	outline: 3px solid var(--snp-modal-accent);
	outline-offset: 2px;
}

/* -------------------------------------------------------------------------
   3. Testata della modale — gerarchia tipografica
   ------------------------------------------------------------------------- */

.snp-root .snp-modal__head {
	position: relative;
	padding: 38px 40px 26px;
	background:
		radial-gradient(120% 140% at 0% 0%, var(--snp-modal-soft) 0%, transparent 60%),
		var(--snp-modal-bg);
	border-bottom: 1px solid var(--snp-line);
}

.snp-root .snp-modal__head::before {
	content: "";
	position: absolute;
	inset: 0 0 auto 0;
	height: 4px;
	background: var(--snp-modal-accent);
	background: linear-gradient(90deg, var(--snp-modal-accent), color-mix(in srgb, var(--snp-modal-accent) 35%, #ffffff));
}

.snp-root .snp-modal__eyebrow {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	margin: 0 0 12px;
	padding: 0;
	color: var(--snp-modal-accent);
	font-size: 12px;
	font-weight: 700;
	line-height: 1;
	letter-spacing: .14em;
	text-transform: uppercase;
}

.snp-root .snp-modal__dot {
	width: 8px;
	height: 8px;
	border-radius: 50%;
	background: currentColor;
	box-shadow: 0 0 0 4px var(--snp-modal-soft);
}

.snp-root .snp-modal__title {
	margin: 0;
	padding: 0;
	color: var(--snp-modal-color);
	font-family: inherit;
	font-size: clamp(24px, 3.4vw, 34px);
	font-weight: 800;
	line-height: 1.15;
	letter-spacing: -.02em;
}

.snp-root .snp-modal__lead {
	max-width: 62ch;
	margin: 12px 0 0;
	color: var(--snp-modal-muted);
	font-size: 16px;
	line-height: 1.6;
}

.snp-root .snp-modal__lead p { margin: 0 0 8px; }
.snp-root .snp-modal__lead p:last-child { margin-bottom: 0; }

/* -------------------------------------------------------------------------
   4. Corpo: sezioni e tabelle
   ------------------------------------------------------------------------- */

.snp-root .snp-modal__body { padding: 28px 40px 34px; }

.snp-root .snp-sections {
	display: grid;
	gap: 28px;
}

.snp-root .snp-block {
	--snp-sec: var(--snp-modal-accent);
	--snp-sec-soft: var(--snp-modal-soft);
	--snp-sec-line: var(--snp-line);
	padding: 22px 24px 20px;
	border: 1px solid var(--snp-sec-line);
	border-radius: 16px;
	background: linear-gradient(180deg, var(--snp-sec-soft) 0%, transparent 120px);
}

.snp-root .snp-block__head { margin-bottom: 16px; }

.snp-root .snp-block__eyebrow {
	display: inline-block;
	margin-bottom: 8px;
	padding: 4px 10px;
	border-radius: 999px;
	background: var(--snp-sec);
	color: #fff;
	font-size: 11px;
	font-weight: 700;
	line-height: 1.4;
	letter-spacing: .08em;
	text-transform: uppercase;
}

.snp-root .snp-block__title {
	margin: 0;
	padding: 0;
	color: var(--snp-modal-color);
	font-family: inherit;
	font-size: 20px;
	font-weight: 700;
	line-height: 1.25;
	letter-spacing: -.01em;
}

.snp-root .snp-block__subtitle {
	margin: 6px 0 0;
	padding: 0;
	color: var(--snp-modal-muted);
	font-size: 14px;
	font-weight: 400;
	line-height: 1.5;
}

.snp-root .snp-table-wrap {
	width: 100%;
	overflow-x: auto;
}

.snp-root table.snp-table {
	width: 100%;
	margin: 0;
	border: 0;
	border-collapse: collapse;
	border-spacing: 0;
	background: transparent;
	font-size: 15px;
	table-layout: auto;
}

.snp-root table.snp-table thead th {
	padding: 0 14px 10px 0;
	border: 0;
	border-bottom: 1px solid var(--snp-sec-line);
	background: transparent;
	color: var(--snp-modal-muted);
	font-size: 11px;
	font-weight: 700;
	line-height: 1.4;
	letter-spacing: .1em;
	text-transform: uppercase;
	text-align: left;
	white-space: nowrap;
}

.snp-root table.snp-table thead th.snp-th-tag { text-align: right; }

.snp-root table.snp-table tbody tr { background: transparent; }

.snp-root table.snp-table tbody tr + tr th,
.snp-root table.snp-table tbody tr + tr td {
	border-top: 1px solid var(--snp-line);
}

.snp-root table.snp-table tbody th,
.snp-root table.snp-table tbody td {
	padding: 13px 14px 13px 0;
	border-left: 0;
	border-right: 0;
	border-bottom: 0;
	background: transparent;
	color: var(--snp-modal-color);
	font-weight: 400;
	text-align: left;
	vertical-align: middle;
}

.snp-root table.snp-table tbody td:last-child { padding-right: 0; text-align: right; }

.snp-root .snp-cell__main {
	display: block;
	color: var(--snp-modal-color);
	font-size: 15px;
	font-weight: 700;
	line-height: 1.3;
	letter-spacing: -.005em;
}

.snp-root .snp-cell__sub {
	display: block;
	margin-top: 3px;
	color: var(--snp-modal-muted);
	font-size: 13px;
	font-weight: 400;
	line-height: 1.4;
}

.snp-root .snp-tag {
	display: inline-block;
	padding: 5px 11px;
	border-radius: 999px;
	background: var(--snp-sec-soft);
	color: var(--snp-sec);
	font-size: 13px;
	font-weight: 700;
	line-height: 1.4;
	white-space: nowrap;
}

.snp-root .snp-block__note {
	display: flex;
	align-items: flex-start;
	gap: 8px;
	margin: 16px 0 0;
	padding: 10px 12px;
	border-radius: 10px;
	background: var(--snp-sec-soft);
	color: var(--snp-modal-muted);
	font-size: 13px;
	font-style: normal;
	line-height: 1.5;
}

.snp-root .snp-block__note svg {
	flex: 0 0 auto;
	width: 16px;
	height: 16px;
	margin-top: 1px;
	color: var(--snp-sec);
}

/* Testo libero / HTML personalizzato */
.snp-root .snp-richtext {
	color: var(--snp-modal-color);
	font-size: 16px;
	line-height: 1.65;
}

.snp-root .snp-richtext > *:first-child { margin-top: 0; }
.snp-root .snp-richtext > *:last-child { margin-bottom: 0; }
.snp-root .snp-richtext h2 { font-size: 22px; font-weight: 700; margin: 24px 0 10px; }
.snp-root .snp-richtext h3 { font-size: 18px; font-weight: 700; margin: 20px 0 8px; }
.snp-root .snp-richtext h4 { font-size: 16px; font-weight: 700; margin: 18px 0 6px; }
.snp-root .snp-richtext p { margin: 0 0 12px; }
.snp-root .snp-richtext ul,
.snp-root .snp-richtext ol { margin: 0 0 14px; padding-left: 22px; }
.snp-root .snp-richtext li { margin-bottom: 6px; }
.snp-root .snp-richtext a { color: var(--snp-modal-accent); text-decoration: underline; }
.snp-root .snp-richtext strong { font-weight: 700; }
.snp-root .snp-richtext hr { margin: 22px 0; border: 0; border-top: 1px solid var(--snp-line); }

.snp-root .snp-richtext table {
	width: 100%;
	border-collapse: collapse;
	margin: 0 0 16px;
	font-size: 15px;
}

.snp-root .snp-richtext th,
.snp-root .snp-richtext td {
	padding: 10px 12px;
	border-bottom: 1px solid var(--snp-line);
	text-align: left;
}

/* Piede */
.snp-root .snp-modal__foot {
	padding: 18px 40px 26px;
	border-top: 1px solid var(--snp-line);
	background: var(--snp-modal-soft);
	color: var(--snp-modal-muted);
	font-size: 14px;
	line-height: 1.55;
}

.snp-root .snp-modal__foot p { margin: 0 0 6px; }
.snp-root .snp-modal__foot p:last-child { margin-bottom: 0; }
.snp-root .snp-modal__foot a { color: var(--snp-modal-accent); }

/* Blocco dello scroll di pagina quando la modale è aperta.
   Niente touch-action qui: bloccherebbe anche lo scroll interno al pop-up. */
html.snp-locked,
html.snp-locked body {
	overflow: hidden !important;
}

/* In modalità tutto schermo la testata resta ancorata in alto (X sempre raggiungibile) */
.snp-modal-fullscreen .snp-modal__head {
	position: sticky;
	top: 0;
	z-index: 2;
}

/* -------------------------------------------------------------------------
   5. Responsive
   ------------------------------------------------------------------------- */

@media (max-width: 900px) {
	.snp-root .snp-modal__head { padding: 32px 24px 22px; }
	.snp-root .snp-modal__body { padding: 22px 24px 28px; }
	.snp-root .snp-modal__foot { padding: 16px 24px 22px; }
	.snp-root .snp-block { padding: 18px 18px 16px; }
}

@media (max-width: 640px) {
	.snp-root .snp-overlay { padding: 12px; }

	.snp-root .snp-modal {
		max-height: calc(100vh - 24px);
		max-height: calc(100dvh - 24px);
		border-radius: 18px;
	}

	.snp-root .snp-modal__head { padding: 30px 18px 20px; }
	.snp-root .snp-modal__body { padding: 18px 18px 24px; }
	.snp-root .snp-modal__foot { padding: 14px 18px 20px; }
	.snp-root .snp-modal__lead { font-size: 15px; }

	/* Tabelle -> schede impilate */
	.snp-root table.snp-table thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; }
	.snp-root table.snp-table,
	.snp-root table.snp-table tbody,
	.snp-root table.snp-table tr,
	.snp-root table.snp-table th,
	.snp-root table.snp-table td { display: block; width: auto; }

	.snp-root table.snp-table tbody tr {
		padding: 14px 0;
		border-top: 1px solid var(--snp-line);
	}

	.snp-root table.snp-table tbody tr:first-child { border-top: 0; padding-top: 4px; }

	.snp-root table.snp-table tbody tr + tr th,
	.snp-root table.snp-table tbody tr + tr td { border-top: 0; }

	.snp-root table.snp-table tbody th,
	.snp-root table.snp-table tbody td { padding: 0; }

	.snp-root table.snp-table tbody td {
		display: flex;
		flex-wrap: wrap;
		align-items: baseline;
		justify-content: space-between;
		gap: 4px 12px;
		min-width: 0;
		margin-top: 8px;
		text-align: left;
	}

	.snp-root table.snp-table tbody td:last-child { text-align: left; padding-right: 0; }

	.snp-root table.snp-table tbody td::before {
		content: attr(data-label);
		flex: 0 0 auto;
		color: var(--snp-modal-muted);
		font-size: 11px;
		font-weight: 700;
		letter-spacing: .08em;
		text-transform: uppercase;
	}

	.snp-root table.snp-table tbody td:empty { display: none; }
}

/* Badge su mobile */
@media (max-width: 600px) {
	.snp-root .snp-badge { max-width: min(var(--snp-badge-max), calc(100vw - 32px)); }

	.snp-mobile-compact .snp-badge__text,
	.snp-mobile-compact .snp-badge__arrow { display: none; }

	.snp-mobile-compact .snp-badge {
		padding: 8px;
		border-radius: 50%;
	}

	.snp-mobile-hidden .snp-badge { display: none !important; }
}

/* Accessibilità: riduzione movimento */
@media (prefers-reduced-motion: reduce) {
	.snp-root .snp-badge,
	.snp-root .snp-modal,
	.snp-root .snp-overlay,
	.snp-root .snp-badge__arrow { transition-duration: .01ms !important; }

	.snp-has-pulse .snp-badge__icon::after { animation: none; }
}

/* Fallback per browser senza backdrop-filter: overlay più coprente */
@supports not ((backdrop-filter: blur(2px)) or (-webkit-backdrop-filter: blur(2px))) {
	.snp-root .snp-overlay {
		background-image: linear-gradient(var(--snp-overlay-bg), var(--snp-overlay-bg));
	}
}
