/* ==========================================================================
   Auto Moto Office — stil.css (T1c, 18 sep 2026)
   Layout, componente, responsive 360–1440, mișcare, print.
   Toate culorile/spațiile/razele vin din tokens.css (--amo-*) — nicio valoare
   nouă de culoare/spațiu nu se scrie aici direct. Numerele care NU sunt deja
   în design/DESIGN.md sunt explicate lângă ele, cu „cine l-a ales și de ce".
   ========================================================================== */

/* ------------------------------------------------------------------ reset -- */
/* Reset minimal, nu o librărie: doar ce ne mușcă în layout-ul ăsta. */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body {
  margin: 0;
  background: var(--amo-fundal);
  color: var(--amo-text);
  font-family: var(--amo-font-text);
  font-size: var(--amo-t-baza);
  font-weight: var(--amo-greutate-text);
  line-height: var(--amo-lh-text);
  -webkit-font-smoothing: antialiased;
}
img { max-width: 100%; display: block; }
svg { overflow: visible; }

h1, h2, h3 {
  font-family: var(--amo-font-titlu);
  font-weight: 600;
  line-height: var(--amo-lh-titlu);
  letter-spacing: var(--amo-spatiere-titlu);
  color: var(--amo-text);
  margin: 0 0 var(--amo-sp-3);
}
h1 { font-size: var(--amo-t-h1); line-height: var(--amo-lh-afis); }
h2 { font-size: var(--amo-t-h2); }
h3 { font-size: var(--amo-t-h3); }

p { margin: 0 0 var(--amo-sp-4); max-width: var(--amo-lat-rand); }
ul, ol { margin: 0; padding: 0; }
label { font-weight: 600; }

a {
  color: var(--amo-bleumarin);
  text-decoration-thickness: 1px;
  text-underline-offset: 0.15em;
}
a:hover { color: var(--amo-bleumarin-adanc); }

/* Focus vizibil peste tot (DESIGN.md §8): inel 3px, decalaj 2px, niciodată `outline:none`
   fără înlocuitor. `:focus-visible` ca să nu apară la un simplu clic de mouse. */
:focus-visible {
  outline: var(--amo-inel) solid var(--amo-inel-culoare);
  outline-offset: var(--amo-inel-decalaj);
  border-radius: var(--amo-raza-mic);
}
.subsol :focus-visible { outline-color: var(--amo-inel-culoare-pe-inchis); }

/* Ordinea DOM = ordinea vizuală (§8); linkul „Sari la conținut" e primul element focalizabil,
   invizibil până primește focus. */
.sari {
  position: absolute;
  top: -100px;
  left: var(--amo-sp-4);
  z-index: 100;
  background: var(--amo-suprafata);
  color: var(--amo-bleumarin);
  padding: var(--amo-sp-3) var(--amo-sp-4);
  border-radius: var(--amo-raza);
  box-shadow: var(--amo-umbra);
  transition: top var(--amo-durata) var(--amo-curba);
}
.sari:focus { top: var(--amo-sp-4); }

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

/* ---------------------------------------------------------------- containere -- */
/* O singură clasă de container lat + una îngustă (DESIGN.md §4). Aplicate direct pe
   `<section>`/`<main>` prin selector de tip, ca fiecare pagină de conținut să nu
   trebuiască o clasă de wrapper suplimentară pe care T2 ar uita s-o adauge.
   `main#continut > p` (orice paragraf, nu doar `.lead`/`.verificare-info`) și
   `main#continut > .firimituri` intră în ACEEAȘI regulă (polish vizual, punctele 5 și 6,
   18 sep 2026) — înainte `.firimituri` avea DOAR `padding-inline`, fără `max-width` +
   `margin-inline: auto`, deci breadcrumb-ul pornea din marginea viewportului (x≈32px pe
   desktop) în timp ce restul conținutului pornea din marginea containerului de 1152px
   centrat (x≈96px) — vizibil nealiniate. Similar, un `<p>` fără clasă direct sub `<main>`
   (ex. paragraful de după caseta „Informații verificate…" din acte-necesare-inmatriculare-
   sibiu.html) nu primea niciun gutter pe mobil. Regula corectă e „orice paragraf direct sub
   main", nu o listă de clase enumerate una câte una la fiecare pagină nouă. */
main#continut > section,
main#continut > .pagina-404,
main#continut > .doc,
main#continut > h1,
main#continut > p,
main#continut > .firimituri {
  max-width: var(--amo-lat-max);
  margin-inline: auto;
  padding-inline: var(--amo-gutter);
}

/* ---------------------------------------------- pagina de document (L5, 19 sep 2026) -- */
/* O SINGURĂ regulă de lățime pentru textul curgător al paginilor interioare (Înmatriculări,
   Acte necesare, Asigurări, Firme și flote, Despre noi, Confidențialitate, Cookies — lista
   exactă e `PAGINI_DOCUMENT` în build/genereaza.py, care emite wrapperul `.doc`).

   DEFECTUL reparat, măsurat la 1280 px pe versiunea dinainte: `p.lead` direct în `<main>`
   pornea de la x=64 (marginea containerului lat, nu a grilei), `p` dintr-o secțiune de la 96
   dar se oprea la 624 (plafonat de `p { max-width: 66ch }`), iar `ul`, `li` și
   `p.sursa-oficiala` din ACEEAȘI secțiune mergeau până la 1184 — paragraful pe jumătate de
   pagină, lista de sub el pe toată. Cauza: plafonul de lizibilitate stătea pe `p`, nu pe o
   coloană. Acum îl poartă coloana (`.doc__text`), iar `p` îl pierde înăuntru (vezi mai jos),
   ca să existe o singură autoritate pe lățime.

   În dreapta coloanei, pe desktop, stă coloana de ajutor — nu un gol de 500 px. */
.doc__text { max-width: var(--amo-lat-citire); }
/* Înăuntrul coloanei, `p` NU-și mai pune propriul plafon: coloana e singura autoritate, deci
   un paragraf, o listă și o casetă de sursă au exact aceeași lățime maximă. */
.doc__text p { max-width: none; }

@media (min-width: 960px) {
  /* 960 — același prag ca antetul, grila paginii de contact și footerul; e și lățimea la care
     coloana de lectură (528) + distanța minimă (48) + coloana laterală (320) fac exact
     conținutul disponibil (896 px). `space-between` împinge coloana laterală pe marginea din
     dreapta a grilei paginii: marginea ei se aliniază cu CTA-ul din antet, cu ultima coloană
     din footer și cu firul Ariadnei, în loc să lase un gol nealiniat la dreapta ei. */
  main#continut > .doc {
    display: grid;
    grid-template-columns: minmax(0, var(--amo-lat-citire)) var(--amo-lat-lateral);
    column-gap: var(--amo-sp-7); /* 48px = distanța MINIMĂ; space-between o poate mări */
    justify-content: space-between;
    align-items: start;
  }
}

/* Pagina 404 primește ACEEAȘI coloană de lectură ca paginile de document, dar fără coloană
   laterală (o pagină de eroare are nevoie de ieșiri, nu de un al doilea panou de contact).

   REPARAȚIE L5b, 19 sep 2026 — incoerență lăsată de oprirea la jumătate a lotului precedent:
   `.pagina-404` primise `max-width: 66ch !important`, dar continua să moștenească
   `margin-inline: auto` de la regula de container de mai sus, deci blocul întreg era CENTRAT
   pe pagină. Măsurat la 1280: textul paginii 404 pornea de la x=408, în timp ce pe fiecare
   altă pagină a site-ului textul pornește de la x=96 (marginea logo-ului). În plus,
   `.pagina-404` nu mai era `text-align: center`, dar simbolul de deasupra rămăsese
   `margin: 0 auto` — text la stânga, simbol la mijloc, bloc centrat: trei alinieri pe aceeași
   pagină.
   Aleg STÂNGA peste tot, coerent cu restul site-ului: blocul rămâne pe grila paginii (fără
   `!important` și fără să atingă centrarea containerului), iar plafonul de lizibilitate trece
   pe copiii lui — exact mecanismul folosit de `.doc__text`, nu un al doilea. */
.pagina-404__coloana { max-width: var(--amo-lat-citire); }

/* HERO (L3, 19 sep 2026 — F12). Regula de dinainte îl restrângea pe desktop la 704px cu
   `padding-inline: 0`, iar rezultatul era exact defectul din audit: textul atingea marginea
   casetei rotunjite, iar caseta pornea de la alt x (288px la 1280) decât logo-ul din antet și
   decât titlul „Cu ce te ajutăm" (96px). Acum hero-ul NU mai are nicio regulă proprie de
   container: intră în aceeași regulă „main#continut > section" ca toate celelalte secțiuni
   (max-width 1152px, padding-inline = gutter), deci prima literă din H1 stă exact pe verticala
   la care încep toate titlurile paginii. Colțurile rotunjite rămân, dar doar de la 900px în sus
   — pe telefon banda ocupă toată lățimea ecranului, unde o rază ar arăta ca un card tăiat. */
@media (min-width: 900px) {
  main#continut > section.hero {
    border-radius: var(--amo-raza-mare);
    /* Colțurile de sus rotunjite erau LIPITE de linia antetului — arăta ca un card tăiat, nu ca
       o casetă. Două ieșiri posibile: bandă întreagă fără colțuri sus, sau un pic de aer
       deasupra. Aleg aerul: banda întreagă ar fi mutat hero-ul pe altă lățime decât restul
       paginii, iar 24px (`--amo-sp-5`, treapta obișnuită dintre un card și vecinul lui) e destul
       cât să se vadă că e o casetă pe pagină, nu o prelungire a antetului. Doar de la 900px în
       sus, adică exact acolo unde caseta are colțuri rotunjite. */
    margin-top: var(--amo-sp-5);
  }
}

main#continut { display: block; }

/* Ritmul vertical între secțiuni (§4): 48px → 88px, fluid. */
main#continut > * + * { margin-top: var(--amo-sectiune); }
main#continut > .firimituri + * { margin-top: var(--amo-sp-6); }

/* Golul de sub CTA-urile hero pe desktop (L5b, 19 sep 2026 — măsurat, apoi tăiat).
   Ce am măsurat la 1280, pe versiunea dinainte: banda hero are 88px de padding sus și 88 jos
   (`--amo-sectiune`); butonul „Discută cu noi" se termină la y=477, banda la y=576 (99px sub
   el — cei 11px în plus vin din `align-items:center`, fiindcă panoul „Ne găsești" e cu 23px
   mai înalt decât coloana de text). Atât e echilibrat: optic, golul de deasupra titlului e
   chiar puțin mai mare. Deci NU padding-ul benzii e problema.
   Problema era că peste cei 88px de padding ai benzii se adăuga încă un `--amo-sectiune` de
   ritm până la secțiunea următoare: de la baza butoanelor până la titlul „Cu ce te ajutăm"
   ieșeau 195px de fundal aproape gol pe un ecran de 900px înălțime. O bandă cu padding
   propriu își aduce singură ritmul; ce urmează după ea are nevoie doar de o treaptă de
   separare, nu de încă un ritm întreg. 32px (`--amo-sp-6`) e treapta „intro → conținut" din
   §4, deci 88 (interior) + 32 (exterior) = 120px, tot peste ritmul obișnuit de 88 dintre
   două secțiuni fără fundal. */
main#continut > section.hero + * { margin-top: var(--amo-sp-6); }

