.aiact-badge-wrap {
	position: relative;
	display: inline-block;
	max-width: 100%;
	vertical-align: top;
	font-size: 0;
	line-height: 0;
}

.aiact-badge-wrap img {
	display: block;
	max-width: 100%;
	height: auto;
}

/* Variante esterna: badge e media stanno su righe distinte. Il wrapper non
   disegna sfondo, bordo o padding; font-size/line-height a zero sulla regola
   base eliminano anche il tipico spazio di baseline sotto gli elementi inline. */
.aiact-badge-wrap.aiact-badge-wrap--outside {
	display: inline-flex;
	flex-direction: column;
	align-items: stretch;
	gap: 4px;
	position: static;
	margin: 0;
	padding: 0;
	border: 0;
	background: transparent;
	overflow: visible;
}

.aiact-badge-wrap--outside > .aiact-badge-anchor {
	position: relative;
	inset: auto;
	z-index: auto;
	align-self: flex-start;
	transform: none;
}

.aiact-badge-wrap--outside > .aiact-badge-anchor--top-right,
.aiact-badge-wrap--outside > .aiact-badge-anchor--bottom-right {
	align-self: flex-end;
}

/* Galleria: il core dimensiona i figli diretti della figure (img o link)
   con flex; il wrapper del badge si mette in mezzo e deve quindi ereditare
   quel ruolo, altrimenti il ritaglio is-cropped non pareggia più le righe. */
.wp-block-gallery.has-nested-images figure.wp-block-image > .aiact-badge-wrap {
	display: flex;
	flex: 1 0 0%;
	width: 100%;
}

.wp-block-gallery.has-nested-images figure.wp-block-image .aiact-badge-wrap img,
.wp-block-gallery.has-nested-images figure.wp-block-image .aiact-badge-wrap a {
	flex: 1 0 0%;
	width: 100%;
}

.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image .aiact-badge-wrap img {
	height: 100%;
	object-fit: cover;
}

/* Media & Text: il wrapper occupa la cella della griglia come farebbe l'img. */
.wp-block-media-text__media > .aiact-badge-wrap {
	display: block;
	width: 100%;
}

.wp-block-media-text__media > .aiact-badge-wrap img {
	width: 100%;
}

/* Nei blocchi che impongono un rapporto d'aspetto al contenitore (immagine
   in evidenza con aspect-ratio, es. il query loop di Twenty Twenty-Five) il
   core si aspetta che l'img riempia il figure e venga ritagliata con
   object-fit. Il wrapper del badge si inserisce tra figure e img: senza
   queste regole l'immagine sborda dal figure e copre il contenuto sotto. */
.wp-block-post-featured-image .aiact-badge-wrap {
	display: block;
	width: 100%;
	height: 100%;
}

