.ncstore-storefront {
	background: transparent;
	color: var(--color-on-dark);
	padding: var(--space-2xl) var(--space-base);
}

.ncstore-storefront__container {
	max-width: var(--geometry-container);
	margin: 0 auto;
}

.ncstore-storefront__header {
	max-width: var(--geometry-container-small);
	margin-bottom: var(--space-2xl);
}

.ncstore-storefront__header h1,
.ncstore-product-detail h1,
.ncstore-product-description h2 {
	color: var(--color-on-dark);
	margin: 0 0 var(--space-md);
}

/* Il ruolo e' .u-h2 e sta nel markup, come su Blog, Chi siamo, Contatti e
   Portfolio. Qui c'era un blocco che lo teneva a --text-h3, semibold e
   tracking zero: lo store aveva il titolo di pagina piu' piccolo del sito,
   ed era una delle sei rese diverse trovate per lo stesso H1. Adesso e' una
   sola. Si vede — il titolo cresce da 45 a 65px da desktop — ed e' il punto
   del lavoro: un titolo di pagina e' un titolo di pagina ovunque. */

.ncstore-storefront__header p:not(.content-card__badge),
.ncstore-store-card__body p,
.ncstore-product-detail__summary,
.ncstore-product-detail__hint,
.ncstore-product-description {
	color: var(--color-on-dark-body);
}

/* Il ruolo del sovratitolo e' .u-label, e sta nel markup. Prima famiglia,
   dimensione, peso e colore gli arrivavano solo da .content-card__badge, che
   e' del TEMPLATE: se quella classe fosse sparita dal markup il sovratitolo
   avrebbe perso tutto senza nessun errore visibile. Il colore brand ora e'
   dichiarato qui, perche' e' una scelta del componente. .content-card__badge
   resta nel markup per l'opacita' .7, che la primitiva non ha. */
.ncstore-storefront__eyebrow {
	color: var(--color-brand);
	margin: 0 0 var(--space-sm);
}

/* Il "2 prodotti" e' un dato secondario: ruolo .u-meta nel markup, qui
   restano il grigio muted e il margine. */
.ncstore-store-card__meta {
	color: var(--color-on-dark-muted);
	margin: 0 0 var(--space-sm);
}

.ncstore-store-grid {
	display: grid;
	gap: var(--space-xl);
	grid-template-columns: 1fr;
}

/* Sfondo, bordo, ombra e hover arrivano da .content-card (style.css del
   template), la stessa card usata da Servizi e Chi siamo: qui restano solo
   il layout a colonna e l'annullamento del padding, perche' l'immagine deve
   arrivare a filo bordo. Prima lo store si ridisegnava una card propria —
   fondo pieno invece che trasparente, e nessun hover — ed e' per questo che
   sembrava un altro sito (Davide, 22/08/2026). */
.ncstore-store-card.content-card {
	display: flex;
	flex-direction: column;
	overflow: hidden;
	padding: 0;
	box-shadow: var(--shadow-card);
}

.ncstore-store-card__image,
.ncstore-product-detail__image {
	aspect-ratio: 16 / 9;
	object-fit: cover;
	width: 100%;
	height: auto;
}

/* La card prodotto contiene controlli interattivi: la pressione non deve
   trasformare l'intera superficie quando si seleziona una variante. */
html body .ncstore-product-detail.content-card:active {
	transform: none;
}

.ncstore-store-card__body {
	display: flex;
	flex: 1;
	flex-direction: column;
	padding: var(--space-xl);
}

/* Ruolo .u-h5 nel markup: qui restano colore e margine. */
.ncstore-store-card__body h2 {
	color: var(--color-on-dark);
	margin: 0 0 var(--space-sm);
}

.ncstore-store-card__price,
.ncstore-product-detail__price {
	color: var(--color-brand);
	font-size: var(--text-h4);
	font-weight: var(--weight-bold);
	letter-spacing: var(--tracking-none);
	line-height: 1.25;
	margin: auto 0 0;
}