/* Ritmul DIN interiorul unei secțiuni (§4 DESIGN.md): titlu → 12px → intro → 32px → conținut.
   Fără regulile astea, „main#continut > * + *" punea --amo-sectiune (88px pe desktop) și între
   H1 și propriul lui paragraf de introducere: pe Contact și pe Despre, titlul plutea singur la
   aproape un centimetru de fraza lui (F12, „distanțe foarte mari între titlu, introducere și
   conținut"). Spațiul alb trebuie să grupeze, nu să despartă. */
main#continut > h1 + p { margin-top: var(--amo-sp-3); }   /* 12px: intro lipit de titlul lui */
main#continut > p.lead + * { margin-top: var(--amo-sp-6); } /* 32px: intro → conținut */

/* Aceeași scară în interiorul secțiunilor. `h2` are deja `margin-bottom: 12px`; marginile
   adiacente se contopesc la valoarea mai mare, deci 32px aici înseamnă fix 32px, nu 44.
   Două cazuri, amândouă ancorate în `h2` — dinadins: „intro" înseamnă paragraful DE DUPĂ
   titlu, nu orice paragraf din secțiune. Prima variantă (`h2 + p + …`) prinde relația
   titlu → intro → conținut; a doua, secțiunile fără intro, unde titlul dă direct în conținut.
   Un selector mai lax (`p + :not(p)`, prima încercare) punea 32px și între eticheta „Program"
   și lista orelor de pe pagina de Contact — verificat într-o captură: ora de deschidere se
   desprinsese de propriul titlu. */
main#continut > section > h2 + :not(p),
main#continut > section > h2 + p + :not(p) { margin-top: var(--amo-sp-6); }

/* ACELAȘI ritm, o treaptă mai jos în arbore, pentru paginile de document: acolo secțiunile nu
   mai sunt copii direcți ai `<main>`, ci ai coloanei de lectură `.doc__text`, deci regulile de
   mai sus (ancorate în `main#continut >`) nu le mai prind. Nu e un al doilea ritm — sunt
   aceleași valori din §4, scrise pentru celălalt părinte. */
.doc__text > * + * { margin-top: var(--amo-sectiune); }
.doc__text > h1 + p { margin-top: var(--amo-sp-3); }        /* 12px: intro lipit de titlul lui */
/* Două paragrafe consecutive direct în coloană (titlu → lead → „verificat la…" → frază de
   orientare) se despart prin `margin-bottom`-ul lor de 16px, nu prin ritmul de 88px dintre
   secțiuni — altfel caseta „Informații verificate la…" plutea singură la un centimetru de
   fraza de deasupra și de cea de dedesubt (vizibil pe ghidul de acte, v1). */
.doc__text > p + p { margin-top: 0; }
.doc__text > p.lead + * { margin-top: var(--amo-sp-6); }    /* 32px: intro → conținut */
.doc__text > section > h2 + :not(p),
.doc__text > section > h2 + p + :not(p) { margin-top: var(--amo-sp-6); }

/* Blocurile de ORIENTARE din capul paginilor de document (L5b): cuprinsul ghidului și rândul
   de acțiuni al firmei. Nu sunt secțiuni de conținut, ci antetul util al paginii — titlu,
   frază de orientare, data verificării, „unde vrei să ajungi" — deci se leagă între ele cu
   32px („intro → conținut", §4), nu cu cei 88px de ritm dintre două secțiuni. Cu 88px,
   cuprinsul pica sub linia de plutire pe telefon exact la pagina unde el e reparația (F09). */
.doc__text > .cuprins { margin-top: var(--amo-sp-6); }
.doc__text > .cuprins + p { margin-top: var(--amo-sp-6); }
.doc__text > p.verificare-info + p.actiuni-pagina { margin-top: var(--amo-sp-6); }
/* Al doilea rând de acțiuni, de sub grila de cazuri — altfel se lipea de ultimul card
   (`p` are doar `margin-bottom`, iar regula de ritm de mai sus prinde numai copiii direcți
   ai coloanei, nu și ce e în interiorul unei secțiuni). */
.cazuri__grid + .actiuni-pagina { margin-top: var(--amo-sp-6); }

/* Listele de proză din coloana de lectură (`<ul>`/`<ol>` FĂRĂ clasă — cele cu clasă,
   `.linkuri-utile`, `.colaboratori__grid`, `.program`, `.nap`, își au deja stilul lor).
   Resetul global le lasă `padding: 0`, deci marcatorii cădeau ÎN AFARA coloanei, la stânga
   textului: singurele elemente din pagină care nu respectau marginea grilei. 24px (`--amo-sp-5`)
   e cât ține un marcator plus aerul până la text. Marginea de jos le desparte de paragraful
   următor, care altfel se lipea (paragrafele au doar `margin-bottom`). */
.doc__text ul:not([class]),
.doc__text ol:not([class]) {
  padding-left: var(--amo-sp-5);
  margin-bottom: var(--amo-sp-4);
}
/* Doar listele de proză — nu `.linkuri-utile`, nu grila de colaboratori (unde un `margin-top`
   pe elementele de grilă s-ar aduna peste `gap`). */
.doc__text ul:not([class]) > li + li,
.doc__text ol:not([class]) > li + li { margin-top: var(--amo-sp-2); } /* 8px: rândurile lungi de acte au nevoie de aer */

/* Aer înainte de footer: ultima secțiune se lipea de banda bleumarin (vizibil mai ales pe
   Contact, unde butonul „Trimite" atingea marginea footerului). Aceeași valoare ca ritmul
   dintre secțiuni — footerul e doar încă o secțiune, vizual. */
main#continut { padding-bottom: var(--amo-sectiune); }

/* ---------------------------------------------------- ancore sub antetul lipicios -- */
/* Antetul e `position: sticky; top: 0`, deci o ancoră (`/…#transcriere`) ateriza EXACT sub el:
   titlul cazului rămânea ascuns, omul vedea a doua linie de text și nu știa unde a ajuns.
   `scroll-margin-top` = înălțimea antetului + o treaptă de aer (24px), ca titlul țintă să se
   vadă întreg, cu puțin spațiu deasupra. Înălțimea NU e un număr orfan: `--amo-h-antet` e
   ACEEAȘI variabilă pe care o citește `.antet__interior { min-height }` mai jos — o singură
   sursă, în rem, deci crește odată cu antetul la text mărit (WCAG 1.4.4).
   Doar în `<main>`: id-urile din antet/footer nu sunt ținte de ancoră. */
main#continut,
main#continut [id] { scroll-margin-top: calc(var(--amo-h-antet) + var(--amo-sp-5)); }

/* ------------------------------------------- coloana de ajutor (L5, 19 sep 2026) -- */
/* Randată de build/genereaza.py (`randeaza_ajutor_lateral`) pe paginile de document.
   Sub 960px NU se afișează: apelul direct e deja în antetul lipicios (`.antet__tel`, vizibil
   exact pe intervalul ăsta), programul și adresa sunt în footer pe fiecare pagină, iar fiecare
   pagină comercială se încheie cu `.incheiere`. Un al patrulea bloc de contact la coada unui
   ecran de telefon ar fi zgomot, nu ajutor. */
@media (max-width: 959.98px) {
  .ajutor { display: none; }
}
@media (min-width: 960px) {
  .ajutor {
    position: sticky;
    /* Aceeași rezervă ca la ancore: panoul se oprește sub antetul lipicios, nu în spatele lui. */
    top: calc(var(--amo-h-antet) + var(--amo-sp-5));
    background: var(--amo-bleumarin-slab); /* aceeași suprafață ca panoul din hero-ul de pe Acasă, §2 */
    border-radius: var(--amo-raza-mare);
    padding: var(--amo-sp-5);
  }
}
.ajutor__titlu {
  margin: 0 0 var(--amo-sp-3);
  font-family: var(--amo-font-text);
  font-size: var(--amo-t-baza);
  font-weight: 600;
  /* Titlu de panou, nu titlu de secțiune: rămâne `<h2>` în DOM (intră corect în ierarhia
     paginii, §8), dar la mărimea textului de corp — un serif de 32px într-un panou lateral ar
     concura cu titlurile reale ale paginii. Fără MAJUSCULE și fără letter-spacing (§7, 4). */
}
.ajutor__whatsapp,
.ajutor__program,
.ajutor__cta { margin: var(--amo-sp-3) 0 0; max-width: none; }
.ajutor__program { font-size: var(--amo-t-mic); color: var(--amo-text-secundar); }
/* Butonul secundar pe `--amo-bleumarin-slab`: hover-ul standard e chiar fundalul panoului,
   deci ar fi invizibil — albul (suprafața de card) dă semnalul, la fel ca în `.incheiere`. */
.ajutor .cta--secundar { width: 100%; }
.ajutor .cta--secundar:hover { background: var(--amo-suprafata); }

/* ------------------------------------------------------------------- antet -- */
.antet {
  position: sticky;
  top: 0;
  /* 20: sub orice suprapunere modală viitoare, deasupra restului conținutului — ales aici,
     T1c, fiindcă nu exista niciun z-index în sistem înainte de antetul lipicios. */
  z-index: 20;
  background: var(--amo-suprafata);
  border-bottom: 1px solid var(--amo-linie);
}
/* Umbra la derulare (§5.1 DESIGN.md, polish vizual punctul 8, 18 sep 2026): clasa e comutată
   din assets/js/strat.js, pe scroll. Apare/dispare INSTANT — fără `transition` — ca să nu fie
   nevoie de nicio excepție pentru `prefers-reduced-motion` (§6: nimic de oprit înseamnă că
   regula globală din tokens.css n-are ce anula aici). */
.antet--umbra { box-shadow: var(--amo-umbra-mica); }
.antet__interior {
  max-width: var(--amo-lat-max);
  margin-inline: auto;
  padding-inline: var(--amo-gutter);
  /* DESIGN.md §5.1, prin `--amo-h-antet` din tokens.css (4rem = 64px; 4.75rem = 76px de la
     960px în sus). Variabila, nu numărul: aceeași valoare o citesc `scroll-margin-top`-ul
     ancorelor și poziția lipicioasă a coloanei de ajutor — dacă antetul se schimbă, se mută
     toate odată (L5, 19 sep 2026). */
  min-height: var(--amo-h-antet);
  /* B4: 64px NU mai e sursa — era o CONSTANTĂ care presupunea antetul mereu la înălțimea de
     bază; la text mărit 125-200% (WCAG 1.4.4) rândul de sus măsoară mai mult (112px la 200%),
     panoul ieșea sub ecran, tăiat (linkul „Contact" ajungea doar parțial vizibil). Sursa REALĂ e
     acum `assets/js/strat.js` (`actualizeazaInaltimeAntetMobil`,
     lângă `deschide()`): măsoară `.antet__interior` chiar înainte de a deschide panoul (moment în
     care `.antet__nav-lista` e ÎNCĂ `display:none`, deci elementul arată STRICT rândul de sus) și
     scrie valoarea ca stil INLINE pe acest element — care, fiind pe același element/aceeași
     proprietate, câștigă în fața declarației de mai jos. 64px rămâne DOAR ca plasă pentru
     fereastra dintre randare și primul `deschide()` din strat.js (sau dacă JS nu rulează deloc —
     caz în care regula de mai jos, condiționată de `.js`, oricum nu se aplică, vezi C411). */
  --amo-h-antet-mobil: var(--amo-h-antet);
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  /* Distanța pe orizontală scade la 8px sub 960px (L3, 19 sep 2026 — F12, „antetul mobil pe
     două rânduri"). Măsurat: la 360px lățime rămân 326px utili, iar logo(196) + 8 + telefon(44)
     + 8 + buton(44) = 300px încap pe UN rând; cu cei 24px de dinainte ieșeau 332px și antetul
     se rupea în două rânduri de ~96px. Pe desktop distanța rămâne 16px — vezi mai jos de ce
     nu mai sunt 24. */
  gap: var(--amo-sp-3) var(--amo-sp-2);
}
@media (min-width: 960px) {
  /* 960, nu 900 (DESIGN.md §5.1 spunea 900): meniul are acum șase intrări, nu cinci — „Acte
     necesare" a fost adăugat (F09). Măsurat pe pagina generată: cele șase linkuri ocupă 471px
     de text; cu distanța minimă de 16px între ele fac 551px, iar logo(228) + 16 + 551 + 16 +
     telefon(44) = 855px. La 900px de viewport rămân doar 836px utili, deci navigația orizontală
     NU încape și antetul s-ar rupe în două rânduri pe desktop (verificat: la 900–1140px v1
     chiar se rupea). 960 e pragul de la care încape, și e un număr deja folosit în foaia asta
     (grila pe două coloane a paginii de contact), nu unul nou. */
  /* `min-height` nu se mai repetă aici: `--amo-h-antet` trece singură pe 4.75rem (76px) la
     ACELAȘI prag, în tokens.css (L5, 19 sep 2026) — un singur loc de schimbat. */
  .antet__interior { gap: var(--amo-sp-3) var(--amo-sp-4); } /* DESIGN.md §5.1 */
}

