/* ==========================================================================
   NEDRA V2 — restyling "Punto Zero" delle pagine pubbliche.
   Caricato da views/partials/v2/head.ejs DOPO nedra.css (token --n-*,
   tipografia, bottoni, form). desktop.css e mobile.css NON sono caricati:
   niente <main> limitato a 1120px, niente banner GIF, niente basi legacy.
   La home v2 carica questo foglio solo per navbar e footer: tutte le regole
   globali stanno sotto body.v2, i componenti sono a classe (.v2-*, .n-nav--v2).
   Valori da DESIGN.md; nessun token nuovo.
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. BASE (solo pagine v2)
   -------------------------------------------------------------------------- */
body.v2 main{ display: block; }
body.v2 button,
body.v2 input,
body.v2 select,
body.v2 textarea{ font-family: inherit; }
body.v2 :target{ scroll-margin-top: calc(var(--n-nav-h) + 1.5rem); }
body.v2 section[id]{ scroll-margin-top: var(--n-nav-h); }

.v2-sr{
  position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

/* link "salta al contenuto": primo elemento raggiungibile con Tab */
.v2-skip{
  position: fixed; left: 12px; top: 8px; z-index: 10000;
  padding: .6rem 1rem; border-radius: 980px;
  background: var(--n-surface-float, #1a1a1c); border: 1px solid var(--n-line-strong);
  color: var(--n-text); font-size: .9rem;
  transform: translateY(-160%);
}
.v2-skip:focus,
.v2-skip:focus-visible{ transform: none; }

/* link di testo: filetto che si disegna da sinistra (niente chevron) */
.v2-link{
  position: relative;
  display: inline-flex; align-items: center;
  color: var(--n-blue);
  font-size: 1.02rem; letter-spacing: -.01em;
}
.v2-link::after{
  content: ""; position: absolute; left: 0; right: 0; bottom: .1em; height: 1px;
  background: currentColor; transform: scaleX(0); transform-origin: 100% 50%;
  transition: transform .2s var(--n-ease-out-strong);
}
@media (hover: hover) and (pointer: fine){
  .v2-link:hover::after{ transform: scaleX(1); transform-origin: 0 50%; }
}
.v2-link:focus-visible::after{ transform: scaleX(1); }

/* bottone primario: pressione 160ms; su hover una riga di luce lungo il bordo */
body.v2 .n-btn{ min-height: 44px; }
body.v2 .n-btn:active{ transform: scale(.97); transition-duration: .16s; transition-timing-function: var(--n-ease-out-strong); }
body.v2 .n-btn--primary{ position: relative; overflow: hidden; }
body.v2 .n-btn--primary::after{
  content: ""; position: absolute; left: 0; bottom: 0; height: 1px; width: 40%;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,.7), transparent);
  transform: translateX(-110%); opacity: 0; pointer-events: none;
}
@media (hover: hover) and (pointer: fine){
  body.v2 .n-btn--primary:hover::after{ animation: v2-bench .32s var(--n-ease-out-strong) 1; }
}
@keyframes v2-bench{
  0%{ transform: translateX(-110%); opacity: 1; }
  100%{ transform: translateX(260%); opacity: 1; }
}

/* --------------------------------------------------------------------------
   2. NAVBAR V2 (stesse classi .n-nav di nedra.css; qui solo le aggiunte)
   -------------------------------------------------------------------------- */
.n-nav--v2 .n-nav__links a{ display: inline-flex; align-items: center; min-height: 44px; }
.n-nav--v2 .n-nav__links a[aria-current="page"]{ opacity: 1; font-weight: 600; }
/* marchio Nedra AI: aspetto invariato, area di tocco allargata a 44px */
.n-nav--v2 .n-nav__ailogo{ position: relative; }
.n-nav--v2 .n-nav__ailogo::after{ content: ""; position: absolute; inset: -3px; }
.n-nav--v2 .n-menu__panel a{ min-height: 40px; }
/* in apertura la visibilità scatta subito: il focus può entrare nel pannello */
.n-nav--v2 .n-menu.is-open .n-menu__panel{ transition: opacity .2s var(--n-ease), transform .2s var(--n-ease), visibility 0s; }
body.n-nav-open .n-nav--v2 .n-nav__links{ transition: transform .4s var(--n-ease-out), visibility 0s; }
@media (max-width: 900px), (pointer: coarse){
  .n-nav--v2 .n-nav__icon{ width: 44px; height: 44px; }
  .n-nav--v2 .n-nav__actions{ gap: .1rem; }
  .n-nav--v2 .n-menu__panel a{ min-height: 44px; }
}
@media (max-width: 900px){
  .n-nav--v2 .n-nav__links a{ display: flex; min-height: 52px; }
  /* il pannello è opaco (The Opaque Menu Rule) */
  .n-nav--v2 .n-nav__links{ background: var(--n-surface); }
}

/* --------------------------------------------------------------------------
   3. FOOTER V2
   -------------------------------------------------------------------------- */
.v2-footer__h{
  margin: 0 0 .9rem;
  font-size: .82rem; font-weight: 600; letter-spacing: -.005em;
  color: var(--n-text);
}
.v2-footer .n-footer__top > nav,
.v2-footer .n-footer__top > div{ min-width: 0; }
.v2-footer a:focus-visible{ outline-offset: 2px; }
@media (max-width: 820px), (pointer: coarse){
  .v2-footer ul{ gap: 0; }
  .v2-footer ul a,
  .v2-footer .n-footer__bottom nav a{ display: inline-flex; align-items: center; min-height: 44px; }
  .v2-footer .n-footer__social a{ width: 44px; height: 44px; }
  .v2-footer .n-footer__bottom nav{ gap: 0 1.2rem; }
}

/* --------------------------------------------------------------------------
   4. APERTURA STATICA (punto zero tipografico)
   -------------------------------------------------------------------------- */