.ncstore-store-card__price-free,
.ncstore-store-card__price-paid {
	display: block;
}

.ncstore-store-badge {
	align-self: flex-start;
	background: var(--color-brand);
	border-radius: var(--radius-none);
	color: var(--color-on-dark);
	font-family: var(--font-display);
	font-size: var(--text-caption);
	font-weight: var(--weight-semibold);
	letter-spacing: var(--tracking-wide);
	padding: var(--space-xs) var(--space-sm);
	text-transform: uppercase;
}

/* Ruolo .u-button-text nel markup: qui restano solo sfondo, forma, spazi e
   transizione. La primitiva porta line-height 1, che prima non c'era — il
   <button> ereditava 1.75 dai controlli di modulo, il link <a> l'altezza
   normale del testo. Il pulsante si accorcia di qualche pixel, ed e' giusto
   cosi': l'altezza la fa il padding, che e' dichiarato, non l'interlinea di
   una regola scritta per i campi di un form. */
.ncstore-store-cta {
	background: var(--color-brand);
	border: 0;
	border-radius: var(--radius-none);
	box-sizing: border-box;
	color: var(--color-on-dark);
	cursor: pointer;
	display: block;
	margin: 0 var(--space-xl) var(--space-xl);
	padding: var(--space-md) var(--space-lg);
	text-align: center;
	text-decoration: none;
	transition: background var(--motion-fast) var(--ease-out), box-shadow var(--motion-fast) var(--ease-out);
	width: calc(100% - (var(--space-xl) * 2));
}

.ncstore-store-cta:hover,
.ncstore-store-cta:focus-visible {
	background: var(--color-brand-glow);
	box-shadow: var(--shadow-glow-brand);
	color: var(--color-on-dark);
}

.ncstore-store-cta:disabled {
	cursor: not-allowed;
	opacity: .5;
}

.ncstore-tier-selector {
    display: grid;
    gap: var(--space-sm);
    margin: 0 0 var(--space-md);
}

.ncstore-selector-group {
  display: grid;
  gap: var(--space-sm);
}

.ncstore-selector-group__label {
  margin: 0;
  color: var(--color-on-dark-muted);
  font-family: var(--font-display);
  font-size: var(--text-label);
  font-weight: var(--weight-bold);
  letter-spacing: var(--tracking-wide);
  text-transform: uppercase;
}

.ncstore-offer-selector.is-inactive {
  visibility: hidden;
  pointer-events: none;
}

.ncstore-offer-selector .ncstore-tier-option.is-inactive {
  visibility: hidden;
  pointer-events: none;
}

.ncstore-tier-option {
    align-items: center;
    background: var(--color-surface-inverse);
    border: 1px solid var(--color-on-dark-border-subtle);
    border-radius: var(--radius-none);
    cursor: pointer;
    display: flex;
    gap: var(--space-sm);
    padding: var(--space-sm) var(--space-md);
}

.ncstore-tier-option:has(input:checked) {
    border-color: var(--color-brand);
}

.ncstore-tier-option input[type="radio"] {
    appearance: none;
    background: var(--color-surface-1);
    border: 2px solid var(--color-on-dark-border);
    border-radius: var(--radius-none);
    cursor: pointer;
    flex-shrink: 0;
    height: 20px;
    margin: 0;
    position: relative;
    transition: border-color var(--motion-fast) var(--ease-out), background-color var(--motion-fast) var(--ease-out);
    width: 20px;
}

.ncstore-tier-option input[type="radio"]:checked {
    background: var(--color-brand);
    border-color: var(--color-brand);
}

.ncstore-tier-option input[type="radio"]:checked::after {
    background: var(--color-on-dark);
    content: "";
    inset: 5px;
    position: absolute;
}

.ncstore-tier-option input[type="radio"]:focus-visible {
    outline: 2px solid var(--color-brand);
    outline-offset: 2px;
}

.ncstore-tier-option__label {
    flex: 1;
}

