/* Vetrina: la pelle della piattaforma. UNA palette, chiara e voluta.

   Qui NON c'e' impaginazione: solo colori e rilievi. Le pagine restano
   padrone del proprio layout, ed e' il motivo per cui questo foglio si puo'
   includere ovunque senza spostare niente.

   I NOMI dei token sono quelli storici (--cyan, --violet, --grad-...) anche
   se i valori non sono piu' ne' ciano ne' viola: le pagine li usano in
   duecento punti, e rinominarli adesso vorrebbe dire toccarle tutte per un
   guadagno estetico nel codice. Il glossario:

       --cyan       l'ACCENTO (zafferano #c77b12): era il ciano del marchio
       --violet     l'accento in ombra (zafferano cupo): era il viola del Pro
       --grad-*     oggi tinte PIENE: i gradienti sono usciti dal design
       --glow-cyan  oggi un anello morbido: l'alone al neon e' uscito con loro

   L'attributo data-tema="light" che le pagine mettono sull'<html> resta
   innocuo: non ci sono piu' due palette da scegliere. */

:root {
  /* --- fondali e testo --- */
  --bg: #fbfaf7;             /* carta calda: il banco */
  --surface: #ffffff;        /* le schede sono carta piu' bianca, posata sopra */
  --surface-2: #f4f0e6;      /* campi e chip: panna, un passo sotto la scheda */
  --ink: #16150f;
  --ink-tenue: #454034;      /* testo secondario, piu' scuro di --muted */
  --muted: #78715f;
  --line: #e9e4d7;           /* filo: quasi un capello */
  --line-bright: #d9d2c1;    /* filo marcato, per i bordi dei controlli */
  --placeholder: #a59d8b;

  /* --- componenti RGB, per le velature ---
     Le pagine usano lo stesso colore con una dozzina di opacita' diverse:
     qui c'e' la terna, chi scrive lo stile mette l'alfa che gli serve. */
  --cyan-rgb: 199, 123, 18;
  --violet-rgb: 154, 94, 11;
  --success-rgb: 47, 107, 79;
  --danger-rgb: 161, 51, 34;
  --ombra-rgb: 22, 21, 15;       /* l'ombra e' inchiostro caldo, mai nero freddo */
  --lume-rgb: 255, 255, 255;

  /* Fondo dei campi quando hanno il fuoco: sul chiaro si schiarisce. */
  --campo-fuoco: #ffffff;

  /* --- accenti --- */
  --cyan: #c77b12;           /* zafferano: L'accento, uno solo */
  --cyan-chiaro: #9a5e0b;    /* al passaggio del mouse si scurisce, non brilla */
  --violet: #9a5e0b;         /* il "Pro" e le bozze: zafferano cupo */
  --success: #2f6b4f;        /* verde bottiglia: solo semantico */
  --danger: #a13322;         /* rosso mattone: solo semantico */

  /* Testo dentro un pulsante pieno: bianco su zafferano e su verde. */
  --su-accento: #ffffff;
  --su-successo: #ffffff;

  /* --- ex gradienti: oggi tinte piene --- */
  --grad-accento: #c77b12;
  --grad-successo: #2f6b4f;
  --grad-marchio: #c77b12;
  /* I due capi del titolo: dall'inchiostro a un bruno caldo. */
  --titolo-da: #16150f;
  --titolo-a: #56503f;

  /* --- velature: fondi tenui degli stati --- */
  --velo-cyan: rgba(199, 123, 18, .10);
  --velo-violet: rgba(154, 94, 11, .10);
  --velo-success: rgba(47, 107, 79, .10);
  --velo-danger: rgba(161, 51, 34, .08);

  /* --- bordi colorati --- */
  --bordo-cyan: rgba(199, 123, 18, .38);
  --bordo-violet: rgba(154, 94, 11, .32);
  --bordo-success: rgba(47, 107, 79, .35);
  --bordo-danger: rgba(161, 51, 34, .38);

  /* --- rilievo: ombre soffici, mai aloni --- */
  --ombra: 0 1px 2px rgba(22, 21, 15, .04), 0 10px 28px rgba(22, 21, 15, .07);
  --ombra-accento: 0 1px 2px rgba(22, 21, 15, .06), 0 8px 22px -6px rgba(199, 123, 18, .35);
  --ombra-successo: 0 1px 2px rgba(22, 21, 15, .06), 0 8px 22px -6px rgba(47, 107, 79, .32);
  --alone-cyan: 0 0 0 3px rgba(199, 123, 18, .16);
  --glow-cyan: 0 0 0 3px rgba(199, 123, 18, .18);

  /* Il "viola" pieno del piano Pro: zafferano cupo, scritta chiara. */
  --grad-violet: #9a5e0b;
  --su-violet: #ffffff;

  /* Testo dentro le strisce di esito, sopra la loro velatura. */
  --testo-successo: #24523c;
  --testo-pericolo: #7c2718;

  /* Velo dietro le finestre modali. */
  --velo-modale: rgba(22, 21, 15, .45);

  /* Il vetro delle barre: chi vuole l'effetto smerigliato parte da qui. */
  --vetro: rgba(251, 250, 247, .82);

  /* Il carattere dei titoli: un graziato caldo, quello delle insegne e dei
     menu' stampati. E' una pila di sistema -- niente da scaricare, nessuna
     pagina che aspetta un carattere per disegnarsi. Sta qui e non nelle
     pagine perche' il titolo di «I miei QR» e quello della home devono
     essere lo stesso carattere: se ognuna se lo sceglie, alla terza pagina
     il sito ha tre voci. */
  --display: "Iowan Old Style", "Palatino Linotype", Palatino, Georgia,
             "Times New Roman", serif;
}