.v2-open{
  position: relative;
  padding: clamp(4.5rem, 12vw, 9rem) 0 clamp(2.5rem, 5vw, 4rem);
  overflow: hidden;
  isolation: isolate;
}
/* una sola lampada: alone già disegnato, fermo */
.v2-open::before{
  content: ""; position: absolute; z-index: -1; pointer-events: none;
  left: -10%; top: -30%; width: 70%; height: 120%;
  background: radial-gradient(closest-side, rgba(255,255,255,.06), transparent 75%);
}
.v2-open__title{
  position: relative;
  margin: 0;
  max-width: 15ch;
  font-size: clamp(3rem, 8.4vw, 7.5rem);
  font-weight: 700;
  line-height: .98;
  letter-spacing: -.035em;
  text-wrap: balance;
}
.v2-open--l .v2-open__title{ font-size: clamp(2.5rem, 6vw, 5.2rem); line-height: 1.02; letter-spacing: -.03em; max-width: 18ch; }
.v2-open__eyebrow{ margin-bottom: 1rem; }
.v2-open__lead{
  margin: 1.4rem 0 0; max-width: 640px;
  font-size: clamp(1.05rem, 1.7vw, 1.35rem); line-height: 1.42; letter-spacing: -.012em;
  color: var(--n-text-2);
}
/* il dettaglio tecnico: una quota blu (filetto con due tacche) e la sua etichetta */
.v2-quota{
  display: flex; align-items: center; gap: .75rem;
  margin: 1.6rem 0 0;
  color: var(--n-blue); font-size: .8rem; font-weight: 600; letter-spacing: .004em;
  font-variant-numeric: tabular-nums;
}
.v2-quota__line{
  position: relative; flex: none;
  width: clamp(72px, 10vw, 140px); height: 9px;
  border-left: 1px solid currentColor; border-right: 1px solid currentColor;
}
.v2-quota__line::before{
  content: ""; position: absolute; left: 0; right: 0; top: 4px; height: 1px; background: currentColor;
}

/* ingresso del titolo: Layer Reveal (maschera a gradini + filo blu), una volta */
html.v2-motion .v2-open__title{ animation: v2-layer .6s steps(12, end) .08s backwards; }
html.v2-motion .v2-open__title::after{
  content: ""; position: absolute; left: 0; right: 0; top: 0; height: 100%;
  border-top: 1px solid var(--n-blue); pointer-events: none;
  animation: v2-layer-scan .6s steps(12, end) .08s both;
}
@keyframes v2-layer{ from{ clip-path: inset(100% 0 0 0); } to{ clip-path: inset(0 0 0 0); } }
@keyframes v2-layer-scan{
  0%{ transform: translateY(100%); opacity: 1; }
  92%{ transform: translateY(0); opacity: 1; }
  100%{ transform: translateY(0); opacity: 0; }
}

/* --------------------------------------------------------------------------
   5. PUNTO ZERO CON SCENA (stampa-3d, siti-web)
   Stato di base = fotogramma finale. Con html.v2-motion la traccia si allunga
   e le variabili partono dal macro; /js/v2/zero.js le aggiorna allo scroll.
   -------------------------------------------------------------------------- */