.logo { display: flex; align-items: center; margin-right: auto; }
.logo img {
  height: 28px; /* DESIGN.md §5.1 */
  width: auto;  /* păstrează raportul real al SVG-ului (780,6 × 95,7) */
}
@media (max-width: 599.98px) {
  /* Logoul la 24px — minimul din §5.1 — pe TOT intervalul de telefon, nu doar sub 360px cum
     era înainte (L3, 19 sep 2026). Motivul e aritmetic: la 28px lockup-ul are 228px lățime, iar
     228 + 8 + 44 + 8 + 44 = 332px nu încap în cei 326px utili de la 360px de viewport — antetul
     s-ar rupe pe două rânduri exact pe lățimea cea mai frecventă. La 24px are 196px și rămân
     26px de aer. Logoul rămâne ÎNTREG (nu se taie la simbol): numele firmei e ce trebuie reținut. */
  .logo img { height: 24px; }
}

/* `.antet__nav` (elementul <nav>) e copilul flex REAL al `.antet__interior` — `order` și
   `flex-basis` trebuie puse AICI, nu pe `.antet__nav-lista` (e un nepot, `order` nu are
   niciun efect pe el fiindcă nu e copil direct de flex-container). Bug prins la verificarea
   vizuală a meniului mobil, 18 sep 2026: lista apărea deasupra CTA-ului/butonului, nu sub ele. */
.antet__nav {
  /* Pe mobil ocupă tot rândul, sub logo/CTA/buton — vezi regula .js mai jos, care ascunde
     lista DOAR când JavaScript rulează (skill site-aiso §1: fără JS nu se ascunde nimic). */
  flex-basis: 100%;
  order: 3;
}
.antet__nav-lista {
  list-style: none;
  display: flex;
  flex-direction: column;
  gap: var(--amo-sp-1);
}
.antet__nav-lista a {
  display: flex;
  align-items: center;
  min-height: 48px; /* DESIGN.md §5.1 — listă mobilă de 48px pe link */
  padding-inline: var(--amo-sp-2);
  color: var(--amo-text);
  text-decoration: none;
  font-weight: var(--amo-greutate-text);
  border-top: 1px solid var(--amo-linie);
}
.antet__nav-lista li:first-child a { border-top: 0; }
.antet__nav-lista a[aria-current="page"] {
  font-weight: 600;
  box-shadow: inset 0 -2px 0 var(--amo-chihlimbar); /* linia chihlimbar de 2px, §5.1 */
}

/* --------------------------------------------------- acțiunile din antet (L3, 19 sep) -- */
/* Două acțiuni, niciodată amândouă dominante: link-pictogramă de telefon și CTA-ul text.
   Sub 960px se vede doar telefonul; de la 1200px în sus amândouă. Între 960 și 1199 CTA-ul
   dispare fiindcă nu încape lângă navigația de șase linkuri (vezi socoteala de la
   `.antet__interior`) — iar dacă tot trebuie ales unul, apelul direct e cel care rezolvă ceva
   pe loc, în timp ce CTA-ul duce la un formular aflat oricum la un clic din meniu. */
.antet__actiuni {
  order: 1;
  display: flex;
  align-items: center;
  gap: var(--amo-sp-2);
}
.antet__tel {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: var(--amo-tinta-tactila);   /* 44×44, §4 — aceeași țintă ca butonul de meniu */
  height: var(--amo-tinta-tactila);
  border: 1px solid var(--amo-linie);
  border-radius: var(--amo-raza);
  color: var(--amo-bleumarin);
  background: transparent;
  transition: background-color var(--amo-durata) var(--amo-curba);
}
.antet__tel:hover { background: var(--amo-bleumarin-slab); color: var(--amo-bleumarin); }
.antet__tel-pictograma { display: block; }
@media (max-width: 359.98px) {
  /* Sub 360px nu mai încap logo + telefon + meniu pe un rând (196 + 8 + 44 + 8 + 44 = 300 >
     288 utili). Dispare pictograma, nu butonul de meniu: apelul rămâne la o distanță de un
     ecran — blocul mare de telefon din hero e imediat sub antet — în timp ce fără butonul de
     meniu nu s-ar mai putea naviga deloc. */
  .antet__tel { display: none; }
}
/* Când se vede CTA-ul din antet — regula stă în secțiunea „cta" de mai jos, lângă
   `.cta--antet`, fiindcă `.cta { display: inline-flex }` are aceeași specificitate și ar
   câștiga prin poziția în fișier dacă am ascunde CTA-ul de aici. */

/* Comutatorul de meniu: pătrat de 44×44 (țintă tactilă minimă, §4/§8), vizibil DOAR sub
   960px — peste, navigația e orizontală și butonul n-are ce comuta. */
.comutator-meniu {
  order: 2;
  width: var(--amo-tinta-tactila);
  height: var(--amo-tinta-tactila);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: transparent;
  border: 1px solid var(--amo-linie);
  border-radius: var(--amo-raza);
  cursor: pointer;
  padding: 0;
}
.comutator-meniu__linii,
.comutator-meniu__linii::before,
.comutator-meniu__linii::after {
  display: block;
  width: 20px;
  height: 2px;
  background: var(--amo-bleumarin);
  border-radius: 1px;
}
.comutator-meniu__linii { position: relative; }
.comutator-meniu__linii::before,
.comutator-meniu__linii::after {
  content: "";
  position: absolute;
  left: 0;
}
.comutator-meniu__linii::before { top: -6px; }
.comutator-meniu__linii::after { top: 6px; }

@media (min-width: 960px) {
  .comutator-meniu { display: none; }
  .antet__nav { flex-basis: auto; order: 0; }
  .antet__nav-lista {
    flex-direction: row;
    /* 16px între linkuri de la 960 la 1199 (unde spațiul e strâns cu șase intrări), 24px de
       la 1200 în sus. DESIGN.md §5.1 nu fixa distanța; 24 era valoarea aleasă la cinci linkuri.
       Minimul de 8px dintre două ținte tactile (§8) e respectat în ambele cazuri. */
    gap: var(--amo-sp-4);
  }
  .antet__nav-lista a {
    min-height: auto;
    border-top: 0;
    padding-inline: 0;
    font-size: var(--amo-t-baza);
    white-space: nowrap; /* „Firme și flote" pe un rând: rupt în două ar dubla înălțimea antetului */
  }
  .antet__nav-lista a[aria-current="page"] { box-shadow: inset 0 -2px 0 var(--amo-chihlimbar); }
}
@media (min-width: 1200px) {
  .antet__nav-lista { gap: var(--amo-sp-5); }
}

/* Meniul mobil: FĂRĂ JavaScript lista rămâne vizibilă (skill site-aiso §1) — de-asta regula
   care ascunde e condiționată de `.js`, pusă sincron în <head> doar când scriptul rulează. */
@media (max-width: 959.98px) {
  .js .antet__nav-lista { display: none; }
  .js .antet__nav--deschis .antet__nav-lista {
    display: flex;
    /* A4: pe telefon în peisaj (667×330 iPhone SE cu bara de browser, 568×320), antetul e
       `position: sticky; top: 0` (mai sus) — derularea PAGINII nu poate aduce partea de jos a
       panoului în vizor, rămâne tăiată oricât derulezi (linkul „Contact” ajungea doar parțial
       vizibil, în afara zonei atinse de deget). Panoul trebuie să se deruleze PE EL ÎNSUȘI:
       `max-height` = restul ecranului sub antet, din `--amo-h-antet-mobil` (definită mai sus la
       `.antet__interior` — o singură sursă, nu un număr nou). Rezerva cu `100vh` e pentru
       browsere fără `dvh`; regula cu `dvh` de după o suprascrie unde e suportată — `100dvh` ține
       cont de bara de adresă mobilă care apare/dispare (spre deosebire de `100vh`, care pe iOS
       Safari include zona acoperită de bară — ultimul link ar rămâne tăiat la fel). */
    max-height: calc(100vh - var(--amo-h-antet-mobil));
    max-height: calc(100dvh - var(--amo-h-antet-mobil));
    overflow-y: auto;
    overscroll-behavior: contain; /* derularea panoului nu se scurge în derularea paginii */
  }
}

/* -------------------------------------------------------------------- cta -- */
.cta {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--amo-sp-2);
  min-height: var(--amo-tinta-tactila); /* 44px, §4 */
  padding: 0 var(--amo-sp-5);
  border-radius: var(--amo-raza);
  font-weight: 600;
  font-size: var(--amo-t-baza);
  text-decoration: none;
  cursor: pointer;
  border: 1px solid var(--amo-chihlimbar-chenar);
  background: var(--amo-chihlimbar);
  color: var(--amo-bleumarin);
  transition: background-color var(--amo-durata) var(--amo-curba),
              transform var(--amo-durata) var(--amo-curba);
}
.cta:hover { background: var(--amo-chihlimbar-aprins); color: var(--amo-bleumarin); }
.cta:active { background: var(--amo-chihlimbar-apasat); transform: none; }
.cta[aria-disabled="true"], .cta:disabled {
  background: #EFE7D8; /* DESIGN.md §5.2, stare dezactivată */
  border-color: #EFE7D8;
  color: #8A8175;
  cursor: not-allowed;
}