.ncstore-tier-option__price {
    color: var(--color-brand);
    font-weight: var(--weight-bold);
    white-space: nowrap;
}

/* Prima era un link morto: nessuno stato hover, mentre ogni altro link del
   sito reagisce. Stessa transizione e stesso colore d'arrivo degli altri. */
.ncstore-store-back {
	color: var(--color-on-dark-muted);
	display: inline-block;
	margin-bottom: var(--space-xl);
	transition: color var(--motion-fast) var(--ease-out);
}

/* La freccia e' decorazione, non testo: sta nel CSS e non nel markup, cosi'
   il testo del link resta autosufficiente per gli screen reader. */
.ncstore-store-back::before {
	content: '\2190';
	margin-right: var(--space-xs);
}

.ncstore-store-back:hover,
.ncstore-store-back:focus-visible {
	color: var(--color-brand);
}

/* Porta .content-card nel markup per bordo e hover comuni: il padding lo
   mettono i figli, cosi' l'immagine resta a filo del bordo. */
.ncstore-product-detail.content-card {
	display: grid;
	gap: var(--space-xl);
	overflow: hidden;
	padding: 0;
}

.ncstore-product-detail__content {
	padding: var(--space-xl);
}

.ncstore-product-detail__summary {
	font-family: var(--font-body);
	font-size: var(--text-body-lg);
	line-height: var(--leading-loose);
	margin: var(--space-md) 0 var(--space-xl);
}

.ncstore-product-detail__price {
	margin-bottom: var(--space-xl);
}

.ncstore-product-detail__label {
	display: block;
	margin-bottom: var(--space-xs);
}

.ncstore-product-detail__input {
	background: var(--color-surface-1);
	border: 1px solid var(--color-on-dark-border);
	border-radius: var(--radius-none);
	box-sizing: border-box;
	color: var(--color-text);
	font-size: var(--text-body-sm);
	margin-bottom: var(--space-xs);
	padding: var(--space-sm) var(--space-md);
	width: 100%;
}

/* Nella card dello store il pulsante e' l'ultimo elemento e si stacca
   dai bordi da solo; nella pagina prodotto sta invece dentro il form,
   sotto campi che sono gia' a piena larghezza del contenitore. Con il
   margine laterale della card risultava piu' stretto di loro. */
.ncstore-product-detail .ncstore-store-cta {
	margin-inline: 0;
	width: 100%;
}

/* Il cambio tier mostra/nasconde campi variabili; eventuali transizioni
   esterne su dimensioni/trasformazioni producono un resize animato
   indesiderato del box acquisto. Forziamo un comportamento istantaneo. */
[data-ncstore-purchase-block],
.ncstore-product-detail .ncstore-tier-selector,
.ncstore-product-detail.content-card,
.ncstore-product-detail [data-ncstore-domain-block] {
	animation: none;
	transition: none;
}

/* A conditional field is a stable slot in the form, not a node that enters
   and leaves the layout. This keeps the CTA, media column and comparison
   section anchored while the selected plan changes. */
[data-ncstore-domain-block].is-inactive {
	opacity: 0;
	pointer-events: none;
	visibility: hidden;
}

[data-ncstore-domain-block].is-inactive input {
	visibility: hidden;
}

.ncstore-product-detail__input:focus-visible {
	border-color: var(--color-brand);
	outline: 2px solid var(--color-brand);
	outline-offset: 2px;
}

.ncstore-product-detail__hint,
.ncstore-product-detail__message {
	margin: 0 0 var(--space-lg);
}

.ncstore-product-detail__message {
	font-size: var(--text-caption);
}

.ncstore-product-detail__message:empty {
	display: none;
}

.ncstore-product-description {
	font-family: var(--font-body);
	font-size: var(--text-body);
	line-height: var(--leading-loose);
	margin: var(--space-3xl) auto 0;
	max-width: var(--geometry-container-reading);
}

.ncstore-compare {
	margin: var(--space-3xl) auto 0;
	max-width: var(--geometry-container-reading);
}