/* Il colore della barra del browser su telefono segue il fondo. */
:root { color-scheme: light; }

/* ==========================================================================
   Interruttori di tema e lingua
   ========================================================================== */

.preferenze { display: inline-flex; align-items: center; gap: 6px; }

.pref-btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 5px;
  height: 38px; padding: 0 11px;
  font-family: inherit; font-size: 12.5px; font-weight: 600;
  color: var(--muted);
  background: var(--surface-2);
  border: 1px solid var(--line-bright);
  border-radius: 999px;
  cursor: pointer;
  transition: color .18s, border-color .18s;
}
.pref-btn:hover { color: var(--cyan); border-color: var(--cyan); }
.pref-btn .simbolo { font-size: 14px; line-height: 1; }

/* La lingua non attiva resta leggibile ma spenta: si capisce che e' un
   interruttore a due stati e non un'etichetta. */
.pref-lingua b { color: var(--ink); font-weight: 700; }
.pref-lingua span { opacity: .45; }

/* ==========================================================================
   Selettore di destinazione (destinazione.js)
   ==========================================================================
   Vive in tre editor, quindi lo stile sta qui e non in una pagina: e' la
   stessa ragione per cui il componente e' uno solo. */

.dest select {
  width: 100%; font-family: inherit; font-size: 15px; color: var(--ink);
  padding: 11px 12px; border: 1px solid var(--line-bright); border-radius: 10px;
  background: var(--surface-2);
}
.dest select:focus { outline: none; border-color: var(--cyan); box-shadow: var(--glow-cyan); }