.cta--secundar {
  background: transparent;
  border-width: 1.5px;
  border-color: var(--amo-bleumarin);
  color: var(--amo-bleumarin);
}
.cta--secundar:hover { background: var(--amo-bleumarin-slab); color: var(--amo-bleumarin); }
.cta--secundar:active { background: #DCE5EF; }

.cta--mare {
  min-height: 52px; /* T1c, 18 sep 2026: 8px peste minimul de 44px, ca CTA-ul principal din
                        hero/final să se distingă vizual de CTA-ul mic din antet fără o a doua
                        scară de mărimi noi — 52 rămâne multiplu de 4 (scara de spațiu §4). */
  padding-inline: var(--amo-sp-6);
  font-size: var(--amo-t-mediu);
}

/* §5.1: mic, 44px, 20px lateral. Ascuns implicit, reapare la 1200px — nu invers: ordinea asta
   face ca varianta mobilă (un singur buton lângă logo) să fie starea implicită, nu excepția.
   Regula trebuie să stea AICI, DUPĂ `.cta { display: inline-flex }`: are aceeași specificitate
   (o clasă), deci câștigă doar prin poziția în fișier. Pusă lângă `.antet__actiuni`, mai sus,
   n-avea niciun efect — verificat într-o captură: CTA-ul rămânea vizibil pe telefon și antetul
   se rupea tot în două rânduri. */
.cta--antet { display: none; min-height: 44px; padding-inline: var(--amo-sp-5); }
@media (min-width: 1200px) {
  /* 1200: de la lățimea asta containerul e plafonat la 1152px, deci rămân 1088px utili.
     Măsurat pe pagina generată: logo(228) + 16 + navigație(591) + 16 + telefon(44) + 8 +
     CTA(122) = 1025px, cu 63px de rezervă. Sub 1130px suma depășește spațiul și antetul s-ar
     rupe în două rânduri — de-aia CTA-ul, nu telefonul, e cel care dispare primul. */
  .cta--antet { display: inline-flex; }
}

.hero__cta { display: flex; flex-wrap: wrap; gap: var(--amo-sp-4); margin-top: var(--amo-sp-6); }

/* ------------------------------------------------------------------- hero -- */
.hero {
  background: var(--amo-fundal-cald);
  /* Doar padding pe verticală: pe orizontală îl dă regula de container
     („main#continut > section"), ca marginea textului din hero să cadă pe aceeași verticală
     cu a tuturor celorlalte secțiuni. Vezi nota lungă de la regula hero-ului, mai sus. */
  padding-block: var(--amo-sectiune);
  text-align: left;
}
.hero h1 {
  font-size: var(--amo-t-afis);
  line-height: var(--amo-lh-afis);
  max-width: 20ch; /* T1c: titlul de afiș citește mai bine scurt pe un rând decât întins la 66ch */
}
.hero__lead {
  font-size: var(--amo-t-mediu);
  color: var(--amo-text-secundar);
  max-width: var(--amo-lat-rand);
  margin-bottom: 0;
}

/* Grila hero-ului: text la stânga, panoul „Ne găsești" la dreapta. Pe telefon una sub alta,
   panoul al doilea — primul lucru citit rămâne ce face firma, imediat sub el butonul de apel. */
.hero__grila { display: grid; gap: var(--amo-sp-6); }
@media (min-width: 900px) {
  .hero__grila {
    /* 7fr / 5fr, nu 1fr/1fr: coloana de text ține H1 (max 20ch) și lead-ul aproape de lungimea
       lor naturală, iar panoul are nevoie doar cât să încapă numărul de telefon pe un rând.
       La 1280px ies ≈600px / ≈420px. */
    grid-template-columns: 7fr 5fr;
    gap: var(--amo-sp-7);
    /* `center`, nu `start` — „start" lăsa prea mult gol sub CTA-urile hero pe desktop.
       Măsurat la 1280: coloana de text are 277px, panoul 298px — cu `start`,
       toți cei 21px de diferență se adunau sub butoane, unde se vedeau, în loc să se împartă.
       Centrarea nu mișcă panoul (el dă înălțimea rândului), doar așază textul față de el. */
    align-items: center;
  }
}

.hero__panou {
  background: var(--amo-bleumarin-slab); /* pe fundalul cald al hero-ului, §2 — 12,75:1 cu textul */
  border-radius: var(--amo-raza-mare);
  padding: var(--amo-sp-5);
}
.hero__panou-titlu {
  margin: 0 0 var(--amo-sp-3);
  font-weight: 600;
  font-size: var(--amo-t-mic);
  color: var(--amo-text-secundar);
  /* Fără MAJUSCULE și fără letter-spacing de „eyebrow" — §7, anti-referința 4. */
}
.hero__whatsapp, .hero__unde, .hero__orar { margin: 0; }
.hero__whatsapp { margin-top: var(--amo-sp-3); }
.hero__unde { margin-top: var(--amo-sp-3); }
.hero__orar { margin-top: var(--amo-sp-1); font-size: var(--amo-t-mic); color: var(--amo-text-secundar); }

/* -------------------------------------------------------------- blocul de apel -- */
/* Aceeași componentă în hero-ul de pe Acasă și în „Vorbește direct cu noi" de pe Contact:
   un singur loc de schimbat dacă se schimbă felul în care arată apelul direct.
   NU e buton chihlimbar: chihlimbarul e rezervat acțiunii principale a paginii (formularul),
   iar două umpleri chihlimbar una lângă alta ar fi exact „două butoane dominante" pe care
   acceptarea lotului le interzice în primul ecran. */
.bloc-tel {
  display: flex;
  flex-direction: column;
  gap: 2px;            /* eticheta stă lipită de număr: e o singură informație, pe două rânduri */
  padding: var(--amo-sp-3) var(--amo-sp-4);
  background: var(--amo-suprafata);
  border: 1px solid var(--amo-linie);
  border-radius: var(--amo-raza);
  text-decoration: none;
  transition: background-color var(--amo-durata) var(--amo-curba),
              border-color var(--amo-durata) var(--amo-curba);
}
.bloc-tel:hover {
  background: var(--amo-chihlimbar-slab); /* 13,06:1 cu textul bleumarin, §2 */
  border-color: var(--amo-chihlimbar-chenar);
  color: var(--amo-bleumarin);
}
.bloc-tel__eticheta { font-size: var(--amo-t-mic); color: var(--amo-text-secundar); }
.bloc-tel__numar {
  font-size: var(--amo-t-h2);     /* 24 → 32px: numărul e cel mai mare text de pe panou */
  font-weight: 600;
  line-height: var(--amo-lh-titlu);
  color: var(--amo-bleumarin);
  font-variant-numeric: tabular-nums;
}

/* ---------------------------------------------------------------- servicii -- */
.servicii__grid {
  list-style: none;
  display: grid;
  gap: var(--amo-sp-5); /* 24px, gap-ul unic al grilei, §4 */
  /* Praguri fixe (1 → 2 → 3 coloane) înlocuite cu `auto-fit` la L3 (19 sep 2026): grila
     trebuie să arate curat și cu TREI carduri, și cu PATRU (un al patrulea serviciu e anunțat).
     Cu „repeat(3, 1fr)" al patrulea card rămânea singur pe rândul doi, la o treime de lățime.
     15,5rem = 248px e lățimea minimă de card, aleasă din socoteala pentru patru coloane la
     1280px: containerul de conținut are 1088px (1152 − 2×32 gutter), iar (1088 + 24) /
     (248 + 24) = 4,08 → patru piste. Cu trei carduri, auto-fit face trei piste late; nu e
     nevoie de un al doilea set de praguri care s-ar strica la al cincilea serviciu.
     `min(…, 100%)` ține cardul în pagină acolo unde 248px n-ar încăpea (320px lățime cu text
     mărit la 200%) — fără el, grila ar produce derulare orizontală. */
  grid-template-columns: repeat(auto-fit, minmax(min(15.5rem, 100%), 1fr));
}

.serviciu {
  background: var(--amo-suprafata);
  border: 1px solid var(--amo-linie);
  border-radius: var(--amo-raza-mare);
  padding: var(--amo-sp-5); /* 24px, §5.3 */
  display: flex;
  flex-direction: column;
  transition: border-color var(--amo-durata) var(--amo-curba),
              transform var(--amo-durata) var(--amo-curba);
}
@media (min-width: 900px) { .serviciu { padding: var(--amo-sp-6) var(--amo-sp-5); } } /* 28px, §5.3 */
.serviciu:hover { border-color: var(--amo-bleumarin-800); transform: translateY(-2px); }
.serviciu h3 { margin-bottom: var(--amo-sp-2); }
.serviciu__lead { color: var(--amo-text-secundar); flex-grow: 1; margin-bottom: 0; }
.serviciu__link {
  margin-top: var(--amo-sp-4);
  font-weight: 600;
  text-decoration: none;
}
.serviciu__link:hover { text-decoration: underline; }

/* ------------------------------------------------------------------ proces -- */
.proces__pasi {
  list-style: none;
  counter-reset: pas;
  display: grid;
  gap: var(--amo-sp-7); /* 48px între pași pe mobil */
  position: relative;
}
@media (min-width: 900px) {
  .proces__pasi { grid-template-columns: repeat(3, 1fr); gap: var(--amo-sp-5); }
}
.proces__pasi li {
  position: relative;
  padding-left: 56px; /* 40px cerc (§5.4) + 16px (--amo-sp-4) aer până la text */
  min-height: 40px;
}
.proces__pasi li::before {
  counter-increment: pas;
  content: counter(pas);
  position: absolute;
  left: 0; top: 0;
  width: 40px; height: 40px; /* §5.4 */
  border-radius: 50%;
  background: var(--amo-bleumarin-slab);
  color: var(--amo-bleumarin);
  font-family: var(--amo-font-titlu);
  font-weight: 600;
  display: flex;
  align-items: center;
  justify-content: center;
}
.proces__pasi li:not(:last-child)::after {
  content: "";
  position: absolute;
  left: 19px; /* centrul cercului de 40px */
  top: 40px;
  bottom: calc(-1 * var(--amo-sp-7));
  width: 2px; /* linie statică, §5.4 */
  background: var(--amo-linie);
}
@media (min-width: 900px) {
  .proces__pasi li { padding-left: 0; padding-top: 56px; text-align: left; }
  .proces__pasi li::before { left: 0; top: 0; }
  .proces__pasi li:not(:last-child)::after {
    left: 40px;
    right: calc(-1 * var(--amo-sp-5));
    top: 19px;
    bottom: auto;
    width: auto;
    height: 2px;
  }
}
/* `.proces > p` a fost ȘTEARSĂ: singurul ei apelant era `p.proces__nota` de pe Acasă, scos din
   conținut. O regulă fără apelant e cod mort care revendică o acoperire inexistentă — dacă „Cum
   lucrăm" primește vreodată un paragraf de subsol, se scrie atunci, pentru el. */

/* ------------------------------------------------------------- colaboratori -- */
.colaboratori__grid {
  list-style: none;
  display: grid;
  grid-template-columns: repeat(2, 1fr); /* §5.8 */
  gap: var(--amo-sp-5);
}
@media (min-width: 600px) { .colaboratori__grid { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 900px) { .colaboratori__grid { grid-template-columns: repeat(4, 1fr); } }
/* În coloana de lectură (Firme și flote) rămân DOUĂ coloane la orice lățime: coloana are 528px,
   deci două celule de ≈252px — aproape exact celula de 248px pe care o dau patru coloane pe
   toată lățimea paginii (§5.8 cere 72px înălțime de celulă și maximum 160px lățime de logo,
   ambele respectate). Cu patru coloane înăuntru, celula ar scădea la ≈116px și logo-urile late
   (BT Leasing, OnRoadCar) s-ar micșora sub pragul lor de lizibilitate. */
.doc__text .colaboratori__grid { grid-template-columns: repeat(2, 1fr); }

.colab {
  background: var(--amo-suprafata);
  border: 1px solid var(--amo-linie);
  border-radius: var(--amo-raza);
  height: 72px; /* înălțime fixă de celulă, §5.8 */
  display: flex;
  align-items: center;
  justify-content: center;
  /* Padding DOAR pe orizontală (L5b, 19 sep 2026). Înainte era 12px pe toate laturile, ceea
     ce lăsa unui logo PĂTRAT doar 72 − 2×12 = 48px de înălțime, deși §5.8 îi promite 72.
     Pe verticală limita o dă chiar înălțimea celulei; pe orizontală, cei 12px țin logoul să
     nu atingă chenarul. `.colab--text` nu se schimbă: textul e centrat pe flex, iar numele
     cele mai lungi încap pe două rânduri în 72px. */
  padding: 0 var(--amo-sp-3);
}
.colab img {
  max-height: 100%;
  /* 160px: exact plafonul din §5.8 pentru un logo LAT („un logo lat (BT Leasing) primește
     lățime maximă 160 px, unul pătrat maximum 72 px înălțime"). Regula era scrisă în DESIGN.md
     dar nu exista în foaia de stil, iar `max-width: 100%` o ocolea: măsurat la 1280, Sorcani,
     Trans Agape, Floradi și OnRoadCar se randau la 228px într-o celulă de 254px — lipite de
     chenar și de câteva ori mai mari, ca arie vizuală, decât un logo pătrat de 48px sau decât
     un nume scris tipografic. §5.8 cere arie aproximativ egală, nu lățime maximă disponibilă.
     `min()` cu 100% ține plafonul sub lățimea celulei la 360px, unde celula are doar 151px. */
  max-width: min(160px, 100%);
  object-fit: contain; /* culorile mărcii intacte, nicio desaturare (§5.8) */
}
.colab--text {
  font-family: var(--amo-font-text);
  font-size: var(--amo-t-baza);
  font-weight: var(--amo-greutate-text);
  color: var(--amo-text);
  text-align: center;
}
/* `.colaboratori__intro` a fost ȘTEARSĂ: fraza de intro a dispărut de pe amândouă paginile cu
   colaboratori (Acasă și Firme și flote, pentru coerență), deci selectorul nu mai are niciun
   apelant — `grep -rn "colaboratori__intro" continut/` → nimic. */
.colaboratori__nota {
  margin-top: var(--amo-sp-4);
  margin-bottom: 0;
  font-size: var(--amo-t-mic);
  color: var(--amo-text-secundar);
}

/* ------------------------------------------------------------------ recenzii -- */
.recenzii--gol {
  background: var(--amo-fundal-cald);
  border-radius: var(--amo-raza-mare);
  padding: var(--amo-sp-6);
  text-align: left;
  /* Caseta se strânge la măsura de lectură (L5b, 19 sep 2026). Măsurat la 1920 pe Acasă: o
     cutie colorată de 1088px care conținea o propoziție de ~420px, un buton de 200 și un link
     de 100 — raport text/casetă 0,39, adică exact „o secțiune stricată", pe care §5.9 o
     interzice tocmai pentru starea goală („nu ca o secțiune stricată, ci ca o secțiune
     scurtă"). Nu e o valoare nouă: e `--amo-lat-citire`, măsura pe care o au coloana de
     lectură a paginilor de document și pagina 404. Pe telefon `min()`-ul implicit al lui
     `max-width` o lasă să ocupe toată lățimea disponibilă. */
  max-width: var(--amo-lat-citire);
}
.recenzii--gol p { color: var(--amo-text-secundar); margin-bottom: 0; }
.recenzii--gol p:has(.cta) { margin-top: var(--amo-sp-4); }
/* „Lasă o recenzie" rămâne discret: e o favoare cerută, nu acțiunea pentru care a venit omul. */
.recenzii__lasa { margin-top: var(--amo-sp-3); font-size: var(--amo-t-mic); }

.recenzii__lista {
  list-style: none;
  display: grid;
  gap: var(--amo-sp-5);
}
@media (min-width: 600px) { .recenzii__lista { grid-template-columns: repeat(2, 1fr); } }
.recenzie {
  background: var(--amo-suprafata);
  border: 1px solid var(--amo-linie);
  border-radius: var(--amo-raza-mare);
  padding: var(--amo-sp-5);
}
.recenzie p { font-size: var(--amo-t-mediu); margin-bottom: var(--amo-sp-3); }
.recenzie cite {
  font-style: normal;
  color: var(--amo-text-secundar);
  font-size: var(--amo-t-mic);
}

/* ------------------------------------- textul umple cardul -- */
/* DEFECTUL observat pe captură („paragrafe pe jumătate de pagină"), reprodus și măsurat pe
   Acasă la 1920: un card `details.faq` are 1088px lățime utilă, dar răspunsul din el se oprea
   la 528px — cardul rămânea gol pe jumătatea din dreapta, cu chevronul singur în colțul opus.
   Raport text/card măsurat: 0,49.
   CAUZA e generală, nu a FAQ-ului: plafonul de lizibilitate stă pe `p` (regula globală
   `p { max-width: var(--amo-lat-rand) }`), deci fiecare paragraf și-l poartă cu el ORIUNDE,
   inclusiv într-un card care are deja o lățime aleasă de designer. E același defect reparat
   pentru coloana de lectură (`.doc__text p { max-width: none }`) — reparat acolo pe o singură
   cale, absent pe toate celelalte.
   REGULA: un container care își desenează propria margine (card, panou, casetă) ESTE coloana
   de lectură a textului din el; lățimea o dă el, nu paragraful. Lista de mai jos e lista
   componentelor-card din §5 DESIGN.md; indicatorul „umplere" din suita de capturi automate
   raportează raportul pentru fiecare, ca o componentă nouă care uită regula să se vadă ca un
   număr sub 0,8, nu să fie descoperită pe o captură. */
details.faq p,
.recenzie p,
.recenzii--gol p,
.serviciu p,
.cazuri__grid article p,
.cuprins p,
.hero__panou p,
.date-contact p { max-width: none; }

/* ----------------------------------------------------------------- accordion -- */
details.faq {
  background: var(--amo-suprafata);
  border: 1px solid var(--amo-linie);
  border-radius: var(--amo-raza-mare); /* 14px, §5.5 */
  margin-bottom: var(--amo-sp-3); /* 12px între accordioane, §5.5 */
}
details.faq summary {
  list-style: none;
  cursor: pointer;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--amo-sp-3);
  min-height: 56px; /* §5.5 */
  padding: var(--amo-sp-3) var(--amo-sp-4);
  font-family: var(--amo-font-titlu);
  font-size: var(--amo-t-h3);
  font-weight: 600;
}
details.faq summary::-webkit-details-marker { display: none; }
details.faq summary::after {
  content: "";
  flex: 0 0 auto;
  width: 20px; height: 20px; /* chevron de 20px, §5.5 */
  border-right: 2px solid var(--amo-bleumarin-800);
  border-bottom: 2px solid var(--amo-bleumarin-800);
  transform: rotate(-45deg); /* închis: săgeată spre dreapta */
  transition: transform var(--amo-durata) var(--amo-curba);
}
details.faq[open] summary::after { transform: rotate(45deg); } /* deschis: rotit 90°, spre jos */
.faq__a { padding: 0 var(--amo-sp-4) var(--amo-sp-4); }
.faq__a p { color: var(--amo-text-secundar); margin: 0; }

/* FAQ-ul de pe o pagină cu grila LATĂ (azi: Acasă — selectorul e „secțiune de FAQ care e copil
   direct al <main>", deci prinde orice pagină viitoare cu aceeași structură, nu doar Acasă).
   De la 960px în sus trece pe DOUĂ coloane de carduri.

   De ce două coloane și nu o coloană de lectură îngustă, ca pe paginile de document: pe Acasă
   TOATE celelalte secțiuni (servicii, pași, colaboratori, încheiere) merg pe toată grila de
   1088px. Un singur bloc îngustat la 528px ar fi introdus un al treilea ax pe aceeași pagină —
   exact defectul pe care lotul ăsta îl repară în altă parte. Cu două coloane, cardul are ~532px
   (1088 − 24 de gap, împărțit la 2), adică fix măsura de lectură din §3, iar textul îl umple:
   raportul text/card urcă de la 0,49 la ~1,0, măsurat.
   Pragul 960 e cel deja folosit în foaia asta (antet, grila de contact, footer, coloana de
   ajutor) — nu un număr nou.
   `align-items: start`: fără el, un accordion DESCHIS ar întinde la aceeași înălțime și cardul
   închis de lângă el, care ar rămâne cu un gol alb sub întrebare. */
@media (min-width: 960px) {
  main#continut > section.faq {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    column-gap: var(--amo-sp-5); /* 24px — gap-ul unic al grilei, §4 */
    row-gap: var(--amo-sp-3);    /* 12px — distanța dintre accordioane, §5.5 */
    align-items: start;
  }
  main#continut > section.faq > h2 {
    grid-column: 1 / -1;
    /* 32px între titlu și conținut (§4), din care 12 îi dă deja `row-gap`-ul grilei — în grilă
       marginile NU se contopesc cu gap-ul, se adună. */
    margin-bottom: calc(var(--amo-sp-6) - var(--amo-sp-3));
  }
  /* Distanțele vin acum din `gap`, nu din marginile cardurilor: `margin-bottom: 12px` (§5.5)
     s-ar fi adunat peste `row-gap`, iar `margin-top: 32px` de la regula „h2 + :not(p)" l-ar fi
     coborât pe primul card cu 32px față de vecinul lui de pe același rând. */
  main#continut > section.faq > details.faq { margin: 0; }
}

