:root {
  --ink: #141413;
  --paper: #F6F5F1;
  --accent: #FF5A36;
  --accent-text: #C2370F;
  --muted: #55544E;
  --line: rgba(20, 20, 19, 0.12);
  --radius: 16px;
  --font-title: 'Bricolage Grotesque', system-ui, -apple-system, 'Segoe UI', sans-serif;
  --font-body: 'Instrument Sans', system-ui, -apple-system, 'Segoe UI', sans-serif;
  /* FF-09f — scala dei caratteri unica (telefono). */
  --fs-body: 17px;
  --lh-body: 1.45;
  --fs-secondary: 15px;
  --fs-legal: 13px;
  --fs-label: 17px;
  --fs-section: 21px;
  --fs-page: 28px;
  --fs-btn: 17px;
  --field-h: 52px;
  /* FF-09n — altezza della barra di navigazione in basso (con area sicura):
     le zone d'azione fisse si appoggiano esattamente sopra, senza coprirla. */
  --tabbar-h: calc(95px + env(safe-area-inset-bottom));
}

* { box-sizing: border-box; }
[hidden] { display: none !important; }

html, body { margin: 0; padding: 0; }

body {
  font-family: var(--font-body);
  background: #E9E7E1;
  color: var(--ink);
  -webkit-font-smoothing: antialiased;
  min-height: 100vh;
}

.app {
  position: relative;
  max-width: 480px;
  min-height: 100vh;
  min-height: 100dvh;
  margin: 0 auto;
  background: var(--paper);
  display: flex;
  flex-direction: column;
  box-shadow: 0 0 40px rgba(0, 0, 0, 0.08);
}

.app-main {
  flex: 1;
  /* FF-09o — regola unica: spazio in fondo pari alla barra di navigazione
     (--tabbar-h) + il pulsante «Vendi» che sporge di 14 px + 16 px di respiro,
     così niente (né «Esci» né le scritte in fondo) resta coperto. */
  padding: 24px 20px calc(var(--tabbar-h) + 30px);
}
/* 1471 — quando c'è il piè di pagina è lui a fare spazio alla barra in basso:
   il contenuto non lascia un buco di ~125 px sopra il footer. Le pagine con
   un'altezza o un margine proprio (chat, Per te, annuncio, Vendi, bozza)
   battono questa regola con la loro, più specifica. */
:where(.app:has(> .public-footer)) > .app-main { padding-bottom: 24px; }

.theme-dark.app, body.theme-dark {
  background: var(--ink);
}