.v2-zero{ position: relative; margin-top: calc(-1 * var(--n-nav-h)); background: var(--n-black); }
.v2-zero__track{ position: relative; height: 100svh; min-height: 540px; }
html.v2-motion .v2-zero__track{ height: 230svh; --d: 0; --l: 0; --b: 0; --s: 1; --t: 0; --g: 0; --c: 0; }
.v2-zero__stage{
  position: sticky; top: 0;
  height: 100svh; min-height: 540px;
  overflow: hidden;
}
.v2-zero__scene{ position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
.v2-zero__lamp{
  position: absolute; inset: 0; pointer-events: none;
  background: radial-gradient(62% 72% at 74% 60%, transparent 35%, rgba(0,0,0,.86) 100%);
  opacity: calc(1 - .5 * var(--l, 1));
}
.v2-zero__copy{
  position: absolute; left: 0; right: 0; top: var(--n-nav-h); bottom: 0;
  max-width: var(--n-max-wide); margin: 0 auto;
  padding: 0 22px clamp(2rem, 8svh, 5rem);
  display: flex; flex-direction: column; justify-content: flex-end; gap: 1.4rem;
}
.v2-zero__head,
.v2-zero__foot{ max-width: min(46vw, 640px); }
.v2-zero__title{
  margin: 0;
  font-size: clamp(4rem, 9.4vw, 9rem);
  font-weight: 700; line-height: .92; letter-spacing: -.04em;
}
.v2-zero__lead{
  margin: 0; max-width: 34ch;
  font-size: clamp(1.05rem, 1.6vw, 1.3rem); line-height: 1.42; letter-spacing: -.012em;
  color: var(--n-text-2);
}
.v2-zero__actions{ display: flex; flex-wrap: wrap; align-items: center; gap: .8rem 1.6rem; margin-top: 1.4rem; }

/* la camera: allargamento attorno al dettaglio (origine = punto illuminato) */
.zs-cam,
.zw-cam{
  transform-box: view-box;
  transform-origin: var(--ox) var(--oy);
  transform:
    translate(calc(var(--fx) + (1 - var(--d, 1)) * var(--tx)), calc(var(--fy) + (1 - var(--d, 1)) * var(--ty)))
    scale(calc(var(--fs) * (1 + (1 - var(--d, 1)) * (var(--M) - 1))));
}
.v2-zero--stampa{ --ox: 904px;  --oy: 771px; --M: 7;  --tx: -4px;    --ty: -301px; --fx: 0px; --fy: 0px; --fs: 1; }
.v2-zero--web   { --ox: 947px;  --oy: 280px; --M: 16; --tx: -47px;  --ty: 190px;  --fx: 0px; --fy: 0px; --fs: 1; }

/* --- stampa 3D: strati, fronte, ugello --- */
.zs-piatto{ opacity: calc(.3 + .7 * var(--l, 1)); }
.zs-piatto line{ stroke: rgba(245,245,247,.24); stroke-width: 1; vector-effect: non-scaling-stroke; }
.zs-piatto .zs-tacca{ stroke: rgba(245,245,247,.12); }
.zs-pezzo{ opacity: calc(.25 + .75 * var(--l, 1)); }
.zs-strato rect{ fill: #3a4250; }
.zs-strato{ opacity: clamp(0, calc(var(--b, 1) * 39 - var(--k) + 1), 1); }
.zs-fronte{ fill: url(#zsFronte); transform: translateY(calc(var(--b, 1) * -351px)); opacity: var(--s, 0); }
.zs-ugello{ transform: translateY(calc(var(--b, 1) * -351px)); }
.zs-blocco,
.zs-cono{ fill: #0a0a0c; stroke: rgba(245,245,247,.55); stroke-width: 1; vector-effect: non-scaling-stroke; }
.zs-punta{ fill: #2997ff; }
.zs-luce{ opacity: calc(1 - .55 * var(--l, 1)); }
.zs-etichetta{
  fill: var(--n-text); font-size: 14px; font-weight: 600; letter-spacing: -.01em;
  transform: translate(922px, 440px);
  opacity: calc(1 - var(--t, 1));
}

/* --- siti web: finestra, griglia, blocchi, scansione, cursore --- */
.zw-finestra{ opacity: calc(.2 + .8 * var(--l, 1)); }
.zw-cornice{ fill: #0a0a0c; stroke: rgba(245,245,247,.3); stroke-width: 1; vector-effect: non-scaling-stroke; }
.zw-sep{ stroke: rgba(245,245,247,.14); stroke-width: 1; vector-effect: non-scaling-stroke; }
.zw-pallino{ fill: none; stroke: rgba(245,245,247,.32); stroke-width: 1; vector-effect: non-scaling-stroke; }
.zw-indirizzo{ fill: rgba(255,255,255,.05); stroke: rgba(245,245,247,.22); stroke-width: 1; vector-effect: non-scaling-stroke; }
.zw-griglia rect{
  fill: rgba(41,151,255,.06);
  transform-box: fill-box; transform-origin: 50% 0;
  transform: scaleY(var(--g, 1));
}
.zw-blocco{ opacity: clamp(0, calc((var(--g, 1) * 460 - var(--y)) / 14), 1); }
.zw-blocco rect,
.zw-blocco line{ fill: #141a22; stroke: rgba(41,151,255,.55); stroke-width: 1; vector-effect: non-scaling-stroke; }
.zw-blocco--img rect{ fill: #0e1f31; }
.zw-scan{ fill: #2997ff; transform: translateY(calc(var(--g, 1) * 460px)); opacity: var(--c, 0); }
.zw-pixel{ opacity: clamp(0, calc(1 - var(--d, 1) * 2.5), 1); }
.zw-luce{ opacity: calc(1 - .6 * var(--l, 1)); }
.zw-cursore{ fill: #2997ff; }

/* --- telefono e finestre strette: titolo in alto, testo e azioni in basso --- */
@media (max-width: 900px), (max-aspect-ratio: 1/1){
  html.v2-motion .v2-zero__track{ height: 190svh; }
  .v2-zero__copy{ justify-content: space-between; padding-top: 1.6rem; padding-bottom: calc(1.4rem + env(safe-area-inset-bottom)); }
  .v2-zero__head,
  .v2-zero__foot{ max-width: 34rem; }
  .v2-zero__title{ font-size: clamp(3.2rem, 15vw, 6rem); }
  .v2-zero__lead{ font-size: 1rem; }
  .v2-zero__actions{ margin-top: 1rem; }
  .v2-zero__lamp{ background: radial-gradient(80% 50% at 60% 52%, transparent 30%, rgba(0,0,0,.86) 100%); }
  .v2-zero--stampa{ --tx: 188px;  --ty: -124px; --fx: 140px; --fy: -170px; --fs: .82; }
  .v2-zero--web   { --tx: 128px;  --ty: 162px;  --fx: 157px; --fy: 35px;  --fs: .74; }
  .zs-etichetta{ transform: translate(1250px, 446px); }
}

/* --------------------------------------------------------------------------
   6. SEZIONI CALME
   -------------------------------------------------------------------------- */
.v2-sec{ padding: clamp(4.5rem, 10vw, 8.5rem) 0; position: relative; }
.v2-sec--tight{ padding: clamp(3rem, 6vw, 5rem) 0; }
.v2-sec--surface{ background: var(--n-surface); }
.v2-sec--flush-top{ padding-top: 0; }

/* intestazione di sezione: allineata alla colonna, non centrata a effetto */
.v2-head{ max-width: 760px; margin: 0 0 clamp(2.2rem, 4.5vw, 3.6rem); }
.v2-head .n-lead{ margin-top: 1rem; }
.v2-head--center{ margin-left: auto; margin-right: auto; text-align: center; }

/* indice a filetti (servizi, tipologie, valori): niente card */
.v2-index{
  list-style: none; margin: 0; padding: 0;
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 0 clamp(1.5rem, 3.2vw, 3rem);
}
.v2-index--2{ grid-template-columns: repeat(2, minmax(0, 1fr)); }
.v2-index__item{ border-top: 1px solid var(--n-line); padding: 1.3rem 0 2.4rem; display: flex; flex-direction: column; }
.v2-index__n{
  display: block; margin-bottom: .75rem;
  font-size: .82rem; font-weight: 600; letter-spacing: .04em; color: var(--n-blue);
  font-variant-numeric: tabular-nums;
}
.v2-index__item h3{ margin: 0; font-size: 1.22rem; font-weight: 600; line-height: 1.25; letter-spacing: -.014em; }
.v2-index__item p{ margin: .55rem 0 0; color: var(--n-text-2); font-size: .98rem; line-height: 1.5; }
.v2-index__item .v2-link{ margin-top: .9rem; align-self: flex-start; }
.v2-index__item .n-checklist{ margin-top: 1.1rem; }
.v2-index__item .n-checklist li{ font-size: .95rem; }
@media (max-width: 900px){ .v2-index{ grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 600px){ .v2-index, .v2-index--2{ grid-template-columns: 1fr; } .v2-index__item{ padding-bottom: 1.8rem; } }

/* righe di una scheda tecnica */
.v2-rows{ margin: 0; padding: 0; border-bottom: 1px solid var(--n-line-soft); list-style: none; }
.v2-rows > div,
.v2-rows > li{
  display: grid; grid-template-columns: minmax(7rem, 13rem) minmax(0, 1fr);
  gap: .4rem 1.4rem; padding: 1rem 0; border-top: 1px solid var(--n-line-soft);
}
.v2-rows dt,
.v2-rows__k{ margin: 0; font-weight: 600; font-size: 1.02rem; letter-spacing: -.012em; color: var(--n-text); }
.v2-rows dd,
.v2-rows__v{ margin: 0; color: var(--n-text-2); font-size: .98rem; line-height: 1.5; }
@media (max-width: 600px){ .v2-rows > div, .v2-rows > li{ grid-template-columns: 1fr; } }

/* immagine con didascalia (al posto delle tessere bento) */
.v2-figure{ margin: 0; }
.v2-figure__media{
  border-radius: var(--n-r-lg); overflow: hidden;
  border: 1px solid var(--n-line-soft); background: var(--n-surface-2);
}
.v2-figure__media img{ display: block; width: 100%; height: 100%; object-fit: cover; aspect-ratio: 21 / 9; }
.v2-figure figcaption{
  margin: 1.1rem 0 0; max-width: 40ch;
  font-size: clamp(1.15rem, 2vw, 1.5rem); font-weight: 600; line-height: 1.25; letter-spacing: -.014em;
}
@media (max-width: 700px){ .v2-figure__media img{ aspect-ratio: 4 / 3; } }

/* passaggi del lavoro: filetto con il tratto blu, fermo */
.v2-steps{ position: relative; padding-top: 1.4rem; }
.v2-steps::before{ content: ""; position: absolute; left: 0; right: 0; top: 0; height: 1px; background: var(--n-line); }
.v2-steps::after{ content: ""; position: absolute; left: 0; top: 0; height: 1px; width: 25%; background: var(--n-blue); }
.v2-steps__list{
  list-style: none; margin: 0; padding: 0;
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: clamp(1.2rem, 2.4vw, 2rem);
}
.v2-step__n{ display: block; margin-bottom: .7rem; font-size: .82rem; font-weight: 600; letter-spacing: .04em; color: var(--n-blue); font-variant-numeric: tabular-nums; }
.v2-step h3{ margin: 0; font-size: 1.12rem; font-weight: 600; letter-spacing: -.012em; }
.v2-step p{ margin: .45rem 0 0; color: var(--n-text-2); font-size: .95rem; }
@media (max-width: 900px){ .v2-steps__list{ grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 560px){ .v2-steps__list{ grid-template-columns: 1fr; } }

/* scheda tecnica: il valore guida a sinistra, le righe a destra */
.v2-spec{
  display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr);
  gap: clamp(2rem, 6vw, 5rem); align-items: start;
}
.v2-spec__label{ display: block; font-size: .84rem; font-weight: 500; color: var(--n-text-2); }
.v2-spec__figure{
  margin: .5rem 0 0;
  font-size: clamp(2.6rem, 6vw, 4.6rem); font-weight: 700; line-height: 1.02; letter-spacing: -.035em;
  font-variant-numeric: tabular-nums;
}
.v2-spec__figure .x{ font-size: .52em; font-weight: 400; color: var(--n-text-3); margin: 0 .12em; vertical-align: .12em; }
.v2-spec__figure .u{ font-size: .5em; font-weight: 600; color: var(--n-text-2); margin-left: .14em; }
.v2-spec__note{ margin: 1rem 0 0; max-width: 36ch; color: var(--n-text-2); font-size: .95rem; line-height: 1.5; }
.v2-spec__lead{ padding-top: 1.3rem; border-top: 1px solid var(--n-blue); }
.v2-spec .v2-rows dd .u{ color: var(--n-text-3); font-size: .9em; }
.v2-spec .v2-rows dd strong{ color: var(--n-text); font-weight: 700; font-variant-numeric: tabular-nums; }
@media (max-width: 860px){ .v2-spec{ grid-template-columns: 1fr; } }

/* media accanto al testo (riusa .n-feature di nedra.css) */
body.v2 .n-feature__media{ border-radius: var(--n-r-lg); }

/* modulo di preventivo in colonna stretta */
.v2-form{ max-width: 760px; }
body.v2 .n-field input,
body.v2 .n-field select{ min-height: 48px; }
body.v2 .n-form .n-actions{ margin-top: .4rem; }
.v2-form__note{ margin: 0; font-size: .88rem; color: var(--n-text-3); line-height: 1.5; }

/* chiusura verso il preventivo */
.v2-cta{ position: relative; isolation: isolate; overflow: hidden; padding: clamp(4.5rem, 10vw, 8.5rem) 0; }
.v2-cta__title{
  margin: 0; font-size: clamp(2.1rem, 5.2vw, 3.6rem); font-weight: 700; line-height: 1.06; letter-spacing: -.024em;
}
.v2-cta__actions{ position: relative; margin-top: 2.2rem; display: flex; justify-content: center; }
.v2-cta__light{
  position: absolute; left: 50%; top: 50%; z-index: -1;
  width: min(640px, 150vw); aspect-ratio: 16 / 10; transform: translate(-50%, -50%);
  background: radial-gradient(closest-side, rgba(255,255,255,.1), rgba(255,255,255,.035) 55%, transparent 100%);
  pointer-events: none;
}
.v2-cta__choices{ display: flex; justify-content: center; flex-wrap: wrap; gap: .4rem 1.8rem; margin: 1.5rem 0 0; }

/* contatti: recapiti e modulo affiancati */
.v2-contatti{ display: grid; grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); gap: clamp(2.5rem, 6vw, 5rem); align-items: start; }
.v2-contatti .v2-rows a{ color: var(--n-text); display: inline-flex; align-items: center; min-height: 32px; }
@media (hover: hover) and (pointer: fine){ .v2-contatti .v2-rows a:hover{ color: var(--n-blue); } }
@media (max-width: 860px){ .v2-contatti{ grid-template-columns: 1fr; } }

/* richiesta di preventivo unica (piano 005) e rimandi verso di lei */
.v2-rp__nofile{
  margin: 0 0 2rem; padding-top: 1.3rem; border-top: 1px solid var(--n-blue); max-width: 40ch;
  font-size: clamp(1.1rem, 1.6vw, 1.3rem); line-height: 1.45; letter-spacing: -.012em; color: var(--n-text);
}
.v2-errsum{
  margin: 0 0 1.6rem; padding: .9rem 1.1rem; border-radius: var(--n-r-sm);
  border: 1px solid rgba(255,69,58,.35); background: rgba(255,69,58,.1);
  color: #ff9d96; font-size: .92rem; line-height: 1.45;
}
.v2-errsum p{ margin: 0; }
.v2-errsum .v2-errsum__t{ font-weight: 600; margin-bottom: .2rem; }
.v2-errsum ul{ margin: 0; padding-left: 1.1rem; }
.v2-errsum a{ color: #ff9d96; text-decoration: underline; text-underline-offset: 2px; display: inline-flex; align-items: center; min-height: 44px; }
.v2-field__err{ margin: 0; font-size: .86rem; line-height: 1.4; color: #ff9d96; }
.v2-field__hint{ margin: 0; font-size: .84rem; line-height: 1.45; color: var(--n-text-3); }
.v2-field__opt{ color: var(--n-text-3); font-weight: 400; }
body.v2 .n-field [aria-invalid="true"]{ border-color: rgba(255,69,58,.6); }
body.v2 .n-field input[type="file"]{ min-height: 48px; padding: .55rem .8rem; cursor: pointer; }
body.v2 .n-field input[type="file"]::file-selector-button{
  min-height: 34px; margin-right: .8rem; padding: 0 1rem; border-radius: 980px;
  border: 1px solid var(--n-line-strong); background: transparent; color: var(--n-text); font: inherit; font-size: .9rem; cursor: pointer;
}
.v2-rp fieldset{ margin: 0; padding: 0; border: 0; min-width: 0; }
.v2-rp__3d{ display: grid; gap: .8rem; padding-top: 1.1rem !important; border-top: 1px solid var(--n-line-soft) !important; }
.v2-rp__3d[hidden]{ display: none; }
.v2-rp__3d legend{ float: left; width: 100%; padding: 0; font-size: .95rem; font-weight: 600; color: var(--n-text); }
.v2-rp__3d legend span{ font-weight: 400; color: var(--n-text-3); }
.v2-hp{ position: absolute; left: -10000px; top: auto; width: 1px; height: 1px; overflow: hidden; }
.v2-check-wrap{ display: grid; gap: .3rem; }
.v2-check{ display: flex; align-items: flex-start; gap: .8rem; min-height: 44px; padding: .45rem 0; cursor: pointer; color: var(--n-text-2); font-size: .92rem; line-height: 1.5; }
.v2-check input{ flex: none; width: 22px; height: 22px; margin: .05rem 0 0; accent-color: var(--n-blue-dark); cursor: pointer; }
.v2-check .v2-link{ font-size: inherit; }
.v2-form__note .v2-link{ font-size: inherit; }

/* recensioni: citazioni a filetto, colonne limitate e centrate (The Short List Rule) */
.v2-rec__bar{ display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 1rem 2rem; padding: 0 0 1.6rem; }
.v2-rec__media{ display: flex; flex-wrap: wrap; align-items: baseline; gap: .3rem .7rem; margin: 0; color: var(--n-text-2); font-size: .92rem; }
.v2-rec__media strong{ font-size: 1.6rem; font-weight: 700; letter-spacing: -.02em; color: var(--n-text); font-variant-numeric: tabular-nums; }
.v2-rec__stars i{ color: rgba(255,255,255,.16); font-size: .86rem; }
.v2-rec__stars i.is-on{ color: var(--n-amber); }
.v2-rec{ list-style: none; margin: 0; padding: 0; display: grid; gap: clamp(1.6rem, 3vw, 2.6rem); justify-content: center; }
.v2-rec--1{ grid-template-columns: minmax(0, 620px); }
.v2-rec--2, .v2-rec--3{ grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 400px)); }
.v2-rec__item{ margin: 0; padding-top: 1.3rem; border-top: 1px solid var(--n-line); height: 100%; display: flex; flex-direction: column; gap: 1rem; }
.v2-rec__item blockquote{ margin: 0; flex: 1; }
.v2-rec__item blockquote p{ margin: 0; font-size: clamp(1.1rem, 1.6vw, 1.3rem); line-height: 1.45; letter-spacing: -.012em; color: var(--n-text); }
.v2-rec__item figcaption{ display: flex; flex-wrap: wrap; align-items: center; gap: .3rem .9rem; font-size: .88rem; color: var(--n-text-2); }
.v2-rec__prod{ font-weight: 500; }
.v2-pages{ display: flex; justify-content: center; flex-wrap: wrap; gap: .4rem; margin-top: 3rem; }
.v2-pages a{
  min-width: 44px; height: 44px; padding: 0 .8rem; display: inline-flex; align-items: center; justify-content: center;
  border-radius: 980px; border: 1px solid var(--n-line); color: var(--n-text); font-size: .92rem; font-variant-numeric: tabular-nums;
}
.v2-pages a[aria-current="page"]{ background: var(--n-blue-dark); border-color: var(--n-blue-dark); color: #fff; }

/* aperture delle pagine di servizio (account, preventivo): più compatte */
.v2-open--acc{ padding-top: clamp(3.5rem, 9vw, 6.5rem); padding-bottom: clamp(1.5rem, 3vw, 2.5rem); }
.v2-open--acc .n-note{ font-size: .95rem; color: var(--n-text-2); }
body.v2 .toast-notify[hidden]{ display: none !important; }

/* stato vuoto */
.v2-empty{ padding: 3rem 0; border-top: 1px solid var(--n-line-soft); color: var(--n-text-2); }
.v2-empty p{ margin: 0; }
.v2-empty .n-actions{ margin-top: 1.6rem; }

/* --------------------------------------------------------------------------
   7. TESTI LEGALI
   -------------------------------------------------------------------------- */
.v2-legal{
  display: grid; grid-template-columns: minmax(0, 13rem) minmax(0, 1fr);
  gap: clamp(2rem, 6vw, 5rem); align-items: start;
}
.v2-legal__nav{ position: sticky; top: calc(var(--n-nav-h) + 1.5rem); }
.v2-legal__nav p{ margin: 0 0 .6rem; font-size: .84rem; font-weight: 500; color: var(--n-text-3); }
.v2-legal__nav ul{ list-style: none; margin: 0; padding: 0; border-top: 1px solid var(--n-line-soft); }
.v2-legal__nav li{ border-bottom: 1px solid var(--n-line-soft); }
.v2-legal__nav a{ display: flex; align-items: center; min-height: 44px; color: var(--n-text-2); font-size: .95rem; }
.v2-legal__nav a[aria-current="page"]{ color: var(--n-text); font-weight: 600; }
@media (hover: hover) and (pointer: fine){ .v2-legal__nav a:hover{ color: var(--n-text); } }
.v2-prose{ max-width: 68ch; }
.v2-prose section{ padding: 1.6rem 0; border-top: 1px solid var(--n-line-soft); }
.v2-prose section:first-child{ border-top: 0; padding-top: 0; }
.v2-prose h2{ margin: 0 0 .7rem; font-size: clamp(1.15rem, 1.8vw, 1.35rem); font-weight: 600; letter-spacing: -.014em; line-height: 1.3; }
.v2-prose p,
.v2-prose li{ color: var(--n-text-2); font-size: 1rem; line-height: 1.65; }
.v2-prose p{ margin: 0 0 .8rem; }
.v2-prose p:last-child{ margin-bottom: 0; }
.v2-prose ul{ margin: .4rem 0 0; padding-left: 1.2rem; }
.v2-prose li{ margin: .3rem 0; }
.v2-prose li::marker{ color: var(--n-blue); }
.v2-prose a{ color: var(--n-blue); }
.v2-prose strong{ color: var(--n-text); }
@media (max-width: 860px){
  .v2-legal{ grid-template-columns: 1fr; }
  .v2-legal__nav{ position: static; order: 2; }
}

/* --------------------------------------------------------------------------
   8. SHOP: elenco, scheda prodotto, carrello, checkout
   -------------------------------------------------------------------------- */
.v2-cats{ display: flex; flex-wrap: wrap; gap: .5rem; margin: 0 0 1.6rem; padding: 0; list-style: none; }
.v2-cats a{
  display: inline-flex; align-items: center; min-height: 44px; padding: 0 1.1rem;
  border-radius: 980px; border: 1px solid var(--n-line); color: var(--n-text-2); font-size: .92rem;
}
.v2-cats a[aria-current="page"]{ background: var(--n-text); border-color: var(--n-text); color: var(--n-surface-3); font-weight: 500; }
@media (hover: hover) and (pointer: fine){ .v2-cats a:not([aria-current]):hover{ border-color: var(--n-line-strong); color: var(--n-text); } }

.v2-filters{
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 12rem) auto;
  gap: .8rem; align-items: end; margin: 0 0 2.2rem;
}
.v2-filters .n-field{ margin: 0; }
@media (max-width: 600px){ .v2-filters{ grid-template-columns: 1fr 1fr; } .v2-filters .n-field:first-child{ grid-column: 1 / -1; } }

.v2-shop{
  list-style: none; margin: 0; padding: 0;
  display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 250px), 1fr));
  gap: clamp(1.6rem, 3vw, 2.4rem) clamp(1rem, 2vw, 1.5rem);
}
.v2-prod{ position: relative; display: flex; flex-direction: column; }
.v2-prod__media{
  border-radius: var(--n-r-md); overflow: hidden; background: var(--n-surface-2);
  border: 1px solid var(--n-line-soft); aspect-ratio: 4 / 5;
}
.v2-prod__media img{ width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .8s var(--n-ease-out); }
.v2-prod h2, .v2-prod__t{ margin: 1rem 0 0; font-size: 1.08rem; font-weight: 600; letter-spacing: -.012em; line-height: 1.3; }
.v2-prod h2 a, .v2-prod__t a{ color: var(--n-text); }
.v2-prod h2 a::before, .v2-prod__t a::before{ content: ""; position: absolute; inset: 0; border-radius: var(--n-r-md); }
.v2-prod__price{ margin: .35rem 0 0; font-size: 1rem; font-weight: 600; font-variant-numeric: tabular-nums; color: var(--n-text-2); }
@media (hover: hover) and (pointer: fine){
  .v2-prod:hover .v2-prod__media img{ transform: scale(1.04); }
  .v2-prod:hover h2 a, .v2-prod:hover .v2-prod__t a{ text-decoration: underline; text-underline-offset: 3px; }
}
.v2-prod:focus-within .v2-prod__media{ outline: 2px solid var(--n-blue); outline-offset: 3px; }
.v2-admin-bar{ display: flex; justify-content: flex-end; gap: .6rem; margin: 0 0 1.4rem; }

.v2-crumbs{ display: flex; flex-wrap: wrap; align-items: center; gap: .2rem .6rem; margin: 0 0 1.4rem; font-size: .9rem; color: var(--n-text-3); }
.v2-crumbs a{ color: var(--n-text-2); display: inline-flex; align-items: center; min-height: 44px; }
.v2-btn-danger{ border-color: rgba(255,69,58,.45) !important; color: var(--n-red) !important; background: transparent !important; }
.v2-btn-danger.n-btn--primary{ background: rgba(255,69,58,.12) !important; }

/* scheda prodotto */
.v2-product{
  display: grid; grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
  gap: clamp(2rem, 5vw, 4.5rem); align-items: start;
}
.v2-gallery__main{
  display: block; width: 100%; padding: 0; border: 1px solid var(--n-line-soft); cursor: zoom-in;
  border-radius: var(--n-r-lg); overflow: hidden; background: var(--n-surface-2); aspect-ratio: 4 / 5;
}
.v2-gallery__main img{ width: 100%; height: 100%; object-fit: cover; display: block; }
.v2-gallery__thumbs{ list-style: none; display: flex; flex-wrap: wrap; gap: .6rem; margin: .9rem 0 0; padding: 0; }
.v2-gallery__thumb{
  width: 72px; height: 72px; padding: 0; border-radius: var(--n-r-sm); overflow: hidden; cursor: pointer;
  border: 1px solid var(--n-line); background: var(--n-surface-2);
}
.v2-gallery__thumb img{ width: 100%; height: 100%; object-fit: cover; display: block; }
.v2-gallery__thumb[aria-current="true"]{ border-color: var(--n-blue); }
.v2-buy{ position: sticky; top: calc(var(--n-nav-h) + 1.5rem); }
.v2-buy__cat{ margin: 0 0 .6rem; }
.v2-buy h1{ margin: 0; font-size: clamp(2rem, 4vw, 3rem); font-weight: 700; line-height: 1.06; letter-spacing: -.026em; }
.v2-buy__price{ margin: 1.2rem 0 0; font-size: clamp(2rem, 4vw, 2.8rem); font-weight: 700; letter-spacing: -.035em; font-variant-numeric: tabular-nums; }
.v2-buy__price .u{ font-size: .5em; font-weight: 600; color: var(--n-text-2); margin-left: .2em; }
.v2-buy__form{ display: grid; gap: 1rem; margin-top: 1.6rem; padding-top: 1.4rem; border-top: 1px solid var(--n-line-soft); }
.v2-buy__qty{ max-width: 9rem; }
.v2-buy__stock{ margin: 0; font-size: .9rem; color: var(--n-text-2); }
.v2-buy .v2-rows{ margin-top: 1.8rem; }
.v2-desc{ max-width: 68ch; color: var(--n-text-2); line-height: 1.65; }
.v2-related{ list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 200px), 1fr)); gap: 1.6rem 1.2rem; }
@media (max-width: 860px){
  .v2-product{ grid-template-columns: 1fr; }
  .v2-buy{ position: static; }
  .v2-gallery__main{ aspect-ratio: 1 / 1; }
}

/* tabella (carrello, riepilogo checkout) */
.v2-table-wrap{ overflow-x: auto; border-top: 1px solid var(--n-line); }
.v2-table{ width: 100%; border-collapse: collapse; font-size: .98rem; }
.v2-table th{
  text-align: left; font-size: .8rem; font-weight: 500; color: var(--n-text-3);
  padding: .8rem .6rem; border-bottom: 1px solid var(--n-line-soft); white-space: nowrap;
}
.v2-table td{ padding: 1rem .6rem; border-bottom: 1px solid var(--n-line-soft); vertical-align: middle; }
.v2-table th:first-child, .v2-table td:first-child{ padding-left: 0; }
.v2-table th:last-child, .v2-table td:last-child{ padding-right: 0; }
.v2-table .num{ text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.v2-table tfoot th, .v2-table tfoot td{ border-bottom: 0; padding-top: 1.2rem; font-size: 1.1rem; color: var(--n-text); font-weight: 700; }
.v2-table .btn-remove{
  width: 44px; height: 44px; border-radius: 50%; border: 1px solid var(--n-line);
  background: transparent; color: var(--n-text-2); cursor: pointer; font-size: .9rem;
}
@media (hover: hover) and (pointer: fine){ .v2-table .btn-remove:hover{ border-color: rgba(255,69,58,.5); color: var(--n-red); } }
.v2-total{
  display: flex; justify-content: space-between; align-items: baseline; gap: 1rem;
  padding: 1.4rem 0 0; margin-top: .2rem;
}
.v2-total > span{ color: var(--n-text-2); }
.v2-total strong{ font-size: clamp(1.6rem, 3.6vw, 2.2rem); letter-spacing: -.03em; font-variant-numeric: tabular-nums; }
.v2-total .u{ font-size: .55em; color: var(--n-text-2); margin-left: .15em; font-weight: 600; }
@media (max-width: 600px){
  .v2-table--cart thead{ display: none; }
  .v2-table--cart tr{ display: grid; grid-template-columns: 1fr auto; gap: .2rem 1rem; padding: 1rem 0; border-bottom: 1px solid var(--n-line-soft); }
  .v2-table--cart td{ border: 0; padding: 0; }
  .v2-table--cart td:nth-child(1){ grid-column: 1; font-weight: 600; }
  .v2-table--cart td:nth-child(2),
  .v2-table--cart td:nth-child(3),
  .v2-table--cart td:nth-child(4){ grid-column: 1; color: var(--n-text-2); font-size: .9rem; text-align: left; }
  .v2-table--cart td:nth-child(2)::before{ content: "Variante: "; }
  .v2-table--cart td:nth-child(3)::before{ content: "Quantità: "; }
  .v2-table--cart td:nth-child(4)::before{ content: "Prezzo: "; }
  .v2-table--cart td:nth-child(5){ grid-column: 2; grid-row: 1; font-weight: 600; }
  .v2-table--cart td:nth-child(6){ grid-column: 2; grid-row: 2 / span 3; align-self: end; justify-self: end; }
}

.v2-checkout{ display: grid; grid-template-columns: minmax(0, 7fr) minmax(0, 5fr); gap: clamp(2rem, 5vw, 4.5rem); align-items: start; }
.v2-checkout__sum{ position: sticky; top: calc(var(--n-nav-h) + 1.5rem); }
.v2-checkout h2{ margin: 0 0 1rem; font-size: 1.22rem; font-weight: 600; letter-spacing: -.014em; }
.v2-checkout fieldset{ border: 0; margin: 0 0 2rem; padding: 0; min-width: 0; }
.v2-checkout legend{ padding: 0; margin: 0 0 1rem; font-size: 1.22rem; font-weight: 600; letter-spacing: -.014em; }
@media (max-width: 860px){ .v2-checkout{ grid-template-columns: 1fr; } .v2-checkout__sum{ position: static; order: -1; } }

/* finestra di dialogo (pagamento, recensione, rifiuto preventivo) */
.v2-dialog{
  position: fixed; inset: 0; z-index: 12000;
  display: flex; align-items: center; justify-content: center; padding: 4vmin;
  background: rgba(0,0,0,.78);
}
.v2-dialog[hidden], .v2-dialog.hidden{ display: none !important; }
.v2-dialog__panel{
  position: relative; width: min(520px, 100%); max-height: 90vh; overflow-y: auto;
  background: var(--n-surface-2); border: 1px solid var(--n-line); border-radius: var(--n-r-lg);
  padding: clamp(1.6rem, 3vw, 2.3rem); box-shadow: 0 30px 90px rgba(0,0,0,.6);
}
.v2-dialog__close{
  position: absolute; top: 12px; right: 12px; width: 44px; height: 44px; border-radius: 50%;
  border: 0; background: rgba(255,255,255,.08); color: var(--n-text); font-size: 1.3rem; line-height: 1; cursor: pointer;
}
@media (hover: hover) and (pointer: fine){ .v2-dialog__close:hover{ background: rgba(255,255,255,.16); } }

/* --------------------------------------------------------------------------
   9. LIGHTBOX V2 (/js/v2/lightbox.js) — un solo componente condiviso
   -------------------------------------------------------------------------- */
.v2-lb{
  position: fixed; inset: 0; z-index: 12500;
  display: grid; grid-template-rows: auto minmax(0, 1fr) auto;
  background: rgba(0,0,0,.97);
  padding: env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);
}
.v2-lb[hidden]{ display: none !important; }
.v2-lb__bar{ display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding: 10px 12px 10px 22px; }
.v2-lb__count{ font-size: .88rem; color: var(--n-text-2); font-variant-numeric: tabular-nums; }
.v2-lb__stage{ position: relative; min-height: 0; display: flex; align-items: center; justify-content: center; padding: 0 clamp(12px, 7vw, 96px); touch-action: pan-y pinch-zoom; }
.v2-lb__img{
  display: block; max-width: 100%; max-height: 100%; width: auto; height: auto; object-fit: contain;
  border-radius: var(--n-r-md); box-shadow: 0 30px 90px rgba(0,0,0,.6);
  user-select: none; -webkit-user-drag: none;
}
.v2-lb__img.is-loading{ opacity: .35; }
.v2-lb__btn{
  width: 44px; height: 44px; border-radius: 50%; border: 1px solid var(--n-line);
  background: rgba(255,255,255,.06); color: var(--n-text); cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center; font-size: 1.1rem; line-height: 1;
}
@media (hover: hover) and (pointer: fine){ .v2-lb__btn:hover{ background: rgba(255,255,255,.16); } }
.v2-lb__nav{ position: absolute; top: 50%; transform: translateY(-50%); }
.v2-lb__nav--prev{ left: clamp(6px, 2vw, 28px); }
.v2-lb__nav--next{ right: clamp(6px, 2vw, 28px); }
.v2-lb__cap{ margin: 0; padding: 12px 22px 16px; text-align: center; font-size: .9rem; color: var(--n-text-2); min-height: 1em; }
html.v2-lb-open, html.v2-lb-open body{ overflow: hidden; }
@media (max-width: 600px){
  .v2-lb__stage{ padding: 0 8px; }
  .v2-lb__nav{ top: auto; bottom: 8px; transform: none; }
  .v2-lb__stage{ padding-bottom: 60px; }
}

/* --------------------------------------------------------------------------
   10. PAGINE DI ACCESSO (n-auth) in versione v2: una lampada, card opaca
   -------------------------------------------------------------------------- */
/* Tre righe: logo, modulo, "Torna al sito". Le due righe esterne hanno la
   stessa altezza, quindi la card cade esattamente al centro del viewport.
   min-height (non height): se il modulo è più alto dello schermo la pagina
   scorre in verticale. */
body.v2.n-auth{
  min-height: 100svh;
  display: grid;
  grid-template-rows: 88px 1fr 88px;
}
/* il laboratorio sullo sfondo, sotto un velo scuro leggero */
body.v2.n-auth .n-auth__bg{
  background:
    linear-gradient(180deg, rgba(0,0,0,.62) 0%, rgba(0,0,0,.46) 45%, rgba(0,0,0,.72) 100%),
    url('/img/auth/nedra-lab-bg.webp') center / cover no-repeat,
    var(--n-black);
}
body.v2.n-auth .n-auth__top{ padding: 0 22px; align-items: center; }
/* la regola generale v2 rende ogni <main> un blocco: qui serve il flex per centrare */
body.v2.n-auth .n-auth__main{ display: flex; align-items: center; justify-content: center; padding: 8px 22px; }
/* card scura e leggibile sopra la foto: quasi opaca, bordo sottile, niente vetro */
body.v2.n-auth .n-auth__card{
  background: rgba(14,14,16,.9);
  border: 1px solid var(--n-line);
  box-shadow: 0 30px 90px rgba(0,0,0,.6);
  -webkit-backdrop-filter: none; backdrop-filter: none;
}
body.v2.n-auth .n-auth__top a{ display: inline-flex; align-items: center; min-height: 44px; }
body.v2.n-auth .n-auth__back{ display: flex; align-items: center; justify-content: center; min-height: 44px; margin: 0 auto; align-self: center; width: max-content; }
@media (max-width: 600px){
  body.v2.n-auth{ grid-template-rows: 72px 1fr 72px; }
}
body.v2.n-auth .n-auth__foot a{ display: inline-flex; align-items: center; justify-content: center; min-height: 44px; }
.v2-auth-quota{ display: flex; justify-content: center; margin: 0 0 1.2rem; }
.v2-auth-quota .v2-quota{ margin: 0; }

/* --------------------------------------------------------------------------
   11. MOVIMENTO RIDOTTO
   -------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce){
  html.v2-motion .v2-open__title,
  html.v2-motion .v2-open__title::after{ animation: none; }
  body.v2 .n-btn--primary:hover::after{ animation: none; }
  .v2-prod__media img{ transition: none; }
}