/* --------------------------------------------------------------- caseta info -- */
/* Caseta „sursă oficială" (§5.7). `.verificare-info` rămâne clasa casetelor scrise MANUAL în
   `continut/*.html` (ex. paragraful de sub lista de linkuri oficiale din
   inmatriculari-auto-sibiu.html și din acte-necesare-inmatriculare-sibiu.html) — nu mai e
   emisă de generator (L9, 19 sep 2026: nota „Informații verificate la…" a devenit
   `.nota-verificare-pagina`, mai jos, discretă și fără casetă — vezi randeaza_nota_verificare
   din build/genereaza.py). */
.verificare-info,
.sursa-oficiala {
  background: var(--amo-bleumarin-slab);
  border-left: 4px solid var(--amo-bleumarin-800); /* §5.7 */
  border-radius: var(--amo-raza);
  padding: var(--amo-sp-4);
  font-size: var(--amo-t-mic);
  color: var(--amo-bleumarin);
  max-width: none;
}
.verificare-info a, .sursa-oficiala a { font-weight: 600; }
/* `.sursa-oficiala` apare o dată la finalul FIECĂRUI caz din acte-necesare-inmatriculare-sibiu.html
   (T2, 18 sep 2026) — nu doar o dată pe pagină ca `.verificare-info`. Fără marginea de sus s-ar
   lipi direct de paragraful anterior. */
.sursa-oficiala { margin-top: var(--amo-sp-4); }

/* Nota „Informații verificate la…", la finalul paginii: mică, discretă, FĂRĂ caseta cu
   bară/fundal de mai sus — e o notă de subsol a paginii întregi, nu un avertisment de citit.
   Randată automat de
   `randeaza_nota_verificare` (build/genereaza.py), ultima din `.doc__text`. Spațierea de sus
   vine deja din regula generică `.doc__text > * + *`, nu se repetă aici. */