.ncstore-compare h2 {
	color: var(--color-on-dark);
	margin: 0 0 var(--space-lg);
}

.ncstore-compare__scroll {
	overflow-x: auto;
}

.ncstore-compare-table {
	background: var(--color-surface-inverse);
	border: 1px solid var(--color-on-dark-border-subtle);
	border-collapse: collapse;
	border-radius: var(--radius-none);
	overflow: hidden;
	width: 100%;
}

.ncstore-compare-table th,
.ncstore-compare-table td {
	border-bottom: 1px solid var(--color-on-dark-border-subtle);
	padding: var(--space-sm) var(--space-md);
	text-align: center;
}

.ncstore-compare-table th[scope="row"] {
	color: var(--color-on-dark);
	text-align: left;
}

.ncstore-compare-table thead th {
	color: var(--color-on-dark-muted);
	font-family: var(--font-display);
	font-size: var(--text-caption);
	font-weight: var(--weight-medium);
	letter-spacing: var(--tracking-wide);
	text-transform: uppercase;
}

.ncstore-compare-table tbody tr:last-child th,
.ncstore-compare-table tbody tr:last-child td {
	border-bottom: 0;
}

.ncstore-compare-yes {
	color: var(--color-brand);
	font-weight: var(--weight-bold);
}

.ncstore-compare-no {
	color: var(--color-on-dark-muted);
}

.ncstore-compatibility {
	margin: var(--space-3xl) auto 0;
	max-width: var(--geometry-container-reading);
}

.ncstore-compatibility h2 {
	color: var(--color-on-dark);
	margin: 0 0 var(--space-lg);
}

.ncstore-compatibility__list {
	display: flex;
	flex-wrap: wrap;
	gap: var(--space-sm) var(--space-xl);
	list-style: none;
	margin: 0;
	padding: 0;
}

.ncstore-compatibility__list li {
	color: var(--color-on-dark-body);
}

.ncstore-compatibility__list strong {
	color: var(--color-on-dark);
}

/* I due punti sono punteggiatura fra etichetta e valore: separatore, quindi
   CSS. Nel markup l'etichetta resta la sola stringa di lingua. */
.ncstore-compatibility__list strong::after {
	content: ':';
}

.ncstore-gallery,
.ncstore-testimonials,
.ncstore-faq,
.ncstore-changelog {
	margin: var(--space-3xl) auto 0;
	max-width: var(--geometry-container-reading);
}

/* I titoli di sezione della pagina prodotto portano .u-h4 nel markup: e' il
   ruolo canonico, e i sette titoli ora hanno tutti la stessa resa. Qui
   restano colore e margine. */
.ncstore-gallery h2,
.ncstore-testimonials h2,
.ncstore-faq h2,
.ncstore-changelog h2 {
	color: var(--color-on-dark);
	margin: 0 0 var(--space-lg);
}

.ncstore-gallery__grid {
	display: grid;
	gap: var(--space-md);
	grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
}

.ncstore-gallery__item {
	border: 1px solid var(--color-on-dark-border-subtle);
	border-radius: var(--radius-none);
	width: 100%;
}

.ncstore-testimonials__grid {
	display: grid;
	gap: var(--space-lg);
	grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
}

.ncstore-testimonial {
	background: var(--color-surface-inverse);
	border: 1px solid var(--color-on-dark-border-subtle);
	border-radius: var(--radius-none);
	margin: 0;
	padding: var(--space-lg);
}

.ncstore-testimonial p {
	color: var(--color-on-dark-body);
	margin: 0 0 var(--space-sm);
}

.ncstore-testimonial cite {
	color: var(--color-on-dark-muted);
	font-size: var(--text-caption);
	font-style: normal;
}

.ncstore-faq__item {
	background: var(--color-surface-inverse);
	border: 1px solid var(--color-on-dark-border-subtle);
	border-radius: var(--radius-none);
	margin-bottom: var(--space-sm);
	padding: var(--space-md) var(--space-lg);
}