body.theme-dark { background: #0B0B0A; }
body.theme-dark .app { background: var(--ink); color: var(--paper); }

h1, h2, .page-title, .claim { font-family: var(--font-title); letter-spacing: -0.04em; }

a { color: var(--accent-text); }

.flash {
  padding: 12px 16px;
  border-radius: 12px;
  margin-bottom: 18px;
  font-size: 15px;
  line-height: 1.4;
}
.flash-info { background: rgba(255, 90, 54, 0.12); border: 1px solid rgba(255, 90, 54, 0.3); }
.flash-success { background: rgba(30, 120, 60, 0.12); border: 1px solid rgba(30, 120, 60, 0.3); }
.flash-error { background: rgba(214, 64, 30, 0.12); border: 1px solid rgba(214, 64, 30, 0.35); }

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  min-height: 44px;
  padding: 12px 22px;
  border-radius: 999px;
  border: 1px solid transparent;
  font-family: var(--font-body);
  font-size: 16px;
  font-weight: 600;
  text-decoration: none;
  cursor: pointer;
}
.btn-block { width: 100%; }
.btn-primary { background: var(--ink); color: var(--paper); }
.btn-accent { background: var(--accent); color: var(--ink); }
.btn-ghost { background: transparent; border-color: var(--line); color: inherit; }
.btn-google { background: #fff; border-color: var(--line); color: var(--ink); }
.btn-apple { background: #000; border-color: #000; color: #fff; }
.brand-ico { flex: 0 0 auto; }
.access-social { display: flex; flex-direction: column; gap: 12px; }
.access-email > summary { list-style: none; margin-top: 4px; }
.access-email > summary::-webkit-details-marker { display: none; }
.access-email-form { margin-top: 12px; }
.access-terms { text-align: center; color: var(--muted); font-size: 13px; margin: 4px 0 0; }

/* ── FF-09k: codice a 6 cifre (caselle in fila) e «Rimanda» ──────────────
   Le regole mancavano del tutto: senza di queste le caselle finivano sotto
   le regole generiche dei campi (input[type=text] / .form input) e si
   incolonnavano a tutta larghezza. Specificità .code-boxes .code-box per
   battere quelle generiche. */
.code-form { gap: 14px; }
.code-boxes {
  display: flex;
  flex-wrap: nowrap;
  justify-content: center;
  gap: 8px;
  width: 100%;
}
.code-boxes .code-box {
  width: 48px;
  height: 56px;
  min-height: 56px;
  padding: 0;
  flex: 0 0 auto;
  text-align: center;
  font-family: var(--font-title);
  font-size: 24px;
  font-weight: 700;
  line-height: 1;
  border: 1px solid var(--line);
  border-radius: 12px;
  background: #fff;
  color: var(--ink);
}
.code-boxes .code-box:focus,
.code-boxes .code-box:focus-visible {
  outline: 2px solid var(--accent);
  outline-offset: 1px;
  border-color: var(--accent);
}
.access-resend { margin: 2px 0 0; text-align: center; }
.access-resend .link-btn,
.code-form .link-btn {
  display: inline-block;
  background: none;
  border: 0;
  padding: 12px 6px;
  min-height: 44px;
  color: var(--accent-text);
  font-family: var(--font-body);
  font-size: var(--fs-secondary);
  font-weight: 600;
  text-decoration: underline;
  cursor: pointer;
}
.access-resend .link-btn:disabled {
  color: var(--muted);
  text-decoration: none;
  cursor: default;
}
.access-change { text-align: center; margin: 2px 0 0; }
.access-change a { color: var(--accent-text); font-weight: 600; }
/* FF-09k — la versione dell'asset cambia col contenuto (ff_asset): questa
   riga tiene la copia edge di Cloudflare allineata al file su disco. */
.access-methods { display: flex; flex-direction: column; gap: 10px; }
.access-methods .card-title { font-size: 16px; margin: 0 0 4px; }
.access-method { display: flex; align-items: center; justify-content: space-between; gap: 10px; font-size: 15px; }
.inline-form { margin: 0; }
.btn-small { min-height: 36px; padding: 6px 14px; font-size: 14px; }

/* FF-09p — collegamenti in fondo al profilo e chiusura dell'account. */
.profile-links { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 8px; margin: 18px 0 8px; font-size: 15px; }
.profile-links a { color: var(--accent-text); display: inline-flex; align-items: center; min-height: 44px; padding: 0 4px; }
.delete-account { border: 1px solid var(--line); border-radius: var(--radius); margin-top: 16px; overflow: hidden; }
.delete-account-summary { cursor: pointer; list-style: none; padding: 14px 16px; font-weight: 600; color: #B42318; }
.delete-account-summary::-webkit-details-marker { display: none; }
.delete-account-body { padding: 0 16px 16px; font-size: 15px; }
.delete-account-body ul { margin: 8px 0 12px; padding-left: 20px; }
.delete-account-body li { margin-bottom: 6px; }
.btn-danger { background: #B42318; color: #fff; border-color: #B42318; }

.feed-empty {
  min-height: 60vh;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  gap: 14px;
}
.brand-mark { max-width: 78%; height: auto; }
.brand-lockup { display: inline-flex; align-items: center; gap: 12px; }
.brand-word { font-family: var(--font-title); font-size: 34px; font-weight: 500; letter-spacing: -0.04em; }
.brand-bold { font-weight: 800; }
.claim { font-size: 28px; font-weight: 800; margin: 10px 0 0; }
.hint { color: var(--muted); margin: 0 0 10px; }
body.theme-dark .hint { color: #B8B6B0; }

.access { display: flex; flex-direction: column; gap: 14px; padding-top: 12px; }
.access-title { font-size: 26px; margin: 12px 0 0; }
.access-sub { color: var(--muted); margin: 0 0 8px; line-height: 1.5; }
.brand-mark-dark { max-width: 180px; align-self: flex-start; }

.form { display: flex; flex-direction: column; gap: 10px; }
.form label { font-size: 14px; font-weight: 600; margin-top: 6px; }
.form input {
  min-height: 46px;
  padding: 12px 14px;
  border: 1px solid var(--line);
  border-radius: 12px;
  font-size: 16px;
  font-family: var(--font-body);
  background: #fff;
  color: var(--ink);
}
.form input:focus-visible,
.btn:focus-visible,
a:focus-visible { outline: 3px solid var(--accent); outline-offset: 2px; }

.divider { text-align: center; color: var(--muted); position: relative; margin: 6px 0; }
.divider span { background: var(--paper); padding: 0 12px; font-size: 14px; }
body.theme-dark .divider span { background: var(--ink); }
.g { font-weight: 700; }

.legal-links { text-align: center; color: var(--muted); font-size: 14px; margin-top: 10px; }
.legal-draft { font-weight: 600; color: var(--accent-text); }

.page { display: flex; flex-direction: column; gap: 16px; }
/* 1496 — contenitori neutri del profilo: sul telefono non esistono come
   scatole (i figli restano figli diretti della pagina), su computer diventano
   le due colonne. */
.profile-col { display: contents; }
.page-title { font-size: 28px; margin: 0; }
.page-placeholder { min-height: 60vh; justify-content: center; align-items: flex-start; }
.placeholder-line { color: var(--muted); font-size: 17px; line-height: 1.5; }
.card { border: 1px solid var(--line); border-radius: var(--radius); padding: 16px; }
.card .label { color: var(--muted); font-size: 13px; margin: 0 0 4px; text-transform: uppercase; letter-spacing: 0.04em; }
.card .value { margin: 0; font-size: 17px; font-weight: 600; }

.section-title { font-family: var(--font-title); font-size: 20px; margin: 22px 0 4px; }
.health, .flags { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.health li { display: flex; justify-content: space-between; gap: 12px; border-bottom: 1px solid var(--line); padding-bottom: 8px; }
.flags li { border-bottom: 1px solid var(--line); padding-bottom: 8px; display: grid; grid-template-columns: 1fr auto; gap: 4px 10px; }
.flag-name { font-weight: 600; }
.flag-value { font-weight: 700; }
.flag-value.on { color: #1E783C; }
.flag-value.off { color: var(--accent-text); }
.flag-src { grid-column: 1 / -1; font-size: 13px; color: var(--muted); }

.users { display: flex; flex-direction: column; gap: 10px; }
.user-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; border: 1px solid var(--line); border-radius: 12px; padding: 12px; }
.user-main { display: flex; flex-direction: column; min-width: 0; }
.user-email { font-weight: 600; overflow-wrap: anywhere; }
.user-meta { font-size: 13px; color: var(--muted); }
.user-form { flex-shrink: 0; }

.code-404 { font-family: var(--font-title); font-size: 64px; font-weight: 800; margin: 0; }

.tabbar {
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  /* FF-13 — la barra deve stare sopra le schede: senza z-index esplicito i
     contenuti con `z-index` proprio (le schede di «I miei») la coprivano. */
  z-index: 50;
  max-width: 480px;
  margin: 0 auto;
  display: flex;
  align-items: flex-end;
  justify-content: space-around;
  /* FF-13 — sfondo PIENO e NESSUNA trasformazione/sfocatura: su iOS (WebKit)
     un elemento `position: fixed` con `transform` + `backdrop-filter` viene
     ricomposto a parte e, mentre la barra di Chrome compare e scompare
     durante lo scorrimento, alcuni fotogrammi restavano senza lo sfondo della
     barra; il figlio «Vendi», con un proprio `transform`, galleggiava da solo.
     Centratura senza trasformazione — left/right 0 + margin auto. */
  background: var(--paper);
  border-top: 1px solid var(--line);
  padding: 8px 6px calc(8px + env(safe-area-inset-bottom));
}
.tab {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
  padding: 4px;
  min-height: 48px;
  text-decoration: none;
  color: var(--muted);
  font-size: 11px;
}
.tab.is-active { color: var(--ink); font-weight: 600; }
/* FF-20 — per gli ospiti la barra usa <button>: senza reset il browser ci
   disegna dietro il riquadro grigio predefinito. La barra deve essere
   identica per tutti, come prima della prova senza account. */
.tabbar button.tab {
  background: none;
  border: 0;
  font: inherit;
  font-size: 11px;
  cursor: pointer;
  -webkit-appearance: none;
  appearance: none;
}
.tab-ico { font-size: 22px; line-height: 1; }
.tab-lbl { line-height: 1; }
/* FF-13 — «Vendi» rialzato ma sempre DENTRO la barra: `position: relative` +
   `top` (non `transform`, che lo stacca su un livello a parte). */
.tab-sell { position: relative; top: -14px; }
.tab-sell .tab-ico {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 56px;
  height: 56px;
  border-radius: 50%;
  background: var(--accent);
  color: var(--ink);
  box-shadow: 0 6px 18px rgba(255, 90, 54, 0.4);
}

/* ── Vendi: fotocamera guidata ─────────────────────────────────────── */
.vendi { display: flex; flex-direction: column; gap: 18px; min-height: 70vh; }
.vendi-top { position: relative; display: flex; justify-content: center; align-items: center; min-height: 44px; }
.vendi-exit { position: absolute; right: 0; top: 0; width: 44px; height: 44px; border: 0; border-radius: 50%; background: rgba(255, 255, 255, 0.1); color: inherit; font-size: 18px; line-height: 1; cursor: pointer; }
body:not(.theme-dark) .vendi-exit { background: rgba(20, 20, 19, 0.06); }
.vendi-step { font-size: 13px; font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; color: var(--muted); }
body.theme-dark .vendi-step { color: #B8B6B0; }
.step { display: flex; flex-direction: column; gap: 20px; }
.step-body { display: flex; flex-direction: column; gap: 16px; }
.step-title { font-size: 30px; margin: 0; }
.step-lead { font-size: 17px; line-height: 1.5; margin: 0; }
body.theme-dark .step-lead, body.theme-dark .step-title { color: var(--paper); }
.tips { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 14px; }
.tips li { display: flex; align-items: center; gap: 12px; font-size: 17px; }
.tip-ico { display: inline-flex; align-items: center; justify-content: center; width: 42px; height: 42px; border-radius: 12px; background: rgba(255, 255, 255, 0.08); font-size: 20px; flex-shrink: 0; }
body:not(.theme-dark) .tip-ico { background: rgba(20, 20, 19, 0.06); }
.step-actions { display: flex; flex-direction: column; gap: 10px; margin-top: auto; }
.step-actions-row { flex-direction: row; }
.step-actions-row .btn { flex: 1; }
.btn-tall { min-height: 52px; font-size: 17px; }
.dark-text { color: var(--ink); }

/* FF-03k — scelta all'ingresso quando c'è una bozza in corso. */
.step-entry { gap: 22px; }
.entry-box { display: flex; flex-direction: column; align-items: center; gap: 14px; margin: 12px 0; }
.entry-thumb { width: 160px; height: 160px; border-radius: 16px; overflow: hidden; background: rgba(255, 255, 255, 0.08); display: flex; align-items: center; justify-content: center; }
body:not(.theme-dark) .entry-thumb { background: #EFEDE7; }
.entry-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.entry-text { font-size: 19px; font-weight: 600; text-align: center; margin: 0; }
body.theme-dark .entry-text { color: var(--paper); }

/* FF-03k — le miniature di ogni passo stanno in una sola fila che scorre in
   orizzontale, mai a capo, come nel riepilogo. */
.shot-strip { display: flex; gap: 8px; overflow-x: auto; overflow-y: hidden; -webkit-overflow-scrolling: touch; padding: 2px; scrollbar-width: none; }
.shot-strip::-webkit-scrollbar { display: none; }
.shot-strip .photo-tile { flex: 0 0 auto; }
.photo-tile { position: relative; border-radius: 12px; overflow: hidden; background: rgba(255, 255, 255, 0.08); display: flex; align-items: center; justify-content: center; min-height: 84px; }
.photo-tile.tile-tappable { cursor: pointer; }
.photo-tile.tile-tappable:active { transform: scale(0.96); }
.photo-tile img { width: 100%; height: 100%; object-fit: cover; display: block; }
.photo-tile.mini { width: 84px; height: 84px; }
.photo-tile.is-cover { outline: 3px solid var(--accent); outline-offset: -3px; }
.tile-empty { font-size: 12px; color: #B8B6B0; }
.tile-state { position: absolute; left: 0; right: 0; bottom: 0; background: rgba(0, 0, 0, 0.55); color: #F6F5F1; font-size: 10px; text-align: center; padding: 2px 0; }
.tile-state.error { background: rgba(214, 64, 30, 0.88); }
.tile-retry { position: absolute; left: 8px; right: 8px; top: 50%; transform: translateY(-50%); border: 0; border-radius: 999px; background: var(--accent); color: var(--ink); font-size: 11px; font-weight: 700; padding: 5px 6px; cursor: pointer; }
.detail-counter { font-size: 15px; color: var(--muted); }
body.theme-dark .detail-counter { color: #B8B6B0; }

/* ADS-1 — variante /prova/usato: tutto nel primo schermo di un iPhone. */
.vendi-prova-usato { gap: 14px; }
.vendi-prova-usato .step { gap: 14px; }
.vendi-prova-usato .step-body { gap: 12px; }
.vendi-prova-usato .step-title { font-size: 28px; line-height: 1.06; }
.vendi-prova-usato .step-lead { font-size: 15.5px; line-height: 1.4; }
.vendi-prova-usato .step-actions { margin-top: 0; }
.prova-example {
  display: flex; align-items: flex-start; gap: 12px; margin: 0; padding: 10px;
  border-radius: 14px; background: rgba(255, 255, 255, 0.06);
}
body:not(.theme-dark) .prova-example { background: rgba(20, 20, 19, 0.05); }
.prova-example-thumb {
  width: 88px; height: 88px; flex: 0 0 auto; object-fit: cover;
  border-radius: 10px; background: #EFEDE7;
}
.prova-example-body { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.prova-example-kicker { font-size: 11px; line-height: 1.2; color: var(--muted); }
body.theme-dark .prova-example-kicker { color: #B8B6B0; }
.prova-example-title {
  font-size: 15px; font-weight: 700; line-height: 1.25;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.prova-example-price { font-size: 15px; font-weight: 700; color: var(--accent-text); }
body.theme-dark .prova-example-price { color: var(--accent); }
.prova-example-desc {
  font-size: 13px; line-height: 1.35; color: var(--muted);
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
body.theme-dark .prova-example-desc { color: #B8B6B0; }
.prova-trust { margin: 0; text-align: center; font-size: 12.5px; line-height: 1.35; color: var(--muted); }
body.theme-dark .prova-trust { color: #B8B6B0; }

/* PROVA-PASSO1-1 — passo 1 con l'esempio vero e il bottone principale in
   basso, nello stesso punto del passo 2 (stessa altezza utile). */
.p1-wrap {
  display: flex;
  flex-direction: column;
  gap: 14px;
  min-height: calc(100dvh - 150px);
}
.p1-head { flex: 0 0 auto; }
.p1-head .step-title {
  font-family: var(--font-title);
  font-weight: 800;
  font-size: 30px;
  line-height: 1.04;
  letter-spacing: -0.035em;
  margin: 0;
}
.p1-head .step-lead {
  margin: 6px 0 0;
  color: #CFCDC7;
  font-size: 15.5px;
  line-height: 1.4;
}
.p1-example {
  margin: 0;
  padding: 12px;
  border-radius: 20px;
  background: #1E1E1C;
}
.p1-example-row {
  display: flex;
  align-items: center;
  gap: 10px;
  min-width: 0;
}
.p1-example-thumb {
  flex: 0 0 auto;
  width: 104px;
  height: 104px;
  object-fit: cover;
  border-radius: 14px;
  background: #EFEDE7;
}
.p1-example-arrow {
  flex: 0 0 auto;
  color: var(--accent);
  font-size: 28px;
  font-weight: 800;
  line-height: 1;
}
.p1-example-card {
  flex: 1 1 auto;
  min-width: 0;
  display: flex;
  flex-direction: column;
  gap: 3px;
  padding: 10px 12px;
  border-radius: 12px;
  background: var(--paper);
  color: var(--ink);
}
.p1-example-title {
  font-size: 13px;
  font-weight: 700;
  line-height: 1.25;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.p1-example-desc {
  font-size: 12px;
  line-height: 1.3;
  color: var(--muted);
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.p1-example-price {
  font-size: 14px;
  font-weight: 800;
  color: var(--accent-text);
}
.p1-example-note {
  margin: 8px 0 0;
  text-align: center;
  font-size: 11.5px;
  line-height: 1.3;
  color: #CFCDC7;
}
.p1-spacer { flex: 1 1 auto; min-height: 4px; }
.p1-trust {
  margin: 0;
  text-align: center;
  font-size: 12px;
  line-height: 1.35;
  color: #8F8D86;
}
.p1-actions { flex: 0 0 auto; margin-top: 0; padding-bottom: 42px; }
.p1-actions .p1-main { min-height: 60px; font-size: 17px; }
@media (max-height: 700px) {
  .p1-wrap { min-height: calc(100dvh - 132px); gap: 10px; }
  .p1-head .step-title { font-size: 26px; }
  .p1-head .step-lead { font-size: 14px; }
  .p1-example { padding: 10px; border-radius: 16px; }
  .p1-example-thumb { width: 88px; height: 88px; border-radius: 12px; }
  .p1-example-arrow { font-size: 22px; }
  .p1-example-title { font-size: 12px; }
  .p1-example-desc { font-size: 11px; }
  .p1-example-note { font-size: 10.5px; }
}

.cam { position: fixed; inset: 0; z-index: 100; background: #000; display: flex; flex-direction: column; height: 100vh; height: 100dvh; visibility: visible; }
/* FF-13c — il video è un livello a sé su Android/Chromium: senza z-index può
   finire SOPRA la barra inferiore e nascondere «Galleria». Lo teniamo a 0 e
   alziamo la barra con un livello esplicito. */
.cam video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 0; }
.cam.no-video video { visibility: hidden; }
.cam-frame { position: absolute; inset: 6% 5% 18% 5%; pointer-events: none; z-index: 1; }
.cam-frame .c { position: absolute; width: 46px; height: 46px; border: 5px solid #F6F5F1; }
.cam-frame .tl { top: 0; left: 0; border-right: 0; border-bottom: 0; border-top-left-radius: 14px; }
.cam-frame .tr { top: 0; right: 0; border-left: 0; border-bottom: 0; border-top-right-radius: 14px; }
.cam-frame .bl { bottom: 0; left: 0; border-right: 0; border-top: 0; border-bottom-left-radius: 14px; }
.cam-frame .br { bottom: 0; right: 0; border-left: 0; border-top: 0; border-bottom-right-radius: 14px; }
.cam-hint { position: absolute; top: calc(4% + env(safe-area-inset-top)); left: 0; right: 0; text-align: center; color: #F6F5F1; font-size: 16px; line-height: 1.4; text-shadow: 0 1px 6px rgba(0, 0, 0, 0.6); margin: 0; padding: 0 72px; z-index: 2; }
.cam-bottom { position: absolute; left: 0; right: 0; bottom: calc(16px + env(safe-area-inset-bottom)); display: flex; flex-direction: column; gap: 10px; padding: 0 12px; z-index: 2; }
.cam-strip { display: flex; gap: 8px; overflow-x: auto; padding: 2px; -webkit-overflow-scrolling: touch; }
.cam-strip:empty { display: none; }
.cam-strip .photo-tile { width: 58px; height: 58px; flex: 0 0 auto; }
.cam-counter { text-align: center; color: #F6F5F1; font-size: 14px; font-weight: 600; text-shadow: 0 1px 6px rgba(0, 0, 0, 0.6); }
.cam-controls { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.cam-shutter { width: 76px; height: 76px; border-radius: 50%; background: #F6F5F1; border: 6px solid rgba(0, 0, 0, 0.35); cursor: pointer; flex-shrink: 0; }
.cam-shutter:active { transform: scale(0.94); }
.cam-shutter:disabled { opacity: 0.4; }
.cam-gallery, .cam-close, .cam-fallback-btn { color: #F6F5F1; font-size: 15px; background: rgba(255, 255, 255, 0.14); border: 0; border-radius: 999px; padding: 12px 16px; cursor: pointer; min-height: 44px; display: inline-flex; align-items: center; text-align: center; }
.cam-close { position: absolute; top: calc(12px + env(safe-area-inset-top)); right: 14px; z-index: 2; font-size: 20px; padding: 10px 16px; }
/* FF-13c — «Galleria» non si restringe mai: resta sempre la prima, larga. */
.cam-gallery { flex: 0 0 auto; }
.cam-gallery input, .cam-fallback-btn input { display: none; }
.cam-fallback-btn { background: var(--accent); color: var(--ink); font-weight: 600; max-width: 62%; line-height: 1.2; }
.cam-done { color: var(--ink); background: var(--accent); border: 0; border-radius: 999px; padding: 12px 18px; min-height: 44px; font-size: 15px; font-weight: 700; cursor: pointer; }
.cam-limit { position: absolute; top: calc(4% + 48px + env(safe-area-inset-top)); left: 50%; transform: translateX(-50%); margin: 0; width: max-content; max-width: 88%; background: var(--accent); color: var(--ink); border-radius: 999px; padding: 8px 14px; font-size: 14px; font-weight: 600; text-align: center; z-index: 2; }
/* Pannello di diagnosi (solo admin, /vendi?diag=1): in basso sopra tutto. */
.cam-diag { position: fixed; left: 8px; right: 8px; bottom: calc(8px + env(safe-area-inset-bottom)); z-index: 300; background: rgba(11, 11, 10, 0.82); color: #F6F5F1; border: 1px solid rgba(255, 255, 255, 0.25); border-radius: 12px; padding: 8px 10px; font-size: 12px; }
.cam-diag-title { margin: 0 0 4px; font-weight: 700; }
.cam-diag-log { margin: 0; max-height: 32vh; overflow: auto; white-space: pre-wrap; word-break: break-word; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; line-height: 1.35; }

.review { position: fixed; inset: 0; z-index: 110; background: rgba(11, 11, 10, 0.96); color: #F6F5F1; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 18px; padding: 24px; }
.review img { max-width: 100%; max-height: 55vh; border-radius: 14px; }
.review-warns { display: flex; flex-direction: column; gap: 8px; width: 100%; max-width: 420px; }
.review-warn { background: rgba(255, 90, 54, 0.16); border: 1px solid rgba(255, 90, 54, 0.45); color: #F6F5F1; border-radius: 12px; padding: 12px 14px; margin: 0; font-size: 15px; }
.review-actions { display: flex; gap: 10px; width: 100%; max-width: 420px; }
.review-actions .btn { flex: 1; }
.upload-bar { width: 100%; max-width: 420px; height: 8px; border-radius: 999px; background: rgba(255, 255, 255, 0.18); overflow: hidden; }
.upload-bar span { display: block; height: 100%; width: 0; background: var(--accent); transition: width 0.2s; }
/* UPLOAD-FIX-1 — errore di caricamento con «Riprova» e uscita dall'app. */
.upload-error {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 130;
  max-width: 480px; margin: 0 auto;
  display: flex; flex-direction: column; gap: 10px;
  padding: 14px 16px calc(14px + env(safe-area-inset-bottom));
  background: #FFFFFF; color: #141413;
  border-top: 1px solid var(--line);
  box-shadow: 0 -10px 30px rgba(0, 0, 0, 0.18);
}
.upload-error[hidden] { display: none !important; }
.upload-error-x {
  position: absolute; top: 4px; right: 4px;
  width: 38px; height: 38px; border: 0; background: transparent;
  color: #141413; font-size: 24px; line-height: 1; cursor: pointer;
}
.upload-error-text { margin: 0; padding-right: 30px; font-size: 15px; font-weight: 600; line-height: 1.35; }
.upload-error-actions { display: flex; gap: 8px; }
.upload-error-actions .btn { flex: 1; min-height: 48px; font-size: 15px; }
.toast { position: fixed; left: 50%; bottom: calc(90px + env(safe-area-inset-bottom)); transform: translateX(-50%); z-index: 200; background: #141413; color: #F6F5F1; padding: 12px 18px; border-radius: 999px; font-size: 15px; max-width: 90%; text-align: center; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.3); }

.cover-badge { position: absolute; top: 8px; left: 8px; background: var(--accent); color: var(--ink); font-size: 12px; font-weight: 600; padding: 3px 8px; border-radius: 999px; }
.btn.danger { color: var(--accent-text); }
.label-note { font-size: 14px; color: var(--muted); }

/* ── Riepilogo: una sola fila che scorre in orizzontale (FF-03j) ────── */
.summary-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
.summary-counter { font-size: 15px; font-weight: 600; color: var(--muted); }
.summary-scroller { display: flex; gap: 12px; overflow-x: auto; overflow-y: hidden; scroll-snap-type: x mandatory; -webkit-overflow-scrolling: touch; padding: 4px 2px 8px; scrollbar-width: none; }
.summary-scroller::-webkit-scrollbar { display: none; }
.summary-card { flex: 0 0 70%; width: 70%; scroll-snap-align: center; border: 1px solid var(--line); border-radius: var(--radius); overflow: hidden; background: #fff; position: relative; }
.summary-card.is-cover { outline: 3px solid var(--accent); outline-offset: -3px; }
.summary-card.dragging { opacity: 0.6; pointer-events: none; }
.summary-media { position: relative; width: 100%; aspect-ratio: 3 / 4; background: #EFEDE7; display: flex; align-items: center; justify-content: center; }
.summary-media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.summary-media .tile-state { font-size: 12px; padding: 4px 0; }
.summary-media .tile-retry { font-size: 13px; padding: 8px 10px; }
.label-badge { top: auto; bottom: 8px; left: 8px; right: 8px; text-align: center; font-size: 11px; text-transform: none; }
.summary-dots { display: flex; gap: 6px; justify-content: center; }
.summary-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--line); }
.summary-dot.is-active { background: var(--accent); }
.summary-actions { margin-top: 4px; }

/* ── Menu di una foto (foglio dal basso) ────────────────────────────── */
.sheet { position: fixed; inset: 0; z-index: 120; }
.sheet-backdrop { position: absolute; inset: 0; width: 100%; border: 0; background: rgba(11, 11, 10, 0.55); padding: 0; cursor: pointer; }
.sheet-panel { position: absolute; left: 0; right: 0; bottom: 0; background: #fff; border-radius: 18px 18px 0 0; padding: 10px 12px calc(12px + env(safe-area-inset-bottom)); display: flex; flex-direction: column; gap: 8px; }
.sheet-item { width: 100%; min-height: 48px; border: 1px solid var(--line); border-radius: 12px; background: #fff; color: var(--ink); font-size: 16px; font-weight: 600; cursor: pointer; }
.sheet-item.danger { color: var(--accent-text); border-color: rgba(255, 90, 54, 0.45); }
.sheet-item.sheet-cancel { border: 0; background: transparent; color: var(--muted); font-weight: 500; }
.sheet-item[hidden] { display: none; }
.sheet-item:disabled { opacity: 0.4; }

/* ── I miei ─────────────────────────────────────────────────────────── */
.page-mine { gap: 12px; }
.listing-list { display: flex; flex-direction: column; gap: 12px; }
.listing-row { display: flex; align-items: stretch; gap: 8px; }
.listing-row .listing-card { flex: 1; min-width: 0; }
.listing-delete { flex: 0 0 auto; align-self: center; min-height: 44px; padding: 0 14px; }
.listing-card { display: flex; gap: 12px; align-items: center; border: 1px solid var(--line); border-radius: var(--radius); padding: 10px; text-decoration: none; color: inherit; background: #fff; }
.listing-thumb { position: relative; width: 72px; height: 72px; border-radius: 12px; overflow: hidden; background: #EFEDE7; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
.listing-thumb img { width: 100%; height: 100%; object-fit: cover; }
.listing-thumb-empty { padding: 4px; font-size: 11px; line-height: 1.2; text-align: center; color: var(--muted); }
.listing-info { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.listing-status { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 700; letter-spacing: 0.01em; }
.listing-status.tone-muted { color: var(--muted); }
.listing-status.tone-ok { color: #1E783C; }
.listing-status.tone-warning { color: #B45309; }
.listing-status.tone-working { color: #1E783C; }
.listing-status.tone-danger { color: #C63222; }
.listing-status-dot { width: 8px; height: 8px; border-radius: 50%; background: currentColor; animation: ff-listing-pulse 1.1s ease-in-out infinite; }
@keyframes ff-listing-pulse { 0%, 100% { opacity: 0.35; transform: scale(0.8); } 50% { opacity: 1; transform: scale(1); } }
.listing-title { font-size: 15px; font-weight: 600; color: var(--ink); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.listing-title.is-empty { color: var(--muted); font-weight: 500; }
.listing-meta { font-size: 13px; color: var(--muted); }
@media (prefers-reduced-motion: reduce) { .listing-status-dot { animation: none; } }

/* Avviso «Annulla» dopo l'eliminazione (FF-08f) */
.ff-toast { position: fixed; left: 12px; right: 12px; bottom: calc(12px + env(safe-area-inset-bottom)); z-index: 130; display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 16px; border-radius: 14px; background: #26251F; color: #fff; font-size: 15px; box-shadow: 0 8px 24px rgba(0, 0, 0, 0.28); opacity: 0; transform: translateY(12px); transition: opacity 0.2s ease, transform 0.2s ease; }
.ff-toast.is-visible { opacity: 1; transform: translateY(0); }
.ff-toast[hidden] { display: none; }
.ff-toast-undo { border: 0; background: transparent; color: var(--accent); font-size: 15px; font-weight: 700; cursor: pointer; padding: 6px 8px; }

.page-boizza { gap: 14px; }
.back-link { margin: 0; font-size: 15px; }
.bozza-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; }
.bozza-photo { position: relative; margin: 0; border-radius: var(--radius); overflow: hidden; aspect-ratio: 1; background: #EFEDE7; display: flex; align-items: center; justify-content: center; }
.bozza-photo img { width: 100%; height: 100%; object-fit: cover; }
.bozza-photo.is-cover { outline: 3px solid var(--accent); outline-offset: -3px; }
.bozza-photo figcaption { position: absolute; bottom: 8px; left: 8px; background: var(--accent); color: var(--ink); font-size: 12px; font-weight: 600; padding: 3px 8px; border-radius: 999px; }
.ai-box { border: 1px dashed var(--line); border-radius: var(--radius); padding: 16px; color: var(--muted); background: rgba(255, 90, 54, 0.05); }
.ai-box p { margin: 0; }
/* FF-08e — mentre l'AI lavora niente riquadro tratteggiato: protagonista l'animazione. */
.ai-box.is-waiting { border: none; background: none; padding: 0; color: var(--ink); }
.bozza-rail-wrap { margin-top: 16px; }
.bozza-rail-title { font-size: 13px; color: var(--muted); margin: 0 0 8px; }
body.theme-dark .bozza-rail-title { color: #B8B6B0; }
.bozza-rail { display: flex; gap: 10px; overflow-x: auto; padding-bottom: 4px; scroll-snap-type: x proximity; -webkit-overflow-scrolling: touch; scrollbar-width: none; }
.bozza-rail::-webkit-scrollbar { display: none; }
.bozza-rail-photo { position: relative; flex: 0 0 auto; width: 112px; height: 112px; margin: 0; border-radius: 14px; overflow: hidden; background: #EFEDE8; display: flex; align-items: center; justify-content: center; scroll-snap-align: start; }
.bozza-rail-photo img { width: 100%; height: 100%; object-fit: cover; }
.bozza-rail-photo.is-cover { outline: 3px solid var(--accent); outline-offset: -3px; }
.bozza-rail-photo figcaption { position: absolute; bottom: 6px; left: 6px; background: var(--accent); color: var(--ink); font-size: 11px; font-weight: 600; padding: 2px 7px; border-radius: 999px; }

/* FF-03i — con la fotocamera aperta il resto non si nasconde: la fotocamera
   è un livello figlio di <body>, opaco e sopra tutto. Il resto si rende
   inerte via attributo inert/aria-hidden da vendi.js. */
body.cam-open { overflow: hidden; }

/* FF-03j — dentro /vendi la barra del sito non c'è: il percorso è a tutto
   schermo e si esce dalla X in alto. Fuori dal percorso la barra resta. */
body.vendi-page .tabbar { display: none; }
body.vendi-page .app-main { padding-bottom: calc(24px + env(safe-area-inset-bottom)); }

/* ── Lista d'attesa (FF-03c) ────────────────────────────────────────── */
.waitlist-page .app-main { padding-bottom: 40px; }
/* 1471 — piè di pagina unico: fila dei link, dati della società, contatto e
   copyright. Sta in fondo al flusso; le barre fisse in basso non lo coprono
   perché lo spazio sotto si somma in --footer-* (vedi regole più sotto). */
.public-footer {
  padding: 18px 20px calc(24px + env(safe-area-inset-bottom) + var(--footer-tabbar, 0px) + var(--footer-banner, 0px) + var(--footer-action, 0px));
  text-align: center;
  font-size: var(--fs-legal);
  color: var(--muted);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 6px;
}
body.theme-dark .public-footer { color: #B8B6B0; }
body.theme-dark .public-footer a { color: #F6F5F1; }
/* 1281 — ogni voce del footer resta su una riga sola; la fila va a capo solo
   tra una voce e l'altra, senza uscire dalla colonna centrale. */
.public-footer a, .public-footer button { white-space: nowrap; }
.public-footer-links { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 0 2px; }
/* 1471 — telefono prima: ogni link del footer è toccabile su 44 px di altezza
   senza allargare la scritta. */
.public-footer-links a,
.public-footer-links button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 44px;
  padding: 6px 8px;
}
.public-footer-company { margin: 0; max-width: 34em; line-height: 1.55; }
.public-footer-contact { margin: 0; line-height: 1; }
.public-footer-contact a { display: inline-flex; align-items: center; min-height: 44px; padding: 0 8px; }
.public-footer-copy { margin: 0; }

/* 1471 — spazio riservato sotto il footer, per ogni barra fissa in basso:
   barra di navigazione, banner cookie, barra dell'annuncio («Scrivi al
   venditore» / «Compra ora»), zona d'azione della bozza, barra della home. */
body:has(.tabbar):not(.vendi-page):not(.bozza-page) { --footer-tabbar: var(--tabbar-h); }
body.bozza-page:not(.guest-page) { --footer-tabbar: var(--tabbar-h); }
body.has-cookie-banner { --footer-banner: var(--cookie-banner-h, 0px); }
body.ad-page.has-ad-cta { --footer-action: 132px; }
body.bozza-page { --footer-action: 150px; }
body.home-sticky-on { --footer-action: 96px; }

.waitlist-home, .waitlist-confirm { display: flex; flex-direction: column; gap: 18px; padding-top: 12px; text-align: center; }
.waitlist-home .brand-lockup, .waitlist-confirm .brand-lockup { justify-content: center; }
.waitlist-steps { list-style: none; margin: 6px 0; padding: 0; display: flex; flex-direction: column; gap: 14px; text-align: left; }
.waitlist-steps li { display: flex; gap: 14px; align-items: flex-start; }
.waitlist-steps .tip-ico { background: var(--accent); color: var(--ink); font-weight: 800; }
.waitlist-steps strong { display: block; font-size: 16px; }
.waitlist-steps span { color: var(--muted); font-size: 14px; line-height: 1.4; }
body.theme-dark .waitlist-steps span { color: #B8B6B0; }
.waitlist-home .form { text-align: left; }

/* FF-08b — home aperta: sottotitolo e riga d'accesso in fondo, mai in alto. */
.home-open-sub { color: var(--muted); margin: 16px 0 0; line-height: 1.48; }
body.theme-dark .home-open-sub { color: #B8B6B0; }
.home-open-login { margin: 16px 0 0; font-size: 14px; color: var(--muted); text-align: center; }
body.theme-dark .home-open-login { color: #B8B6B0; }
.home-open-login a { color: inherit; text-decoration: underline; }

/* FF-08c — home aperta a tutta altezza: respiro, illustrazione «foto →
   annuncio», fila «Appena pubblicati» e pulsanti vicino al pollice. Scale di
   spazi 8/16/24/32/40/48. */
.home-open .app-main {
  display: flex;
  flex-direction: column;
  padding: calc(24px + env(safe-area-inset-top)) 20px calc(24px + env(safe-area-inset-bottom));
}
.home-open-page { flex: 1; display: flex; flex-direction: column; }
.home-open-page .brand-heading svg { width: 36px; height: 36px; }
.home-open-page .brand-heading .brand-word { font-size: 28px; }
.home-open-page .claim { margin: 28px 0 0; font-size: 27px; line-height: 1.12; }

.home-open-art { margin: 36px 0 0; }
.home-art-svg { display: block; width: 100%; max-width: 360px; height: auto; margin: 0 auto; overflow: visible; }

.home-open-steps { margin: 36px 0 0; gap: 22px; }
.home-open-steps li { align-items: center; }
.home-open-steps strong { margin-bottom: 2px; }

.home-open-actions { display: flex; flex-direction: column; gap: 12px; margin-top: auto; padding-top: 40px; }

@keyframes home-card-in { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
.home-art-card { animation: home-card-in 0.6s ease-out 0.12s both; }
.reduce-motion .home-art-card { animation: none; }
@media (prefers-reduced-motion: reduce) { .home-art-card { animation: none; } }

.home-latest { margin: 32px 0 0; }
.home-latest-title { font-family: var(--font-title); font-size: 18px; font-weight: 800; margin: 0 0 12px; }
.home-latest-rail {
  display: flex; gap: 12px; overflow-x: auto; padding-bottom: 4px;
  scroll-snap-type: x proximity; -webkit-overflow-scrolling: touch; scrollbar-width: none;
}
.home-latest-rail::-webkit-scrollbar { display: none; }
.home-latest-card { flex: 0 0 auto; width: 132px; display: flex; flex-direction: column; gap: 4px; text-decoration: none; color: inherit; scroll-snap-align: start; }
.home-latest-thumb { width: 132px; height: 132px; border-radius: 14px; overflow: hidden; background: #1F1F1D; display: flex; align-items: center; justify-content: center; }
.home-latest-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.home-latest-thumb-empty { font-size: 34px; color: var(--muted); }
.home-latest-price { font-family: var(--font-title); font-weight: 800; font-size: 16px; color: var(--accent-text); }
body.theme-dark .home-latest-price { color: var(--accent); }
/* 1409 — il comune non si taglia mai con i puntini. */
.home-latest-zone { font-size: 15px; color: var(--muted); white-space: normal; overflow-wrap: break-word; }
body.theme-dark .home-latest-zone { color: #B8B6B0; }

/* FF-09j — barra fissa in basso: compare solo dopo che i pulsanti sono usciti.
   Due pulsanti affiancati uguali, alti 48 px, testo su UNA riga centrato
   orizzontale e verticale. Sfondo scuro con sfocatura, padding 12 px più area
   sicura dell'iPhone. In fondo alla pagina il piè di pagina lascia scoperti i
   link Regole · Termini · Privacy sopra la barra (48 + 12 + 12 = 72 px di barra
   più 24 px di respiro). */
.home-sticky-actions {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 60;
  max-width: 480px; margin: 0 auto;
  display: flex; gap: 10px;
  padding: 12px 16px calc(12px + env(safe-area-inset-bottom));
  background: rgba(11, 11, 10, 0.82);
  -webkit-backdrop-filter: blur(12px);
  backdrop-filter: blur(12px);
  border-top: 1px solid rgba(255, 255, 255, 0.12);
}
.home-sticky-actions .btn {
  flex: 1 1 0;
  min-width: 0;
  min-height: 48px; height: 48px;
  padding: 0 10px;
  font-size: 16px; font-weight: 700;
  white-space: nowrap;
  text-align: center; justify-content: center; align-items: center;
}
.home-sticky-actions .btn-ghost {
  border-color: rgba(246, 245, 241, 0.55);
  color: var(--paper);
}
.home-sticky-actions[hidden] { display: none !important; }
/* 1471 — lo spazio per la barra della home lo aggiunge --footer-action. */

/* FF-09j — numeri dei passi 1, 2, 3 nei quadrati arancioni: 22 px peso 800,
   centrati, testo scuro del sito (#141413) sull'arancione (#FF5A36):
   contrasto ≈ 5,9:1, sopra il minimo di 4,5:1. Il selettore batte la regola
   del tema scuro che altrimenti schiarirebbe il numero. */
body.theme-dark .home-open-steps .tip-ico {
  width: 42px; height: 42px;
  font-size: 22px; font-weight: 800;
  color: var(--ink);
  text-align: center; align-items: center; justify-content: center;
}

/* Computer: due colonne, contenuto largo circa 1100 px e centrato. */
@media (min-width: 760px) {
  .home-open .app { max-width: 1120px; }
  .home-open .app-main { padding-left: 40px; padding-right: 40px; }
  .home-open-page {
    display: grid;
    grid-template-columns: minmax(0, 1.05fr) minmax(0, 0.95fr);
    grid-template-areas: "intro art" "steps art" "actions art" "latest latest";
    column-gap: 48px;
    align-items: start;
    max-width: 1100px; width: 100%; margin: 0 auto;
  }
  .home-open-intro { grid-area: intro; }
  .home-open-art { grid-area: art; margin: 0; align-self: center; }
  .home-open-steps { grid-area: steps; max-width: 560px; }
  .home-open-actions { grid-area: actions; max-width: 440px; margin-top: 32px; padding-top: 40px; }
  .home-latest { grid-area: latest; margin-top: 48px; }
  .home-art-svg { max-width: 520px; }
  .home-sticky-actions { display: none !important; }
}

.check { display: flex; align-items: flex-start; gap: 10px; font-size: 15px; font-weight: 400; }
.check input { width: 20px; height: 20px; margin-top: 2px; flex-shrink: 0; }
.hp { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }
.form-msg { min-height: 20px; margin: 4px 0 0; font-size: 15px; }
.form-msg-ok { color: #1E783C; }
.form-msg-error { color: var(--accent-text); }
.login-hint { font-size: 15px; color: var(--muted); }
body.theme-dark .login-hint { color: #B8B6B0; }
.position-badge { font-family: var(--font-title); font-size: 30px; color: var(--accent); display: inline-block; }
.invite-box { border: 1px solid rgba(255, 255, 255, 0.14); border-radius: var(--radius); padding: 18px; display: flex; flex-direction: column; gap: 10px; }
.invite-link { font-size: 14px; word-break: break-all; color: var(--muted); margin: 0; }
body.theme-dark .invite-link { color: #B8B6B0; }
.invite-actions { display: flex; flex-wrap: wrap; gap: 10px; }
.invite-actions .btn { flex: 1 1 auto; }

.page-list { gap: 10px; }
.legal-page { display: flex; flex-direction: column; gap: 10px; max-width: 700px; }
.legal-page h2 { font-family: var(--font-title); font-size: 20px; margin: 20px 0 0; }
.legal-page p, .legal-page li { line-height: 1.6; }
.legal-page .updated { color: var(--muted); font-size: 14px; }

/* ── Admin lista (FF-03c) ───────────────────────────────────────────── */
.admin-counts { display: grid; grid-template-columns: repeat(2, 1fr); gap: 10px; list-style: none; margin: 0; padding: 0; }
.admin-counts li { border: 1px solid var(--line); border-radius: 12px; padding: 10px 12px; display: flex; flex-direction: column; gap: 2px; }
.admin-counts .n { font-family: var(--font-title); font-size: 24px; font-weight: 800; }
.admin-counts .l { font-size: 13px; color: var(--muted); }
.admin-table { width: 100%; border-collapse: collapse; font-size: 14px; }
.admin-table th, .admin-table td { text-align: left; padding: 8px 6px; border-bottom: 1px solid var(--line); vertical-align: top; }
.admin-table th { font-size: 12px; text-transform: uppercase; letter-spacing: 0.04em; color: var(--muted); }
.admin-toolbar { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; }
.admin-toolbar input[type="search"] { flex: 1 1 200px; }
.pager { display: flex; gap: 10px; align-items: center; font-size: 14px; }

/* ── AI della bozza (FF-04) ─────────────────────────────────────────── */
.bozza-status { font-size: 13px; color: var(--muted); margin: 0; }
.ai-screen { display: flex; flex-direction: column; gap: 10px; color: var(--ink); }
.ai-lead { font-family: var(--font-title); font-size: 19px; font-weight: 800; margin: 0; display: flex; align-items: center; gap: 8px; }
.ai-sub { font-size: 14px; color: var(--muted); margin: 0; }
.ai-spinner { width: 16px; height: 16px; border: 2px solid var(--line); border-top-color: var(--accent); border-radius: 50%; display: inline-block; animation: ai-spin 0.8s linear infinite; }
@keyframes ai-spin { to { transform: rotate(360deg); } }
.ai-instruction { font-size: 17px; line-height: 1.5; margin: 0; }
.ai-actions { display: flex; flex-wrap: wrap; gap: 10px; }
.ai-actions .btn { flex: 1 1 auto; }
.ai-q { border: 1px solid var(--line); border-radius: 12px; padding: 10px 12px; margin: 0 0 10px; display: flex; flex-direction: column; gap: 6px; }
.ai-q legend { font-weight: 700; font-size: 15px; padding: 0 4px; }
.ai-q label { display: flex; gap: 8px; align-items: center; font-size: 15px; }
.ai-q input { width: 20px; height: 20px; }
.ai-label { font-size: 13px; color: var(--muted); font-weight: 600; }
.ai-input { width: 100%; border: 1px solid var(--line); border-radius: 12px; padding: 10px 12px; font: inherit; background: #fff; }
.ai-price-row { display: flex; gap: 10px; flex-wrap: wrap; }
.ai-price-row .btn { flex: 1 1 auto; }
.btn.is-picked { outline: 3px solid var(--accent); outline-offset: -3px; }
.ai-price-custom { display: flex; align-items: center; gap: 10px; }
.ai-price-custom input { width: 140px; border: 1px solid var(--line); border-radius: 12px; padding: 10px 12px; font: inherit; }
.ai-newest { font-size: 13px; color: var(--muted); }
.ai-fallback { font-size: 14px; color: var(--muted); margin: 0; }

/* ── Admin confronto AI (FF-04) ─────────────────────────────────────── */
.admin-wide .app { max-width: 1200px; }
.confronto-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 14px; }
.confronto-col { border: 1px solid var(--line); border-radius: 12px; padding: 12px; display: flex; flex-direction: column; gap: 8px; background: #fff; }
.confronto-col h3 { margin: 0; font-size: 16px; font-family: var(--font-title); }
.confronto-col .muted { color: var(--muted); font-size: 13px; }
.confronto-col pre { white-space: pre-wrap; word-break: break-word; font-size: 13px; margin: 0; font-family: var(--font-body); }
.confronto-metrics { width: 100%; border-collapse: collapse; font-size: 14px; }
.confronto-metrics th, .confronto-metrics td { text-align: left; padding: 6px 8px; border-bottom: 1px solid var(--line); }
.vote-form { border-top: 1px dashed var(--line); margin-top: 6px; padding-top: 8px; display: flex; flex-direction: column; gap: 6px; }
.bozza-thumb { width: 90px; height: 90px; object-fit: cover; border-radius: 10px; }
.bozza-list { display: flex; flex-wrap: wrap; gap: 12px; list-style: none; padding: 0; }
.bozza-list li { border: 1px solid var(--line); border-radius: 12px; padding: 8px; display: flex; gap: 10px; align-items: center; }

.admin-wide .tabbar { display: none; }
.admin-wide .app-main { padding-bottom: 40px; }

/* ── FF-04b: esempi, controllo a ogni scatto, conferma ──────────────── */
.esempi { display: flex; gap: 12px; margin: 4px 0 8px; }
.esempio { flex: 1; margin: 0; display: flex; flex-direction: column; align-items: center; gap: 6px; }
.esempio svg { width: 100%; height: auto; display: block; border-radius: 12px; }
.esempio figcaption { font-size: 14px; font-weight: 700; }
.esempio-nota { font-size: 14px; color: var(--muted); margin: 0 0 6px; }
body.theme-dark .esempio-nota { color: #B8B6B0; }

/* Indicatore del controllo sulla miniatura */
.tile-check { position: absolute; top: 4px; right: 4px; width: 20px; height: 20px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 12px; font-weight: 700; color: #fff; background: rgba(0, 0, 0, 0.5); }
.tile-check.checking { background: rgba(0, 0, 0, 0.45); }
.tile-check.ok { background: #2E9E5B; }
.tile-check.warn { background: #E08A00; }

/* Etichetta «Sembra: …» in alto nella fotocamera */
.cam-sembra { position: absolute; top: calc(4% + 46px + env(safe-area-inset-top)); left: 50%; transform: translateX(-50%); background: rgba(11, 11, 10, 0.7); color: #F6F5F1; border-radius: 999px; padding: 6px 14px; font-size: 14px; font-weight: 600; max-width: 88%; text-align: center; z-index: 2; }
@media (min-width: 480px) { .cam-sembra { top: calc(4% + 52px + env(safe-area-inset-top)); } }

/* Scheda dell'avviso forte, sopra la fotocamera */
.cam-check { position: absolute; left: 12px; right: 12px; bottom: calc(150px + env(safe-area-inset-bottom)); z-index: 3; background: #FBF7EF; color: var(--ink); border-radius: 16px; padding: 12px; display: flex; gap: 12px; align-items: center; box-shadow: 0 10px 30px rgba(0, 0, 0, 0.4); }
.cam-check img { width: 64px; height: 64px; object-fit: cover; border-radius: 10px; flex: 0 0 auto; }
.cam-check-text { margin: 0; font-size: 15px; line-height: 1.35; flex: 1; }
.cam-check-actions { display: flex; flex-direction: column; gap: 6px; flex: 0 0 auto; }
.cam-check-actions .btn { min-height: 40px; padding: 8px 12px; font-size: 14px; }
.cam-check-actions .btn-small { opacity: 0.85; }

/* Blocco: nessuna foto adatta */
.block { position: fixed; inset: 0; z-index: 320; background: rgba(11, 11, 10, 0.9); display: flex; align-items: center; justify-content: center; padding: 24px; }
.block-panel { background: var(--paper); color: var(--ink); border-radius: 18px; padding: 22px; max-width: 420px; width: 100%; display: flex; flex-direction: column; gap: 16px; }
.block-text { font-size: 17px; line-height: 1.45; margin: 0; }

.cover-hint { font-size: 14px; color: #B26B00; margin: 6px 0 0; }

/* Conferma e correzione del riconoscimento */
.ai-correct { display: flex; flex-direction: column; gap: 6px; border-top: 1px dashed var(--line); padding-top: 12px; }
.ai-chips { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 6px; }
.ai-chip { border: 1px solid var(--line); background: #fff; border-radius: 999px; padding: 8px 12px; font: inherit; font-size: 14px; cursor: pointer; }
.ai-chip:active { transform: scale(0.97); }
.ai-confirm-cover { width: 100%; max-height: 260px; object-fit: contain; border-radius: 14px; background: #EFEDE8; }

/* ── FF-08g: la conferma bella, in colonna ─────────────────────────────── */
/* Niente riquadro tratteggiato attorno al riconoscimento. */
.ai-box.is-confirm { border: none; background: none; padding: 0; color: var(--ink); }
.ai-box.is-result { border: none; background: none; padding: 0; color: var(--ink); }

.ai-confirm { gap: 0; }
/* Niente animazione sulla schermata di conferma: un'animazione (anche solo di
   opacità) creerebbe uno «stacking context» e la zona d'azione fissa e il
   foglio di correzione finirebbero sotto la barra del sito. */
.ai-screen.ai-confirm:not([hidden]) { animation: none; }
/* FF-20 — la foto diventa una miniatura accanto al riconoscimento: il nome
   dell'oggetto si legge per primo e resta tutto sopra la piega. */
.ai-confirm-top { display: flex; gap: 14px; align-items: flex-start; }
.ai-confirm-top .ai-recognized { flex: 1 1 auto; min-width: 0; }
.ai-confirm-aside { flex: 0 0 100px; display: flex; flex-direction: column; align-items: center; gap: 6px; }
.ai-confirm-photos {
  position: relative;
  width: 100px;
  height: 100px;
  margin-top: 0;
  border-radius: 14px;
  overflow: hidden;
  background: #EFEDE8;
}
.ai-confirm-photos[hidden] { display: none; }
.ai-confirm-track {
  display: flex;
  gap: 8px;
  height: 100%;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
}
.ai-confirm-track::-webkit-scrollbar { display: none; }
.ai-confirm-photo {
  flex: 0 0 auto;
  width: 100px;
  height: 100px;
  object-fit: cover;
  display: block;
  scroll-snap-align: start;
  border-radius: 12px;
}
.ai-confirm-dots { display: flex; justify-content: center; gap: 6px; margin-top: 0; }
.ai-confirm-dots[hidden] { display: none; }
.ai-confirm-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--line); transition: background 0.2s ease; }
.ai-confirm-dot.is-active { background: var(--accent); }

.ai-recognized { margin-top: 0; }
.ai-recognized-label {
  display: flex; align-items: center; gap: 6px;
  margin: 0; font-size: 12px; font-weight: 700;
  letter-spacing: 0.09em; text-transform: uppercase; color: var(--muted);
}
body.theme-dark .ai-recognized-label { color: #B8B6B0; }
.ai-spark { color: var(--accent); font-size: 14px; line-height: 1; }
.ai-recognized-name {
  margin: 8px 0 0;
  font-family: var(--font-title);
  font-size: 25px; font-weight: 700; line-height: 1.2;
  letter-spacing: -0.03em; color: var(--ink);
}
body.theme-dark .ai-recognized-name { color: var(--paper); }
.ai-recognized-pills { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
.ai-pill {
  display: inline-flex; align-items: center;
  border-radius: 999px; padding: 6px 12px;
  font-size: 13px; font-weight: 600;
  border: 1px solid rgba(255, 90, 54, 0.35);
  background: rgba(255, 90, 54, 0.08);
  color: var(--ink);
}
.ai-pill.is-cat {
  border-color: var(--line);
  background: #fff;
  color: var(--muted);
  font-weight: 500;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
body.theme-dark .ai-pill { color: var(--paper); }
body.theme-dark .ai-pill.is-cat { background: rgba(255, 255, 255, 0.06); color: #B8B6B0; }

.ai-confirm-question { margin-top: 18px; }
.ai-confirm-ask { margin: 0; font-family: var(--font-title); font-size: 18px; font-weight: 800; }
.ai-confirm-actions { display: flex; flex-direction: column; gap: 10px; margin-top: 16px; }
.ai-confirm-actions .btn { width: 100%; min-height: 52px; }
.ai-confirm-retry { align-self: center; min-height: 36px; }

/* Foglio dal basso per «No, è un'altra cosa». */
.ai-correct-sheet {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 300;
  /* COPIA-2 — a 390 px il foglio deve restare dentro lo schermo: larghezza
     massima pari alla finestra (non solo 480 px) e niente sbordi orizzontali,
     con il rispetto delle tacche laterali. */
  width: 100%;
  max-width: min(480px, 100vw); margin: 0 auto;
  display: flex; flex-direction: column; gap: 8px;
  max-height: 88vh; overflow-y: auto; overflow-x: hidden;
  background: var(--paper); color: var(--ink);
  border-radius: 22px 22px 0 0;
  padding: 22px max(16px, env(safe-area-inset-right)) calc(22px + env(safe-area-inset-bottom)) max(16px, env(safe-area-inset-left));
  box-shadow: 0 -12px 44px rgba(0, 0, 0, 0.28);
  animation: ai-sheet-up 0.28s ease both;
}
.ai-correct-sheet::before {
  content: ''; position: fixed; inset: 0; z-index: -1;
  background: rgba(11, 11, 10, 0.45);
}
.ai-correct-sheet[hidden] { display: none; }
.ai-sheet-close {
  /* UX-PUBBLICA-1 — resta in alto a destra anche quando il foglio scorre. */
  position: sticky; top: 0; align-self: flex-end; z-index: 3;
  width: 44px; height: 44px; border-radius: 50%;
  margin: -8px -8px 0 0;
  border: 1px solid var(--line); background: #fff;
  font-size: 24px; line-height: 1; color: var(--muted); cursor: pointer;
}
body.theme-dark .ai-correct-sheet { background: var(--ink); color: var(--paper); }
body.theme-dark .ai-sheet-close { background: rgba(255, 255, 255, 0.06); color: #B8B6B0; }
@keyframes ai-sheet-up { from { transform: translateY(100%); } to { transform: none; } }
@media (prefers-reduced-motion: reduce) { .ai-correct-sheet { animation: none; } }

/* Telefono (FF-20): la conferma è compatta e i pulsanti stanno nel flusso,
   subito sotto la domanda: niente zona fissa che copre il contenuto e niente
   scorrimento per vedere nome, foto e pulsanti. */
@media (max-width: 759px) {
  .ai-confirm { padding-bottom: 0; }
  .page-boizza .bozza-step { font-size: 18px; }
  .ai-confirm .ai-recognized-name { font-size: 21px; margin-top: 6px; }
  .ai-confirm .ai-recognized-pills { margin-top: 8px; }
  .ai-confirm-question { margin-top: 12px; }
  /* Tre pulsanti compatti: «Sì» a tutta larghezza, poi «No» e «Riprova»
     affiancati. Restano così sopra la barra del sito, senza coprire nulla. */
  .ai-confirm-actions {
    position: static;
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 8px;
    max-width: none; margin: 10px 0 0;
    padding: 0;
    background: none;
  }
  #ai-confirm-yes { grid-column: 1 / -1; }
  #ai-confirm-no { grid-column: 1; }
  #ai-confirm-retry { grid-column: 2; }
  .ai-confirm-actions .btn { min-height: 44px; }
  .ai-confirm-retry { min-height: 44px; align-self: stretch; font-size: 15px; padding: 0 8px; }
}
/* Computer: colonna centrale, zona d'azione sotto il contenuto (non fissa). */
@media (min-width: 760px) {
  .page-boizza { max-width: 560px; margin: 0 auto; }
  .ai-correct-sheet { max-width: 560px; }
}

/* ── FF-08e: l'AI al lavoro, animazione d'attesa ───────────────────────── */
.ai-wait { align-items: stretch; gap: 16px; }
.ai-hero { display: flex; justify-content: center; }
.ai-hero-frame {
  position: relative;
  width: 70%;
  aspect-ratio: 4 / 3;
  border-radius: 18px;
  overflow: hidden;
  background: #14110F;
  box-shadow: 0 14px 34px rgba(20, 20, 19, 0.22);
}
.ai-hero-photo {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  object-fit: cover;
  opacity: 0;
  transition: opacity 0.85s ease;
}
.ai-hero-photo.is-show { opacity: 1; }
.ai-hero-shade {
  position: absolute; inset: 0;
  background: radial-gradient(120% 90% at 50% 40%, rgba(0, 0, 0, 0) 45%, rgba(0, 0, 0, 0.32) 100%);
  pointer-events: none;
}
.ai-corner {
  position: absolute;
  width: 15%; min-width: 22px; max-width: 40px;
  aspect-ratio: 1;
  border: 4px solid var(--accent);
  opacity: 0.9;
  filter: drop-shadow(0 0 5px rgba(255, 90, 54, 0.55));
  transform-origin: center;
  animation: ai-corner-breathe 2.6s ease-in-out infinite;
}
.ai-corner.is-tl { top: 9%; left: 9%; border-right: none; border-bottom: none; border-top-left-radius: 10px; }
.ai-corner.is-tr { top: 9%; right: 9%; border-left: none; border-bottom: none; border-top-right-radius: 10px; }
.ai-corner.is-bl { bottom: 9%; left: 9%; border-right: none; border-top: none; border-bottom-left-radius: 10px; }
.ai-corner.is-br { bottom: 9%; right: 9%; border-left: none; border-top: none; border-bottom-right-radius: 10px; }
@keyframes ai-corner-breathe {
  0%, 100% { transform: scale(1); opacity: 0.78; }
  50% { transform: scale(1.12); opacity: 1; }
}
.ai-scan {
  position: absolute; left: 0; right: 0; top: 0;
  height: 26%;
  background: linear-gradient(to bottom, rgba(255, 90, 54, 0) 0%, rgba(255, 90, 54, 0.30) 60%, rgba(255, 220, 200, 0.55) 100%);
  opacity: 0.9;
  animation: ai-scan-move 2.9s ease-in-out infinite;
}
@keyframes ai-scan-move {
  0% { transform: translateY(-125%); }
  100% { transform: translateY(420%); }
}
.ai-dot {
  position: absolute;
  left: var(--dx); top: var(--dy);
  width: 8px; height: 8px; margin: -4px 0 0 -4px;
  border-radius: 50%;
  background: var(--accent);
  box-shadow: 0 0 10px 2px rgba(255, 90, 54, 0.8);
  opacity: 0;
  animation: ai-dot-ping 2.7s ease-in-out infinite;
  animation-delay: var(--dd);
}
@keyframes ai-dot-ping {
  0%, 100% { opacity: 0; transform: scale(0.4); }
  18% { opacity: 1; transform: scale(1); }
  55% { opacity: 0; transform: scale(1.7); }
}

.ai-hero-title { font-size: 21px; line-height: 1.22; margin: 0; text-align: center; }

.ai-steps { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.ai-step { display: flex; align-items: flex-start; gap: 10px; }
.ai-step-body { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.ai-step-text { font-size: 16px; line-height: 1.3; }
.ai-step-note { font-size: 14px; color: var(--muted); }
body.theme-dark .ai-step-note { color: #B8B6B0; }
.ai-step-ico {
  position: relative; flex: 0 0 auto;
  width: 22px; height: 22px; margin-top: 1px;
  border: 2px solid var(--line);
  border-radius: 50%;
  display: inline-flex; align-items: center; justify-content: center;
  color: var(--muted);
}
.ai-step.is-todo { color: var(--muted); }
.ai-step.is-active { color: var(--ink); font-weight: 600; }
.ai-step.is-active .ai-step-ico { border-color: rgba(255, 90, 54, 0.3); border-top-color: var(--accent); animation: ai-spin 0.8s linear infinite; }
.ai-step.is-done { color: var(--ink); }
.ai-step.is-done .ai-step-ico { border-color: #2E9E5B; background: #2E9E5B; }
.ai-step.is-done .ai-step-ico::after { content: ''; width: 10px; height: 6px; border-left: 2px solid #fff; border-bottom: 2px solid #fff; transform: rotate(-45deg) translate(0, -1px); }
.ai-usually { text-align: center; }
.ai-warn { text-align: center; color: #B26B00; }
body.theme-dark .ai-warn { color: #E0A24A; }
.ai-timeout { display: flex; flex-direction: column; gap: 10px; border-top: 1px dashed var(--line); padding-top: 12px; }
.ai-timeout .ai-lead { font-size: 18px; }

/* Transizione morbida fra le schermate della bozza.
   FF-09n — gli schermi che contengono elementi `position: fixed` (la zona
   d'azione e i fogli della pubblicazione, i pulsanti della conferma) NON si
   animano. Un'animazione di opacità/transform rende lo schermo un CONTESTO DI
   IMPILAMENTO: i suoi figli fissi restavano impilati sotto la fila delle foto
   (fratello successivo nel DOM), quindi la zona d'azione spariva dietro le
   foto e seguiva lo scorrimento invece di restare in fondo. Niente animazione
   su questi due schermi; gli altri mantengono la dissolvenza. */
.ai-screen:not([hidden]) { animation: ai-screen-in 0.35s ease both; }
#ai-result:not([hidden]), #ai-confirm:not([hidden]) { animation: none; }
@keyframes ai-screen-in { from { opacity: 0; } to { opacity: 1; } }

/* «Riduci movimento»: niente scansione, respiro, puntini né dissolvenza. */
.reduce-motion .ai-corner,
.reduce-motion .ai-scan,
.reduce-motion .ai-dot { animation: none; }
.reduce-motion .ai-scan { display: none; }
.reduce-motion .ai-dot { opacity: 0.55; }
.reduce-motion .ai-hero-photo { transition: none; }
.reduce-motion .ai-screen:not([hidden]) { animation: none; }
.reduce-motion .ai-step.is-active .ai-step-ico { animation: none; border-top-color: var(--accent); }
@media (prefers-reduced-motion: reduce) {
  .ai-corner, .ai-scan, .ai-dot { animation: none; }
  .ai-scan { display: none; }
  .ai-dot { opacity: 0.55; }
  .ai-hero-photo { transition: none; }
  .ai-screen:not([hidden]) { animation: none; }
  .ai-step.is-active .ai-step-ico { animation: none; border-top-color: var(--accent); }
}

/* ── FF-05: pubblicazione, zona e consegna nella bozza ─────────────────── */
.visually-hidden { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
.publish-box { border-top: 1px solid var(--line); margin-top: 18px; padding-top: 14px; display: flex; flex-direction: column; gap: 8px; }
.zone-line { font-size: 16px; font-weight: 600; margin: 0; }
.zone-actions { display: flex; flex-wrap: wrap; gap: 8px; }
.zone-search { position: relative; }
.zone-results { list-style: none; margin: 6px 0 0; padding: 0; border: 1px solid var(--line); border-radius: 12px; overflow: hidden; }
.zone-results li { padding: 10px 12px; cursor: pointer; border-bottom: 1px solid var(--line); font-size: 15px; background: #fff; }
.zone-results li:last-child { border-bottom: 0; }
.zone-results li:active { background: #EFEDE8; }
.ai-q { border: 0; margin: 0 0 10px; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.ai-q legend { font-family: var(--font-title); font-weight: 700; font-size: 16px; padding: 0; }
.ai-q label { display: flex; align-items: center; gap: 8px; font-size: 15px; }
.ship-box { border: 1px solid var(--line); border-radius: 12px; padding: 12px; display: flex; flex-direction: column; gap: 8px; }
.ship-row { display: flex; align-items: center; gap: 8px; }
.ship-row input[type="number"] { flex: 1; }
.ship-help { font-size: 13px; color: var(--muted); margin: 0; }
/* 1335 — fasce fisse: una sola riga di scelte, il campo libero resta sotto. */
.ship-band-block { display: flex; flex-direction: column; gap: 6px; }
.ship-bands { display: flex; flex-wrap: wrap; gap: 8px; }
.ship-band { min-height: 44px; padding: 8px 12px; border: 1px solid var(--line); border-radius: 999px; background: #fff; font-size: 14px; font-weight: 600; color: var(--ink); }
.ship-band small { display: block; font-size: 12px; font-weight: 500; color: var(--muted); }
.ship-band.is-picked { border-color: var(--accent); background: rgba(255, 90, 54, 0.10); }
.ship-estimate { font-size: 13px; color: var(--muted); margin: 0; }
.publish-note { font-size: 14px; color: #B26B00; margin: 0; }

/* ── FF-05: pagina pubblica /a/… (FF-09o: barra, 4:5, pulsanti) ────────── */
body.ad-page .app-main { padding: 0 0 calc(40px + env(safe-area-inset-bottom)); }
.ad { max-width: 640px; margin: 0 auto; }
/* 1495 — due contenitori invisibili sul telefono: servono solo a dare una
   colonna sinistra (galleria + descrizione) nella versione desktop. */
.ad-head, .ad-story { display: contents; }
.ad-top {
  position: sticky; top: 0; z-index: 20;
  display: grid; grid-template-columns: 44px 1fr 44px; align-items: center;
  min-height: 52px; padding: calc(4px + env(safe-area-inset-top)) 8px 4px;
  background: var(--ink);
}
.ad-back { display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; border-radius: 50%; color: var(--paper); text-decoration: none; }
.ad-back:active { background: rgba(255, 255, 255, 0.12); }
.ad-brand { text-align: center; font-family: var(--font-title); font-weight: 800; font-size: 20px; color: var(--paper); }
.ad-top-spacer { width: 44px; }
.ad-sold-banner { background: var(--accent); color: #fff; text-align: center; font-family: var(--font-title); font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; padding: 8px; }
.ad-gallery { display: flex; overflow-x: auto; scroll-snap-type: x mandatory; -webkit-overflow-scrolling: touch; scrollbar-width: none; }
.ad-gallery::-webkit-scrollbar { display: none; }
.ad-photo { flex: 0 0 100%; margin: 0; scroll-snap-align: center; background: #0B0B0A; }
.ad-photo img { width: 100%; aspect-ratio: 4 / 5; object-fit: cover; display: block; }
.ad-photo-empty { aspect-ratio: 4 / 5; display: flex; align-items: center; justify-content: center; font-size: 64px; color: var(--muted); }
.ad-dots { display: flex; justify-content: center; gap: 6px; padding: 10px 0 2px; }
.ad-dot { width: 7px; height: 7px; border-radius: 50%; background: rgba(255, 255, 255, 0.32); transition: background 0.15s ease, transform 0.15s ease; }
.ad-dot.is-active { background: #fff; transform: scale(1.25); }
.ad-body { padding: 16px 20px 0; display: flex; flex-direction: column; gap: 6px; }
.ad-price { font-family: var(--font-title); font-size: 34px; font-weight: 800; margin: 0; }
.ad-price-new { font-family: var(--font-title); font-size: 18px; font-weight: 700; margin: 4px 0 0; color: var(--accent, #e8ff47); }
.ad-price-new-src { margin: 2px 0 0; font-size: 12px; opacity: .68; }
.garment-price-new-box { margin: 10px 0 4px; }
.garment-price-new { margin: 0; font-weight: 800; font-size: 1.05rem; }
.garment-price-new-src { margin: 2px 0 0; font-size: .78rem; opacity: .68; }
.ad-delivery { display: flex; align-items: center; gap: 8px; color: #CFCDC7; font-weight: 600; margin: 4px 0 0; }
.ad-delivery-ico { flex: 0 0 auto; color: #CFCDC7; }
.ad-title { font-family: var(--font-title); font-size: 22px; margin: 2px 0 0; }
.ad-zone, .ad-condition { color: var(--muted); margin: 0; }
/* 1409 — i livelli del luogo che hanno una pagina sono link leggibili. */
.ad-zone a { color: inherit; text-decoration: underline; text-underline-offset: 2px; }
.ad-zone a:hover { color: var(--accent); }
.ad-description { margin: 12px 0; line-height: 1.5; white-space: normal; }
/* 1495 — l'etichetta dice che il testo l'ha scritto l'AI da una foto: piccola,
   grigia, non cliccabile e subito sotto l'ultima riga della descrizione. */
.ad-ai-label { display: flex; align-items: center; gap: 6px; margin: 10px 0 0; font-size: 13px; line-height: 1.35; color: #B8B6B0; }
.ad-ai-label .ai-spark { flex: 0 0 auto; color: inherit; font-size: 12px; }
/* 1267 — confronto con il nuovo: piccolo, in fondo, sotto la descrizione. */
.ad-market-compare { margin: 14px 0 6px; padding: 10px 12px; border: 1px solid var(--line, #2a2a28); border-radius: 10px; background: rgba(255,255,255,.03); }
.ad-market-title { margin: 0 0 4px; font-size: 12px; letter-spacing: .04em; text-transform: uppercase; color: var(--muted); }
.ad-market-row { margin: 2px 0; font-size: 14px; line-height: 1.4; }
.ad-market-row strong { font-weight: 800; }
.ad-market-row a { color: var(--accent, #e8ff47); text-decoration: underline; text-underline-offset: 2px; }
.ad-market-note { margin: 6px 0 0; font-size: 11px; color: var(--muted); }
.ad-seller { margin: 0; font-weight: 600; }
.ad-date { color: var(--muted); font-size: 14px; margin: 0 0 12px; }
.ad-actions { display: flex; flex-direction: column; gap: 10px; padding: 8px 20px 20px; }
.ad-owner { display: flex; flex-direction: column; gap: 10px; padding: 8px 20px 24px; }
/* FF-LINK-PUBBLICO-1 — barra del proprietario in cima alla pagina pubblica:
   tre azioni, visibile solo a chi ha pubblicato l'annuncio. */
.ad-owner-bar {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  padding: 10px 20px 12px;
  border-bottom: 1px solid var(--line);
}
.ad-owner-bar .btn { flex: 1 1 auto; white-space: nowrap; }
body.theme-dark .ad-owner-bar .btn-ghost {
  border-color: rgba(255, 255, 255, 0.32);
  color: var(--paper);
}
.ad-menu { margin: 0; }
.ad-menu > summary { list-style: none; cursor: pointer; }
.ad-menu > summary::-webkit-details-marker { display: none; }
.ad-menu-list { display: flex; flex-direction: column; gap: 4px; margin-top: 8px; border: 1px solid var(--line); border-radius: 14px; overflow: hidden; }
.ad-menu-item { display: flex; align-items: center; gap: 10px; width: 100%; text-align: left; min-height: 52px; padding: 12px 16px; background: transparent; border: 0; border-bottom: 1px solid var(--line); color: var(--paper); font: inherit; font-size: 17px; text-decoration: none; cursor: pointer; }
.ad-menu-item:last-child { border-bottom: 0; }
.ad-menu-item:active { background: rgba(255, 255, 255, 0.06); }
/* FF-10 — la pagina annuncio è su fondo scuro: le azioni devono sembrare
   pulsanti, non testo. Il primario non può avere il colore del fondo
   (--ink); il secondario ha bisogno di un contorno chiaro. */
body.theme-dark .ad-actions .btn-primary,
body.theme-dark .ad-owner .btn-primary {
  background: var(--paper);
  color: var(--ink);
  border-color: var(--paper);
}
body.theme-dark .ad-actions .btn-ghost,
body.theme-dark .ad-owner .btn-ghost {
  border-color: rgba(255, 255, 255, 0.32);
  color: var(--paper);
}

/* 1116 — riquadro «l'ha scritto l'AI» sotto le azioni del compratore.
   Stessa larghezza della colonna .ad (max 640 px), non della finestra. */
.ad-ai-box {
  margin: 4px 20px 20px;
  padding: 18px 20px;
  border: 1px solid #3A3936;
  border-radius: 16px;
  background: #1F1F1D;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.ad-ai-box-title { margin: 0; font-family: var(--font-title); font-size: 20px; line-height: 1.25; }
.ad-ai-box-title strong { font-weight: 800; }
.ad-ai-box-line { margin: 0; color: #CFCDC7; font-size: 15px; line-height: 1.4; }
.ad-ai-box-line strong { color: var(--paper); }
.ad-ai-box-cta { align-self: flex-start; margin-top: 4px; }
@media (max-width: 360px) {
  .ad-ai-box { margin-left: 12px; margin-right: 12px; padding: 16px; }
  .ad-ai-box-cta { align-self: stretch; }
}

/* ── FF-09p: blocco venditore, segnalazione e file collegate ───────────── */
/* 1495 — il gruppo venditore/data/Condividi stampato nel riquadro del prezzo
   esiste solo su desktop; sul telefono restano i blocchi originali. */
.ad-side-extra { display: none; }
.ad-seller-block { display: flex; align-items: center; gap: 12px; margin: 10px 0 4px; padding: 12px; border: 1px solid #3A3936; border-radius: 14px; }
.ad-seller-avatar { flex: 0 0 auto; width: 46px; height: 46px; border-radius: 50%; background: var(--accent); color: #fff; display: inline-flex; align-items: center; justify-content: center; font-family: var(--font-title); font-size: 22px; font-weight: 800; }
.ad-seller-info { display: flex; flex-direction: column; gap: 2px; }
.ad-seller-name { font-weight: 700; font-size: 17px; }
.ad-seller-meta { color: #CFCDC7; font-size: 15px; }
.ad-report { margin: 4px 20px 0; }
.ad-report > summary { list-style: none; cursor: pointer; color: #CFCDC7; font-size: 15px; display: flex; align-items: center; gap: 6px; min-height: 44px; padding: 8px 0; }
.ad-report > summary::-webkit-details-marker { display: none; }
.ad-report-form { display: flex; flex-direction: column; gap: 10px; border: 1px solid #3A3936; border-radius: 14px; padding: 12px; margin-top: 6px; }
.ad-report-field { display: flex; flex-direction: column; gap: 6px; font-size: 14px; color: var(--muted); }
.ad-report-field select, .ad-report-field textarea { width: 100%; min-height: 44px; border: 1px solid #3A3936; border-radius: 12px; background: #1F1F1D; color: var(--paper); padding: 10px 12px; font: inherit; }
.ad-report-msg { margin: 0; min-height: 18px; font-size: 14px; color: var(--accent); }
.ad-rail-section { padding: 18px 0 4px; }
.ad-rail-title { font-family: var(--font-title); font-size: 18px; margin: 0 0 10px; padding: 0 20px; }
.ad-rail {
  display: flex;
  gap: 12px;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  padding: 0 20px 8px;
  /* 1365 — niente barra bianca sullo sfondo scuro; lo scorrimento col dito
     resta identico su iPhone e Android. */
  scrollbar-width: none;
  -ms-overflow-style: none;
}
.ad-rail::-webkit-scrollbar { width: 0; height: 0; display: none; }
.ad-card { flex: 0 0 auto; width: 150px; display: flex; flex-direction: column; gap: 4px; text-decoration: none; color: inherit; }
.ad-card-thumb { width: 150px; aspect-ratio: 1; border-radius: 12px; overflow: hidden; background: #1F1F1D; display: flex; align-items: center; justify-content: center; }
.ad-card-thumb img { width: 100%; height: 100%; object-fit: cover; }
.ad-card-thumb-empty { color: var(--muted); }
.ad-card-price { font-weight: 700; }
.ad-card-title { font-size: 15px; color: #CFCDC7; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

/* ── FF-05: «Pubblicato!» e «Pubblicalo anche su…» ─────────────────────── */
.pub-hero { text-align: center; display: flex; flex-direction: column; align-items: center; gap: 10px; }
.pub-hero img { width: 100%; max-width: 320px; border-radius: var(--radius); }
.pub-url { display: flex; gap: 8px; align-items: center; width: 100%; flex-wrap: wrap; }
.pub-url input { flex: 1; min-width: 180px; }
.market-tabs { display: flex; gap: 8px; flex-wrap: wrap; }
.market-card { border: 1px solid var(--line); border-radius: var(--radius); padding: 12px; margin-top: 10px; display: flex; flex-direction: column; gap: 8px; }
.market-card textarea { width: 100%; font: inherit; font-size: 14px; }
.market-actions { display: flex; flex-wrap: wrap; gap: 8px; }

/* FF-17 / FF-PUBBLICATO-1 — coriandoli («prezzo accettato» in chat e
   «annuncio online»). Spostati qui da negotiation.css: servono anche alla
   pagina del pubblicato, che non carica negotiation.css. Sopra tutto (anche
   la barra in basso), senza bloccare i tocchi: si rimuovono da soli. */
.confetti-layer {
  position: fixed;
  inset: 0;
  z-index: 400;
  pointer-events: none;
  opacity: 0;
  transition: opacity 0.18s ease-out;
}
.confetti-layer.is-on { opacity: 1; }
.confetti-canvas {
  position: fixed;
  inset: 0;
  width: 100%;
  height: 100%;
  pointer-events: none;
}
.confetti-toast {
  position: fixed;
  left: 50%;
  top: calc(14px + env(safe-area-inset-top));
  transform: translateX(-50%);
  max-width: min(92%, 460px);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 2px;
  padding: 12px 18px;
  border-radius: 16px;
  background: rgba(20, 20, 19, 0.94);
  color: #FBF7EF;
  text-align: center;
  box-shadow: 0 12px 30px rgba(20, 20, 19, 0.35);
  font-size: 16px;
  font-weight: 600;
}
.confetti-ico { font-size: 20px; line-height: 1; }
.confetti-text { line-height: 1.3; }
.confetti-next {
  font-size: 13px;
  font-weight: 500;
  color: #FFD34D;
}
@media (prefers-reduced-motion: reduce) {
  .confetti-layer { transition: none; }
}

/* ── FF-05: «I miei» a schede ──────────────────────────────────────────── */
.tabs { display: flex; gap: 6px; margin: 10px 0 16px; }
.tabs a { flex: 1; text-align: center; padding: 10px; border-radius: 12px; background: #EFEDE8; color: var(--ink); text-decoration: none; font-weight: 600; font-size: 15px; }
.tabs a.is-active { background: var(--ink); color: var(--paper); }
.listing-actions { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.listing-views { color: var(--muted); font-size: 13px; }
.removed { opacity: 0.55; }
.listing-row-wrap { padding: 0; }
.listing-row-wrap.is-deleting { overflow: hidden; transition: height 0.28s ease, opacity 0.2s ease; opacity: 0; }

/* ── FF-08f: scorrere a sinistra per eliminare ─────────────────────────── */
.listing-swipe { position: relative; border-radius: var(--radius); overflow: hidden; }
.listing-swipe-delete { position: absolute; top: 0; right: 0; bottom: 0; width: 88px; z-index: 0; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; border: 0; background: #C63222; color: #fff; font-size: 13px; font-weight: 700; cursor: pointer; }
.listing-swipe-delete:focus-visible { outline: 3px solid var(--ink); outline-offset: -3px; }
.listing-swipe .listing-card { position: relative; z-index: 1; will-change: transform; touch-action: pan-y; -webkit-user-drag: none; user-select: none; -webkit-user-select: none; transition: transform 0.22s ease; }
.listing-swipe.is-open .listing-card { transition: transform 0.16s ease; }
.add-photo-row { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }

/* ── FF-06: chat, contatti protetti, accordi ───────────────────────────── */
.tab { position: relative; }
.tab-badge { position: absolute; top: -2px; right: 12%; min-width: 18px; height: 18px; padding: 0 5px; border-radius: 999px; background: #C2370F; color: #fff; font-size: 11px; line-height: 18px; text-align: center; font-weight: 800; box-shadow: 0 0 0 2px var(--paper); }
@keyframes ff-badge-bump { 0% { transform: scale(1); } 40% { transform: scale(1.35); } 100% { transform: scale(1); } }
.tab-badge.is-bump { animation: ff-badge-bump 0.45s ease; }
@media (prefers-reduced-motion: reduce) { .tab-badge.is-bump { animation: none; } }
.ad-reserved-banner { background: #3B6EA5; }

.chat-list { display: flex; flex-direction: column; }
.chat-row { display: flex; gap: 12px; align-items: center; padding: 12px 4px; border-bottom: 1px solid var(--line); text-decoration: none; color: var(--ink); }
.chat-row.has-unread .chat-title,
.chat-row.has-unread .chat-other,
.chat-row.has-unread .chat-last { font-weight: 700; color: var(--ink); }
.chat-thumb { width: 52px; height: 52px; flex: 0 0 52px; border-radius: 12px; overflow: hidden; background: #DDD9D0; display: flex; align-items: center; justify-content: center; }
.chat-thumb img { width: 100%; height: 100%; object-fit: cover; }
.chat-info { flex: 1; display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.chat-title { font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.chat-other, .chat-meta { color: var(--muted); font-size: 13px; }
.chat-last { color: var(--muted); font-size: 13px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.chat-side { display: flex; flex-direction: column; align-items: flex-end; gap: 6px; }
.chat-time { color: var(--muted); font-size: 12px; }
.chat-dot { width: 10px; height: 10px; border-radius: 50%; background: var(--accent); }
.chat-waiting { display: inline-block; margin-top: 2px; font-size: 12px; font-weight: 700; color: var(--accent-text); }
.chat-waiting-banner { margin: 0 0 12px; padding: 10px 14px; border-radius: 12px; background: rgba(255, 90, 54, 0.12); border: 1px solid rgba(255, 90, 54, 0.3); font-weight: 600; }
.listing-unread { display: inline-flex; align-items: center; gap: 4px; color: var(--accent-text); font-weight: 700; }

/* FF-15 — BUG 6: la conversazione occupa esattamente lo spazio fra il bordo
   alto e la barra in basso (padding .app-main: 24 sopra, --tabbar-h + 30
   sotto), così la zona di scrittura non finisce più sotto la barra. */
.page-chat { display: flex; flex-direction: column; height: calc(100dvh - var(--tabbar-h) - 54px); max-width: 640px; margin: 0 auto; }
.chat-head { display: flex; align-items: center; gap: 8px; padding: 4px 0 8px; }
.chat-back { text-decoration: none; font-size: 28px; line-height: 1; color: var(--ink); }
.chat-who { font-family: var(--font-title); font-weight: 800; font-size: 20px; }
.chat-listing { display: flex; gap: 10px; align-items: center; padding: 8px; border: 1px solid var(--line); border-radius: var(--radius); text-decoration: none; color: var(--ink); }
.chat-banner { margin: 8px 0; padding: 8px 12px; border-radius: 12px; background: #E7EEF7; font-size: 14px; }
.chat-banner-blocked { background: #F7E7E7; }
.chat-banner-truffa-mezzo { background: #FCEFD3; border: 1px solid #E4C67A; color: #5A4608; font-weight: 500; }
.chat-messages { flex: 1; overflow-y: auto; display: flex; flex-direction: column; gap: 8px; padding: 8px 0; }
.chat-msg { display: flex; }
.chat-msg-mine { justify-content: flex-end; }
.chat-bubble { max-width: 80%; margin: 0; padding: 10px 14px; border-radius: 18px; background: #fff; border: 1px solid var(--line); white-space: normal; word-break: break-word; }
.chat-msg-mine .chat-bubble { background: var(--ink); color: var(--paper); border-color: var(--ink); }
.chat-system { text-align: center; color: var(--muted); font-size: 13px; margin: 4px 0; }
.chat-card { border: 1px solid var(--line); border-radius: var(--radius); padding: 12px; background: #fff; display: flex; flex-direction: column; gap: 8px; }
.chat-card-title { font-weight: 700; margin: 0; }
.chat-card-guard { background: #FFF3EE; }
.chat-card-contacts { background: #EFF7EF; }
.chat-contact { margin: 0; }
.chat-offer-line { margin: 0; }
.chat-scam { background: #FFE9E3; border: 1px solid #F3B7A6; border-radius: 12px; padding: 8px 12px; font-size: 14px; }
.chat-actions { display: flex; flex-wrap: wrap; gap: 8px; }
.chat-actions-row { margin: 8px 0; }
.chat-wait { color: var(--muted); margin: 0; font-size: 14px; }
.chat-compose { padding: 8px 0 16px; display: flex; flex-direction: column; gap: 8px; position: sticky; bottom: 0; background: linear-gradient(to top, var(--paper) 70%, transparent); }
.chat-form { display: flex; gap: 8px; align-items: flex-end; }
.chat-form textarea { flex: 1; font: inherit; padding: 10px 12px; border-radius: 14px; border: 1px solid var(--line); resize: none; }
.chat-hint { color: var(--muted); font-size: 12px; margin: 0; }
.chat-error { margin: 0; padding: 10px 12px; border-radius: 12px; background: #F7E7E7; border: 1px solid #E7B7B7; color: #8A1F1F; font-size: 14px; }
/* FF-15 — fogli dal basso della chat.
   - z-index 70: sopra la barra di navigazione (z-index 50) e sotto la
     fotocamera (100), così la barra non copre più il fondo del foglio.
   - `overscroll-behavior: contain` + `touch-action` separano lo scorrimento
     del foglio da quello della pagina sotto (bug iPhone: scorreva la pagina). */
.chat-overlay {
  position: fixed; inset: 0; background: rgba(11,11,10,0.5);
  display: flex; align-items: flex-end; justify-content: center;
  z-index: 70; overscroll-behavior: contain; touch-action: none;
}
.chat-panel {
  background: var(--paper); width: 100%; max-width: 480px;
  border-radius: var(--radius) var(--radius) 0 0;
  padding: 20px 20px calc(8px + env(safe-area-inset-bottom));
  display: flex; flex-direction: column; gap: 12px;
  max-height: min(90dvh, 90vh); overflow-y: auto;
  -webkit-overflow-scrolling: touch; overscroll-behavior: contain;
  touch-action: pan-y;
}
/* FF-15 — il pulsante principale resta sempre in fondo al foglio, sopra
   l'area sicura, mentre il resto scorre. */
.chat-panel .chat-actions {
  position: sticky; bottom: 0; z-index: 1;
  margin-top: auto; padding: 8px 0 calc(12px + env(safe-area-inset-bottom));
  background: var(--paper);
}
/* FF-15 — su desktop il foglio diventa una finestra centrata, comoda con
   mouse e tastiera; su telefono resta un foglio dal basso. */
@media (min-width: 700px) {
  .chat-overlay { align-items: center; padding: 24px; }
  .chat-panel { max-width: 520px; border-radius: var(--radius); max-height: 85vh; }
}
.chat-panel h2 { margin: 0; font-family: var(--font-title); }
.chat-panel label { display: flex; flex-direction: column; gap: 4px; font-size: 14px; }
.chat-panel input, .chat-panel select, .chat-panel textarea { font: inherit; padding: 8px 10px; border-radius: 10px; border: 1px solid var(--line); }
.chat-share { border: 1px solid var(--line); border-radius: 12px; padding: 10px; display: flex; flex-direction: column; gap: 8px; }
.chat-check { flex-direction: row !important; align-items: center; gap: 8px !important; }
.chat-price s { color: var(--muted); }
.chat-price { font-weight: 700; }

.chat-menu { position: fixed; top: 8px; right: 12px; z-index: 40; }
.chat-menu-list { display: flex; flex-direction: column; gap: 6px; margin-top: 6px; }
.admin-chat-log { display: flex; flex-direction: column; gap: 10px; }
.admin-chat-msg { border: 1px solid var(--line); border-radius: 10px; padding: 8px 10px; }
.admin-chat-msg p { margin: 4px 0 0; white-space: normal; }

/* ── FF-07: feed «Per te» a tutto schermo ──────────────────────────────── */
:root { --perte-tabbar: calc(96px + env(safe-area-inset-bottom)); }
.perte-page .app-main { padding: 0; height: calc(100dvh - var(--perte-tabbar)); min-height: 0; flex: 0 0 auto; overflow: hidden; }
.perte { position: relative; height: 100%; display: flex; flex-direction: column; background: #000; }

.perte-top {
  position: absolute; top: calc(6px + env(safe-area-inset-top)); left: 0; right: 0;
  z-index: 6; display: flex; align-items: center; justify-content: space-between;
  gap: 10px; padding: 0 14px;
}
.perte-tabs { display: flex; gap: 16px; }
.perte-tab { color: rgba(255, 255, 255, 0.62); text-decoration: none; font-family: var(--font-title); font-weight: 800; font-size: 18px; text-shadow: 0 1px 6px rgba(0,0,0,0.5); }
.perte-tab.is-active { color: #fff; }
.perte-filtri {
  display: inline-flex; align-items: center; gap: 6px; min-height: 38px; padding: 6px 14px;
  border: 0; border-radius: 999px; background: rgba(0, 0, 0, 0.42); color: #fff;
  font-size: 14px; font-weight: 600; cursor: pointer; backdrop-filter: blur(6px);
}

.feed { flex: 1; overflow-y: auto; overflow-x: hidden; scroll-snap-type: y mandatory; -webkit-overflow-scrolling: touch; scrollbar-width: none; }
.feed::-webkit-scrollbar { display: none; }
.feed-slide { position: relative; height: 100%; scroll-snap-align: start; scroll-snap-stop: always; overflow: hidden; background: #000; }

.feed-gallery { position: absolute; inset: 0; display: flex; overflow-x: auto; overflow-y: hidden; scroll-snap-type: x mandatory; -webkit-overflow-scrolling: touch; scrollbar-width: none; }
.feed-gallery::-webkit-scrollbar { display: none; }
.feed-photo { flex: 0 0 100%; width: 100%; height: 100%; margin: 0; scroll-snap-align: center; }
.feed-photo img { width: 100%; height: 100%; object-fit: cover; display: block; background: #0B0B0A; }
.feed-gallery-empty { align-items: center; justify-content: center; font-size: 64px; color: var(--muted); }

.feed-counter {
  position: absolute; top: calc(10px + env(safe-area-inset-top)); left: 50%; transform: translateX(-50%);
  z-index: 5; background: rgba(11, 11, 10, 0.6); color: #fff; border-radius: 999px;
  padding: 3px 12px; font-size: 13px;
}
.feed-scrim { position: absolute; left: 0; right: 0; bottom: 0; height: 42%; background: linear-gradient(to top, rgba(0,0,0,0.82), rgba(0,0,0,0)); pointer-events: none; }

.feed-bottom { position: absolute; left: 0; right: 84px; bottom: 0; z-index: 4; padding: 14px 16px calc(16px + env(safe-area-inset-bottom)); display: flex; flex-direction: column; gap: 3px; color: #fff; }
.feed-badge { align-self: flex-start; background: var(--accent); color: var(--ink); font-size: 12px; font-weight: 700; padding: 3px 10px; border-radius: 999px; margin-bottom: 4px; }
.feed-badge-reserved { background: #3B6EA5; color: #fff; }
.feed-open { display: flex; flex-direction: column; gap: 3px; background: none; border: 0; padding: 0; text-align: left; color: inherit; cursor: pointer; }
.feed-price { font-family: var(--font-title); font-size: 30px; font-weight: 800; line-height: 1.05; }
.feed-title { font-size: 17px; line-height: 1.25; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.feed-zone { margin: 0; font-size: 14px; color: #E8E6E0; }
.feed-delivery { margin: 0; font-size: 14px; color: #C9C6BE; }

.feed-rail { position: absolute; right: 8px; bottom: calc(20px + env(safe-area-inset-bottom)); z-index: 5; display: flex; flex-direction: column; gap: 14px; align-items: center; }
.rail-btn { display: flex; flex-direction: column; align-items: center; gap: 2px; background: none; border: 0; color: #fff; text-decoration: none; cursor: pointer; font-family: var(--font-body); }
.rail-ico { display: flex; align-items: center; justify-content: center; width: 46px; height: 46px; border-radius: 50%; background: rgba(0, 0, 0, 0.42); font-size: 22px; }
.rail-btn.is-saved .rail-ico { background: var(--accent); color: var(--ink); }
.rail-lbl { font-size: 11px; text-shadow: 0 1px 4px rgba(0, 0, 0, 0.6); }
.rail-btn:disabled { opacity: 0.5; }
.feed-heart { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); font-size: 96px; color: var(--accent); pointer-events: none; animation: feed-heart 0.7s ease-out; text-shadow: 0 4px 18px rgba(0,0,0,0.4); }
@keyframes feed-heart { 0% { opacity: 0; transform: translate(-50%, -50%) scale(0.4); } 30% { opacity: 1; transform: translate(-50%, -50%) scale(1.1); } 100% { opacity: 0; transform: translate(-50%, -50%) scale(1.4); } }
.reduce-motion .feed-heart { animation: none; opacity: 0; }

.feed-empty-state, .feed-end {
  min-height: 100%; display: flex; flex-direction: column; align-items: center; justify-content: center;
  text-align: center; gap: 14px; padding: 24px; color: #fff; background: var(--ink);
}
.feed-end { min-height: 100%; scroll-snap-align: start; scroll-snap-stop: always; }
.feed-empty-title { font-family: var(--font-title); font-size: 22px; font-weight: 800; margin: 0; }
.feed-empty-line { color: #B8B6B0; margin: 0; }
.feed-empty-actions { display: flex; flex-direction: column; gap: 10px; width: 100%; max-width: 300px; }
.feed-empty-actions .btn { width: 100%; }

/* Pannello filtri */
.feed-sheet { position: fixed; inset: 0; z-index: 120; }
.feed-sheet .sheet-backdrop { position: absolute; inset: 0; width: 100%; border: 0; background: rgba(11, 11, 10, 0.55); padding: 0; cursor: pointer; }
.feed-sheet .sheet-panel { position: absolute; left: 0; right: 0; bottom: 0; max-width: 480px; margin: 0 auto; background: #fff; color: var(--ink); border-radius: 18px 18px 0 0; padding: 0; display: flex; flex-direction: column; max-height: 90dvh; overflow: hidden; }
/* FF-09p — intestazione fissa, corpo scorrevole, pulsante fisso in fondo. */
.sheet-head { flex: 0 0 auto; display: flex; align-items: center; gap: 10px; padding: 14px 16px 12px; border-bottom: 1px solid var(--line); }
.sheet-head .sheet-title { flex: 1; text-align: center; }
.sheet-x { border: 0; background: transparent; color: var(--ink); width: 40px; height: 40px; display: inline-flex; align-items: center; justify-content: center; cursor: pointer; }
.sheet-reset { border: 0; background: transparent; color: var(--accent-text); font: inherit; font-weight: 600; cursor: pointer; min-width: 40px; }
.sheet-body { flex: 1 1 auto; overflow-y: auto; -webkit-overflow-scrolling: touch; display: flex; flex-direction: column; gap: 14px; padding: 16px; }
.sheet-foot { flex: 0 0 auto; padding: 12px 16px calc(12px + env(safe-area-inset-bottom)); border-top: 1px solid var(--line); background: #fff; }
.sheet-title { margin: 0; font-family: var(--font-title); font-size: 20px; }
.filter-group { border: 0; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.filter-group legend { font-weight: 700; font-size: 15px; padding: 0; }
.filter-radios { display: flex; flex-wrap: wrap; gap: 8px; }
.filter-radio { display: inline-flex; align-items: center; gap: 6px; border: 1px solid var(--line); border-radius: 999px; padding: 7px 12px; font-size: 14px; }
.filter-checks { display: flex; flex-wrap: wrap; gap: 8px; }
.filter-check { display: inline-flex; align-items: center; gap: 6px; border: 1px solid var(--line); border-radius: 999px; padding: 7px 12px; font-size: 14px; }
.filter-check input, .filter-radio input { width: 18px; height: 18px; }
.filter-price { display: inline-flex; align-items: center; gap: 8px; font-size: 15px; }
.filter-price input { width: 110px; min-height: 42px; border: 1px solid var(--line); border-radius: 12px; padding: 8px 12px; font: inherit; }
.filter-actions { display: flex; flex-direction: column; gap: 8px; }

/* FF-09p — distanza e categorie a pillole, prezzo «da – a», interruttore. */
.filter-pills { display: flex; gap: 8px; overflow-x: auto; -webkit-overflow-scrolling: touch; padding-bottom: 2px; }
.filter-pill { flex: 0 0 auto; }
.filter-pill input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.filter-pill span { display: inline-flex; align-items: center; border: 1px solid var(--line); border-radius: 999px; padding: 8px 14px; font-size: 14px; white-space: nowrap; cursor: pointer; }
.filter-pill input:checked + span { background: var(--ink); color: #fff; border-color: var(--ink); }
.filter-pill input:focus-visible + span { outline: 3px solid var(--accent); outline-offset: 2px; }
.cat-pills { display: flex; flex-wrap: wrap; gap: 8px; }
.cat-pill { border: 1px solid var(--line); background: #fff; color: var(--ink); border-radius: 999px; padding: 8px 14px; font: inherit; font-size: 14px; cursor: pointer; }
.cat-pill[aria-expanded="true"] { background: var(--ink); color: #fff; border-color: var(--ink); }
.cat-groups { margin-top: 10px; }
.cat-group { display: flex; flex-wrap: wrap; gap: 6px; }
.cat-group[hidden] { display: none; }
.filter-price-range { display: flex; align-items: center; gap: 10px; }
.filter-range-dash { color: var(--muted); }
.filter-toggle { display: inline-flex; align-items: center; gap: 10px; font-size: 15px; cursor: pointer; }
.filter-toggle input { position: absolute; opacity: 0; width: 1px; height: 1px; }
.filter-toggle-track { position: relative; width: 46px; height: 28px; border-radius: 999px; background: var(--line); transition: background .15s ease; }
.filter-toggle-track::after { content: ""; position: absolute; top: 3px; left: 3px; width: 22px; height: 22px; border-radius: 50%; background: #fff; transition: transform .15s ease; box-shadow: 0 1px 3px rgba(0,0,0,.25); }
.filter-toggle input:checked + .filter-toggle-track { background: var(--accent); }
.filter-toggle input:checked + .filter-toggle-track::after { transform: translateX(18px); }

/* Scheda «Salvati» */
.saved-panel { flex: 1; overflow-y: auto; background: var(--paper); padding: 62px 12px 12px; }
/* 1112 — minmax(0, 1fr): le due colonne restano sempre uguali e non si
   allargano per colpa del titolo o della foto (era 1fr, cioè auto/min-content).
   Le misure della card seguono .seo-card del catalogo «Per te». */
.saved-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
.saved-card { display: flex; flex-direction: column; gap: 6px; min-width: 0; text-decoration: none; color: inherit; }
.saved-thumb { position: relative; width: 100%; aspect-ratio: 1; border-radius: 12px; overflow: hidden; background: #E4E1DA; display: flex; align-items: center; justify-content: center; }
.saved-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.saved-thumb-empty { font-size: 40px; color: var(--muted); }
.saved-state { position: absolute; left: 6px; bottom: 6px; background: rgba(11, 11, 10, 0.72); color: #fff; font-size: 12px; padding: 2px 8px; border-radius: 999px; }
.saved-card.is-dormant { opacity: 0.55; }
.saved-price { font-weight: 700; }
.saved-title { font-size: 14px; line-height: 1.25; color: var(--muted); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; overflow-wrap: anywhere; }

/* ── FF-06b: categorie, attributi e oggetti vietati ─────────────────────── */
.ffcat-line { display: flex; align-items: center; justify-content: space-between; gap: 10px; border: 1px solid var(--line); border-radius: 12px; padding: 10px 12px; }
.ffcat-value { font-weight: 600; }
.ffcat-attrs { display: flex; flex-direction: column; gap: 8px; margin-top: 10px; }
.ffcat-attr { display: flex; flex-direction: column; gap: 4px; }
.ffcat-overlay { position: fixed; inset: 0; z-index: 130; background: rgba(11, 11, 10, 0.55); display: flex; align-items: flex-end; justify-content: center; }
.ffcat-panel { width: 100%; max-width: 480px; background: var(--paper); color: var(--ink); border-radius: 18px 18px 0 0; padding: 16px 16px calc(16px + env(safe-area-inset-bottom)); display: flex; flex-direction: column; gap: 10px; max-height: 88dvh; overflow-y: auto; }
.ffcat-title { margin: 0; font-family: var(--font-title); font-size: 20px; }
.ffcat-list { display: flex; flex-direction: column; gap: 12px; }
.ffcat-group-title { margin: 0 0 4px; font-weight: 700; font-size: 15px; }
.ffcat-item { width: 100%; text-align: left; border: 1px solid var(--line); border-radius: 10px; background: #fff; color: var(--ink); padding: 10px 12px; font-size: 15px; cursor: pointer; margin-bottom: 6px; }
.ffcat-item.is-active { outline: 3px solid var(--accent); outline-offset: -3px; }

.filter-cats { display: flex; flex-direction: column; gap: 10px; }
.filter-cat { border: 1px solid var(--line); border-radius: 12px; padding: 8px 10px; }
.filter-cat-main { font-weight: 700; }
.filter-subcats { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.filter-subcats .filter-check { font-size: 13px; padding: 5px 10px; }
.market-category { margin: 0; font-size: 14px; color: var(--accent-text); }

/* FF-05c — pagina /admin/credenziali */
.credenziali-intro { max-width: 70ch; }
.card-meta { color: var(--muted); font-size: 14px; }
.card strong.on { color: #1E783C; }
.card strong.off { color: var(--accent-text); }
.credenziali-actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 10px; }
.secret-field { display: flex; align-items: center; gap: 8px; }
.secret-field input { flex: 1; min-width: 0; }
.secret-field .btn { flex: 0 0 auto; }
.credenziali-ok { margin-top: 10px; font-weight: 600; }
.credenziali-ok a { color: var(--accent-text); }

/* FF-09c — zona e consegna: riepilogo con «Cambia», mai un campo obbligatorio. */
.zone-line-btn, .delivery-line {
  display: block; width: 100%; text-align: left;
  background: #fff; border: 1px solid var(--line); border-radius: 12px;
  padding: 12px 14px; font-size: 16px; font-weight: 600;
  color: var(--ink); cursor: pointer;
}
.zone-line-btn:active, .delivery-line:active { background: #EFEDE8; }
.delivery-line { margin-bottom: 10px; }
.zone-approx { margin: 4px 0 0; font-size: 13px; color: var(--muted, #8A8577); }
.delivery-choice { margin-bottom: 10px; }

/* ── FF-09d: pagina di pubblicazione ripulita ─────────────────────────── */
.pub-rows { display: flex; flex-direction: column; gap: 10px; margin-top: 18px; }
.pub-row {
  display: flex; align-items: center; gap: 12px; width: 100%; text-align: left;
  background: #fff; border: 1px solid var(--line); border-radius: 16px;
  padding: 14px; cursor: pointer;
}
.pub-row:active { background: #EFEDE8; }
.pub-row-ico { font-size: 20px; width: 26px; flex: 0 0 auto; text-align: center; }
.pub-row-body { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.pub-row-label { font-size: 12px; color: var(--muted); text-transform: uppercase; letter-spacing: .04em; }
.pub-row-value { font-size: 16px; font-weight: 600; color: var(--ink); }
.pub-row-suggest { font-size: 15px; font-weight: 600; color: var(--accent-text); }
.pub-row-reason { font-size: 15px; color: var(--muted); }
.pub-row-approx { font-size: 12px; color: #B26A00; }
.pub-row-change { font-size: 13px; font-weight: 700; color: var(--accent-text); flex: 0 0 auto; }
/* ZONA-1 — conferma gentile del comune quando arriva da IP o dal profilo. */
.pub-row.is-uncertain { border-color: rgba(255, 90, 54, 0.55); background: #FFF7F2; }
.pub-row.is-uncertain .pub-row-change { color: var(--accent); }
.pub-row.is-attention { animation: zone-attention 1.8s ease both; }
@keyframes zone-attention {
  0%, 100% { box-shadow: 0 0 0 0 rgba(255, 90, 54, 0); }
  25%, 70% { box-shadow: 0 0 0 4px rgba(255, 90, 54, 0.26); }
}
.zone-confirm {
  display: flex; flex-direction: column; gap: 10px;
  border: 1px solid rgba(255, 90, 54, 0.35); background: #FFF7F2;
  border-radius: 16px; padding: 12px 14px;
  scroll-margin-top: 96px;
}
.zone-confirm-q { margin: 0; font-size: 16px; font-weight: 600; color: var(--ink); }
.zone-confirm-actions { display: flex; gap: 8px; flex-wrap: wrap; }
.zone-confirm-actions .btn { flex: 1 1 auto; }
.zone-confirm-note { margin: 0; font-size: 14px; font-weight: 600; color: #B26A00; }
.link-text {
  display: inline-block; background: none; border: 0; padding: 8px 0;
  color: var(--accent-text); font-size: 15px; font-weight: 600;
  text-decoration: underline; cursor: pointer;
}
.pub-actions { display: flex; flex-direction: column; align-items: stretch; gap: 6px; margin-top: 18px; }
.pub-sheet { position: fixed; inset: 0; z-index: 320; display: flex; align-items: flex-end; justify-content: center; }
.pub-sheet[hidden] { display: none; }
.pub-sheet-backdrop { position: absolute; inset: 0; background: rgba(11, 11, 10, 0.45); border: 0; }
.pub-sheet-panel {
  position: relative; width: 100%; max-width: 480px;
  background: var(--paper); color: var(--ink);
  border-radius: 22px 22px 0 0;
  padding: 20px 20px calc(20px + env(safe-area-inset-bottom));
  box-shadow: 0 -12px 44px rgba(0, 0, 0, 0.28);
  max-height: 88vh; overflow-y: auto;
  display: flex; flex-direction: column; gap: 10px;
  animation: ai-sheet-up 0.28s ease both;
}
.pub-sheet-close,
.ffcat-close {
  position: sticky;
  top: 0;
  align-self: flex-end;
  z-index: 3;
  width: 44px;
  height: 44px;
  margin: -6px -6px 0 0;
  border: 0;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.94);
  color: var(--ink);
  font-size: 28px;
  line-height: 1;
  cursor: pointer;
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.12);
}
@media (prefers-reduced-motion: reduce) { .pub-sheet-panel { animation: none; } }
@media (max-width: 759px) {
  /* FF-09n — fondo pieno e appoggiata esattamente sopra la barra di
     navigazione; spazio in fondo perché ogni riga (Prezzo, Categoria e
     «Le tue foto») possa passare sopra la zona d'azione. */
  /* Zona d'azione (~124 px) + barra (95 px) + 16 px: la .app-main ne copre
     già 96, quindi qui restano ~139 px; un po' di margine per la nota. */
  .page-boizza { padding-bottom: 160px; }
  .pub-actions {
    position: fixed; left: 0; right: 0;
    bottom: var(--tabbar-h);
    z-index: 70; max-width: 480px; margin: 0 auto;
    padding: 14px 20px 12px;
    background: var(--paper);
  }
  body.theme-dark .pub-actions { background: var(--ink); }
  /* PROVA-ANTEPRIMA-1 — la bozza è un percorso chiuso: niente barra in basso,
     così nessun tab può aprire il foglio d'accesso prima di «Salva»/«Pubblica». */
  body.bozza-page.guest-page .tabbar { display: none; }
  body.bozza-page.guest-page .app-main { padding-bottom: calc(40px + env(safe-area-inset-bottom)); }
  body.bozza-page.guest-page .pub-actions { bottom: 0; }
  body.has-cookie-banner.bozza-page.guest-page .pub-actions { bottom: calc(var(--cookie-banner-h, 0px) + env(safe-area-inset-bottom)); }
  body.bozza-page.guest-page #ai-save-prova,
  body.bozza-page.guest-page #ai-publish { min-height: 60px; font-size: 18px; }
}

/* ── FF-09f: leggibilità — scala unica, campi comodi, fotocamera marcata ── */
body { font-size: var(--fs-body); line-height: var(--lh-body); }

/* Testi secondari e note: mai sotto 15 px; note legali 13 px. */
.ai-sub, .hint, .access-sub, .home-open-sub, .home-open-login,
.listing-meta, .ad-date, .ad-zone, .ad-condition, .feed-zone, .feed-delivery,
.review-warn, .filter-radio, .filter-check, .filter-price, .cam-diag,
.ship-help, .detail-counter, .ai-instruction, .zone-line, .publish-note,
.perte-filtri, .entry-text, .esempio-nota { font-size: var(--fs-secondary); }
.label-note, .bozza-rail-title, .access-terms, .legal, .public-footer { font-size: var(--fs-legal); }
.ai-label { font-size: var(--fs-label); color: var(--muted); font-weight: 600; }

/* Titoli. */
.ai-lead, .ai-confirm-ask, .sheet-title { font-size: 20px; font-weight: 700; }
/* PROVA-ANTEPRIMA-1 — «Salta» chiaro su ogni domanda. */
.q-skip {
  float: right; margin-top: -30px; padding: 4px 8px; border: 0; background: none;
  color: var(--accent-text); font: inherit; font-size: 14px; font-weight: 700;
  text-decoration: underline; cursor: pointer;
}
body.theme-dark .q-skip { color: #FFB09C; }
/* DOMANDE-AI-1 — «Salta» resta sulla riga del titolo, senza coprirlo. */
#ai-questions .ai-q { position: relative; padding-right: 46px; }
#ai-questions .q-skip { position: absolute; top: 19px; right: 0; float: none; margin: 0; padding: 4px 2px; }
#ai-questions .ai-q legend { padding-right: 0; }
.page-title { font-size: var(--fs-page); }
.bozza-step { font-size: var(--fs-page); }
.ad-title { font-size: 24px; font-weight: 800; }
.home-latest-title { font-size: 20px; }
.feed-title { font-size: 18px; font-weight: 600; }
.feed-zone, .feed-delivery { font-weight: 600; }
.rail-lbl { font-size: 14px; font-weight: 600; }

/* Pulsanti. */
.btn { font-size: var(--fs-btn); font-weight: 700; min-height: 48px; }
.btn-small { font-size: var(--fs-secondary); font-weight: 700; min-height: 44px; }
.link-text { font-size: var(--fs-btn); font-weight: 700; }

/* Campi: alti almeno 52 px e a 17 px, così l'iPhone non ingrandisce. */
.ai-input, .form input, .form textarea, .form select,
input[type="text"], input[type="email"], input[type="password"],
input[type="number"], input[type="search"], textarea, select,
.filter-price input {
  min-height: var(--field-h);
  font-size: var(--fs-label);
  border-radius: 12px;
  border: 1px solid var(--line);
}
.ai-input:focus, .form input:focus, .form textarea:focus, .form select:focus,
input:focus, textarea:focus, select:focus {
  outline: 2px solid var(--accent);
  outline-offset: 1px;
  border-color: var(--accent);
}

/* Domande: titolo 20/700 con spazio, opzioni come righe intere toccabili. */
#ai-questions .ai-q, #ai-questions fieldset.ai-q { margin: 0 0 18px; }
#ai-questions .ai-q legend {
  font-family: var(--font-title);
  font-size: 20px; font-weight: 700;
  padding: 18px 0 10px;
}
.ai-q label {
  display: flex; align-items: center; gap: 12px;
  min-height: 52px; padding: 6px 14px;
  font-size: 17px; font-weight: 500;
  border: 1px solid var(--line); border-radius: 12px; background: #fff;
}
.ai-q label:has(input:checked) {
  border-color: var(--accent);
  background: rgba(255, 90, 54, 0.10);
}
.ai-q input[type="radio"], .ai-q input[type="checkbox"] {
  width: 26px; height: 26px; flex: 0 0 auto; accent-color: var(--accent);
}
.ai-q { gap: 8px; }

/* Costo di spedizione: campo grande con «€» dentro, gratuita su riga sua. */
.ship-box { border: 1px solid var(--line); background: rgba(20, 20, 19, 0.03); }
.ship-field { position: relative; display: block; }
.ship-field input { width: 100%; padding-right: 40px; }
.ship-euro { position: absolute; right: 16px; top: 50%; transform: translateY(-50%); font-size: var(--fs-label); font-weight: 700; color: var(--muted); pointer-events: none; }
.ship-free-row {
  display: flex; align-items: center; gap: 12px;
  min-height: 52px; padding: 6px 14px;
  font-size: 17px; font-weight: 500;
  border: 1px solid var(--line); border-radius: 12px; background: #fff;
}
.ship-free-row input { width: 26px; height: 26px; accent-color: var(--accent); }

/* Fotocamera: scatto grande, pillole leggibili su qualsiasi foto. */
.cam-shutter {
  width: 86px; height: 86px; background: #fff;
  border: 6px solid rgba(255, 255, 255, 0.95);
  box-shadow: 0 0 0 4px rgba(0, 0, 0, 0.45);
}
.cam-shutter:active { transform: scale(0.9); }
.cam-gallery, .cam-close, .cam-done, .cam-fallback-btn {
  min-height: 52px; font-size: 17px; font-weight: 700;
  background: rgba(0, 0, 0, 0.72); color: #fff;
}
.cam-gallery, .cam-fallback-btn { min-width: 110px; }
.cam-fallback-btn { background: var(--accent); color: var(--ink); }
.cam-done { background: var(--accent); color: var(--ink); }
.cam-close {
  width: 52px; height: 52px; min-height: 52px; padding: 0;
  display: inline-flex; align-items: center; justify-content: center; font-size: 24px;
}
.cam-hint, .cam-counter, .cam-limit {
  font-size: 17px; font-weight: 700;
  background: rgba(0, 0, 0, 0.72); color: #fff;
  border-radius: 999px; padding: 8px 16px;
  text-shadow: none;
}
.cam-hint { left: 12px; right: 12px; padding: 10px 16px; }
.cam-counter, .cam-limit { width: max-content; max-width: 88%; margin: 0 auto; }
.cam-limit { background: var(--accent); color: var(--ink); font-weight: 700; }
.cam-strip .photo-tile { width: 56px; height: 56px; }
.tile-state { font-size: 12px; }
.tile-retry { font-size: 13px; }

/* Feed «Per te»: testi più marcati. */
.perte-tab { color: rgba(255, 255, 255, 0.82); }
.perte-tab.is-active { color: #fff; }
.perte-filtri { font-weight: 700; min-height: 44px; }
.feed-price { font-size: 32px; }
.feed-badge, .feed-counter { font-size: 13px; font-weight: 700; }

/* I miei, annuncio, chat, profilo, accedi. */
.listing-status { font-size: 13px; }
.listing-meta { color: var(--muted); }
.listing-delete, .listing-delete span { font-size: 15px; font-weight: 700; }
.access-method, .access-methods .card-title { font-size: 17px; }
.profilo .label, p.label { font-size: var(--fs-secondary); }
.ad-condition, .ad-zone { font-size: var(--fs-secondary); }
.ad-date { margin-bottom: 14px; }

/* Tema scuro: secondario abbastanza chiaro. */
body.theme-dark .hint, body.theme-dark .ai-sub, body.theme-dark .cam-counter,
body.theme-dark .home-open-sub, body.theme-dark .home-open-login,
body.theme-dark .home-latest-zone, body.theme-dark .detail-counter,
body.theme-dark .ad-zone, body.theme-dark .ad-condition, body.theme-dark .ad-date,
body.theme-dark .label-note, body.theme-dark .bozza-rail-title,
body.theme-dark .entry-text, body.theme-dark .esempio-nota { color: #CFCDC7; }
/* Etichette minime dichiarate (badge): barra in basso e stato miniatura. */
.tab-lbl { font-size: 12px; font-weight: 600; }
/* FF-09f — ritocchi mirati (specificità sufficiente). */
.home-open-steps li, .home-open-steps li span, .home-open-steps strong { font-size: 15px; }
form label, .form label, .access-email-form label, .profilo label { font-size: var(--fs-label); font-weight: 600; }
.vendi-step { font-size: 15px; }
.esempio figcaption { font-size: 15px; }
p.label-note, p.bozza-rail-title { font-size: var(--fs-secondary); }
.ai-recognized-label { font-size: 15px; }
.pub-row-label { font-size: 13px; }
.pub-row-change { font-size: 15px; }
.perte-tab { display: inline-flex; align-items: center; min-height: 44px; }
.perte-filtri { min-height: 44px; }
.back-link a { display: inline-flex; align-items: center; min-height: 44px; }
.link-text { min-height: 44px; padding: 10px 0; }
.ad-actions .btn { min-height: 48px; }
/* FF-09f — ultimi ritocchi: etichette minime dichiarate e link di ritorno. */
.bozza-rail-photo figcaption { font-size: 13px; font-weight: 700; }
.card .label { font-size: 13px; }
.home-open-login a { display: inline-flex; align-items: center; min-height: 44px; }
.ad-back { min-height: 44px; }

/* ── FF-09h: passo 2 di /vendi — infografica dell'etichetta ────────── */
.etichetta-titolo { font-size: 28px; font-weight: 800; }
.etichetta-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin: 4px 0 2px; }
.etichetta-esempio { margin: 0; display: flex; flex-direction: column; align-items: center; gap: 8px; }
.etichetta-vetro { position: relative; width: 100%; aspect-ratio: 1 / 1; }
.etichetta-vetro > svg { width: 100%; height: 100%; display: block; border-radius: 12px; }
.etichetta-esempio figcaption { font-size: 17px; font-weight: 700; line-height: 1.2; text-align: center; }
.etichetta-mirino { position: absolute; inset: 5px; pointer-events: none; opacity: 0.35; animation: etichettaMirino 6s infinite; }
.etichetta-mirino .m { position: absolute; width: 20px; height: 20px; border: 3px solid var(--accent); }
.etichetta-mirino .tl { top: 0; left: 0; border-right: 0; border-bottom: 0; border-top-left-radius: 6px; }
.etichetta-mirino .tr { top: 0; right: 0; border-left: 0; border-bottom: 0; border-top-right-radius: 6px; }
.etichetta-mirino .bl { bottom: 0; left: 0; border-right: 0; border-top: 0; border-bottom-left-radius: 6px; }
.etichetta-mirino .br { bottom: 0; right: 0; border-left: 0; border-top: 0; border-bottom-right-radius: 6px; }
.etichetta-esempio:nth-child(1) .etichetta-mirino { animation-delay: 0s; }
.etichetta-esempio:nth-child(2) .etichetta-mirino { animation-delay: 2s; }
.etichetta-esempio:nth-child(3) .etichetta-mirino { animation-delay: 4s; }
@keyframes etichettaMirino {
  0% { transform: scale(1); opacity: 0.3; }
  6% { transform: scale(1); opacity: 1; }
  22% { transform: scale(0.5); opacity: 1; }
  30% { transform: scale(1); opacity: 0.3; }
  100% { transform: scale(1); opacity: 0.3; }
}
.etichetta-nota { display: flex; align-items: center; justify-content: center; gap: 8px; font-size: 17px; font-weight: 500; margin: 2px 0 0; text-align: center; }
.etichetta-occhio { display: inline-flex; align-items: center; flex-shrink: 0; }
body.theme-dark .etichetta-nota { color: #E6E4DF; }
.etichetta-aiuto { align-self: center; width: 44px; height: 44px; border-radius: 50%; border: 1px solid var(--line); background: transparent; color: inherit; font-size: 20px; font-weight: 700; cursor: pointer; }
body.theme-dark .etichetta-aiuto { border-color: rgba(255, 255, 255, 0.25); }
.etichetta-azioni { flex-direction: column; margin-top: auto; }
/* Sul fondo scuro il pulsante secondario deve restare «contornato», non solo testo. */
body.theme-dark .etichetta-azioni .btn-ghost { border-color: rgba(255, 255, 255, 0.32); }
.sheet-text { font-size: 17px; line-height: 1.45; color: var(--ink); margin: 0; }
/* «Riduci movimento»: il mirino resta fermo, ben visibile. */
.reduce-motion .etichetta-mirino { animation: none; opacity: 1; }
@media (prefers-reduced-motion: reduce) {
  .etichetta-mirino { animation: none; opacity: 1; }
}
/* In fotocamera per l'etichetta: mirino più stretto e rettangolare. */
.cam.cam-label .cam-frame { inset: 30% 12% 46% 12%; }
.cam.cam-label .cam-frame .c { width: 34px; height: 34px; border-width: 4px; }

/* ── FF-09i: home — claim sotto il titolo e «Scorri per vendere» ────── */
/* Claim: chiaro e pieno (non grigio), 21 px, 14 px sotto il titolo. */
.home-open-sub { font-size: 20px; font-weight: 600; line-height: 1.32; color: var(--ink); margin: 14px 0 0; }
body.theme-dark .home-open-sub { color: var(--paper); }
.home-open-sub-claim { font-weight: 800; }

/* Cursore «Scorri per vendere»: pista a pillola, pallino arancione. */
.sell-slider { width: 100%; }
.sell-slider-track {
  position: relative; height: 64px; border-radius: 999px;
  background: #1F1F1D; border: 1px solid rgba(255, 255, 255, 0.14);
  overflow: hidden; touch-action: pan-y;
  user-select: none; -webkit-user-select: none;
}
.sell-slider-shine {
  position: absolute; top: 0; bottom: 0; width: 42%; left: -42%;
  background: linear-gradient(100deg, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 0.18) 50%, rgba(255, 255, 255, 0) 100%);
  pointer-events: none;
  animation: sellShine 2.6s ease-in-out infinite;
}
@keyframes sellShine { 0% { transform: translateX(0); } 60%, 100% { transform: translateX(360%); } }
.sell-slider-text {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
  padding-left: 56px; font-size: 17px; font-weight: 700; color: var(--paper);
  pointer-events: none; white-space: nowrap;
}
.sell-slider-arrows { margin-left: 8px; letter-spacing: 1px; color: var(--accent); }
.sell-slider-knob {
  position: absolute; left: 4px; top: 4px; width: 56px; height: 56px; border-radius: 50%;
  border: 0; padding: 0; background: var(--accent); color: var(--ink);
  display: flex; align-items: center; justify-content: center; cursor: grab;
  touch-action: pan-y; will-change: transform;
  transition: transform 0.28s cubic-bezier(0.34, 1.56, 0.64, 1);
}
.sell-slider-knob svg { width: 28px; height: 28px; }
.sell-slider-track.dragging .sell-slider-knob { cursor: grabbing; transition: none; }
.sell-slider-knob:focus-visible { outline: 3px solid var(--paper); outline-offset: 2px; }
.sell-slider.done .sell-slider-knob { transition: transform 0.18s ease-out; }

/* ── FF-09o: icone disegnate, «I miei» compatto, stato vuoto del proprietario,
   descrizione intera, spazi in fondo. ─────────────────────────────────── */
.ff-ico { display: block; }
.tab-ico { display: flex; align-items: center; justify-content: center; }
.perte-filtri .ff-ico, .rail-ico .ff-ico, .pub-row-ico .ff-ico, .stat .ff-ico { display: inline-block; vertical-align: middle; }
.pub-row-ico { display: flex; align-items: center; justify-content: center; }
.ad-delivery .ff-ico { stroke-width: 1.9; }

/* Stato vuoto del proprietario: spiega che gli annunci in zona sono i suoi. */
.feed-owner-state { justify-content: flex-start; padding-top: 96px; }
.owner-thumbs { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; max-width: 340px; }
.owner-thumb { display: flex; flex-direction: column; align-items: center; gap: 4px; text-decoration: none; color: #fff; width: 96px; }
.owner-thumb-img { width: 96px; height: 96px; border-radius: 14px; overflow: hidden; background: #262624; display: flex; align-items: center; justify-content: center; }
.owner-thumb-img img { width: 100%; height: 100%; object-fit: cover; }
.owner-thumb-empty { color: #B8B6B0; }
.owner-thumb-price { font-size: 14px; font-weight: 700; }

/* «I miei → Pubblicati»: statistiche con icone e azioni compatte. */
.listing-stats { display: inline-flex; align-items: center; gap: 12px; color: var(--muted); }
.listing-stats .stat { display: inline-flex; align-items: center; gap: 4px; }
.listing-stats .ff-ico { width: 16px; height: 16px; }
.listing-title { display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; white-space: normal; overflow: hidden; }
.listing-menu { position: relative; }
.listing-menu-btn { padding: 6px 10px; }
.listing-menu-btn::-webkit-details-marker { display: none; }
.listing-menu-btn { list-style: none; }
.listing-menu-list { position: absolute; left: 0; right: auto; top: calc(100% + 6px); z-index: 80; min-width: 210px; max-width: calc(100vw - 16px); box-sizing: border-box; display: flex; flex-direction: column; background: var(--ink); border-radius: 14px; overflow: hidden; box-shadow: 0 12px 30px rgba(0, 0, 0, 0.28); }
.listing-menu-item { display: block; width: 100%; text-align: left; min-height: 48px; padding: 12px 16px; background: transparent; border: 0; border-bottom: 1px solid rgba(255, 255, 255, 0.12); color: var(--paper); font: inherit; font-size: 16px; text-decoration: none; cursor: pointer; }
.listing-menu-item:last-child { border-bottom: 0; }
.listing-menu-item.danger { color: #FF8A70; }

/* Descrizione alla pubblicazione: cresce col testo, niente scorrimento.
   Minimo quattro righe, nessun tetto massimo. Il JavaScript fa da ripiego
   dove `field-sizing` non c'è (Safari/iOS) e quando il campo è nascosto. */
#ai-description, #mod-description { field-sizing: content; min-height: calc(4 * 1.45em); max-height: none; resize: none; overflow: hidden; }

/* «Riduci movimento»: niente luccichio né rimbalzo, il gesto resta uguale. */
.reduce-motion .sell-slider-shine { animation: none; opacity: 0; }
.reduce-motion .sell-slider-knob { transition: none; }
@media (prefers-reduced-motion: reduce) {
  .sell-slider-shine { animation: none; opacity: 0; }
  .sell-slider-knob { transition: none; }
}

/* ── FF-28: banner dei cookie, preferenze e pixel di Meta ─────────────────
   Compare solo con l'interruttore ff_meta_pixel acceso. «Accetta» e «Rifiuta»
   hanno la stessa forma e lo stesso colore; la X vale come rifiuto.
   1339 — versione compatta: testo su una o due righe e scelte affiancate in
   una sola fila. Il banner resta in fondo, sopra la barra di navigazione. */
.cookie-banner {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 110;
  max-width: 480px; margin: 0 auto;
  display: flex; flex-direction: column; gap: 4px;
  background: #fff; color: var(--ink);
  border-top: 1px solid var(--line);
  box-shadow: 0 -8px 24px rgba(0, 0, 0, 0.14);
  padding: 7px 10px calc(6px + env(safe-area-inset-bottom));
}
body:has(.tabbar) .cookie-banner { bottom: var(--tabbar-h); padding-bottom: 6px; }
.cookie-banner[hidden] { display: none !important; }
.cookie-banner-text { margin: 0; padding-right: 26px; font-size: 12px; line-height: 1.3; }
.cookie-banner-actions { display: flex; align-items: center; gap: 5px; }
.cookie-banner-actions .cookie-choice {
  flex: 1; min-height: 42px; padding: 5px 8px;
  background: var(--ink); color: var(--paper); border-color: var(--ink);
  font-size: 13.5px;
}
.cookie-banner-link {
  position: relative; display: inline-flex; align-items: center;
  min-height: 42px; padding: 0 2px;
  border: 0; background: none; color: var(--accent-text);
  font: inherit; font-size: 12px; font-weight: 600;
  text-decoration: underline; cursor: pointer; white-space: nowrap;
}
/* Il tocco resta comodo anche se la scritta è piccola. */
.cookie-banner-link::after { content: ''; position: absolute; inset: 2px -3px; }
.cookie-banner-x {
  position: absolute; top: 1px; right: 1px;
  width: 30px; height: 30px; border: 0; background: transparent;
  color: var(--ink); font-size: 21px; line-height: 1; cursor: pointer;
}
@media (min-width: 380px) {
  .cookie-banner-text { font-size: 13px; }
}
.cookie-pref { display: flex; flex-direction: column; gap: 2px; padding: 10px 0; border-bottom: 1px solid var(--line); }
.cookie-pref-toggle { flex-direction: row; align-items: center; justify-content: space-between; gap: 12px; }
.cookie-pref-toggle input { width: 22px; height: 22px; }
.cookie-pref-note { color: var(--muted); font-size: 13px; margin: 0; }
.linklike { background: none; border: 0; color: var(--accent-text); font: inherit; cursor: pointer; padding: 0; text-decoration: underline; }

/* 1339 — lo spazio in fondo vale l'altezza VERA del banner, misurata da
   meta.js in --cookie-banner-h. Così nessun contenuto finisce sotto. */
body.has-cookie-banner .app-main { padding-bottom: calc(var(--cookie-banner-h, 0px) + 32px); }
body.has-cookie-banner:has(.tabbar) .app-main { padding-bottom: calc(var(--tabbar-h) + var(--cookie-banner-h, 0px) + 24px); }
body.has-cookie-banner.vendi-page .app-main { padding-bottom: calc(var(--cookie-banner-h, 0px) + 24px + env(safe-area-inset-bottom)); }
body.has-cookie-banner .home-sticky-actions { bottom: calc(var(--cookie-banner-h, 0px) + 16px); }
body.has-cookie-banner .pub-actions { bottom: calc(var(--tabbar-h) + var(--cookie-banner-h, 0px) + 12px); }
body.has-cookie-banner.bozza-page.guest-page .pub-actions { bottom: calc(var(--cookie-banner-h, 0px) + env(safe-area-inset-bottom)); }

/* 1339 — sulla home il pulsante «Vendi» sta appena sotto la piega: con il
   banner aperto si riduce lo spazio sopra, così resta tutto sopra il banner. */
@media (max-width: 759px) {
  body.has-cookie-banner.home-open .home-open-actions { padding-top: 10px; }
}

/* 1339 — su /vendi (passo 1 vecchio) il bottone è in fondo al contenuto: sui
   telefoni bassi la barra d'azione si appoggia al banner con uno sfondo pieno,
   invece di finirci sotto. Solo dove serve davvero (375×667 e simili): sugli
   schermi alti il bottone ci sta già da solo. */
@media (min-width: 340px) and (max-width: 759px) and (max-height: 760px) {
  body.has-cookie-banner.vendi-page #step-1 > .step-actions {
    position: sticky; bottom: calc(var(--cookie-banner-h, 0px) + 6px);
    z-index: 100; margin: 0 -20px; padding: 8px 20px 10px;
    background: var(--ink);
    border-top: 1px solid rgba(255, 255, 255, 0.08);
  }
  body.has-cookie-banner.vendi-page #step-1 > .step-actions .btn {
    box-shadow: 0 6px 18px rgba(0, 0, 0, 0.22);
  }
}

/* 1339 — sul telefono più stretto (320 px) il passo 1 di /prova si compatta
   quel tanto che basta perché il bottone resti sopra il banner, senza toccare
   testi né immagini. */
@media (max-width: 340px) {
  .vendi.vendi-prova { gap: 12px; }
  .p1-wrap { gap: 4px; }
  .p1-head .step-title { font-size: 24px; }
  .p1-head .step-lead { font-size: 13.5px; }
  .p1-example { padding: 8px; }
}

/* FF-28 — su Vendi la barra di navigazione è nascosta: il banner sta in fondo
   e il contenuto ha spazio sufficiente per non coprire «Iniziamo». */
body.vendi-page .cookie-banner { bottom: 0; }

/* 1447 — sul risultato AI di un ospite anche la barra di navigazione è
   nascosta (bozza-page.guest-page). La regola `body:has(.tabbar)` la conta
   lo stesso e alzava il banner di --tabbar-h, mentre la zona d'azione
   risaliva solo dell'altezza del banner: «Salva l'annuncio» restava sotto.
   Con la barra nascosta il banner va in fondo come su /vendi. */
body.bozza-page.guest-page .cookie-banner { bottom: 0; }
body.has-cookie-banner.bozza-page.guest-page .pub-actions {
  bottom: var(--cookie-banner-h, 0px);
}

/* ── SEO-HUB-2: testata compatta delle pagine annunci ───────────────────── */
.seo-header {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 6px 10px;
  padding: 0 0 12px;
  margin-bottom: 2px;
  border-bottom: 1px solid var(--line);
}
.seo-header-brand { display: inline-flex; align-items: center; min-height: 44px; text-decoration: none; color: inherit; }
.seo-header-brand .brand-lockup { gap: 8px; }
.seo-header-brand svg { width: 28px; height: 28px; }
.seo-header-brand .brand-word { font-size: 20px; }
.seo-header-nav { display: flex; align-items: center; flex-wrap: wrap; gap: 2px; margin-left: auto; }
.seo-header-link {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  padding: 6px 6px;
  color: var(--muted);
  font-size: 14px;
  font-weight: 600;
  text-decoration: none;
  white-space: nowrap;
}
.seo-header-link:hover { color: var(--accent-text); }
.seo-header-sell { min-height: 38px; padding: 6px 18px; font-size: 15px; }

/* ── SEO-HUB-1: pagine «Annunci usato», categorie e città ───────────────── */
.seo-page { display: flex; flex-direction: column; gap: 14px; }
.seo-crumbs { font-size: 13px; color: var(--muted); display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.seo-crumbs a { color: var(--muted); text-decoration: none; }
.seo-crumbs a:hover { color: var(--accent-text); }
.seo-h1 { font-size: 28px; line-height: 1.15; margin: 0; }
.seo-h2 { font-family: var(--font-title); font-size: 20px; margin: 0 0 10px; }
.seo-intro { margin: 0; color: var(--muted); font-size: 15px; line-height: 1.4; }
.seo-count { margin: 0; font-size: 13px; color: var(--muted); }
.seo-subcats { display: flex; flex-wrap: wrap; gap: 8px; }
.seo-subcat { border: 1px solid var(--line); border-radius: 999px; padding: 6px 12px; font-size: 14px; text-decoration: none; color: inherit; }
.seo-subcat-n { color: var(--muted); font-size: 12px; }
.seo-rail { margin: 0 -20px; overflow-x: auto; scrollbar-width: none; }
.seo-rail::-webkit-scrollbar { display: none; }
.seo-rail-track { display: flex; gap: 8px; padding: 0 20px; }
.seo-chip { flex: 0 0 auto; border: 1px solid var(--line); border-radius: 999px; padding: 8px 14px; font-size: 14px; font-weight: 600; text-decoration: none; color: inherit; white-space: nowrap; }
.seo-chip:hover { border-color: var(--accent); color: var(--accent-text); }
/* 1112 — minmax(0, 1fr) come .saved-grid: le colonne non si allargano
   secondo il contenuto e il titolo va a capo dentro la card. */
.seo-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
@media (min-width: 640px) { .seo-list { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
.seo-card { display: flex; flex-direction: column; gap: 6px; min-width: 0; text-decoration: none; color: inherit; }
.seo-card-media { position: relative; aspect-ratio: 1; border-radius: 12px; overflow: hidden; background: #E4E1DA; display: flex; align-items: center; justify-content: center; }
.seo-card-media img { width: 100%; height: 100%; object-fit: cover; display: block; }
.seo-card-empty { font-size: 40px; color: var(--muted); }
.seo-card-body { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.seo-card-title { font-size: 14px; line-height: 1.25; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; overflow-wrap: anywhere; }
.seo-card-zone { font-size: 12px; color: var(--muted); }
.seo-card-price { font-weight: 700; }
.seo-empty { color: var(--muted); }
.seo-pager { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; justify-content: center; margin-top: 6px; }
/* 1354 — «Mostra altri annunci» a mano. */
.seo-prevbar { display: flex; justify-content: center; margin: 0 0 12px; }
.seo-progress { margin: 18px 0 4px; text-align: center; font-size: 13px; color: var(--muted); }
.seo-load-error { margin: 6px 0; text-align: center; font-size: 14px; color: #B42318; }
.seo-pager .is-loading, .seo-prevbar .is-loading { pointer-events: none; opacity: 0.85; }
.seo-pager .is-loading::before, .seo-prevbar .is-loading::before {
  content: ''; display: inline-block; width: 15px; height: 15px; margin-right: 8px;
  border: 2px solid currentColor; border-top-color: transparent; border-radius: 50%;
  vertical-align: -3px; animation: ff-seo-spin 0.7s linear infinite;
}
.seo-card-media img.is-unloaded { visibility: hidden; }
@keyframes ff-seo-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) {
  .seo-pager .is-loading::before, .seo-prevbar .is-loading::before { animation-duration: 1.8s; }
}
.seo-cities-grid { display: flex; flex-wrap: wrap; gap: 8px; }
.seo-city { border: 1px solid var(--line); border-radius: 999px; padding: 6px 12px; font-size: 14px; text-decoration: none; color: inherit; }
.seo-city-prov { color: var(--muted); font-size: 12px; }
.seo-faq-item { border-top: 1px solid var(--line); padding: 10px 0; }
.seo-faq-item summary { cursor: pointer; font-weight: 600; }
.seo-faq-item p { margin: 8px 0 0; color: var(--muted); }

/* SEO-HUB-2 — briciola della scheda annuncio (tema scuro). */
.ad-crumbs { padding: 10px 16px 0; color: rgba(246, 245, 241, 0.72); }
.ad-crumbs a { color: rgba(246, 245, 241, 0.72); }
.ad-crumbs a:hover { color: var(--accent); }

/* SEO-HUB-4 — catalogo e «Salvati»: schede «Per te · Salvati» e pulsante Filtri
   in tema chiaro, come il resto di /annunci-usato. */
.cat-tabs { display: flex; gap: 18px; align-items: center; padding: 0 0 4px; }
.cat-tab {
  font-family: var(--font-title); font-weight: 800; font-size: 20px; letter-spacing: -0.04em;
  color: var(--muted); text-decoration: none; background: none; border: 0; padding: 0;
  cursor: pointer; min-height: 44px;
}
.cat-tab.is-active { color: var(--ink); }
.cat-tab:hover { color: var(--accent-text); }
.cat-bar { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.cat-filtri {
  display: inline-flex; align-items: center; gap: 6px; min-height: 44px; padding: 6px 16px;
  border: 1px solid var(--line); border-radius: 999px; background: #fff; color: var(--ink);
  font-size: 15px; font-weight: 600; cursor: pointer;
}
.cat-filtri:hover { border-color: var(--accent); color: var(--accent-text); }
.feed-empty-light { min-height: 0; background: transparent; color: var(--ink); }
/* FotoFatto — font ospitati sul sito (VELOCITA-1).
   Stessi file woff2 di Google Fonts, serviti dal nostro dominio: toglie la
   chiamata a fonts.googleapis.com/gstatic.com dal percorso di primo disegno.
   Solo i pesi realmente usati, con font-display: swap. */
@font-face {
  font-family: 'Bricolage Grotesque';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(./fonts/bricolage-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Bricolage Grotesque';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(./fonts/bricolage-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Bricolage Grotesque';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url(./fonts/bricolage-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Bricolage Grotesque';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url(./fonts/bricolage-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Instrument Sans';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(./fonts/instrument-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Instrument Sans';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(./fonts/instrument-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Instrument Sans';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(./fonts/instrument-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Instrument Sans';
  font-style: normal;
  font-weight: 500;
  font-display: swap;
  src: url(./fonts/instrument-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Instrument Sans';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(./fonts/instrument-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C4, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Instrument Sans';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url(./fonts/instrument-latin.woff2) format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* VELOCITA-1 — font ospitati sul sito, incorporati per evitare un secondo foglio bloccante. */

/* ── COPIA-5: prima della pubblicazione titolo e descrizione si leggono e si
   modificano per intero. Il testo fuori dai campi resta non selezionabile e
   la copia è bloccata; selezione e scrittura dentro i campi restano libere. ── */
.is-locked,
.is-locked-row,
.is-locked-photo {
  -webkit-user-select: none;
  user-select: none;
  -webkit-touch-callout: none;
}
.ai-screen.is-locked .ai-label {
  -webkit-user-select: none;
  user-select: none;
  -webkit-touch-callout: none;
}
.ai-screen.is-locked .ai-input,
.ai-screen.is-locked input,
.ai-screen.is-locked textarea {
  -webkit-user-select: text;
  user-select: text;
  -webkit-touch-callout: default;
}
.copy-notice {
  position: fixed;
  left: 50%;
  bottom: calc(16px + env(safe-area-inset-bottom));
  z-index: 80;
  margin: 0;
  width: calc(100vw - 32px);
  max-width: 420px;
  padding: 14px 16px;
  border-radius: 14px;
  background: #141413;
  color: #fff;
  font-size: 14px;
  line-height: 1.35;
  text-align: left;
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.28);
  transform: translateX(-50%);
  display: flex;
  flex-direction: column;
  gap: 10px;
}
.copy-notice-text { margin: 0; padding-right: 30px; }
.copy-notice-actions { display: flex; }
.copy-notice-actions .btn { width: 100%; }
.copy-notice-close {
  position: absolute;
  top: 4px;
  right: 4px;
  width: 34px;
  height: 34px;
  border: 0;
  border-radius: 999px;
  background: transparent;
  color: #fff;
  font-size: 24px;
  line-height: 1;
  cursor: pointer;
}
.locked-photo-shield {
  position: absolute;
  inset: 0;
  z-index: 4;
  display: block;
  background: transparent;
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  user-select: none;
}
.is-locked-photo {
  display: block;
  width: 100%;
  height: 100%;
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  pointer-events: none;
  -webkit-touch-callout: none;
}
img.is-locked-photo { object-fit: cover; }
.bozza-rail-photo .listing-thumb-empty { padding: 6px; font-size: 11px; line-height: 1.25; text-align: center; }
.photo-missing-note { margin: 10px 0 0; padding: 10px 12px; border: 1px solid var(--line); border-radius: 12px; background: #FFF8E6; font-size: 14px; line-height: 1.35; }
.photo-missing-note .btn { margin-left: 6px; vertical-align: middle; }
.bozza-rail-img { display: block; width: 100%; height: 100%; }
.listing-thumb-img { display: block; width: 100%; height: 100%; }
.is-locked-row .listing-title,
.is-locked-row .listing-meta,
.is-locked-row .listing-status {
  -webkit-user-select: none;
  user-select: none;
  -webkit-touch-callout: none;
}
.owner-copy {
  margin: 0 0 22px;
  padding: 14px;
  border: 1px solid var(--line);
  border-radius: 16px;
  background: #fff;
}
.owner-copy-actions {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 8px;
}
.owner-copy-btn {
  min-height: 48px;
  padding: 10px 12px;
  font-size: 15px;
  text-align: center;
  justify-content: center;
}
.owner-copy-note {
  margin: 10px 0 0;
  color: var(--muted);
  font-size: 14px;
  line-height: 1.35;
}
.owner-copy-status {
  margin: 8px 0 0;
  font-weight: 600;
  color: #2E9E5B;
}
.page-mine .owner-copy {
  margin: -2px 0 14px;
  padding: 12px;
}
.page-mine .owner-copy-actions {
  grid-template-columns: 1fr 1fr;
}
@media (min-width: 720px) {
  .owner-copy-actions { grid-template-columns: repeat(4, 1fr); }
}

/* ETICHETTA-1 — scheda del capo: dati corti letti dall'etichetta. */
.garment-card {
  margin: 18px 0 8px;
  padding: 14px 16px;
  border: 1px solid rgba(255, 255, 255, 0.14);
  border-radius: 14px;
  background: rgba(255, 255, 255, 0.04);
}
.garment-card-title {
  margin: 0 0 10px;
  font-size: 0.82rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  opacity: 0.72;
}
.garment-card-list {
  display: grid;
  grid-template-columns: minmax(110px, auto) 1fr;
  gap: 6px 14px;
  margin: 0;
}
.garment-card-list dt {
  margin: 0;
  font-size: 0.86rem;
  opacity: 0.68;
}
.garment-card-list dd {
  margin: 0;
  font-size: 0.92rem;
  overflow-wrap: anywhere;
}
.garment-card.is-locked,
.garment-card.is-locked * {
  -webkit-user-select: none;
  user-select: none;
  -webkit-touch-callout: none;
}
.ad-body .garment-card {
  border-color: rgba(255, 255, 255, 0.12);
}
@media (max-width: 420px) {
  .garment-card-list { grid-template-columns: 1fr; gap: 2px; }
  .garment-card-list dt { margin-top: 6px; font-size: 0.78rem; }
}
/* CONDIZIONE-1 — riga onesta dei difetti sotto la scheda del capo. */
.ad-defects {
  margin: 4px 0 0;
  color: var(--muted);
  font-size: var(--fs-secondary);
  line-height: 1.45;
}
.ad-defects strong { color: var(--ink); font-weight: 700; }

/* CHAT-LAYOUT-1 — la conversazione usa tutto lo schermo, come in un'app di
   messaggistica: testata e annuncio fermi in alto, solo i messaggi scorrono,
   barra di scrittura appoggiata alla barra di navigazione. Tutto è limitato a
   body.chat-page: le altre pagine non cambiano. */
/* 1471 — la chat tiene l'altezza dello schermo per la stanza dei messaggi, ma
   il piè di pagina sta sotto: la pagina può scorrere fino in fondo. */
html:has(body.chat-page) { height: 100%; overflow-y: auto; overflow-x: hidden; }
body.chat-page {
  height: auto;
  min-height: 100%;
  overflow: visible;
  /* Altezza reale della barra in basso (64 px di contenuto + area sicura).
     --tabbar-h (95 px) lascia spazio anche al «Vendi» rialzato: qui serve il
     bordo vero della barra, perché la scrittura deve restarci attaccata. */
  --chat-tabbar: var(--tabbar-h);
}
body.chat-page .app {
  height: auto;
  min-height: 100vh;
  min-height: 100dvh;
  max-width: 720px;
}
body.chat-page .app-main {
  flex: 0 0 auto;
  height: calc(var(--chat-vh, 100vh) - var(--chat-tabbar));
  height: calc(var(--chat-vh, 100dvh) - var(--chat-tabbar));
  min-height: 0;
  padding: 0;
  overflow: hidden;
}
body.chat-page .tabbar { max-width: 720px; }
body.chat-keyboard .app-main { height: var(--chat-vh, 100dvh); }

body.chat-page .page-chat {
  height: 100%;
  min-height: 0;
  max-width: 720px;
  margin: 0 auto;
  padding: calc(6px + env(safe-area-inset-top)) 16px 0;
  gap: 0;
  overflow: hidden;
}
.chat-top { flex: 0 0 auto; min-width: 0; }
body.chat-page .chat-head {
  display: flex;
  align-items: center;
  gap: 4px;
  min-height: 40px;
  padding: 2px 0 6px;
}
body.chat-page .chat-back {
  flex: 0 0 34px;
  width: 34px;
  text-align: center;
  font-size: 30px;
  line-height: 1;
}
body.chat-page .chat-who {
  flex: 1 1 auto;
  min-width: 0;
  font-size: 18px;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
body.chat-page .chat-head .chat-menu {
  position: relative;
  top: auto;
  right: auto;
  flex: 0 0 auto;
  margin-left: auto;
  z-index: 60;
}
body.chat-page .chat-head .chat-menu > .btn {
  min-height: 36px;
  padding: 4px 10px;
  font-size: 18px;
  line-height: 1;
}
body.chat-page .chat-menu-list {
  position: absolute;
  top: calc(100% + 4px);
  right: 0;
  min-width: 130px;
  padding: 6px;
  gap: 4px;
  background: var(--paper);
  border: 1px solid var(--line);
  border-radius: 12px;
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.18);
}
body.chat-page .chat-listing {
  gap: 8px;
  padding: 6px 8px;
  border-radius: 12px;
}
body.chat-page .chat-listing .chat-thumb {
  flex: 0 0 40px;
  width: 40px;
  height: 40px;
  border-radius: 9px;
}
body.chat-page .chat-listing .chat-info { gap: 0; }
body.chat-page .chat-listing .chat-title { font-size: 14px; }
body.chat-page .chat-listing .chat-meta {
  font-size: 12px;
  white-space: normal;
  overflow: visible;
  overflow-wrap: break-word;
}
body.chat-page .chat-banner {
  margin: 6px 0 0;
  padding: 6px 10px;
  font-size: 12px;
  line-height: 1.35;
}
body.chat-page .neg-banner { margin: 6px 0 0; padding: 6px 10px; font-size: 12px; }
body.chat-page .chat-messages {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
  -webkit-overflow-scrolling: touch;
  padding: 8px 0;
  gap: 8px;
}
.chat-msg-body {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 2px;
  max-width: 80%;
}
.chat-msg-mine .chat-msg-body { align-items: flex-end; }
body.chat-page .chat-bubble { max-width: 100%; }
.chat-msg-time {
  padding: 0 4px;
  color: var(--muted);
  font-size: 11px;
  line-height: 1.2;
}
.chat-bottom {
  flex: 0 0 auto;
  display: flex;
  flex-direction: column;
  gap: 8px;
  min-width: 0;
}
.chat-bottom > .chat-card,
.chat-bottom > .chat-actions-row { margin: 0; }
body.chat-page .chat-compose {
  position: static;
  padding: 6px 0 14px;
  gap: 6px;
  background: var(--paper);
  border-top: 1px solid var(--line);
}
.chat-compose-actions { display: flex; gap: 8px; }
.chat-compose-actions .btn {
  flex: 1 1 0;
  min-height: 38px;
  height: 38px;
  padding: 0 8px;
  font-size: 14px;
  line-height: 1;
  white-space: nowrap;
}
body.chat-page .chat-form { gap: 6px; align-items: flex-end; }
body.chat-page .chat-form textarea {
  flex: 1 1 auto;
  min-height: 40px;
  max-height: 112px;
  padding: 9px 12px;
  line-height: 1.35;
  resize: none;
  overflow-y: hidden;
}
body.chat-page .chat-form .btn {
  flex: 0 0 auto;
  min-height: 40px;
  padding: 0 14px;
}
body.chat-page .chat-hint {
  margin: 0;
  font-size: 11px;
  line-height: 1.25;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
body.chat-keyboard .chat-compose { padding-bottom: 8px; }

/* MISURE-A4-1 — proposta e guida per misurare il capo con un foglio A4. */
.misure-box {
  border: 1px solid var(--line);
  border-radius: var(--radius);
  padding: 16px;
  margin: 16px 0;
  background: rgba(255, 90, 54, 0.05);
}
.misure-title { font-weight: 700; margin: 0 0 6px; }
.misure-line { margin: 0 0 10px; line-height: 1.45; }
.misure-actions { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; }
.misure-actions .link-text { min-height: 44px; }
.misure-steps { margin: 0 0 14px; padding-left: 22px; line-height: 1.5; }
.misure-steps li { margin-bottom: 8px; }
.misure-schema {
  position: relative;
  height: 150px;
  margin: 0 0 16px;
  border-radius: 12px;
  background: #f4f1ea;
  overflow: hidden;
}
.misure-schema-garment {
  position: absolute;
  left: 16%;
  top: 24px;
  width: 62%;
  height: 82px;
  border: 2px dashed rgba(20, 20, 19, 0.45);
  border-radius: 34px 34px 12px 12px;
}
.misure-schema-a4 {
  position: absolute;
  right: 13%;
  top: 44px;
  width: 48px;
  height: 68px;
  border: 2px solid var(--accent);
  border-radius: 4px;
  background: #fff;
  color: var(--accent-text);
  font-weight: 700;
  font-size: 12px;
  display: grid;
  place-items: center;
  transform: rotate(-6deg);
}
.misure-schema-camera {
  position: absolute;
  left: 48%;
  top: 2px;
  font-size: 26px;
  color: var(--accent-text);
}
body.theme-dark .misure-box { background: rgba(255, 90, 54, 0.12); }
body.theme-dark .misure-schema { background: rgba(255, 255, 255, 0.08); }
body.theme-dark .misure-schema-a4 { background: #fff; color: #141413; }

/* Riquadro dello stato del regalo nella pagina «Il tuo annuncio è online». */
.promo-card {
  display: grid;
  grid-template-columns: 76px minmax(0, 1fr);
  gap: 14px;
  align-items: center;
  padding: 14px;
  border: 2px solid #FF5A36;
  border-radius: 20px;
  background: #FFFFFF;
  color: #141413;
}
.promo-thumb {
  width: 76px;
  height: 96px;
  border-radius: 12px;
  overflow: hidden;
  background: #EFEDE7;
}
.promo-thumb img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.promo-body { min-width: 0; }
.promo-eyebrow {
  margin: 0 0 2px;
  color: #C2370F;
  font-size: 10.5px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.promo-count {
  margin: 0;
  font-family: var(--font-title);
  font-size: 30px;
  font-weight: 800;
  line-height: 1;
  letter-spacing: -0.04em;
  color: #141413;
}
.promo-bars {
  display: flex;
  gap: 5px;
  margin: 9px 0 8px;
}
.promo-bar {
  flex: 1;
  height: 7px;
  border-radius: 999px;
  background: #E3E0D9;
}
.promo-bar.is-on { background: #FF5A36; }
.promo-note {
  margin: 0;
  font-size: 12.5px;
  line-height: 1.35;
  color: #55544E;
}
.promo-note a { color: #C2370F; font-weight: 700; }
.promo-next {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  min-height: 52px;
  margin-top: 10px;
  border-radius: 999px;
  background: #141413;
  color: #F6F5F1;
  font-size: 17px;
  font-weight: 700;
  text-decoration: none;
}
.promo-strip {
  margin: 0 0 16px;
  padding: 10px 12px;
  border: 2px solid #FF5A36;
  border-radius: 14px;
  background: #FFFFFF;
  color: #141413;
  font-size: 14px;
  line-height: 1.35;
}
.promo-strip strong {
  font-family: var(--font-title);
  font-size: 17px;
  margin-right: 4px;
}
.promo-strip a { color: #C2370F; font-weight: 700; }

/* Admin: anteprima email e tabella promo. */
.promo-mail-preview {
  margin: 8px 0;
  padding: 8px 10px;
  border: 1px solid rgba(20, 20, 19, 0.14);
  border-radius: 10px;
  background: #FAF9F6;
  font-size: 13px;
  color: #141413;
}
.promo-mail-preview summary { cursor: pointer; font-weight: 600; }
.promo-mail-preview p { margin: 8px 0 0; line-height: 1.45; }
.promo-admin-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  align-items: center;
}
.promo-admin-actions form { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; }
.promo-admin-actions input[type="text"] {
  min-height: 40px;
  padding: 8px 10px;
  border: 1px solid rgba(20, 20, 19, 0.2);
  border-radius: 8px;
  font-family: var(--font-body);
  font-size: 14px;
  max-width: 220px;
}
.promo-thumbs { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 8px; }
.promo-thumbs a { display: block; }
.promo-thumbs img {
  width: 54px;
  height: 66px;
  object-fit: cover;
  border-radius: 7px;
  border: 1px solid rgba(20, 20, 19, 0.12);
  background: #EFEDE7;
}

/* PROMO-MINICICCIO-1 — accesso nei browser interni: email prima, social fuori. */
.access-inapp-lead {
  margin: 0 0 4px;
  font-size: 14px;
  line-height: 1.4;
  color: #55544E;
}
body.theme-dark .access-inapp-lead { color: #CFCDC7; }
.access-inapp-note {
  margin: 6px 0 0;
  font-size: 12.5px;
  line-height: 1.35;
  color: #55544E;
}
body.theme-dark .access-inapp-note { color: #B8B6B0; }
.access-external {
  display: flex;
  flex-direction: column;
  gap: 8px;
  margin-top: 12px;
  padding-top: 12px;
  border-top: 1px solid rgba(20, 20, 19, 0.12);
}
body.theme-dark .access-external { border-top-color: rgba(255, 255, 255, 0.14); }
.access-external-note {
  margin: 0;
  font-size: 13px;
  line-height: 1.35;
  color: #55544E;
}
body.theme-dark .access-external-note { color: #B8B6B0; }
.access-external-status {
  margin: 0;
  font-size: 13px;
  font-weight: 600;
  color: #C2370F;
}
.access-external-btn { justify-content: center; }

/* PROMO-MINICICCIO-1 — le tabelle admin larghe scorrono dentro il riquadro,
   senza allargare la pagina (utile anche a 390 px). */
.cookie-table-wrap {
  max-width: 100%;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}
.promo-admin-actions input[type="text"] { flex: 1 1 140px; }

/* PROVA-PASSO2-1 — passo 2 di /prova: riquadro grande e un solo bottone
   principale in basso, nello stesso punto prima e dopo la prima foto. */
.p2-wrap {
  display: flex;
  flex-direction: column;
  gap: 10px;
  min-height: calc(100dvh - 150px);
}
.p2-head { flex: 0 0 auto; }
.p2-head .p2-title {
  font-family: var(--font-title);
  font-weight: 800;
  font-size: 31px;
  line-height: 1.04;
  letter-spacing: -0.035em;
  margin: 0;
}
.p2-head .p2-lead {
  margin: 6px 0 0;
  color: #CFCDC7;
  font-size: 15px;
  line-height: 1.35;
  max-width: 34ch;
}
.p2-stage {
  position: relative;
  flex: 1 1 auto;
  min-height: 132px;
  width: 100%;
  margin: 0;
  padding: 18px;
  border: 2px dashed rgba(246, 245, 241, 0.22);
  border-radius: 22px;
  background: #151514;
  color: #9B9992;
  overflow: hidden;
}
.p2-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 12px;
  font: inherit;
  text-align: center;
  cursor: pointer;
  -webkit-appearance: none;
  appearance: none;
}
.p2-empty:active { background: #1B1B1A; }
.p2-mirino { display: flex; color: #85837C; }
.p2-advice {
  display: block;
  max-width: 250px;
  font-size: 14px;
  line-height: 1.35;
  color: #CFCDC7;
}
.p2-live { padding: 0; }
.p2-live video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  background: #000;
}
.p2-live-hint {
  position: absolute;
  left: 12px;
  right: 12px;
  bottom: 10px;
  padding: 7px 10px;
  border-radius: 10px;
  background: rgba(11, 11, 10, 0.7);
  color: #F6F5F1;
  font-size: 12.5px;
  line-height: 1.25;
  text-align: center;
}
.p2-preview { padding: 0; background: #000; }
.p2-preview img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: contain;
  background: #000;
}
.p2-remove {
  position: absolute;
  z-index: 2;
  top: 10px;
  right: 10px;
  width: 44px;
  height: 44px;
  border: 1px solid rgba(255, 255, 255, 0.35);
  border-radius: 50%;
  background: rgba(11, 11, 10, 0.72);
  color: #F6F5F1;
  font-size: 17px;
  line-height: 1;
  cursor: pointer;
}
.p2-status {
  position: absolute;
  left: 50%;
  bottom: 12px;
  transform: translateX(-50%);
  padding: 7px 12px;
  border-radius: 999px;
  background: rgba(11, 11, 10, 0.8);
  color: #F6F5F1;
  font-size: 12.5px;
  white-space: nowrap;
}
.p2-mini-row {
  display: flex;
  gap: 8px;
  flex: 0 0 auto;
  overflow-x: auto;
  padding: 2px 0;
  scrollbar-width: none;
}
.p2-mini-row::-webkit-scrollbar { display: none; }
.p2-thumb,
.p2-add {
  flex: 0 0 auto;
  width: 56px;
  height: 56px;
  padding: 0;
  border: 2px solid transparent;
  border-radius: 12px;
  overflow: hidden;
  background: #1B1B1A;
  color: #B8B6B0;
  cursor: pointer;
}
.p2-thumb img { display: block; width: 100%; height: 100%; object-fit: cover; }
.p2-thumb.is-selected { border-color: var(--accent); }
.p2-thumb-empty { display: grid; place-items: center; width: 100%; height: 100%; font-size: 16px; }
.p2-add {
  border: 2px dashed rgba(246, 245, 241, 0.28);
  background: transparent;
  font-size: 26px;
  line-height: 1;
}
.p2-actions {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 8px;
  flex: 0 0 auto;
  margin-top: auto;
}
.p2-main {
  min-height: 60px;
  font-size: 17.5px;
}
.p2-again { min-height: 48px; }
.p2-label-link {
  align-self: center;
  min-height: 34px;
  padding: 4px 8px;
  border: 0;
  background: none;
  color: #B8B6B0;
  font: inherit;
  font-size: 12.5px;
  line-height: 1.3;
  text-decoration: underline;
  cursor: pointer;
}
.p2-gallery-link {
  align-self: center;
  min-height: 32px;
  padding: 2px 8px;
  border: 0;
  background: none;
  color: #9B9992;
  font: inherit;
  font-size: 12px;
  line-height: 1.3;
  text-decoration: underline;
  cursor: pointer;
}
/* 1438 — Android nei browser di Instagram/Facebook: la galleria è
   un'etichetta nativa dello stesso input file, grande e visibile. */
.p2-gallery-label {
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 48px;
  margin-top: 2px;
  text-align: center;
  text-decoration: none;
  cursor: pointer;
}
.p2-help {
  flex: 0 0 auto;
  margin-top: 4px;
  padding: 12px 14px;
  border: 1px solid rgba(255, 90, 54, 0.55);
  border-radius: 14px;
  background: rgba(255, 90, 54, 0.12);
}
.p2-help[hidden] { display: none !important; }
.p2-help-text {
  margin: 0 0 10px;
  color: #F6F5F1;
  font-size: 13.5px;
  font-weight: 600;
  line-height: 1.35;
}
.p2-help .btn { min-height: 48px; font-size: 15px; }

/* FOTOCAMERA-IPHONE-1 — input nativi sempre nel documento (mai display:none):
   iOS Safari apre fotocamera e galleria solo se l'input è renderizzato.
   Restano 1×1 e trasparenti, fuori dai tocchi. */
.ff-native-file {
  position: fixed;
  left: 0;
  bottom: 0;
  width: 1px;
  height: 1px;
  opacity: 0;
  pointer-events: none;
  z-index: -1;
}
@media (max-height: 700px) {
  .p2-wrap { min-height: calc(100dvh - 132px); gap: 8px; }
  .p2-head .p2-title { font-size: 27px; }
  .p2-head .p2-lead { font-size: 14px; margin-top: 4px; }
  .p2-stage { min-height: 112px; }
}

/* PERCORSI-1 — pagina admin, dettaglio persona. */
.percorsi-table td { vertical-align: top; }
.percorsi-photos {
  display: flex;
  flex-wrap: wrap;
  gap: 12px;
}
.percorsi-photos figure {
  margin: 0;
  width: 132px;
  font-size: 12px;
  color: #6b6b6b;
}
.percorsi-photos img {
  display: block;
  width: 132px;
  height: 132px;
  object-fit: cover;
  border-radius: 10px;
  border: 1px solid rgba(0, 0, 0, 0.12);
  background: #eee;
}
.percorsi-photos figcaption { margin-top: 4px; line-height: 1.25; }

/* ── FOTOFATTO-CUORE-1 — un solo cuore, contatore visibile ─────────────── */
.seo-card-media-wrap { position: relative; }
.seo-card-media { text-decoration: none; color: inherit; }
.seo-card-body { text-decoration: none; color: inherit; }
.seo-card.is-highlight { outline: 3px solid var(--accent); outline-offset: 4px; border-radius: 14px; }
.card-heart {
  position: absolute; right: 8px; bottom: 8px; z-index: 3;
  display: inline-flex; align-items: center; justify-content: center; gap: 4px;
  min-width: 34px; min-height: 34px; padding: 5px 9px;
  border: 0; border-radius: 999px; background: rgba(20, 20, 19, 0.58); color: #fff;
  font: inherit; font-size: 13px; font-weight: 800; line-height: 1;
  cursor: pointer; -webkit-tap-highlight-color: transparent;
  box-shadow: 0 2px 10px rgba(0, 0, 0, 0.22);
}
.card-heart .card-heart-ico { display: inline-flex; }
.card-heart.is-saved { color: #FF5A36; }
.card-heart.is-static { cursor: default; }
.card-heart:disabled { opacity: 0.7; }
.card-heart.is-pop .card-heart-ico { animation: ff-heart-pop 0.34s ease; }
@keyframes ff-heart-pop {
  0% { transform: scale(1); }
  40% { transform: scale(1.38); }
  72% { transform: scale(0.92); }
  100% { transform: scale(1); }
}
@media (prefers-reduced-motion: reduce) {
  .card-heart.is-pop .card-heart-ico { animation: none; }
}

.ad-gallery-wrap { position: relative; }
.ad-heart {
  position: absolute; right: 14px; bottom: 14px; z-index: 6;
  display: inline-flex; align-items: center; justify-content: center; gap: 5px;
  min-width: 44px; min-height: 44px; padding: 7px 12px;
  border: 0; border-radius: 999px; background: rgba(20, 20, 19, 0.62); color: #fff;
  font: inherit; font-size: 15px; font-weight: 800; line-height: 1;
  cursor: pointer; -webkit-tap-highlight-color: transparent;
  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.3);
}
.ad-heart.is-saved { color: #FF5A36; }
.ad-heart.is-static { cursor: default; }
.ad-heart:disabled { opacity: 0.7; }
.ad-heart.is-pop { animation: ff-heart-pop 0.34s ease; }
@media (prefers-reduced-motion: reduce) {
  .ad-heart.is-pop { animation: none; }
}

/* Scheda «I miei preferiti»: il comune e il cuore accanto al prezzo. */
.saved-zone { font-size: 12px; color: var(--muted); }
.saved-hearts { display: inline-flex; align-items: center; gap: 3px; font-size: 12px; font-weight: 700; color: var(--accent-text); }

/* Avvisi al venditore nel profilo. */
.heart-notices { display: flex; flex-direction: column; gap: 8px; }
.heart-notice { display: flex; align-items: flex-start; gap: 10px; padding: 10px 0; border-bottom: 1px solid var(--line); }
.heart-notice:last-child { border-bottom: 0; }
.heart-notice-ico { flex: 0 0 auto; color: var(--accent-text); margin-top: 2px; }
.heart-notice-body { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.heart-notice-text { font-weight: 600; }
.heart-notice-text a { color: inherit; }
.heart-notice-date { font-size: 12px; color: var(--muted); }
.heart-notice.is-new .heart-notice-text { color: var(--ink); }
.heart-notice-dot { width: 8px; height: 8px; border-radius: 50%; background: #FF5A36; flex: 0 0 auto; margin-top: 6px; }
.mine-fav-row { margin: 0 0 6px; }
.mine-fav-row .btn { display: inline-flex; align-items: center; justify-content: center; gap: 6px; }
.home-latest-hearts { display: inline-flex; align-items: center; gap: 3px; font-size: 12px; font-weight: 700; color: var(--accent, #FF5A36); }

/* 1242 — riquadro dei doppioni (prima dell'AI) */
.dup-sheet { z-index: 400; }
.dup-sheet .sheet-backdrop { cursor: default; }
.dup-sheet .dup-panel {
  max-width: 480px;
  margin: 0 auto;
  padding: 20px 16px calc(18px + env(safe-area-inset-bottom));
  gap: 12px;
  border-radius: 20px 20px 0 0;
  box-shadow: 0 -12px 40px rgba(11, 11, 10, 0.18);
}
.dup-sheet .dup-title {
  margin: 0;
  font-family: var(--font-title);
  font-size: 23px;
  line-height: 1.2;
  color: var(--ink);
}
.dup-sheet .dup-lead {
  margin: 0 0 2px;
  font-size: 16px;
  line-height: 1.45;
  color: var(--muted);
}
.dup-sheet .dup-card {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 10px;
  border: 1px solid var(--line);
  border-radius: 14px;
  background: #FBFAF7;
}
.dup-sheet .dup-card img {
  width: 76px;
  height: 76px;
  border-radius: 10px;
  object-fit: cover;
  background: #EEEBE4;
  flex: 0 0 auto;
}
.dup-sheet .dup-meta {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 0;
}
.dup-sheet .dup-meta strong {
  font-size: 16px;
  line-height: 1.25;
  color: var(--ink);
  overflow-wrap: anywhere;
}
.dup-sheet .dup-meta span {
  font-size: 14px;
  color: var(--muted);
}
.dup-sheet .btn { margin: 0; }
body.theme-dark .dup-sheet .dup-panel { background: #171716; color: var(--paper); }
body.theme-dark .dup-sheet .dup-title,
body.theme-dark .dup-sheet .dup-meta strong { color: var(--paper); }
body.theme-dark .dup-sheet .dup-lead,
body.theme-dark .dup-sheet .dup-meta span { color: #B8B6B0; }
body.theme-dark .dup-sheet .dup-card { background: #201F1D; border-color: #35332F; }

/* 1242 — in «I miei» il ritirato per doppione dice qual è l'annuncio rimasto. */
.listing-duplicate { color: var(--accent-text); }
.listing-duplicate a { color: inherit; text-decoration: underline; font-weight: 600; }

/* 1242 — la nota del ritiro sta fuori dalla scheda-link (niente <a> annidati). */
.listing-duplicate {
  margin: 8px 2px 0;
  font-size: 13px;
  color: var(--accent-text);
  font-weight: 600;
}
.listing-duplicate a { color: inherit; text-decoration: underline; }

/* ── 1317 — «Scrivi al venditore» fisso sulla pagina annuncio ─────────────
   Sta sopra la barra di navigazione, dentro la colonna dell'annuncio. Il
   corpo della pagina riceve spazio in fondo, così l'ultimo contenuto non
   finisce mai sotto la barra (390 px e 375 px compresi). */
body.ad-page.has-ad-cta .app-main {
  padding-bottom: calc(88px + env(safe-area-inset-bottom));
}
body.ad-page.has-ad-cta:has(.tabbar) .app-main {
  padding-bottom: calc(var(--tabbar-h) + 88px + env(safe-area-inset-bottom));
}
/* 1471 — lo spazio per la barra dell'annuncio (e per quella di navigazione)
   lo somma il piè di pagina con --footer-action e --footer-tabbar. */
.ad-buybar {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 49;
  max-width: 640px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  gap: 8px;
  padding: 10px 16px calc(10px + env(safe-area-inset-bottom));
  background: var(--ink);
  border-top: 1px solid rgba(255, 255, 255, 0.16);
}
/* Se la pagina ha la barra di navigazione, quella resta sotto: la barra
   dell'annuncio si appoggia sopra (nessuna sovrapposizione, come FF-15). */
body:has(.tabbar) .ad-buybar {
  bottom: var(--tabbar-h);
  padding-bottom: 10px;
}
.ad-buybar .btn {
  min-height: 48px;
  min-width: 0;
  white-space: nowrap;
  font-size: 15px;
}
.ad-buybar .btn-primary {
  background: var(--paper);
  color: var(--ink);
  border-color: var(--paper);
}
.ad-buybar .btn-ghost {
  border-color: rgba(255, 255, 255, 0.36);
  color: var(--paper);
}
body.has-cookie-banner.ad-page .ad-buybar {
  bottom: calc(var(--cookie-banner-h, 0px) + env(safe-area-inset-bottom));
}
body.has-cookie-banner.ad-page:has(.tabbar) .ad-buybar {
  bottom: calc(var(--tabbar-h) + var(--cookie-banner-h, 0px));
}
body.has-cookie-banner.ad-page.has-ad-cta .app-main {
  padding-bottom: calc(var(--cookie-banner-h, 0px) + 88px + env(safe-area-inset-bottom));
}
body.has-cookie-banner.ad-page.has-ad-cta:has(.tabbar) .app-main {
  padding-bottom: calc(var(--tabbar-h) + var(--cookie-banner-h, 0px) + 88px + env(safe-area-inset-bottom));
}
@media (max-width: 380px) {
  .ad-buybar { padding-left: 12px; padding-right: 12px; gap: 6px; }
  .ad-buybar .btn { font-size: 14px; }
}

/* 1317 — domande pronte nella chat senza messaggi. */
.chat-ready {
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.chat-ready-title {
  margin: 0;
  color: var(--muted);
  font-size: 13px;
}
.chat-ready-list {
  display: flex;
  flex-wrap: wrap;
  gap: 6px;
}
.chat-ready-q {
  min-height: 40px;
  white-space: normal;
  text-align: left;
}

/* ── 1323 — «Compra ora»: barra a tre pulsanti, PayPal del venditore,
   riepilogo e pagamento. A 390 e 375 px il bottone principale sta su una
   riga intera, «Scrivi» e «Fai un'offerta» restano piccoli accanto. */
.ad-buybar.has-buy-now {
  grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
}
.ad-buybar.has-buy-now .ad-buy-now {
  grid-column: 1 / -1;
  font-weight: 700;
}
.ad-buybar .ad-buy-secondary {
  min-height: 40px;
  padding: 6px 10px;
  font-size: 13px;
}
.ad-owner-paypal {
  flex: 1 1 100%;
  display: block;
  padding: 10px 12px;
  border: 1px dashed rgba(255, 255, 255, 0.38);
  border-radius: 12px;
  color: var(--paper);
  font-size: 14px;
  line-height: 1.35;
  text-decoration: none;
}
.ad-owner-paypal strong { color: var(--accent); }

/* Riepilogo e pagamento: stessa colonna stretta dell'annuncio. */
body.compra-page .app-main {
  padding-bottom: calc(28px + env(safe-area-inset-bottom));
}
.compra-wrap {
  max-width: 640px;
  margin: 0 auto;
  padding: 12px 16px 24px;
}
.compra-back {
  display: inline-flex;
  align-items: center;
  min-height: 40px;
  color: var(--muted);
  text-decoration: none;
  font-size: 15px;
}
.compra-title {
  margin: 6px 0 14px;
  font-size: 24px;
  line-height: 1.15;
}
.compra-item {
  display: flex;
  gap: 12px;
  align-items: center;
  padding: 12px;
  border: 1px solid var(--line, #e4e2dc);
  border-radius: 14px;
  background: var(--paper);
  color: var(--ink);
}
.compra-item img,
.compra-item .listing-thumb-empty {
  width: 72px;
  height: 72px;
  border-radius: 10px;
  object-fit: cover;
  flex: 0 0 auto;
}
.compra-item-info { min-width: 0; }
.compra-item-title { margin: 0 0 4px; font-weight: 700; line-height: 1.25; }
.compra-item-price { margin: 0; color: #55544E; font-size: 14px; }
.compra-card {
  margin: 14px 0;
  padding: 14px;
  border: 1px solid var(--line, #e4e2dc);
  border-radius: 14px;
  background: var(--paper);
  color: var(--ink);
}
.compra-card h2 {
  margin: 0 0 8px;
  font-size: 17px;
}
.compra-choice {
  display: flex;
  gap: 10px;
  align-items: flex-start;
  padding: 10px 0;
  border-bottom: 1px solid rgba(20, 20, 19, 0.1);
}
.compra-choice:last-of-type { border-bottom: 0; }
.compra-choice input { margin-top: 3px; }
.compra-choice span { display: block; }
.compra-choice small { display: block; color: #55544E; margin-top: 2px; }
.compra-ship-fields { margin-top: 10px; display: grid; gap: 8px; }
.compra-ship-fields[hidden] { display: none; }
.compra-total {
  display: flex;
  justify-content: space-between;
  gap: 12px;
  margin: 14px 0 4px;
  font-size: 20px;
  font-weight: 800;
}
.compra-note {
  margin: 8px 0 0;
  color: #55544E;
  font-size: 13px;
  line-height: 1.4;
}
.compra-actions { display: grid; gap: 10px; margin-top: 14px; }
.compra-actions .btn { min-height: 50px; }
.compra-warning {
  margin: 14px 0;
  padding: 12px 14px;
  border: 1px solid #d9a441;
  border-radius: 12px;
  background: #fff6df;
  color: #4a3510;
  font-size: 14px;
  line-height: 1.45;
}
.compra-pay-amount {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 12px;
  padding: 10px 0;
  border-bottom: 1px solid rgba(20, 20, 19, 0.1);
}
.compra-pay-amount:last-child { border-bottom: 0; }
.compra-pay-amount strong { font-size: 18px; }
.compra-copy { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.compra-email { font-weight: 700; word-break: break-all; }
.compra-steps { margin: 8px 0 0; padding-left: 20px; line-height: 1.5; }
.compra-state {
  margin: 14px 0;
  padding: 12px 14px;
  border-radius: 12px;
  background: rgba(255, 255, 255, 0.06);
  color: var(--paper);
}

/* Chat: scheda dell'acquisto «Compra ora». */
.chat-card-buynow {
  border: 1px solid rgba(232, 255, 71, 0.45);
}
.chat-buynow-line { margin: 6px 0; line-height: 1.4; }
.chat-buynow-address {
  margin: 8px 0;
  padding: 10px;
  border-radius: 10px;
  background: rgba(20, 20, 19, 0.06);
  font-size: 14px;
  white-space: pre-line;
}
.chat-buynow-state { margin: 6px 0 0; color: var(--muted); font-size: 13px; }
.listing-buynow { color: #8a5a00; font-weight: 600; }
.listing-actions-buynow { flex-wrap: wrap; }
.listing-actions-buynow form { margin: 0; }

/* 1334 — prezzo abbassato, ricerche salvate, suggerimento al venditore. */
.ad-price-old {
  font-size: 18px;
  font-weight: 600;
  color: var(--muted);
  text-decoration: line-through;
  margin-left: 8px;
}
.ad-owner-tip {
  flex: 1 1 100%;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  margin: 4px 0 0;
  font-size: 13px;
  line-height: 1.4;
}
.ad-owner-tip form { margin: 0; }
.listing-tip {
  margin: 6px 0 0;
  padding: 10px 12px;
  border-radius: 12px;
  background: rgba(255, 90, 54, 0.10);
  border: 1px solid rgba(255, 90, 54, 0.30);
}
.listing-tip-text { margin: 0 0 8px; font-size: 14px; line-height: 1.4; }
.listing-tip-form { margin: 0; }
.seo-search {
  display: flex;
  gap: 8px;
  align-items: center;
  margin: 10px 0 4px;
}
.seo-search input[type="search"] {
  flex: 1 1 auto;
  min-width: 0;
  padding: 10px 12px;
  border: 1px solid var(--line);
  border-radius: 12px;
  font: inherit;
  background: var(--paper);
  color: var(--ink);
}
.saved-search-cta { margin: 10px 0 4px; }
.saved-search-note { margin: 6px 0 0; font-size: 12px; color: var(--muted); line-height: 1.4; }
.saved-search-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
  padding: 10px 0;
  border-bottom: 1px solid var(--line);
}
.saved-search-row:last-child { border-bottom: 0; }
.saved-search-label { display: flex; flex-direction: column; gap: 2px; font-weight: 600; min-width: 0; }
.saved-search-date { font-size: 12px; font-weight: 400; color: var(--muted); }

/* 1336 — foglio «Condividi» con l'immagine verticale dell'annuncio.
   Usa .sheet e .sheet-item che esistono già; qui solo anteprima e testi. */
.ff-share-sheet .sheet-panel { gap: 10px; padding-top: 14px; }
.ff-share-sheet .ff-share-title {
  margin: 0 4px 2px;
  font-family: var(--font-title);
  font-size: 20px;
  font-weight: 800;
  letter-spacing: -0.02em;
  color: var(--ink);
}
.ff-share-preview {
  display: block;
  width: auto;
  max-width: 100%;
  max-height: 42vh;
  margin: 0 auto;
  border-radius: 14px;
  background: #141413;
  border: 1px solid rgba(20, 20, 19, 0.12);
}
.ff-share-status {
  min-height: 20px;
  margin: 2px 4px 0;
  font-size: 14px;
  line-height: 1.35;
  color: var(--muted);
}
.ff-share-status:empty { min-height: 0; }
body.ff-sheet-open { overflow: hidden; }

/* 1337 — recensioni con stelle dopo la vendita. */
.ad-seller-name { color: inherit; text-decoration: none; }
.ad-seller-name:hover { text-decoration: underline; }
.ad-seller-rating {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  color: #F5B301;
  font-size: 15px;
  font-weight: 700;
  text-decoration: none;
}
.ad-seller-rating span { font-size: 17px; line-height: 1; }
.ad-seller-rating:hover { text-decoration: underline; }

.review-pending {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 10px 0;
  border-bottom: 1px solid var(--line);
}
.review-pending:last-child { border-bottom: 0; padding-bottom: 0; }
.review-pending-main { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.review-pending-listing { font-size: 14px; color: var(--muted); }
.review-pending-meta { font-size: 12px; color: var(--muted); }

.review-item { display: flex; flex-direction: column; gap: 5px; padding: 12px 0; border-bottom: 1px solid var(--line); }
.review-item:last-child { border-bottom: 0; padding-bottom: 0; }
.review-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 10px; }
.review-stars { color: #F5B301; letter-spacing: 1px; font-size: 16px; line-height: 1.2; }
.review-author { font-weight: 700; font-size: 15px; }
.review-date { color: var(--muted); font-size: 13px; }
.review-listing { margin: 0; font-size: 13px; color: var(--muted); }
.review-listing a { color: inherit; }
.review-body { margin: 2px 0 0; font-size: 15px; line-height: 1.4; overflow-wrap: anywhere; }
.review-reply {
  margin: 4px 0 0;
  padding: 8px 10px;
  border-left: 3px solid var(--accent);
  background: rgba(20, 20, 19, 0.04);
  border-radius: 0 8px 8px 0;
  font-size: 14px;
  line-height: 1.4;
  overflow-wrap: anywhere;
}
.review-state { margin: 2px 0 0; color: var(--muted); font-size: 13px; }
.review-reply-form, .review-report-form { display: flex; flex-direction: column; gap: 6px; margin-top: 6px; }
.review-reply-form label, .review-report-form label { font-size: 13px; font-weight: 700; }
.review-reply-form textarea, .review-report-form textarea, .review-form textarea {
  width: 100%;
  min-height: 64px;
  padding: 10px 12px;
  border: 1px solid var(--line);
  border-radius: 10px;
  font: inherit;
  color: inherit;
  background: transparent;
  box-sizing: border-box;
}
.review-reply-form button, .review-report-form button { align-self: flex-start; }
.review-report { margin-top: 4px; }
.review-report summary { color: var(--muted); font-size: 13px; cursor: pointer; min-height: 32px; display: flex; align-items: center; }
.review-report-form select {
  padding: 8px 10px;
  border: 1px solid var(--line);
  border-radius: 10px;
  font: inherit;
  color: inherit;
  background: transparent;
}

.review-sale { display: flex; flex-direction: column; gap: 2px; }
.review-sale-what { margin: 0; font-size: 14px; color: var(--muted); }
.review-sale-listing { margin: 0; font-weight: 700; }
.review-form { display: flex; flex-direction: column; gap: 10px; }
.review-rating { border: 0; padding: 0; margin: 0; }
.review-rating legend { font-size: 15px; font-weight: 700; margin-bottom: 8px; }
.review-rating-options { display: flex; flex-wrap: wrap; gap: 6px; }
.review-rating-option {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  min-height: 44px;
  padding: 6px 12px 6px 10px;
  border: 1px solid var(--line);
  border-radius: 12px;
  cursor: pointer;
  font-weight: 700;
}
.review-rating-option input { position: absolute; opacity: 0; pointer-events: none; }
.review-rating-option:has(input:checked) { border-color: var(--accent); background: rgba(255, 90, 54, 0.08); }
.review-star { color: #F5B301; font-size: 20px; line-height: 1; }
.review-rating-num { font-size: 14px; }

.seller-page { max-width: 760px; }
.seller-head { display: flex; align-items: center; gap: 14px; margin-bottom: 14px; }
.seller-head-info { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.seller-head-info .page-title { font-size: 26px; overflow-wrap: anywhere; }
.seller-meta { margin: 0; color: var(--muted); font-size: 14px; }
.seller-rating {
  display: flex;
  align-items: center;
  gap: 14px;
  margin-bottom: 14px;
  border-color: rgba(245, 179, 1, 0.45);
}
.seller-rating-number {
  margin: 0;
  font-family: var(--font-title);
  font-size: 40px;
  line-height: 1;
  font-weight: 800;
  letter-spacing: -0.04em;
}
.seller-rating-detail { display: flex; flex-direction: column; gap: 2px; }
.seller-rating-count { margin: 0; color: var(--muted); font-size: 14px; }

@media (max-width: 480px) {
  .review-pending { flex-direction: column; align-items: flex-start; }
  .review-pending .btn { width: 100%; }
  .seller-head-info .page-title { font-size: 22px; }
  .seller-rating-number { font-size: 34px; }
}

/* ── 1338 — altri oggetti del venditore e sconto da 2 in su ─────────────── */
.ad-other {
  margin: 14px 0 8px;
  padding: 12px 12px 4px;
  border: 1px solid #3A3936;
  border-radius: 14px;
  background: rgba(255, 255, 255, 0.03);
}
.ad-other-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
.ad-other-title { margin: 0; font-family: var(--font-title); font-size: 17px; line-height: 1.25; }
.ad-other-all { color: var(--accent, #e8ff47); font-size: 14px; font-weight: 700; text-decoration: underline; text-underline-offset: 2px; white-space: nowrap; }
.ad-other-offer { margin: 4px 0 0; color: var(--accent, #e8ff47); font-size: 14px; font-weight: 700; }
.ad-rail-inline { padding: 8px 0 8px; gap: 10px; }
.ad-other .ad-card { width: 132px; }
.ad-other .ad-card-thumb { width: 132px; }

/* 1365 — tab del riquadro unico: contenuto cambiato senza ricaricare. */
.ad-related-tabs {
  display: flex;
  align-items: stretch;
  gap: 18px;
  margin: 0 0 2px;
  border-bottom: 1px solid rgba(255, 255, 255, 0.12);
}
.ad-related-tab {
  appearance: none;
  -webkit-appearance: none;
  background: none;
  border: 0;
  border-bottom: 2px solid transparent;
  margin-bottom: -1px;
  padding: 6px 0 8px;
  min-width: 0;
  font-family: var(--font-title);
  font-size: 15px;
  font-weight: 700;
  line-height: 1.25;
  color: #B8B6B0;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  cursor: pointer;
}
.ad-related-tab.is-active { color: var(--accent); border-bottom-color: var(--accent); }
.ad-related-pane { padding-top: 2px; }
.ad-related-links {
  display: flex;
  align-items: baseline;
  justify-content: flex-end;
  gap: 10px;
  margin: 2px 0 0;
}
.ad-related-links .ad-other-offer { margin: 0 auto 0 0; }

.compra-extras-offer { margin: 0 0 4px; color: #2c6b2f; font-weight: 800; }
.compra-extra {
  display: flex;
  gap: 10px;
  align-items: center;
  padding: 10px 0;
  border-bottom: 1px solid rgba(20, 20, 19, 0.1);
  cursor: pointer;
}
.compra-extra:last-of-type { border-bottom: 0; }
.compra-extra input { flex: 0 0 auto; width: 20px; height: 20px; }
.compra-extra-thumb {
  flex: 0 0 auto;
  width: 56px;
  height: 56px;
  border-radius: 9px;
  overflow: hidden;
  background: #ecebe6;
  display: flex;
  align-items: center;
  justify-content: center;
  color: #777;
}
.compra-extra-thumb img { width: 100%; height: 100%; object-fit: cover; }
.compra-extra-info { min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.compra-extra-info strong { font-weight: 700; line-height: 1.25; font-size: 15px; }
.compra-extra-info small { color: #55544E; font-size: 13px; }
.compra-lines { margin-top: 12px; }
.compra-line { display: flex; justify-content: space-between; gap: 12px; margin: 4px 0; color: #55544E; font-size: 15px; }
.compra-line[hidden] { display: none; }
.compra-lines .compra-total { margin-top: 8px; padding-top: 8px; border-top: 1px solid rgba(20, 20, 19, 0.12); }
.compra-submit-disabled { opacity: .55; }
.profile-bundle { margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--line); }
.profile-bundle-title { margin: 0 0 6px; font-size: 16px; }
.profile-bundle select { width: 100%; min-height: 48px; font: inherit; }
.chat-buynow-items { margin: 6px 0; padding-left: 20px; line-height: 1.45; font-size: 14px; }

/* 1366 — suggerimento sul dominio, indirizzo nella schermata del codice,
   «Non ti è arrivato?» con rimanda e cambia indirizzo. */
.email-suggest { margin: 6px 0 0; font-size: 14px; line-height: 1.4; color: #55544E; }
.email-suggest[hidden] { display: none; }
.email-suggest-btn {
  display: inline;
  background: none;
  border: 0;
  padding: 0;
  font: inherit;
  font-weight: 700;
  color: #141413;
  text-decoration: underline;
  cursor: pointer;
}
.email-suggest-btn:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 2px; }
.access-fix { margin: -6px 0 16px; text-align: center; font-size: 15px; }
.access-fix a { color: var(--accent-text); font-weight: 600; }
.access-resend[hidden] { display: none; }
.access-resend { margin: 8px 0 0; text-align: center; }
.access-resend-hint { margin: 0 0 2px; color: var(--muted); font-size: 14px; }
.access-resend-form { display: inline; }
.access-resend-sep { margin: 0 4px; color: var(--muted); }
.access-resend .access-change { display: inline; margin: 0; }
.access-resend .access-change,
.access-resend .access-change a { color: var(--accent-text); font-weight: 600; }