.nota-verificare-pagina {
  font-size: var(--amo-t-mic);
  color: var(--amo-text-secundar);
  max-width: none;
}

/* Lista de limbi de pe pagina Traduceri (L7, 19 sep 2026, `{{limbi_traduceri}}`). Pe două
   coloane implicit — la 360px, în coloana de lectură (~330px utili), o coloană de ~150px ține
   confortabil cel mai lung nume („ucraineană"); de la 600px (pragul deja folosit de grila de
   colaboratori, §5.8) trece pe trei, fiindcă lista are 24 de intrări și trei coloane țin
   lista pe un singur ecran mai des. */
.limbi-traduceri {
  list-style: none;
  columns: 2;
  column-gap: var(--amo-sp-5);
}
@media (min-width: 600px) { .limbi-traduceri { columns: 3; } }
.limbi-traduceri li {
  padding: var(--amo-sp-1) 0;
  break-inside: avoid; /* un nume de limbă nu se rupe între două coloane */
}

/* --------------------------------------------------------------------- tabel -- */
/* Nicio pagină nu are încă tabelul taxă/onorariu (§5.6) — regulile (table/caption/th/td/
   tr.rand-onorariu + varianta mobilă) au fost mutate în `arhiva/final-r1/css-scos.css`: zero
   apelanți azi, niciun `continut/*.html` are `<table>`. Se copiază înapoi când tabelul chiar se
   scrie. */

/* ------------------------------------------------------------------- cazuri -- */
.cazuri__grid {
  display: grid;
  gap: var(--amo-sp-5);
  grid-template-columns: 1fr;
  margin-top: var(--amo-sp-6);
}
@media (min-width: 600px) { .cazuri__grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1024px) { .cazuri__grid { grid-template-columns: repeat(3, 1fr); } }
/* În coloana de lectură, cazurile stau UNUL SUB ALTUL, pe toată lățimea coloanei (L5, F10).
   Motivul e cel din brief: cu trei coloane, cele șapte cazuri ieșeau 3+3+1, ultimul singur pe
   rândul lui, iar rândurile aveau înălțimi foarte diferite (cardul „Autorizație provizorie" are
   de trei ori mai mult text decât „Din afara UE", și-l întindea pe vecinul lui). Pe o coloană,
   fiecare card are exact înălțimea textului său — nu mai există nici card orfan, nici card
   întins degeaba. Două clase, deci bate regulile de mai sus la orice lățime. */
.doc__text .cazuri__grid { grid-template-columns: 1fr; gap: var(--amo-sp-3); }
.cazuri__grid article {
  background: var(--amo-suprafata);
  border: 1px solid var(--amo-linie);
  border-radius: var(--amo-raza-mare);
  padding: var(--amo-sp-5);
}
.cazuri__grid article p { color: var(--amo-text-secundar); }
.cazuri__grid article p:last-child { margin-bottom: 0; }
.cazuri__grid article p:last-child a { font-weight: 600; color: var(--amo-bleumarin); }

.linkuri-utile { list-style: none; margin-top: var(--amo-sp-4); }
.linkuri-utile li {
  padding: var(--amo-sp-3) 0;
  border-bottom: 1px solid var(--amo-linie);
}
.linkuri-utile li:last-child { border-bottom: 0; }

/* ------------------------------------------- cuprinsul „Alege situația" (L5b, F09) -- */
/* Ghidul de acte are 13.390 px la 390 px lățime și nu avea NICIO legătură internă: secțiunea
   „Firme și leasing" începea la y≈9.470 px, adică la ~24 de ecrane de telefon de vârful
   paginii. Cuprinsul e o listă de linkuri către ancorele care existau deja, așezată în primul
   ecran util. Nu ascunde nimic: toate cazurile rămân întregi dedesubt, în HTML.

   Aceeași suprafață ca panoul de ajutor și ca încheierea (`--amo-bleumarin-slab`, 12,75:1 cu
   textul, §2) — e al treilea bloc „de orientare" al sistemului, nu o a patra invenție.
   `auto-fill` cu minimum 13rem (208 px): pe telefon iese o coloană, de la ~480 px două, pe
   coloana de lectură de 528 px tot două. 208 px e cât ține cea mai lungă etichetă („Contract
   de vânzare-cumpărare", 205 px la 17 px corp) pe un singur rând — sub atât s-ar rupe în două
   și rândurile ar avea înălțimi diferite. */
.cuprins {
  background: var(--amo-bleumarin-slab);
  border-radius: var(--amo-raza-mare);
  padding: var(--amo-sp-5);
}
.cuprins__titlu {
  margin: 0 0 var(--amo-sp-3);
  font-family: var(--amo-font-text);
  font-size: var(--amo-t-baza);
  font-weight: 600;
  /* Titlu de panou, nu de secțiune — aceeași alegere ca la `.ajutor__titlu`: rămâne `<h2>` în
     DOM (ierarhia paginii, §8), dar la mărimea textului de corp. Un serif de 32 px deasupra
     unei liste de opt linkuri scurte ar cântări mai mult decât lista. */
}
.cuprins__lista {
  list-style: none;
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(13rem, 100%), 1fr));
  gap: var(--amo-sp-1) var(--amo-sp-4);
}
.cuprins__lista a {
  display: flex;
  align-items: center;
  min-height: var(--amo-tinta-tactila); /* 44 px, §4 — e o listă de atins cu degetul */
  color: var(--amo-bleumarin);
  font-weight: 600;
  text-decoration-thickness: 1px;
}

/* Rândul de final al fiecărui caz din ghid (L5b): ajutorul firmei + întoarcerea la cuprins.
   E identic pe TOATE cele opt cazuri, dinadins: înainte, patru cazuri din opt se terminau cu
   un paragraf „Nu vrei să te ocupi tu de dosar?…" și celelalte patru cu nimic — aceeași
   nevoie, rezolvată pe jumătate din căi. */
.caz__final {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--amo-sp-2) var(--amo-sp-5);
  margin-top: var(--amo-sp-4);
  margin-bottom: 0;
  font-size: var(--amo-t-mic);
  max-width: none;
}
.caz__final a {
  display: inline-flex;
  align-items: center;
  min-height: var(--amo-tinta-tactila); /* 44 px, §4 */
}
.caz__ajutor { font-weight: 600; }
.caz__inapoi { color: var(--amo-text-secundar); }

/* Rândul de acțiuni al firmei în corpul unei pagini comerciale (L5b, F10): butonul chihlimbar
   plus apelul direct ca link discret lângă el. NU două butoane: §5.2 / acceptarea lotului L3
   interzic două umpleri dominante una lângă alta, iar aici cel care rezolvă pe loc e butonul,
   nu telefonul (telefonul e deja în antetul lipicios pe mobil). */
.actiuni-pagina {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--amo-sp-3) var(--amo-sp-4);
  max-width: none;
}
.actiuni-pagina__tel {
  display: inline-flex;
  align-items: center;
  min-height: var(--amo-tinta-tactila); /* 44 px, §4 */
  color: var(--amo-text-secundar);
}

/* Nota de sub butonul de programare oficială DGPCI (L5b, F10): spune în cuvinte ce spune și
   ierarhia de culoare — că butonul duce la stat, nu la firmă. §8: informația nu se transmite
   niciodată doar prin culoare. */
.nota-link-oficial {
  margin-top: calc(-1 * var(--amo-sp-2)); /* −8 px: se lipește de butonul pe care-l explică,
                                             în loc să pară un paragraf nou (p are deja 16 px
                                             de margine jos, deci distanța netă rămâne 8 px) */
  font-size: var(--amo-t-mic);
  color: var(--amo-text-secundar);
}

/* ------------------------------------------------------------------- încheiere -- */
/* Încheierea paginii. DESCHISĂ, nu bleumarin — decizie luată la L3 după ce am privit captura
   întregii pagini de Acasă: o bandă bleumarin lipită de footerul bleumarin dădea ~500px de
   închis la coada paginii, adică exact senzația de temă întunecată pe care §7 (anti-referința
   10) o refuză. `--amo-bleumarin-slab` păstrează separarea de fundal (e altă suprafață) fără
   să întunece pagina, iar butonul chihlimbar iese mai tare pe el decât pe bleumarin. Bonus: nu
   e nevoie de o variantă „secundar pe fundal închis" care nu există în §5.2 — butonul secundar
   standard funcționează aici ca oriunde.
   Aliniată la stânga: are acțiuni de lungimi diferite, iar centrate arătau dezordonat.

   `.cta-final` (varianta bleumarin, centrată) A FOST ȘTEARSĂ la L5b, 19 sep 2026, odată cu
   ultimul ei apelant. O aveau Acte necesare, Asigurări și Firme și flote; măsurat la 1280 pe
   Firme, textul ei mergea de la x=128 la 592, în timp ce coloana de lectură merge de la 96 la
   624 — singurul bloc din pagină pe alt ax și pe altă lățime decât restul. Regulile ei nu
   rămân „pentru mai târziu": un selector fără apelant e cod mort care revendică o acoperire
   inexistentă (`grep -rn "cta-final" continut/ sablon/` → doar comentarii istorice). */
.incheiere {
  background: var(--amo-bleumarin-slab); /* text bleumarin pe el: 12,75:1, §2 */
  color: var(--amo-text);
  border-radius: var(--amo-raza-mare);
  padding: var(--amo-sectiune) var(--amo-gutter);
  text-align: left;
}
.incheiere h2 { color: var(--amo-text); }
.incheiere p { color: var(--amo-text-secundar); margin-inline: 0; }
.incheiere :focus-visible { outline-color: var(--amo-inel-culoare); }
.incheiere__lead { font-size: var(--amo-t-mediu); }
.incheiere__actiuni {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--amo-sp-4);
  margin-top: var(--amo-sp-6);
}
/* Butonul secundar pe `--amo-bleumarin-slab`: hover-ul standard (`background: bleumarin-slab`)
   ar fi invizibil, fiindcă e chiar fundalul secțiunii. Alb — suprafața de card — dă semnalul
   de „apăsat" fără o culoare nouă. */
.incheiere .cta--secundar:hover { background: var(--amo-suprafata); }
/* Acțiunile care NU sunt butoane din rândul de încheiere: WhatsApp-ul de pe Acasă și apelul
   direct de pe paginile de document (L5b). Rămân linkuri — în coloana de lectură de 480px
   două butoane „mari" nu încap pe un rând și se așază unul sub altul, două blocuri dominante
   suprapuse. Ținta tactilă de 44px (§4/§8) o primesc oricum: un link de 17px are 27px
   înălțime naturală, sub minimul din §8. */
.incheiere__actiuni a:not(.cta) {
  display: inline-flex;
  align-items: center;
  min-height: var(--amo-tinta-tactila); /* 44px, §4 */
  font-weight: 600;
}
.incheiere__reper {
  margin-top: var(--amo-sp-5);
  margin-bottom: 0;
  font-size: var(--amo-t-mic);
  max-width: none;
}
/* Aceeași încheiere, în coloana de lectură (Înmatriculări, Acte necesare, Asigurări, Firme și
   flote, Despre noi — L5). Pe Acasă caseta are 1088px lățime, unde 88px de padding vertical
   arată echilibrat; în coloana de 528px aceeași valoare făcea o casetă aproape pătrată, cu mai
   mult gol decât text. 48 pe verticală (`--amo-sp-7`) e treapta de dedesubt din aceeași scară §4.
   Pe ORIZONTALĂ: 24px (`--amo-sp-5`), corectat la L5b — aceeași valoare ca `.cuprins` și ca
   panoul `.ajutor`. Cu 32px, măsurat la 1280, textul încheierii pornea de la x=128 în timp ce
   textul cuprinsului pornea de la 120: două panouri în aceeași coloană, cu marginea interioară
   diferită cu 8px — se vede ca o nealiniere, nu ca o intenție. */