.ncstore-faq__item summary {
	color: var(--color-on-dark);
	cursor: pointer;
	font-weight: var(--weight-semibold);
}

.ncstore-faq__item p {
	color: var(--color-on-dark-body);
	margin: var(--space-sm) 0 0;
}

.ncstore-changelog__list {
	list-style: none;
	margin: 0;
	padding: 0;
}

.ncstore-changelog__item {
	border-bottom: 1px solid var(--color-on-dark-border-subtle);
	padding: var(--space-md) 0;
}

.ncstore-changelog__item:last-child {
	border-bottom: 0;
}

.ncstore-changelog__meta {
	color: var(--color-on-dark);
}

.ncstore-changelog__meta span:first-child {
	font-weight: var(--weight-bold);
}

/* Il separatore fra versione e data lo mette .u-meta, che e' la riga di
   metadati canonica del sito: "//" rosso, uguale ovunque. Qui resta solo il
   colore attenuato della data. */
.ncstore-changelog__meta > * + * {
	color: var(--color-on-dark-muted);
}

.ncstore-changelog__item p {
	color: var(--color-on-dark-body);
	margin: var(--space-xs) 0 0;
}

@media (min-width: 768px) {
	.ncstore-storefront {
		padding: var(--space-3xl) var(--space-xl);
	}

	.ncstore-store-grid {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}

	.ncstore-product-detail {
		grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
	}

	.ncstore-product-detail__image {
		border-radius: var(--radius-none);
		align-self: start;
		height: auto;
	}
}

@media (min-width: 1200px) {
	.ncstore-store-grid--categories,
	.ncstore-store-grid {
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}
}

/*--------------------------------------------------------------
   Card cliccabile per intero (23/08/2026)

   Prima era cliccabile solo il pulsante in fondo: la card sembrava
   interattiva — si solleva al passaggio del mouse — ma non rispondeva.

   Il link resta uno solo, quello del titolo, e si allarga con un
   pseudo-elemento fino a coprire tutta la card. Cosi' la tastiera
   incontra un solo elemento invece di due che portano allo stesso
   posto, e chi usa uno screen reader sente il titolo del prodotto,
   non l'intera card letta come link.
--------------------------------------------------------------*/
.ncstore-store-card.content-card {
	position: relative;
}

/* Il link e' il titolo, non il pulsante: il suo pseudo-elemento si
   allarga fino a coprire la card. Il pulsante e' la copia visibile
   dello stesso link, tolta dal giro dei TAB e dallo screen reader,
   sovrapposta al rettangolo invisibile. Cosi' il puntatore accende
   il pulsante solo quando ci sta davvero sopra, invece che ovunque
   sulla card, e la tastiera trova comunque un solo elemento. */
.ncstore-store-card__link {
	color: inherit;
	text-decoration: none;
}

.ncstore-store-card__link::after {
	content: "";
	position: absolute;
	inset: 0;
	z-index: var(--z-raised);
}

.ncstore-store-card .ncstore-store-cta {
	position: relative;
	z-index: calc(var(--z-raised) + 1);
}

/* Da tastiera il fuoco e' sul titolo ma la superficie attiva e'
   tutta la card: l'anello va disegnato dove si clicchera' davvero. */
.ncstore-store-card.content-card:has(.ncstore-store-card__link:focus-visible) {
	outline: var(--focus-ring);
	outline-offset: var(--focus-ring-offset);
}

.ncstore-store-card.content-card:has(.ncstore-store-card__link:focus-visible) .ncstore-store-card__link {
	outline: none;
}

/* Il link di ritorno e' un bersaglio autonomo, non un link dentro un
   paragrafo: su touch deve avere l'area minima come i pulsanti. */
@media (pointer: coarse) {
	.ncstore-store-back {
		align-items: center;
		display: inline-flex;
		min-height: var(--tap-target-min);
	}
}
.ncstore-storefront {
    scroll-margin-top: 7rem;
}

.ncstore-compare {
    scroll-margin-top: 7rem;
}