.dest-extra { margin-top: 9px; display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.dest-extra[hidden] { display: none; }
.dest-extra input[type=text] {
  flex: 1; min-width: 160px; font-family: inherit; font-size: 15px; color: var(--ink);
  padding: 11px 12px; border: 1px solid var(--line-bright); border-radius: 10px;
  background: var(--surface-2);
}
.dest-nome {
  font-size: 13px; color: var(--muted); min-width: 0;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.dest-nome.scelto { color: var(--ink); }

/* ---------------------------------------------------------------- scheda QR
   La scheda di un QR dinamico, disegnata da qr_scheda.js e usata da piu' di
   una pagina ("I miei QR", "I miei QR intelligenti"). Sta qui e non nello
   <style> delle pagine perche' due copie divergono: il comportamento e' gia'
   condiviso, e un aspetto diverso fra le due pagine confonderebbe.

   tema.css e' collegato PRIMA dello <style> di ogni pagina, quindi una pagina
   che ridefinisce una di queste regole vince comunque. Spostarle qui non puo'
   rompere chi ne aveva gia' una sua. */
/* UNA CARTA per codice. Prima era una riga con sette pulsanti in fila e un
   campo di testo sempre aperto: da lontano sette carte identiche, e per
   trovare quella giusta si leggeva ogni riga. Adesso in cima c'e' quello che
   serve a riconoscerlo -- il codice, il nome, dove porta -- e le azioni
   stanno sotto, con le meno usate raccolte in «Altro». */
.qr-griglia { display: grid; gap: 14px; }
@media (min-width: 760px) { .qr-griglia { grid-template-columns: 1fr 1fr; } }

.qr-carta {
  display: flex; flex-direction: column; gap: 14px;
  padding: 18px; border-radius: 16px;
  background: var(--surface); border: 1px solid var(--line);
  transition: border-color .2s, box-shadow .2s, transform .2s;
}
.qr-carta:hover { border-color: var(--line-bright); box-shadow: var(--ombra); }
.qr-carta.spenta { opacity: .62; }
.qr-carta.spenta:hover { opacity: 1; }

.qr-testa { display: flex; gap: 14px; align-items: flex-start; text-align: left; }
.qr-mini {
  flex-shrink: 0; width: 84px; height: 84px; border-radius: 10px;
  padding: 6px; image-rendering: pixelated;
  /* Bianco fisso: un lettore si aspetta moduli scuri su chiaro. */
  background: #fff; border: 1px solid var(--line);
}
.qr-chi { min-width: 0; flex: 1; }
.qr-nome {
  font-size: 16px; font-weight: 700; margin: 0; color: var(--ink);
  word-break: break-word; line-height: 1.25;
}
.qr-carta.spenta .qr-nome { color: var(--muted); }
.qr-tag { margin-top: 6px; }
/* Dove porta: il codice breve in evidenza, la destinazione in tono minore.
   Quello che si riconosce e' il breve -- e' quello stampato sul tavolo. */
/* Due righe al massimo: un indirizzo lungo mangiava mezza carta, e da
   quattro righe in giu' non lo legge nessuno comunque. */
.qr-dove {
  font-family: var(--mono); font-size: 11.5px; line-height: 1.6;
  margin: 8px 0 0; word-break: break-all; color: var(--muted);
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;
  overflow: hidden;
}
.qr-dove .breve { color: var(--ink-tenue); font-weight: 600; }
.qr-dove .freccia { color: var(--cyan); margin: 0 6px; }
.qr-dove .meta { color: var(--muted); }

.qr-cambia { display: flex; gap: 8px; }
.qr-cambia[hidden] { display: none; }
.qr-cambia input {
  flex: 1; min-width: 0; font-family: var(--mono); font-size: 12.5px; color: var(--ink);
  padding: 10px 12px; border: 1px solid var(--line-bright); border-radius: 10px;
  background: var(--surface-2);
}
.qr-cambia input:focus { outline: none; border-color: var(--cyan); box-shadow: var(--glow-cyan); }

.qr-fondo {
  display: flex; gap: 7px; flex-wrap: wrap; align-items: center;
  margin-top: auto; padding-top: 2px;
}

/* «Altro»: un <details> nativo. Si apre da tastiera, si chiude da solo, e
   non serve una riga di codice per farlo funzionare. */
.piu { position: relative; }
.piu > summary {
  list-style: none; cursor: pointer;
  width: 38px; height: 38px; border-radius: 10px;
  display: inline-flex; align-items: center; justify-content: center;
  font-size: 17px; color: var(--muted);
  background: var(--surface-2); border: 1px solid var(--line-bright);
}
.piu > summary::-webkit-details-marker { display: none; }
.piu > summary:hover { color: var(--cyan-chiaro); border-color: var(--cyan); }
.piu-menu {
  position: absolute; right: 0; bottom: calc(100% + 6px); z-index: 20;
  min-width: 210px; padding: 6px;
  background: var(--surface); border: 1px solid var(--line);
  border-radius: 14px; box-shadow: var(--ombra);
  display: flex; flex-direction: column;
}
.voce-piu {
  font-family: inherit; font-size: 13.5px; font-weight: 500; text-align: left;
  color: var(--ink); background: none; border: 0; border-radius: 9px;
  padding: 9px 11px; cursor: pointer;
}
.voce-piu:hover { background: rgba(var(--ombra-rgb), .05); }
.voce-piu.pericolo { color: var(--danger); }
.voce-piu.pericolo:hover { background: var(--velo-danger); }

.tag {
  display: inline-block; font-family: var(--mono); font-size: 10px; font-weight: 600;
  padding: 2px 8px; border-radius: 999px; text-transform: uppercase; letter-spacing: .04em;
  margin-left: 6px; vertical-align: 1px;
}
.tag-off { color: var(--muted); border: 1px solid var(--line-bright); }
/* La lingua di un menu' tradotto: si riconosce da lontano, in un elenco
   dove l'originale ha quasi lo stesso nome. */
.tag.lingua { color: var(--cyan-chiaro); background: var(--velo-cyan);
  border: 1px solid var(--bordo-cyan); }
.tag-sync { color: var(--danger); border: 1px solid rgba(var(--danger-rgb), .4); }
/* La stellina del QR intelligente. Viola come l'anteprima delle regole, per
   legare il segno al posto in cui si modificano. Non e' solo l'emoji: da sola
   sarebbe muta per chi legge con lo schermo, e il testo accanto dice cosa
   significa. */
.tag-regole {
  color: var(--violet); border: 1px solid var(--bordo-violet);
  background: var(--velo-violet);
}

.row-edit { display: flex; gap: 8px; margin-top: 12px; }
.row-edit input {
  flex: 1; min-width: 0; font-family: var(--mono); font-size: 12.5px; color: var(--ink);
  padding: 9px 11px; border: 1px solid var(--line-bright); border-radius: 9px;
  background: var(--surface-2);
}
.row-edit input:focus { outline: none; border-color: var(--cyan); box-shadow: var(--glow-cyan); }

.qr-azioni { display: flex; gap: 7px; margin-top: 10px; flex-wrap: wrap; }

.group-title {
  font-family: var(--mono); font-size: 12px; font-weight: 600; letter-spacing: .06em;
  text-transform: uppercase; color: var(--cyan); margin: 26px 0 12px;
  display: flex; align-items: center; gap: 8px;
}
.group-title:first-child { margin-top: 6px; }
.group-title .count { color: var(--muted); font-weight: 500; }
.empty { color: var(--muted); font-size: 14px; padding: 8px 0 4px; }
/* La riga sotto un'intestazione di gruppo: spiega cos'e' quel gruppo quando
   non e' ovvio, come i QR spenti (che sono una riserva, non uno scarto). */
/* Era un paragrafo lungo quattro righe, appoggiato a sinistra sotto un
   titolo centrato: si leggeva come un avviso legale in fondo a un modulo.
   Adesso e' un riquadro, con la frase che conta in grassetto e il resto
   sotto -- e sta in mezzo alla colonna come tutto il resto. */
.spiega-gruppo {
  color: var(--ink-tenue); font-size: 13.5px; line-height: 1.6;
  margin: 0 auto 16px; max-width: 62ch;
  padding: 14px 18px; border-radius: 12px;
  background: var(--surface-2); border: 1px solid var(--line);
}
.spiega-gruppo b { display: block; color: var(--ink); margin-bottom: 4px; }
.spiega-gruppo span { display: block; color: var(--muted); font-size: 12.5px; }

/* Un gruppo a tendina: l'intestazione resta sempre visibile, il contenuto si
   apre solo se serve. E' <details> nativo -- si apre da tastiera, lo screen
   reader lo annuncia, e la ricerca nella pagina lo trova anche da chiuso --
   invece di un pulsante nostro che dovrebbe rifare tutte e tre le cose. */
.gruppo-tendina { margin-top: 26px; }
/* Da sola l'intestazione sembrava un'etichetta come le altre e non si capiva
   che si apriva: qui ha il contorno di un pulsante, cosi' si vede che e' una
   cosa da premere. */
.gruppo-tendina > summary.group-title {
  cursor: pointer; margin: 0;
  padding: 11px 14px; border-radius: 11px;
  border: 1px solid var(--line-bright); background: var(--surface-2);
  transition: border-color .18s, color .18s, background .18s;
  /* Il triangolino predefinito lo disegniamo noi qui sotto, cosi' e' uguale
     nei due browser che lo rendono in modo diverso. */
  list-style: none;
}
.gruppo-tendina[open] > summary.group-title { margin-bottom: 12px; }
.gruppo-tendina > summary::-webkit-details-marker { display: none; }
.gruppo-tendina > summary.group-title::before {
  content: "\203A";                     /* › */
  display: inline-block; font-size: 17px; line-height: 1; font-weight: 700;
  transition: transform .18s; color: var(--cyan);
}
.gruppo-tendina[open] > summary.group-title::before { transform: rotate(90deg); }
.gruppo-tendina > summary.group-title:hover {
  border-color: var(--cyan); color: var(--cyan-chiaro);
}
.gruppo-tendina > summary.group-title:focus-visible {
  outline: none; border-color: var(--cyan); box-shadow: var(--glow-cyan);
}
/* La riga di spiegazione ha un margine negativo per stringersi sotto un
   .group-title normale. Qui l'intestazione e' un <summary> che ha gia' il suo
   margine sotto, e il negativo la faceva risalire sopra la riga. */
.gruppo-tendina[open] > .spiega-gruppo { margin-top: 0; }


/* ===========================================================================
   I comandi dell'aspetto: miniature dei colori, tendine dei caratteri,
   interruttori. Li disegna static/aspetto.js e li usano due editor -- quello
   dei menù e quello delle pagine di ingresso. Lo stile sta qui per lo stesso
   motivo per cui sta qui quello della scheda dei QR: due copie divergono alla
   prima modifica.
   =========================================================================== */
  /* --- le tre scelte dell'aspetto ----------------------------------------- */
  /* L'intestazione di un gruppo di scelte. Più grande del testo d'aiuto che
     le sta intorno: sono i quattro appigli con cui si trova a colpo d'occhio
     il gruppo che si cerca, e alla misura dell'aiuto ci si perdevano dentro.
     Due classi e non un !important: .aiuto è dichiarata più sotto e a parità
     di peso vincerebbe lei. */
  .aiuto.sotto-et {
    margin-top: 22px; font-size: 15px; color: var(--ink);
  }
  .scelte { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 6px; }
  .scelta {
    cursor: pointer; font-family: inherit; font-size: 14px;
    padding: 9px 16px; border-radius: 9px; color: var(--ink);
    background: var(--surface-2); border: 1px solid var(--line-bright);
    transition: border-color .18s, box-shadow .18s;
  }
  .scelta:hover { border-color: var(--cyan); }
  .scelta.attiva { border-color: var(--cyan); box-shadow: var(--glow-cyan); }
  /* La tendina dei caratteri, scritta nel carattere scelto. Su desktop anche
     le voci si disegnano nel proprio; su Safari e sui telefoni no, ed è per
     quello che sotto c'è il campione. */
  .sel-font {
    font-size: 15px; padding: 9px 12px; border-radius: 9px; margin-top: 6px;
    color: var(--ink); background: var(--surface-2);
    border: 1px solid var(--line-bright); max-width: 280px; width: 100%;
  }
  .sel-font:focus { outline: none; border-color: var(--cyan); box-shadow: var(--glow-cyan); }
  /* Grassetto e corsivo: due quadratini, come in qualunque programma di
     scrittura. Quattro pulsanti con scritto «Normale» e «Grassetto» direbbero
     la stessa cosa in quattro volte lo spazio. */
  .scelta-gc { min-width: 42px; font-size: 15px; }
  /* Il cursore dell'aspetto (larghezza della colonna, grandezza delle voci).
     Lo stile stava scritto a mano dentro l'attributo `style` del comando: la
     classe c'era ma non stilava niente, ed era l'unica classe orfana del
     progetto. Qui vale per tutti e due gli editor, come le altre. */
  .cursore-aspetto {
    display: block; width: 100%; max-width: 300px;
    accent-color: var(--cyan);
  }
  /* Il selettore del colore di un gruppo di scritte: un quadrotto della
     stessa taglia dei pulsanti accanto, che MOSTRA il colore in uso. */
  .campo-colore {
    width: 52px; height: 40px; padding: 3px; cursor: pointer;
    background: var(--surface-2); border: 1px solid var(--line-bright);
    border-radius: 9px;
  }
  .campo-colore:hover { border-color: var(--cyan); }
  .campione {
    font-size: 19px; color: var(--ink); margin: 9px 0 0;
    padding: 10px 13px; border-radius: 9px;
    background: var(--surface-2); border: 1px dashed var(--line-bright);
    /* Un nome lungo non deve allargare la tendina fuori dalla pagina. */
    overflow-x: auto; white-space: nowrap;
  }

  .temi {
    display: grid; gap: 10px; margin-top: 12px;
    /* Tre per riga su telefono, sei su desktop: le miniature restano grandi
       abbastanza da riconoscere il tema, senza scendere sotto il bersaglio
       da 44 px con cui si preme col pollice. */
    grid-template-columns: repeat(auto-fit, minmax(88px, 1fr));
  }
  .tema {
    display: flex; flex-direction: column; gap: 7px; cursor: pointer;
    padding: 8px; border-radius: 11px; font-family: inherit;
    background: var(--surface-2); border: 1px solid var(--line-bright);
    transition: border-color .18s, box-shadow .18s;
  }
  .tema:hover { border-color: var(--cyan); }
  .tema.scelto { border-color: var(--cyan); box-shadow: var(--glow-cyan); }
  .tema-nome { font-size: 12.5px; font-weight: 600; color: var(--ink); }

  /* La miniatura e' il tema in piccolo: fondo, nome del locale, titolo di
     categoria, due righe di piatto. Bastano a riconoscerlo senza aprirlo, e i
     colori sono quelli veri -- arrivano dall'API, non sono ridipinti qui. */
  .mini {
    display: flex; flex-direction: column; gap: 4px; justify-content: center;
    height: 58px; padding: 9px 8px; border-radius: 7px;
    border: 1px solid var(--line);
  }
  .mini span { display: block; border-radius: 2px; }
  .mini-titolo { height: 6px; width: 62%; margin: 0 auto 3px; }
  .mini-cat { height: 3px; width: 34%; }
  .mini-riga { height: 3px; width: 100%; opacity: .85; }
  .mini-riga.corta { width: 70%; }