.doc__text .incheiere { padding: var(--amo-sp-7) var(--amo-sp-5); }

/* -------------------------------------------------------------- date-contact -- */
.nap { list-style: none; }
.nap li { padding: var(--amo-sp-2) 0; }
.program { list-style: none; color: var(--amo-text-secundar); }
.program li { padding: var(--amo-sp-1) 0; }

/* ------------------------------------------------------------------ formular -- */
/* !important e necesar: `main#continut > section` (mai sus) câștigă altfel prin specificitate
   (selector cu ID bate o singură clasă), iar formularul ar rămâne întins pe toată lățimea de
   1152px a paginii — câmpuri de 1000px+ nu se citesc bine (§5.10 cere „o coloană" îngustă). */
/* Nu centrăm cu `margin-inline:auto`: secțiunea de mai sus („Datele noastre") pornește din
   marginea stângă a paginii, iar formularul trebuie să continue aceeași linie, doar mai
   îngust — centrarea l-ar face să „sară" vizual față de restul paginii. */
.formular { max-width: var(--amo-lat-max-ingust) !important; }
.camp { display: flex; flex-direction: column; gap: var(--amo-sp-1); margin-bottom: var(--amo-sp-5); }
.camp label { font-size: var(--amo-t-baza); }

.camp input[type="text"],
.camp input[type="tel"],
.camp input[type="email"],
.camp select,
.camp textarea {
  min-height: 48px; /* §5.10 */
  padding: var(--amo-sp-2) var(--amo-sp-3);
  border: 1px solid var(--amo-linie-camp); /* 3,83:1, WCAG 1.4.11 */
  border-radius: var(--amo-raza);
  background: var(--amo-suprafata);
  font-family: inherit;
  font-size: 16px; /* fix, nu clamp: sub 16px Safari iOS mărește pagina la focus, §5.10 */
  color: var(--amo-text);
}
.camp textarea { min-height: 120px; resize: vertical; }
.camp input:focus-visible,
.camp select:focus-visible,
.camp textarea:focus-visible {
  border-color: var(--amo-bleumarin);
  outline: var(--amo-inel) solid var(--amo-inel-culoare);
  outline-offset: var(--amo-inel-decalaj);
}
/* STĂRILE DE EROARE PE CÂMP (§5.10). Rescrise la L3 (19 sep 2026) ca lotul de formular să le
   poată folosi fără să mai atingă designul: JS-ul pune `aria-invalid="true"` pe câmp și
   inserează un `<p class="camp__eroare">` sub el, legat prin `aria-describedby`; restul e aici.

   REPARAȚIE, nu doar mutare: selectorul de dinainte cerea `:invalid[aria-invalid="true"]`,
   adică AMBELE — pseudo-clasa nativă a browserului ȘI atributul. Un câmp respins de server
   dar corect din punctul de vedere al browserului (telefonul „1", cazul F03 din audit; un
   `<input type="text">` care nu e niciodată `:invalid`) primea `aria-invalid`, era anunțat ca
   greșit de cititorul de ecran — și rămânea vizual normal. Chenarul roșu depinde acum doar de
   atribut, adică de aceeași sursă pe care o aude și cititorul de ecran. */
.camp input[aria-invalid="true"],
.camp select[aria-invalid="true"],
.camp textarea[aria-invalid="true"] {
  border-color: var(--amo-eroare);
  border-width: 1.5px; /* §5.10 */
}

.camp__eroare {
  display: flex;
  align-items: flex-start;
  gap: var(--amo-sp-2);
  margin: var(--amo-sp-1) 0 0;
  color: var(--amo-eroare);      /* 6,22:1 pe fundal, §2 */
  font-size: var(--amo-t-mic);
  font-weight: 600;
  max-width: var(--amo-lat-rand);
}
/* Pictograma NU e decor: §5.10 cere ca eroarea să nu se transmită niciodată doar prin culoare.
   Desenată în aceeași familie ca restul (contur 2px, capete rotunde, grilă de 24) și aplicată
   ca mască, nu ca imagine de fundal — așa moștenește `currentColor`, deci nu există o a doua
   definiție a roșului de eroare care s-ar putea desincroniza de jeton. 16px: pictograma mică
   a sistemului, aliniată optic pe rândul de 14px (de-aici cei 2px de margin-top). */
.camp__eroare::before {
  content: "";
  flex: 0 0 auto;
  width: 16px;
  height: 16px;
  margin-top: 2px;
  background-color: currentColor;
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M12 7.5v5'/%3E%3Cpath d='M12 16.3h.01'/%3E%3C/svg%3E") center / contain no-repeat;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M12 7.5v5'/%3E%3Cpath d='M12 16.3h.01'/%3E%3C/svg%3E") center / contain no-repeat;
}

.camp--radio { border: 0; padding: 0; margin: 0 0 var(--amo-sp-5); }
/* Grupul de radio greșit (PF/PJ nealese). `outline`, nu `border`: un chenar nou ar adăuga
   1,5px + padding și ar împinge tot formularul în jos exact în momentul în care omul citește
   mesajul de eroare. Decalajul de 8px ține conturul lipit de grup fără să atingă textul.
   Un singur cârlig: JS marchează grupul prin atribut (`aria-invalid` pe fieldset), nu printr-o
   clasă — vezi `formular.js` (`grupTipClient.setAttribute('aria-invalid', 'true')`). O clasă
   `.camp--eroare` era gata pentru un al doilea cârlig, dar n-a avut niciodată apelant — mutată
   în `arhiva/final-r1/css-scos.css`. */
.camp--radio[aria-invalid="true"] {
  outline: 1.5px solid var(--amo-eroare);
  outline-offset: var(--amo-sp-2);
  border-radius: var(--amo-raza);
}
.camp--radio legend { font-weight: 600; margin-bottom: var(--amo-sp-2); padding: 0; }
.camp--radio label {
  display: inline-flex;
  align-items: center;
  gap: var(--amo-sp-2);
  min-height: var(--amo-tinta-tactila); /* 44px țintă tactilă, §8 */
  margin-right: var(--amo-sp-5);
  font-weight: var(--amo-greutate-text);
}

/* Capcana anti-spam: `display:none` e potrivit AICI (nu poziționare off-screen) fiindcă
   boții de spam citesc HTML-ul brut/DOM-ul, nu aplică CSS — `display:none` ascunde câmpul
   de la un vizitator uman fără să-l scoată din formular pentru un bot neediscriminat. O
   poziționare off-screen ar fi necesară doar dacă am vrea ca cititoarele de ecran să-l
   „vadă" ca invizibil vizual dar prezent semantic — aici e opusul: vrem ca omul cu screen
   reader să NU-l audă deloc, iar `aria-hidden="true"` (deja în markup) + `display:none`
   fac exact asta pentru toată lumea, inclusiv AT. */
.camp--capcana { display: none; }

#tsContact { margin: var(--amo-sp-4) 0; min-height: 65px; } /* 65px = înălțimea implicită Turnstile „flexible" */

.form__nojs {
  background: var(--amo-chihlimbar-slab);
  border-radius: var(--amo-raza);
  padding: var(--amo-sp-4);
  color: var(--amo-text);
  font-size: var(--amo-t-mic);
}

/* Caseta de previzualizare (review final, 18 sep 2026, punctul 3): inserată DOAR de generator,
   DOAR în modul preview, deasupra formularului de contact — vezi
   `build/genereaza.py: randeaza_banner_preview_formular`. Același fundal ca `.form__nojs`
   (chihlimbar deschis): amândouă sunt avertismente „formularul nu se comportă normal acum",
   nu erori — un roșu de eroare ar sugera ceva stricat, nu o stare temporară așteptată. */
.avertisment-preview {
  background: var(--amo-chihlimbar-slab);
  border-radius: var(--amo-raza);
  padding: var(--amo-sp-4);
  margin-bottom: var(--amo-sp-4);
  color: var(--amo-text);
}
.avertisment-preview p { margin: 0; }

/* Propoziția despre confidențialitate, lângă butonul de trimitere (review final, 18 sep 2026,
   punctul 4) — text secundar, discret, nu o casetă de acord obligatoriu. */
.formular__info-date {
  color: var(--amo-text-secundar);
  font-size: var(--amo-t-mic);
  margin-bottom: var(--amo-sp-3);
}

.form__status {
  margin-top: var(--amo-sp-4);
  padding: var(--amo-sp-3) var(--amo-sp-4);
  border-radius: var(--amo-raza);
  font-weight: 600;
}
.form__status:empty { display: none; padding: 0; margin: 0; }
/* Clasele reale scrise de assets/js/formular.js sunt `ok` / `rau` / `lucru` (nu `eroare` —
   vezi raportul T1c: DESIGN.md/task foloseau `--eroare`, dar formular.js scrie `--rau`). */
.form__status--ok { background: var(--amo-reusita-slab); color: var(--amo-reusita); }
.form__status--rau { background: var(--amo-eroare-slab); color: var(--amo-eroare); }
.form__status--lucru { background: var(--amo-bleumarin-slab); color: var(--amo-bleumarin); }
/* Butonul în timpul trimiterii (§5.10): rămâne vizibil, la aceeași dimensiune, fără spinner
   care sare. Singurul semn vizual în plus e cursorul — textul („Se trimite…") și
   `aria-busy="true"` le pune lotul de formular. */
.cta[aria-busy="true"] { cursor: progress; }

/* Sumarul de erori de deasupra formularului (§5.10): PLANIFICAT, dar fără apelant azi — nici
   `formular.js`, nici vreun conținut nu-l inserează. Regulile sunt în
   `arhiva/final-r1/css-scos.css`, de copiat înapoi dacă lotul de formular ajunge să insereze
   elementul. */

/* ------------------------------------------------------------ pagina de contact -- */
/* Polish vizual, punctul 7 (18 sep 2026): pe desktop, „Datele noastre" (.date-contact) și
   formularul erau două blocuri într-o singură coloană îngustă (704px), centrată — pe un
   monitor de 1280px+ arăta ca o dungă îngustă în mijlocul unei pagini goale. Nu se poate
   atinge continut/contact.html (alt agent lucrează pe el acum), deci layoutul se declanșează
   dintr-un atribut emis de generator: `<body data-pagina="contact">` (sablon/baza.html +
   genereaza.py → slug_pentru_body). Pe mobil (sub 960px) nimic din regulile astea nu se
   aplică — rămâne o coloană, exact structura actuală.

   Pragul 960px (nu 900px, folosit în restul foii pentru grile de 3-4 coloane): la 960px de
   viewport, containerul de 960px minus 2×gutter (32px) minus column-gap (32px) lasă ~432px pe
   coloană — suficient ca un câmp de formular (min-height 48px, §5.10) să nu se simtă înghesuit.
   La pragul standard de 900px coloanele ar ieși sub 400px, prea aproape de cât ocupă deja un
   `<select>`/`<input>` cu padding. */