.wp-block-post-featured-image .aiact-badge-wrap img {
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.aiact-badge-anchor {
	position: absolute;
	z-index: 2;
	display: inline-block;
	max-width: 100%;
	line-height: normal;
}

.aiact-badge-anchor > .aiact-badge {
	position: relative;
	inset: auto;
}

.aiact-badge {
	position: absolute;
	z-index: 2;
	display: inline-flex;
	align-items: center;
	white-space: nowrap;
	font-weight: 800;
	letter-spacing: 0.05em;
	text-transform: uppercase;
	line-height: 1.4;
	border-radius: 999px;
	pointer-events: auto;
}

/* Posizione logica rispetto al media (impostabile dalla configurazione). */
.aiact-badge--top-left,
.aiact-badge-anchor--top-left {
	top: 10px;
	left: 10px;
}

.aiact-badge--top-right,
.aiact-badge-anchor--top-right {
	top: 10px;
	right: 10px;
}

.aiact-badge--bottom-left,
.aiact-badge-anchor--bottom-left {
	bottom: 10px;
	left: 10px;
}

.aiact-badge--bottom-right,
.aiact-badge-anchor--bottom-right {
	bottom: 10px;
	right: 10px;
}

/* Tooltip di stato. È fratello del badge grafico dentro un contenitore
   separato, quindi non viene tagliato dagli stili holo/galaxy. */
.aiact-badge-tooltip {
	position: absolute;
	z-index: 20;
	top: calc( 100% + 7px );
	left: 0;
	width: max-content;
	max-width: min( 240px, 80vw );
	padding: 6px 9px;
	border-radius: 4px;
	background: #1d2327;
	color: #fff;
	box-shadow: 0 3px 12px rgba( 0, 0, 0, 0.28 );
	font-size: 12px;
	font-weight: 500;
	letter-spacing: normal;
	line-height: 1.35;
	text-align: left;
	text-transform: none;
	white-space: normal;
	opacity: 0;
	visibility: hidden;
	pointer-events: none;
	transform: translateY( -2px );
	transition: opacity 120ms ease, transform 120ms ease, visibility 120ms ease;
}

.aiact-badge-anchor--top-right .aiact-badge-tooltip,
.aiact-badge-anchor--bottom-right .aiact-badge-tooltip {
	right: 0;
	left: auto;
}

.aiact-badge-anchor--bottom-left .aiact-badge-tooltip,
.aiact-badge-anchor--bottom-right .aiact-badge-tooltip {
	top: auto;
	bottom: calc( 100% + 7px );
	transform: translateY( 2px );
}

.aiact-badge-anchor:hover .aiact-badge-tooltip,
.aiact-badge-anchor:focus-within .aiact-badge-tooltip,
.aiact-badge-anchor.aiact-tooltip-open .aiact-badge-tooltip {
	opacity: 1;
	visibility: visible;
	transform: translateY( 0 );
}

.aiact-badge:focus-visible {
	outline: 2px solid #2271b1;
	outline-offset: 2px;
}

/* Stile grafico (impostabile dalla pagina di configurazione). */

/* Stili "seri": pensati per essere discreti, dal più leggero (solo scritta
   con un velo di contrasto) al più presente (pill piena). Il padding in em
   resta proporzionale alla taglia scelta; la doppia classe serve a vincere
   sul padding fisso dei modificatori taglia definiti più in basso. */
.aiact-badge.aiact-badge--ghost,
.aiact-badge.aiact-badge--ghost-dark {
	padding: 0.25em 0.85em;
	font-weight: 600;
	letter-spacing: 0.04em;
}

.aiact-badge--ghost {
	background: rgba( 0, 0, 0, 0.14 );
	color: #fff;
	border: 1px solid rgba( 255, 255, 255, 0.55 );
	text-shadow: 0 1px 2px rgba( 0, 0, 0, 0.45 );
}

.aiact-badge--ghost-dark {
	background: rgba( 255, 255, 255, 0.32 );
	color: #1d2327;
	border: 1px solid rgba( 0, 0, 0, 0.35 );
	text-shadow: 0 1px 1px rgba( 255, 255, 255, 0.5 );
}

.aiact-badge--frost {
	background: rgba( 255, 255, 255, 0.22 );
	color: #fff;
	border: 1px solid rgba( 255, 255, 255, 0.38 );
	-webkit-backdrop-filter: blur( 6px ) saturate( 1.3 );
	backdrop-filter: blur( 6px ) saturate( 1.3 );
	box-shadow: 0 1px 4px rgba( 0, 0, 0, 0.18 );
	text-shadow: 0 1px 2px rgba( 0, 0, 0, 0.35 );
	font-weight: 600;
}

.aiact-badge--paper {
	background: rgba( 255, 255, 255, 0.95 );
	color: #3c434a;
	border: 1px solid rgba( 0, 0, 0, 0.12 );
	box-shadow: 0 1px 2px rgba( 0, 0, 0, 0.12 );
	font-weight: 600;
}

/* Squadrati: angoli quasi vivi, dal look "credit label" fotografico.
   La doppia classe vince sul border-radius a pillola della regola base. */
.aiact-badge.aiact-badge--tag,
.aiact-badge.aiact-badge--tag-light {
	border-radius: 3px;
	font-weight: 600;
	letter-spacing: 0.04em;
}

.aiact-badge--tag {
	background: rgba( 17, 22, 26, 0.82 );
	color: #fff;
	border: 1px solid rgba( 255, 255, 255, 0.18 );
}

.aiact-badge--tag-light {
	background: rgba( 255, 255, 255, 0.92 );
	color: #1d2327;
	border: 1px solid rgba( 0, 0, 0, 0.15 );
	box-shadow: 0 1px 2px rgba( 0, 0, 0, 0.1 );
}

.aiact-badge--chrome {
	background: linear-gradient( 180deg, #fbfcfd 0%, #dde2e6 42%, #aab1b8 44%, #ced3d8 70%, #f4f6f7 100% );
	color: #14181b;
	border: 1px solid rgba( 255, 255, 255, 0.7 );
	box-shadow:
		0 1px 2px rgba( 0, 0, 0, 0.4 ),
		0 0 0 1px rgba( 0, 0, 0, 0.18 ),
		inset 0 1px 0 rgba( 255, 255, 255, 0.95 ),
		inset 0 -1px 1px rgba( 0, 0, 0, 0.2 );
	text-shadow: 0 1px 0 rgba( 255, 255, 255, 0.6 );
}

.aiact-badge--dark {
	background: rgba( 29, 35, 39, 0.85 );
	color: #fff;
	border: 1px solid rgba( 255, 255, 255, 0.15 );
	box-shadow: 0 1px 3px rgba( 0, 0, 0, 0.4 );
}

.aiact-badge--accent {
	background: #2271b1;
	color: #fff;
	border: 1px solid rgba( 255, 255, 255, 0.25 );
	box-shadow: 0 1px 3px rgba( 0, 0, 0, 0.35 );
}

/* Stili "stravaganti": ciascuno imposta il proprio aspetto (background,
   colore, ombre) più due variabili (--aiact-before-bg, --aiact-after-bg,
   --aiact-speed) consumate dal blocco condiviso di ::before/::after subito
   sotto, che disegna il bagliore pulsante e il riflesso in movimento senza
   dover ripetere quella logica per ciascuno dei 2 stili. */
.aiact-badge--holo,
.aiact-badge--galaxy {
	isolation: isolate;
	overflow: hidden;
}

.aiact-badge--holo::before,
.aiact-badge--galaxy::before {
	content: "";
	position: absolute;
	inset: 0;
	z-index: -1;
	border-radius: inherit;
	pointer-events: none;
	mix-blend-mode: screen;
	background: var( --aiact-before-bg );
	animation: aiact-badge-pulse var( --aiact-speed ) ease-in-out infinite;
}

.aiact-badge--holo::after,
.aiact-badge--galaxy::after {
	content: "";
	position: absolute;
	inset: 0;
	z-index: 2;
	border-radius: inherit;
	pointer-events: none;
	background: var( --aiact-after-bg );
	transform: translateX( -130% ) skewX( -18deg );
	animation: aiact-badge-shine var( --aiact-speed ) ease-in-out infinite;
	opacity: 0.75;
}

@keyframes aiact-badge-shine {
	0%, 22% { transform: translateX( -140% ) skewX( -18deg ); }
	52%, 100% { transform: translateX( 140% ) skewX( -18deg ); }
}

@keyframes aiact-badge-pulse {
	0%, 100% { opacity: 0.18; transform: scale( 0.98 ) rotate( 0deg ); }
	50% { opacity: 0.58; transform: scale( 1.04 ) rotate( 4deg ); }
}

.aiact-badge--holo {
	--aiact-before-bg: repeating-linear-gradient( 90deg, transparent 0 8px, rgba( 255, 255, 255, 0.22 ) 8px 10px );
	--aiact-after-bg: linear-gradient( 90deg, transparent, rgba( 255, 255, 255, 1 ), transparent );
	--aiact-speed: 2.2s;
	background:
		linear-gradient( 115deg, #ff00d4, #00e5ff 20%, #fff 34%, #7cff00 48%, #ffea00 62%, #ff3b7f 78%, #7b61ff ),
		linear-gradient( 180deg, rgba( 255, 255, 255, 0.92 ), rgba( 255, 255, 255, 0.2 ) );
	color: #080812;
	border: 1px solid rgba( 255, 255, 255, 0.88 );
	box-shadow:
		0 0 0 2px rgba( 255, 255, 255, 0.26 ),
		0 0 34px rgba( 0, 229, 255, 0.72 ),
		0 0 70px rgba( 255, 0, 212, 0.42 ),
		inset 0 1px 0 rgba( 255, 255, 255, 0.95 ),
		inset 0 -8px 22px rgba( 0, 0, 0, 0.25 );
	filter: saturate( 1.35 ) contrast( 1.08 );
	text-shadow:
		1px 1px 0 rgba( 255, 255, 255, 0.6 ),
		-2px 0 rgba( 0, 229, 255, 0.6 ),
		2px 0 rgba( 255, 0, 212, 0.6 );
}

.aiact-badge--galaxy {
	--aiact-before-bg: conic-gradient( from 90deg, transparent, rgba( 255, 255, 255, 0.25 ), transparent, rgba( 255, 59, 248, 0.3 ), transparent );
	--aiact-after-bg: linear-gradient( 90deg, transparent, rgba( 255, 255, 255, 0.82 ), transparent );
	--aiact-speed: 4s;
	background:
		radial-gradient( circle at 20% 22%, #fff 0 1px, transparent 2px ),
		radial-gradient( circle at 64% 28%, #fff 0 1px, transparent 2px ),
		radial-gradient( circle at 82% 70%, #fff 0 1px, transparent 2px ),
		radial-gradient( circle at 35% 80%, #fff 0 1px, transparent 2px ),
		radial-gradient( circle at 50% 50%, #ff3bf8, transparent 25% ),
		linear-gradient( 135deg, #08001f, #32106c 45%, #001d52 70%, #000 );
	color: #ffffff;
	border: 1px solid rgba( 177, 137, 255, 0.75 );
	box-shadow:
		0 0 28px rgba( 123, 97, 255, 0.85 ),
		0 0 72px rgba( 255, 59, 248, 0.42 ),
		0 28px 80px rgba( 0, 0, 0, 0.6 ),
		inset 0 1px 0 rgba( 255, 255, 255, 0.5 ),
		inset 0 -10px 18px rgba( 0, 0, 0, 0.65 );
	text-shadow:
		0 0 8px rgba( 255, 255, 255, 0.7 ),
		0 0 28px rgba( 255, 59, 248, 0.9 );
}

/* Dimensione (impostabile dalla pagina di configurazione). */
.aiact-badge--small {
	gap: 4px;
	font-size: 10px;
	padding: 3px 9px 3px 7px;
}

.aiact-badge--medium {
	gap: 5px;
	font-size: 12px;
	padding: 5px 12px 5px 9px;
}

.aiact-badge--large {
	gap: 6px;
	font-size: 15px;
	padding: 7px 16px 7px 12px;
}

/* ------------------------------------------------------------------ */
/* Variante in-flow (chip) per i blocchi di testo e per l'audio.       */
/* position:relative, NON static: i ::before/::after degli stili       */
/* animati usano inset:0 e richiedono che il badge resti il loro       */
/* containing block. Gli offset dei modificatori posizione (top/left/  */
/* bottom/right: 10px) vengono neutralizzati qui con la doppia classe, */
/* che vince in specificità sulle regole a classe singola.             */
/* ------------------------------------------------------------------ */
.aiact-badge-anchor.aiact-badge-anchor--inline {
	position: relative;
	inset: auto;
	z-index: auto;
	display: table; /* riga propria, larghezza shrink-wrap */
	margin-block: 0 0.5em; /* default: chip sopra il blocco */
	pointer-events: auto;
}

.aiact-badge-anchor.aiact-badge-anchor--inline.aiact-badge-anchor--bottom-left,
.aiact-badge-anchor.aiact-badge-anchor--inline.aiact-badge-anchor--bottom-right {
	margin-block: 0.5em 0; /* chip sotto il blocco */
}

.aiact-badge-anchor.aiact-badge-anchor--inline.aiact-badge-anchor--top-right,
.aiact-badge-anchor.aiact-badge-anchor--inline.aiact-badge-anchor--bottom-right {
	margin-inline-start: auto; /* allineamento a destra, RTL-safe */
}

.aiact-badge-anchor--inline.aiact-badge-anchor--bottom-left .aiact-badge-tooltip,
.aiact-badge-anchor--inline.aiact-badge-anchor--bottom-right .aiact-badge-tooltip {
	top: calc( 100% + 7px );
	bottom: auto;
}

/* Contesto di posizionamento per il badge sovrapposto agli embed. */
.aiact-badge-host {
	position: relative;
}

/* Video avvolto nel badge-wrap come le immagini: il wrapper deve
   comportarsi da blocco perché il video occupi la larghezza piena. */
.wp-block-video > .aiact-badge-wrap,
.wp-block-media-text__media > .aiact-badge-wrap {
	display: block;
}

.wp-block-video > .aiact-badge-wrap--outside,
.wp-block-media-text__media > .aiact-badge-wrap--outside,
.wp-block-post-featured-image .aiact-badge-wrap--outside {
	display: flex;
}

.aiact-badge-wrap--outside > img,
.aiact-badge-wrap--outside > a,
.aiact-badge-wrap--outside > video {
	min-width: 0;
	min-height: 0;
}

.aiact-badge-wrap > video {
	display: block;
	max-width: 100%;
}