@media (min-width: 960px) {
  body[data-pagina="contact"] main#continut {
    max-width: var(--amo-lat-max);
    margin-inline: auto;
    padding-inline: var(--amo-gutter);
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    column-gap: var(--amo-sp-6); /* 32px, §4 */
  }
  /* Containerul e acum <main> însuși — copiii nu mai au nevoie de propriul max-width/gutter
     (altfel s-ar aduna gutter-ul fiecărui copil PESTE column-gap-ul grilei). */
  body[data-pagina="contact"] main#continut > * {
    max-width: none;
    margin-inline: 0;
    padding-inline: 0;
  }
  /* Titlul, introducerea și firul Ariadnei ocupă tot rândul lor; „Datele noastre" și
     formularul rămân în ordinea din HTML și cad automat unul lângă altul (grid-auto-flow
     implicit: row), fără să le mai numim explicit pe fiecare. */
  body[data-pagina="contact"] main#continut > .firimituri,
  body[data-pagina="contact"] main#continut > h1,
  body[data-pagina="contact"] main#continut > p.lead {
    grid-column: 1 / -1;
  }
  /* Ritmul pe verticală în grilă. `row-gap: 0` + margini explicite, NU un `row-gap` unic:
     într-o grilă marginile elementelor nu se contopesc, deci un row-gap de 32px s-ar fi
     adunat peste marginile lor și ar fi dat aceeași distanță între H1 și lead-ul lui ca între
     lead și conținut — exact spațiile egale și mari din F12. Măsurat pe captură cu row-gap:
     52px între titlu și propria frază. Acum: 12px titlu → intro, 32px intro → conținut (§4). */
  body[data-pagina="contact"] main#continut { row-gap: 0; }
  body[data-pagina="contact"] main#continut > h1 { margin-block: 0 var(--amo-sp-3); }
  body[data-pagina="contact"] main#continut > p.lead { margin-block: 0 var(--amo-sp-6); }
  /* „Vorbește direct cu noi" stătea cu 56px mai sus decât „Trimite-ne un mesaj", deși cele
     două coloane sunt pe ACELAȘI rând de grilă. Cauza era
     ordinea din DOM, nu grila: `.date-contact` vine după `p.lead`, deci prindea regula
     „intro → conținut" (32px), iar `.formular` vine după `.date-contact`, deci prindea ritmul
     dintre secțiuni (88px) — 88 − 32 = exact cei 56px măsurați. Pe un rând de grilă, ambele
     celule pornesc de la același „intro → conținut". */
  body[data-pagina="contact"] main#continut > section { margin-top: var(--amo-sp-6); }
}

/* `main#continut > * + *` (88px) nu se aplică în grilă, dar se aplică pe mobil, unde pagina
   de contact rămâne o coloană — aceeași corecție de ritm, acolo: formularul vine la 48px sub
   datele de contact, nu la 88. */
@media (max-width: 959.98px) {
  body[data-pagina="contact"] main#continut > .formular { margin-top: var(--amo-sp-7); }
}

/* Zona „Vorbește direct cu noi" de pe Contact. */
.date-contact .bloc-tel { margin-bottom: var(--amo-sp-5); }
.date-contact__orar-titlu {
  margin: var(--amo-sp-5) 0 var(--amo-sp-2);
  font-weight: 600;
}
.date-contact__recenzie {
  margin-top: var(--amo-sp-5);
  margin-bottom: 0;
  font-size: var(--amo-t-mic);
}

/* --------------------------------------------------------------------- subsol -- */
.subsol {
  background: var(--amo-bleumarin);
  color: var(--amo-text-pe-inchis);
  padding: var(--amo-sectiune) var(--amo-gutter) var(--amo-sp-6);
}
/* `padding-inline` adăugat la review-ul final (18 sep 2026): `.subsol` are deja gutter pe
   orizontală (regula de mai sus, `padding: … var(--amo-gutter) …`), dar `.subsol__interior`
   nu adăuga NIMIC în plus — doar centra o cutie de 1152px. Rezultat: conținutul footer-ului
   (NAP, linkurile legale) pornea la x = gutter + centrarea cutiei (≈64px pe un ecran de
   1280px), în timp ce conținutul din `<main>` pornește la gutter-ul CUTIEI (regula
   „main#continut > section", care are propriul `padding-inline`) + centrarea cutiei (≈96px) —
   vizibil nealiniate. Adăugând același `padding-inline: var(--amo-gutter)` ca `.antet__interior`
   (care are exact același rol de „cutie interioară"), conținutul footer-ului ajunge la aceeași
   poziție ≈96px, fără să mute cutia însăși (padding nu schimbă `margin-inline: auto`). */
.subsol__interior { max-width: var(--amo-lat-max); margin-inline: auto; padding-inline: var(--amo-gutter); }
.subsol__logo { height: 32px; width: auto; color: var(--amo-text-pe-inchis); margin-bottom: var(--amo-sp-4); } /* §5.11 */

/* Footerul pe patru coloane (§5.11, F12). Înainte era o coloană lungă care ocupa un ecran
   întreg pe desktop și nu ducea nicăieri. */
.subsol__coloane {
  display: grid;
  gap: var(--amo-sp-6) var(--amo-sp-5);
  grid-template-columns: 1fr;
}
@media (min-width: 600px) { .subsol__coloane { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 960px) {
  /* 1,4fr pentru prima coloană: logoul are 261px lățime și rândul juridic („Auto-moto office
     SRL · CUI 35951149 · J32/548/2016") e lung; cu 1fr s-ar rupe în patru rânduri. La 1088px
     de conținut ies ≈323px pentru firmă și ≈231px pentru fiecare listă — destul și pentru un
     al patrulea serviciu cu nume lung în coloana „Servicii". Pragul e 960, același ca la
     antet și la grila paginii de contact. */
  .subsol__coloane { grid-template-columns: 1.4fr 1fr 1fr 1fr; }
}
.subsol__col { min-width: 0; } /* fără asta, un cuvânt lung (e-mailul) ar lăți pista de grilă */
.subsol__titlu {
  margin: 0 0 var(--amo-sp-3);
  font-weight: 600;
  color: var(--amo-text-pe-inchis);
  /* Paragraf, nu <h2>/<h3>: un titlu real în footer ar intra în ierarhia de titluri a fiecărei
     pagini (§8 cere trepte nesărite). Gruparea o dă `aria-label` de pe <nav>, din generator. */
}
.subsol__lista {
  list-style: none;
  /* Un cuvânt care nu se poate rupe (adresa de e-mail, 23 de caractere) e mai lat decât o
     coloană de 231px la text mărit. Prins la proba de zoom 200% pe pagina generată: footerul
     ieșea 1344px pe un viewport de 1280 și apărea derulare orizontală — regresie față de v1,
     unde footerul avea o singură coloană largă. `anywhere` rupe DOAR când altfel ar depăși. */
  overflow-wrap: anywhere;
}
.subsol__lista li { padding: var(--amo-sp-1) 0; color: var(--amo-text-pe-inchis); }
.subsol__lista a { color: var(--amo-text-pe-inchis); }
.subsol__juridic {
  color: var(--amo-text-slab-pe-inchis);
  font-size: var(--amo-t-mic); /* §5.11: denumirea juridică, CUI-ul și reg. com. în text mic */
  margin-bottom: 0;
}
.subsol__program {
  margin: var(--amo-sp-3) 0 0;
  font-size: var(--amo-t-mic);
  color: var(--amo-text-slab-pe-inchis);
}
.subsol a:hover { color: var(--amo-inel-culoare-pe-inchis); }
.subsol__safety-broker {
  margin-top: var(--amo-sp-6);
  padding-top: var(--amo-sp-5);
  border-top: 1px solid rgba(255, 255, 255, 0.15);
  font-size: var(--amo-t-mic);
  color: var(--amo-text-slab-pe-inchis);
  max-width: none;
}

/* ----------------------------------------------------------------- breadcrumb -- */
.firimituri { padding-top: var(--amo-sp-5); }
.firimituri ol {
  list-style: none;
  display: flex;
  flex-wrap: wrap;
  gap: var(--amo-sp-1);
  font-size: var(--amo-t-mic);
  color: var(--amo-text-secundar);
}
.firimituri a { color: var(--amo-text-secundar); text-decoration: underline; }
.firimituri li[aria-current="page"] { color: var(--amo-text-secundar); font-weight: 600; }
/* Separatorul „/" e generat vizual din CSS: markup-ul generatorului (build/genereaza.py,
   `randeaza_breadcrumb_vizual`, în afara sferei acestui task) nu emite un element separator
   propriu-zis pe care să-i punem `aria-hidden` (§5.12) — conținutul generat prin `content`
   nu e citit implicit de cititoarele de ecran de pe pseudo-elemente, dar nu e o gardă la
   fel de sigură ca un `<span aria-hidden>` explicit în HTML. Notat ca limitare în raport. */
.firimituri li + li::before {
  content: "/";
  margin-right: var(--amo-sp-1);
  color: var(--amo-linie-tare);
}

/* --------------------------------------------------------------------- 404 -- */
.pagina-404 .cta { margin: var(--amo-sp-4) 0; }
.pagina-404 p a:not(.cta) { font-weight: 600; }
/* Simbolul de 64px, o singură dată, deasupra titlului (§5.13 DESIGN.md) — inserat de
   build/genereaza.py (randeaza_simbol_404_inline), nu din continut/404.html.
   `margin-inline: 0` (nu `auto`, cum rămăsese la L5): pagina 404 e aliniată la stânga ca
   toate celelalte, deci simbolul stă deasupra primei litere din titlu, nu la mijlocul unei
   coloane aliniate la stânga. */
.pagina-404__simbol {
  display: block;
  width: 64px;
  height: 64px;
  margin: 0 0 var(--amo-sp-5);
}

/* ---------------------------------------------------------------------- lead -- */
.lead { font-size: var(--amo-t-mediu); color: var(--amo-text-secundar); }

/* -------------------------------------------------------------------- print -- */
/* „Antet/footer simple" (task T1c): pe hârtie nu are sens fundalul bleumarin, antetul lipicios
   sau butoanele — dar NAP-ul din footer și numele firmei din antet rămân, ca pagina printată
   să tot identifice cine e firma. Elementele pur interactive (comutator, CTA, skip-link) dispar. */
@media print {
  body { background: #fff; color: #000; }
  a { color: #000; text-decoration: underline; }
  .antet { position: static; border-bottom: 1px solid #000; box-shadow: none; }
  .comutator-meniu, .cta, .sari, .antet__nav-lista, .antet__tel { display: none; }
  .subsol {
    background: none;
    color: #000;
    padding: var(--amo-sp-5) 0 0;
    border-top: 1px solid #000;
  }
  /* Clasele s-au schimbat odată cu footerul pe patru coloane (L3, 19 sep 2026): `.subsol__nap`
     și `.subsol__legal` nu mai există, iar regula veche ar fi lăsat textul alb pe hârtie albă. */
  .subsol__titlu, .subsol__juridic, .subsol__program,
  .subsol__lista li, .subsol__lista a, .subsol__safety-broker { color: #000; }
  .subsol__logo { color: #000; }
  /* Pe hârtie footerul rămâne pe o coloană: patru coloane de 231px pe A4 ar fi ilizibile. */
  .subsol__coloane { display: block; }
  .subsol__col + .subsol__col { margin-top: var(--amo-sp-4); }
  .hero__panou { background: none; padding: 0; }
  .incheiere { background: none; color: #000; padding: var(--amo-sp-5) 0; }
  .incheiere h2, .incheiere p { color: #000; }
  main#continut > * { max-width: none; }
}
