/*
 * shop-responsive.css — STRATUL nostru de adaptare, peste `shop-legacy.css`.
 * INT-1, punctul 8 (addendum).
 *
 * REGULA: `shop-legacy.css` (copia foii combinate a producției) rămâne BAZA și
 * NU se rescrie. Aici se adaugă doar ce lipsește, în ordinea de încărcare de
 * după ea. Motivul e decizia de proiect: portul e O SINGURĂ TEMĂ RESPONSIVĂ,
 * care înlocuiește tema desktop fixă (`viewport width=1024`) plus tema `Mobile`
 * parțială a producției. Deci NU „restaurăm comportamentul producției", ci
 * „păstrăm look-ul producției și îl facem să se adapteze".
 *
 * NU e o redesenare: zero culori noi, zero fonturi noi, zero componente noi.
 *
 * Ținte:
 *   - fără scroll orizontal la 360px / 768px / 1280px;
 *   - meniul principal rămâne utilizabil pe mobil;
 *   - grila de produse cade la 3, apoi la 2 coloane;
 *   - coloanele (conținut + bară laterală) se stivuiesc sub 1024px.
 *
 * ATENȚIE la ordinea de încărcare: fișierul TREBUIE inclus după
 * `shop-legacy.css`; multe reguli de aici au aceeași specificitate ca ale ei și
 * câștigă doar prin poziție.
 */

/* ==========================================================================
   0. Cârlig de harness — titlul cardului de produs
   ==========================================================================
   `App\Services\Parity\CategoryExtractor::fromDev()` citește numele produsului
   din `.//h3`, iar harness-ul e poarta de calitate și nu se modifică. Producția
   emite `<h5>`. Ca randarea să rămână identică, oglindim aici regula
   `.product-grid > div > h5` a producției (copiată declarație cu declarație)
   pentru `h3`, plus resetul de titlu implicit al browserului (h3 e altfel
   1.17em/bold). Vezi `resources/views/shop/partials/product-grid.blade.php`.
   Se ȘTERGE în momentul în care selectorul dev al harness-ului acceptă `h5`.
   ========================================================================== */
.product-grid > div > h3 {
    text-align: center;
    font-size: 13px;
    font-weight: normal;
    color: #404040;
    height: 32px;
    padding: 2px 8px;
    vertical-align: text-bottom;
    margin: 0;
}

.product-list > div > h3 {
    font-size: 21px;
    font-weight: normal;
    margin: 0;
}

/* ==========================================================================
   1. Cutii care nu au voie să depășească viewport-ul
   ==========================================================================
   Foaia producției NU declară nicăieri `box-sizing: border-box` global, dar are
   containere de tipul `width: 100%` + `padding: 0 15px` (`.wrapper-full`) — în
   `content-box` asta înseamnă 30px de depășire pe ORICE lățime. Nu se vede pe
   producție doar fiindcă `viewport` e fixat la 1024. Aplicăm `border-box`
   ȚINTIT, pe containerele implicate, nu global: un `*{}` ar schimba zeci de
   componente legacy care se bazează pe content-box.
   ========================================================================== */
.page,
.wrapper-full,
.main-container,
.main,
.col-main,
.col2-left-layout .col-left,
.header-container,
.box,
.box-content,
.filters-sidebar,
.product-grid > div {
    box-sizing: border-box;
}

/* Media care altfel forțează lățimea părintelui. `.st img` (0,1,1) și celelalte
   reguli cu clasă rămân mai specifice, deci plăcile de magazin nu se schimbă.

   ⚠️ RESTRÂNS la mobil, 2026-08-30, împreună cu regula de tabele de mai jos și
   din același motiv. `max-width: 100%` pe o imagine dintr-o celulă de tabel îi
   anulează contribuția la lățimea MINIMĂ a celulei: layoutul de tabel poate
   atunci strânge celula la aproape zero, iar imaginea o urmează. Măsurat pe
   pagina de coș, desktop: `td.cos-product-image` = 11px, imaginea 0×0, deși
   fișierul se încărca corect la 160×160. Poza produsului lipsea pur și simplu.
   Producția nu are regula asta pe desktop — e o adăugire a portului, făcută ca
   să prevină scroll orizontal pe telefon. Acolo rămâne. */
@media (max-width: 767px) {
    img,
    video,
    iframe {
        max-width: 100%;
    }
}

/* Blocurile inerent late își fac propriul scroll, nu îl dau paginii.
   ⚠️ `display: block` a fost RESTRÂNS la mobil, 2026-08-30. Global, pe TOATE
   tabelele, desființa layoutul de tabel și pe desktop: celulele nu mai
   participă, `td` se strânge la lățimea conținutului, iar o imagine cu
   `max-width: 100%` dintr-un bloc de lățime zero se randează **0×0**.
   Efecte măsurate, ambele pe desktop:
     • imaginea produsului din coș dispărea complet (td 11px, img 0×0, deși
       fișierul se încărca la 160×160). Semnalat de owner.
     • tabelul din detaliul comenzii a avut nevoie de un `display: table` local,
       scris de alt modul ca să scape de regula asta — adică plătea deja prețul.
   Scopul real al regulii — tabele late care produc scroll orizontal pe telefon —
   se atinge la fel de bine doar sub 768px, unde e și aplicată acum.
   Pe desktop rămân `max-width` și `overflow-x`, care nu strică layoutul. */
table,
pre {
    max-width: 100%;
    overflow-x: auto;
}

@media (max-width: 767px) {
    table,
    pre {
        display: block;
    }
}

/* ==========================================================================
   1b. PESTE 1024px, `.wrapper-full` revine la `content-box` — ca producția
   ==========================================================================
   DECIZIE DE PROIECT (owner + coordonator, 2026-08-30): pe desktop **paritatea
   bate îmbunătățirea**. Motivul e cel din `docs/parity/08`: dacă site-ul
   reconstruit nu arată ca cel actual, colegii nu îl adoptă. O coloană de
   produse care lipsește se vede imediat; 20px de scroll orizontal la exact o
   lățime de fereastră nu se vede, și producția îi are dintotdeauna.

   ── ARITMETICA (de ce 30px, și de unde) ──────────────────────────────────
   `.wrapper-full { width: 100%; padding: 0 15px; max-width: 1024/1270/1520 }`
   (`stylesheet.css:1732-1765`). `max-width` se aplică pe cutia de CONȚINUT în
   `content-box` și pe cutia EXTERIOARĂ în `border-box`:

       producție (content-box)  max-width 1270  ⇒  conținut 1270, total 1300
       portul    (border-box)   max-width 1270  ⇒  total 1270, conținut 1240

   Aceiași 30px de padding: adăugați la producție, absorbiți la noi. Toată
   diferența măsurată în aval vine de aici — `.col-main` 1008 vs 988, iar de
   acolo 4 carduri pe rând vs 3, iar de acolo ~240px de înălțime × 15-20 de
   rânduri.

   ── DE CE NU „mărim max-width 1270→1300 și 1520→1550" ────────────────────
   Pentru că `width: 100%` limitează oricum cutia la lățimea părintelui:
   în `border-box`, lățimea finală e `min(100% din părinte, max-width)`.
   La un viewport de 1280, `min(1280, 1300) = 1280` ⇒ conținut 1250 ⇒
   `.col-main` 998 ⇒ `4 × 250 = 1000 > 998` ⇒ TOT 3 carduri pe rând.
   Varianta cu `max-width` mărit repară 1600, dar NU repară banda 1270-1299 —
   exact fereastra de la care a pornit discuția. Singurul mod de a obține
   conținut de 1270px într-un viewport de 1280px este să DEPĂȘEȘTI viewport-ul
   cu 20px, adică exact ce face `content-box`.

   ── SFERA: doar ≥1024px ──────────────────────────────────────────────────
   Sub 1024px rămâne `border-box` din blocul 1. Acolo depășirea ar fi de 30px
   pe un ecran de 375px — adică ~8% din lățime, un defect real de utilizare,
   pe lățimile unde tema noastră unică e singura care există (producția servește
   acolo tema `Mobile`, cu alt markup). Peste 1024px depășirea e de 0-30px pe o
   fereastră de desktop, e comportamentul actual al producției, și dispare
   complet de la 1300px în sus.

   ── REZULTATUL AȘTEPTAT (carduri pe rând) ────────────────────────────────
   card ≤1259px = 19.5em = 234px · ≥1260px = 20em = 240px · ≥1530px = 19.2em
   = 230.4px (`products.css:183,229,234`), toate `border-box` la noi (deci cu
   2px mai înguste decât la producție, care le adaugă bordura), + 10px margine:

     viewport   noi: conținut/col-main/rând      producție: conținut/col-main/rând
       1024      1024 /  772 / 3                   1024 /  770 / 3
       1280      1270 / 1018 / 4                   1270 / 1008 / 4
       1600      1520 / 1218 / 5                   1520 / 1218 / 5

   `.header-container` intră în aceeași regulă: poartă ambele clase
   (`class="header-container wrapper-full"`) și are și el `padding: 0 15px`
   (`header.css:684`), deci trebuie să rămână aliniat cu coloanele de dedesubt.
   ========================================================================== */
@media (min-width: 1024px) {
    .wrapper-full,
    .header-container {
        box-sizing: content-box;
    }
}

/* ==========================================================================
   2. 1024–1529px: plasă de siguranță pentru coloana de conținut
   ==========================================================================
   ISTORIC, ca să nu se reintroducă niciuna dintre variantele greșite:

   (v1, moștenit) `@media (max-width: 1339px) { .col-main { width: auto } }`.
       Un float cu `width: auto` face shrink-to-fit, iar „preferred width"-ul
       unui container de carduri flotante e mult peste o linie ⇒ `.col-main`
       lua TOATĂ lățimea, `.col-left` (float: left) nu mai încăpea și CĂDEA SUB
       conținut. Aspectul pe două coloane dispărea între 1024 și 1339px.
       Măsurat: ecart de înălțime la 1280 egal cu înălțimea barei laterale a
       fiecărei pagini (magazine 1317 cu 2 widget-uri … categorie 3832 cu 5).

   (v2, al meu) `width: calc(100% - 252px) !important`. A reparat aspectul pe
       două coloane (home 6772 → 3797 vs 3759 la producție), dar rula pe un
       container cu 30px prea îngust (vezi blocul 1b) ⇒ `.col-main` 988 în loc
       de 1008 ⇒ 3 carduri pe rând în loc de 4 pe paginile de grilă.

   (v3, acum) Blocul 1b redă containerului lățimea producției, deci lățimile
       FIXE ale producției încap din nou, exact ca la ea:
         1024-1269:  770 + 236 + 10 = 1016 ≤ 1024
         1270-1529: 1008 + 236 + 10 = 1254 ≤ 1270
         ≥1530:     1218 + 280 + 10 = 1508 ≤ 1520   (regula producției, neatinsă)
       Nu mai suprascriem `width`: lăsăm `columns.css` să conducă, deci coloana
       are EXACT lățimea producției, nu una „aproape".

   Ce rămâne e doar o PLASĂ DE SIGURANȚĂ, cu `max-width`, nu cu `width`:
   `max-width` nu poate lărgi nimic, doar împiedică depășirea. Când totul e în
   regulă, `min(1008, 1018) = 1008` ⇒ zero efect. Dacă vreodată containerul
   redevine mai îngust (cineva reintroduce `border-box` pe `.wrapper-full`,
   sau se schimbă padding-ul), coloana se strânge în loc să arunce bara
   laterală sub conținut — adică defectul v1 nu se mai poate întoarce tăcut.
   ========================================================================== */
@media (min-width: 1024px) and (max-width: 1529px) {
    .col2-left-layout .col-main {
        max-width: calc(100% - 252px);
    }
}

/* ==========================================================================
   3. Sub 1024px: coloanele se stivuiesc (conținut întâi, bară laterală după)
   ==========================================================================
   Float-urile nu pot fi reordonate, deci `.main` devine coloană flex și ordinea
   e explicită — bara laterală trebuie să rămână SUB conținut, ca pe mobil
   produsele să fie primul lucru vizibil.
   ========================================================================== */
@media (max-width: 1023px) {
    .main.clearfix {
        display: flex;
        flex-direction: column;
    }

    /* Regula de bază a producției e `.col-main { width: 640px }` — depășește
       viewport-ul sub 640px pe ORICE layout, inclusiv `fullwidth` (care n-are
       clasa `col2-left-layout`). De aceea se neutralizează pe container, nu
       doar pe layout-ul cu două coloane. */
    .main-container .col-main,
    .col2-left-layout .col-main {
        float: none !important;
        width: 100% !important;
        margin: 0 !important;
        order: 1;
    }

    .col2-left-layout .col-left,
    .col2-left-layout .col-left.sidebar {
        float: none !important;
        width: 100% !important;
        margin: 16px 0 0 0 !important;
        order: 2;
    }

    /* `width: 250px; margin-right: 20px` — fix, gândit pentru o coloană îngustă. */
    .filters-sidebar {
        width: auto;
        margin-right: 0;
    }
}

/* ==========================================================================
   4. Grila de produse: 4 → 3 → 2 coloane
   ==========================================================================
   Cardul producției e `width: 19.5em; float: left; margin: 6px 5px 8px 5px`
   (deci 10px de margine orizontală). Păstrăm float-ul și marginile — schimbăm
   doar lățimea, în procente, ca să nu atingem restul regulilor cardului.
   `min-height` fix (26.4em) rămâne pe desktop; pe mobil îl relaxăm.
   ========================================================================== */
@media (max-width: 1023px) {
    .product-grid > div {
        width: calc(33.333% - 10px);
    }
}

@media (max-width: 767px) {
    .product-grid > div {
        width: calc(50% - 10px);
        min-height: 0;
    }

    .product-grid .image img {
        width: 100%;
        height: auto;
    }
}

/* ==========================================================================
   5. Header: logo + căutare + acțiuni se rearanjează
   ==========================================================================
   `.header-container` e deja flex cu `space-between`; îi permitem să treacă pe
   mai multe rânduri, iar căutarea (care are `flex: 1; max-width: 500px`) ocupă
   un rând propriu sub logo și acțiuni.
   ========================================================================== */
@media (max-width: 1023px) {
    .header-container {
        flex-wrap: wrap;
        gap: 10px;
    }

    .header-search {
        flex: 1 1 100%;
        max-width: none;
        margin: 0;
        order: 3;
    }

    .header-actions {
        flex-wrap: wrap;
        gap: 10px;
    }

    #header .loginbar {
        padding-right: 15px;
    }
}

@media (max-width: 767px) {
    .header-logo {
        flex: 0 0 120px;
        margin: 2px 8px 2px 0;
    }

    .cart-comparison-wrapper {
        flex: 1 1 auto;
    }
}

/* ==========================================================================
   6. Bara de meniu: bandă cu scroll orizontal propriu
   ==========================================================================
   `#header .links` are `height: 37px` fix, iar `#header .links .menu a` e
   `float: left; padding: 13px 16px` — cele 7 intrări depășesc 700px, deci la
   360px ar împinge toată pagina. Le punem într-o bandă care derulează pe
   orizontală: aspectul rămâne cel al producției (aceleași padding-uri,
   aceeași ordine), doar că surplusul nu mai iese din pagină.
   ========================================================================== */
@media (max-width: 1023px) {
    #header .links {
        height: auto;
    }

    #header .links .menu {
        display: flex;
        flex-wrap: nowrap;
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: thin;
    }

    #header .links .menu a {
        float: none;
        flex: 0 0 auto;
        white-space: nowrap;
    }

    #header .links .social-media-icons {
        float: none;
        display: flex;
        justify-content: center;
        line-height: 1;
        padding: 8px 0;
    }

    #header .links .social-media-icons a {
        float: none;
        margin: 0 5px;
    }
}

/* ==========================================================================
   7. Mega-meniul pe ecrane mici
   ==========================================================================
   `.mega-menu-layout` e `display: flex; min-height: 400px` — pe mobil devine
   bloc, ca panoul de subcategorii să curgă sub lista de categorii. Foaia
   producției are deja reguli pentru `.mega-menu-primary` sub 768px; aici doar
   deschidem containerul și limităm înălțimea.
   ========================================================================== */
@media (max-width: 1023px) {
    .mega-menu-layout {
        display: block;
        min-height: 0;
    }

    .products-mega-menu {
        max-height: 75vh;
    }

    .mega-menu-secondary-panel {
        position: relative;
        top: auto;
        left: auto;
        right: auto;
    }
}

/* ==========================================================================
   8. Antetul de categorie și blocurile de conținut
   ========================================================================== */
@media (max-width: 767px) {
    .box .home-content > div > .col-wide {
        width: 100% !important;
    }

    .category-heading .breadcrumb {
        align-items: flex-start;
    }

    .category-heading .sort-options select {
        max-width: 100%;
        min-width: 0;
    }

    /* Paginatorul legacy e un rând de linkuri; îl lăsăm să treacă pe mai multe. */
    .pagination center {
        display: block;
        line-height: 2.2;
    }
}

/* ==========================================================================
   9. MOBIL (≤767px): header-ul devine compact, ca tema Mobile a producției
   ==========================================================================
   MĂSURAT ÎN BROWSER (2026-08-30, headless Chrome la 375px, UA de iPhone):
   pagina portului era de 2–4× mai înaltă decât a producției — home 11869 px
   vs. 2751 px, categorie 17012 vs. 9442, produs 9993 vs. 3324. Cauza NU e
   CSS-ul per pagină (aceea e rezolvată separat): cu UA de mobil producția
   servește o A DOUA TEMĂ, cu markup complet diferit (`<header id="main-header">`,
   navbar Bootstrap cu iconițe SVG, `.search-box`, `#menu-content` cu acordeon).
   Noi randăm header-ul DESKTOP, stivuit pe verticală: bara „Bine ai venit!",
   logo, „Telefon: …" ca text, cutia „COS CUMPARATURI / VEZI COSUL", căutarea,
   rândul de tab-uri, rândul de iconițe sociale — abia apoi conținutul.

   Decizia de proiect e O SINGURĂ TEMĂ RESPONSIVĂ: nu portăm a doua temă. Deci
   forma compactă trebuie CÂȘTIGATĂ din markup-ul nostru, din CSS. Ținta e
   silueta pe care colegii o știu deja de pe telefon:

       [logo]                          ☎  🛒  👤     ← un singur rând
       [ căutare, lățime completă ................. ]
       [ ☰ PRODUSE — bară roșie, lățime completă ... ]
       [ Articole · Magazine · Produse noi · …       ]   ← bandă compactă
       conținut

   Ce se schimbă e DOAR aranjarea: zero culori noi (roșul e `#D91E18` /
   `#CD0018` din foaia producției), zero fonturi noi, zero componente noi.
   Iconițele sunt exact cele din tema Mobile a producției (Font Awesome 6 Free,
   aceleași path-uri), inline ca `data:` URI — deci ZERO cereri de rețea în
   plus și nimic de copiat în `public/img/`.

   Markup-ul NU se atinge (`shop/partials/header.blade.php` nu e al meu):
   totul de mai jos e ascundere, redimensionare și repoziționare.
   ========================================================================== */

@media (max-width: 767px) {

    /* ── Rândul 1: logo + iconițe ─────────────────────────────────────────
       `#header` are deja `position: relative` în foaia producției
       (`mega-menu.css:30`), deci bara de cont se poate ancora în el fără nicio
       regulă nouă de poziționare pe părinte. */
    /* Padding-ul rândului e fixat aici ca ancorarea iconiței de cont (absolută,
       mai jos) să aibă o înălțime cunoscută: 1px bordură + 8px + 56px + 8px +
       1px bordură = 74px. */
    #header #container.header-row {
        padding: 8px 0;
    }

    #header .header-container {
        min-height: 56px;
        padding: 4px 15px;
        /* Loc rezervat pentru iconița de cont, care e absolută (vezi mai jos):
           altfel s-ar suprapune peste iconița de coș. */
        padding-right: 54px;
        gap: 8px;
        row-gap: 8px;
    }

    /* Logo-ul: 165px fix pe desktop ⇒ prea lat lângă trei iconițe. Producția
       servește exact `width:119px` pe mobil. */
    #header .header-logo {
        flex: 0 0 116px;
        margin: 0;
    }

    #header .header-actions {
        flex: 0 0 auto;
        flex-wrap: nowrap;
        gap: 10px;
        margin-left: auto;
    }

    /* ── „Telefon: 0332.413.401" → iconiță de telefon ─────────────────────
       Eticheta „Telefon:" dispare, numărul rămâne apelabil (`tel:`), dar ca
       suprafață de atins de 30px, nu ca text pe un rând întreg. */
    #header .header-contact {
        font-size: 0;
        line-height: 0;
        white-space: nowrap;
        margin: 0;
    }

    #header .header-contact > span {
        display: none;
    }

    #header .header-contact a {
        display: block;
        width: 30px;
        height: 30px;
        margin: 0;
        font-size: 0;
        line-height: 0;
        color: transparent;
        overflow: hidden;
        background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512' fill='%23333'%3E%3Cpath d='M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z'/%3E%3C/svg%3E") center / 22px 22px no-repeat;
    }

    /* ── Cutia „COS CUMPARATURI / VEZI COSUL" → iconiță de coș ────────────
       Cutia are chenar, etichetă, stare („Coșul este gol") și un buton roșu
       lat — pe 375px ocupă singură aproape un rând. Rămâne butonul, ca pătrat
       roșu de 34px cu iconița de coș; linkul e neschimbat (`/cart`). */
    #header .cart-comparison-wrapper {
        flex: 0 0 auto;
    }

    #header .header-cart-comparison {
        padding: 0;
        border: 0;
        background: none;
    }

    #header .cart-comparison-info {
        display: none;
    }

    #header .cart-comparison-button {
        display: block;
        width: 34px;
        height: 34px;
        padding: 0;
        margin: 0;
        font-size: 0;
        line-height: 0;
        color: transparent;
        overflow: hidden;
        border-radius: 3px;
        background: #D91E18 url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 576 512' fill='%23fff'%3E%3Cpath d='M0 24C0 10.7 10.7 0 24 0H69.5c22 0 41.5 12.8 50.6 32H560c26.5 0 46.1 24.7 40 50.5l-40 168C555.6 267.5 541.5 280 525 280H170.7l6.4 32H500c26.5 0 48 21.5 48 48s-21.5 48-48 48H150.6C126 408 105 390.4 100.2 366.3L46.2 96H24C10.7 96 0 85.3 0 72V24zM128 464a48 48 0 1 1 96 0 48 48 0 1 1 -96 0zm336-48a48 48 0 1 1 0 96 48 48 0 1 1 0-96z'/%3E%3C/svg%3E") center / 19px 19px no-repeat;
    }

    /* ── Bara „Bine ai venit! Autentifica-te sau creeaza un cont." ────────
       Pe 375px se rupe pe două rânduri și consumă ~66px înainte de orice.
       Devine a treia iconiță din rând (cont), ancorată în `#header`. Linkul
       păstrat e „Autentifica-te"; „creeaza un cont" rămâne accesibil din
       pagina de login, ca în tema Mobile a producției. */
    #header .loginbar {
        position: absolute;
        top: 0;
        right: 12px;
        /* Exact înălțimea primului rând (vezi `#container.header-row` de mai
           sus). Centrarea e făcută cu flex, nu cu un `top` calculat, ca o
           abatere de câțiva pixeli să nu strice alinierea celor trei iconițe. */
        height: 74px;
        display: flex;
        align-items: center;
        z-index: 20;
        width: auto;
        margin: 0;
        padding: 0;
        border: 0;
        line-height: 0;
        background: none;
        background-image: none;
    }

    #header .loginbar > div {
        width: auto;
        padding: 0;
        margin: 0;
        text-align: right;
        background: none;
    }

    /* `font-size: 0` stinge nodurile de text („Bine ai venit!", „sau",
       „un cont.") fără să atingă markup-ul. */
    #header .loginbar > div > span {
        font-size: 0;
        line-height: 0;
        color: transparent;
    }

    #header .loginbar > div > span > a {
        display: none;
    }

    #header .loginbar > div > span > a:first-of-type {
        display: block;
        width: 30px;
        height: 30px;
        padding: 0;
        font-size: 0;
        line-height: 0;
        color: transparent;
        overflow: hidden;
        background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 448 512' fill='%23333'%3E%3Cpath d='M224 256A128 128 0 1 0 224 0a128 128 0 1 0 0 256zm-45.7 48C79.8 304 0 383.8 0 482.3C0 498.7 13.3 512 29.7 512H418.3c16.4 0 29.7-13.3 29.7-29.7C448 383.8 368.2 304 269.7 304H178.3z'/%3E%3C/svg%3E") center / 21px 21px no-repeat;
    }

    /* ── Rândul 2: căutarea, lățime completă ─────────────────────────────
       (`order: 3` vine deja din blocul 5; aici doar strângem spațiile.) */
    #header .header-search {
        order: 3;
        flex: 1 1 100%;
        max-width: none;
        margin: 0;
    }

    /* ── Rândul 3: „PRODUSE" ca bară roșie pe toată lățimea ──────────────
       Exact rolul antetului roșu al acordeonului din tema Mobile. Clasa e deja
       roșie în foaia producției (`mega-menu.css:2-16`); aici doar o lățim. */
    #header .links {
        height: auto;
    }

    /* `flow-root`, nu `block`: bara roșie e pe un rând, iar celelalte intrări
       rămân flotante (ca în producție) — containerul trebuie să le cuprindă,
       altfel `.links` se prăbușește la înălțime 0 și meniul intră peste
       conținut. `overflow: hidden` ar fi mers și el, dar `flow-root` nu taie
       nimic. (Blocul 6, la ≤1023px, face `.menu` un flex cu scroll orizontal;
       aici îl anulăm — pe telefon vrem bara roșie pe toată lățimea.) */
    #header .links .menu {
        display: flow-root;
        overflow: visible;
    }

    #header .links .menu a.products-menu-toggle {
        display: flex;
        justify-content: center;
        width: 100%;
        box-sizing: border-box;
        float: none;
        padding: 12px 15px;
        margin: 0 0 1px 0;
    }

    /* ── Rândul 4: celelalte intrări, bandă compactă cu scroll ───────────
       NU se ascund: „Produse noi", „Producatori" și „Newsletter" nu există
       nicăieri în subsol, deci ascunderea rândului le-ar face inaccesibile pe
       telefon. Rămân, dar la 11px și cu padding strâns — un singur rând de
       ~30px, nu unul de 37px cu litere spațiate care iese din ecran. */
    #header .links .menu a:not(.products-menu-toggle) {
        float: left;
        padding: 9px 10px;
        font-size: 11px;
        letter-spacing: 0;
        line-height: 1;
    }

    /* Iconițele sociale: pur decorative, iar tema Mobile a producției nu le
       are deloc în header. Rămân în subsol. */
    #header .links .social-media-icons {
        display: none;
    }

    /* Slotul de notificări e gol în Faza 1; pe mobil îi luăm și înălțimea. */
    #header #notification {
        display: none;
    }

    /* ── Meniul de categorii: listă verticală, nu mega-meniu reflowat ────
       Foaia producției transformă `.mega-menu-primary-list` într-o bandă cu
       scroll ORIZONTAL sub 991px (`mega-menu.css:268-279`) — pe telefon ies
       categoriile pe lângă ecran și panoul de subcategorii se deschide sub ele,
       lung cât pagina. Îl aducem la forma pe care o are acordeonul producției:
       o listă verticală de categorii, pe toată lățimea, sub bara roșie.

       Panourile de subcategorii se ascund: deschiderea lor la atingere ar cere
       JS (`public/js/shop-mega-menu.js` / `shop.js`), pe care nu-l dețin —
       vezi „Rămas de făcut" din raport. Fiecare categorie de nivel 1 rămâne un
       LINK funcțional către pagina ei, deci nimic nu devine inaccesibil. */
    .products-mega-menu {
        max-height: 70vh;
    }

    .mega-menu-primary {
        width: 100%;
        max-height: none;
        border-right: none;
        box-shadow: none;
    }

    .mega-menu-primary-list {
        display: block;
        overflow: visible;
    }

    .mega-menu-primary-item {
        display: block;
        white-space: normal;
        border-right: none;
        border-bottom: 1px solid #e0e0e0;
    }

    .mega-menu-primary-link {
        padding: 13px 16px;
        font-size: 13px;
    }

    .mega-menu-secondary {
        display: none;
    }

    /* ── Intrările secundare, mutate ÎN SERTAR ───────────────────────────
       „Articole · Magazine · Produse noi · Producatori · Newsletter ·
       Contact" se împachetau pe DOUĂ rânduri în header (măsurat la 375px:
       y=206 și y=235) și mâncau ~60px pe fiecare pagină. `shop.js`
       (`initMobileDrawerNav`) le mută, pe mobil, ca ultimi copii ai lui
       `.mega-menu-content` — adică sub categorii, exact unde le ține
       sertarul producției (`Modules/categories.ctp:86-102`: Magazine,
       Articole, Contact, după cele 7 antete de categorie).

       Selectorul cere `> a` DIRECT sub `.mega-menu-content`: singurele
       `<a>` aflate acolo sunt cele mutate de noi. Categoriile stau mai
       adânc, în `.mega-menu-layout`, deci nu se ating.

       Metricile sunt ale lui `.mega-menu-primary-link` de mai sus (13px /
       13px 16px), ca sertarul să se citească drept O SINGURĂ listă, nu
       două componente lipite. Producția face la fel: acolo TOATE intrările
       din sertar — categorii și linkuri deopotrivă — poartă același antet
       roșu, deci tratament uniform. Zero culori noi: `#333` și `#e0e0e0`
       sunt deja în blocul de mai sus. */
    #products-mega-menu .mega-menu-content > a {
        display: block;
        float: none;
        padding: 13px 16px;
        font-size: 13px;
        line-height: 1.2;
        letter-spacing: 0;
        color: #333;
        text-transform: uppercase;
        text-decoration: none;
        border-bottom: 1px solid #e0e0e0;
    }

    /* Prima intrare mutată marchează granița „categorii ↑ / restul site-ului ↓".
       O linie mai groasă, în roșul care e deja pe `border-top` al sertarului
       (`mega-menu.css:47`, `#CD0018`) — nicio culoare nouă. */
    #products-mega-menu .mega-menu-content > .mega-menu-layout + a {
        border-top: 2px solid #CD0018;
    }
}

/* ==========================================================================
   10. VARIANTA C DE MOBIL — categoriile deasupra produselor, colapsate
   ==========================================================================
   TOT blocul e activ DOAR când `div.page` poartă `mobile-variant-c`
   (`shop_mobile_variant()` ⇒ `config('shop.mobile_variant')` sau `?mobile=c`)
   ȘI DOAR sub 768px. Varianta A (implicit) nu se atinge de nimic din ce urmează
   — nici măcar nu se potrivește vreun selector.

   DESKTOPUL E NEATINS PRIN CONSTRUCȚIE: nu există nicio regulă cu
   `mobile-variant-c` în afara acestui `@media (max-width: 767px)`. La 1280
   `.mobile-variant-c` e un token de clasă mort.

   ── CE AM MĂSURAT PE PRODUCȚIE (2026-08-30, Chrome headless 375px, UA iPhone)
   Tema `Mobile` a producției, cele patru pagini cerute:

     | pagină            | înălțime | acordeon în flux            | „Cele Mai   | logo-uri     |
     |                   |  @375    |                             |  Vândute"   | producători  |
     |-------------------|---------:|-----------------------------|-------------|--------------|
     | `/`               |    2751  | DA — 294→2457 px (2163 px)  | **absent**  | **absent**   |
     | `/category/body`  |    9445  | nu (doar în sertarul ☰)     | **absent**  | **absent**   |
     | `/product/<slug>` |    3323  | nu (doar în sertarul ☰)     | **absent**  | **absent**   |
     | `/offers`         |    2859  | nu (doar în sertarul ☰)     | **absent**  | **absent**   |

   Trei fapte care CORECTEAZĂ premisa din raportul `css-perpagina` §G:

   1. `#menu-content { display: none; }` — antetul acordeonului din header e un
      SERTAR, deschis de ☰ (`menu_click()` din `mobile/js/main.js:174-181`).
      Pe categorie/produs/oferte nu se vede deloc.
   2. Acordeonul pe care îl vede vizitatorul pe homepage e o A DOUA randare a
      aceluiași modul, inline, în `Home/index.ctp:199` — DUPĂ carusel.
      De aceea aici banner-ul rămâne primul (vezi C.2).
   3. Acordeonul acela NU e închis: `data-toggle="collapse"` e sintaxă
      Bootstrap 3, iar bundle-ul mobil e Bootstrap **5.1.3** (`data-bs-toggle`)
      ⇒ handler-ul e mort, `.panel-collapse` n-are nicio regulă în foaie, deci
      nivelul 1 e PERMANENT DESCHIS (2163 px din cei 2751 ai paginii). Doar
      nivelul 2 (`.subcategory-container`, `style="display:none"` inline) se
      deschide la atingere.
      Varianta C de aici randează COLAPSAT — cum a fost definită opțiunea C și
      cum e singura formă care nu e un regres de înălțime. E o ABATERE
      DELIBERATĂ de la producție, în favoarea utilizatorului.

   „Cele Mai Vândute" și producătorii se ascund pe mobil pentru că producția
   nu îi randează NICIODATĂ pe mobil — nu e o preferință, e măsurătoarea.

   ── ZERO CULORI, ZERO ASSET-URI, ZERO CLASE NOI DE MARKUP ────────────────
   Antetul roșu nu se construiește: `stylesheet.css:560-569` (foaia DESKTOP a
   producției, copiată byte-cu-byte) dă deja lui `.box-category > ul > li > span`
   exact stilul antetului temei Mobile — `#fff`, 18px, 600, `line-height: 46px`,
   `url('/img/header-background-red.png') repeat-x`, `background-color: #CD0018`.
   Aceleași valori, în ambele teme ale producției. Aici doar se descoperă.
   ========================================================================== */
@media (max-width: 767px) {

    /* ── C.1 Bara laterală își pierde cutia, ca piesele ei să se poată ordona
       individual. `display: contents` scoate DOAR cutia `.col-left.sidebar`;
       copiii ei devin elemente flex ale lui `.main.clearfix` (care e deja
       `display:flex; flex-direction:column` din blocul 3), deci pot primi
       `order` fiecare separat. Fără asta, „categoriile sus, filtrele jos" ar fi
       imposibil: ambele sunt în ACEEAȘI cutie.

       `!important` NU e neglijență: foaia PRODUCȚIEI declară, la o lățime mai
       mare decât a noastră,
           mega-menu.css  @media (max-width: 991px)
                          .col2-left-layout .col-left.sidebar { display: block !important }
       (verificat în browser cu `CSSRule.selectorText` — v. raportul). Fiindcă
       `public/css/legacy/**` e copia byte-cu-byte a producției și nu se atinge,
       singura cale e să răspundem în aceeași monedă, în interiorul unui media
       query mai îngust. */
    .mobile-variant-c .col2-left-layout .col-left.sidebar {
        display: contents !important;
    }

    /* ── C.2 Homepage: banner-ul rămâne PRIMUL, ca în producție.
       Acordeonul producției e randat după carusel (`Home/index.ctp:199`), nu
       înaintea lui. `.slider-container` e emis exclusiv de modulul `banner`
       (layout 1 ⇒ doar homepage), deci `:has()` limitează `display: contents`
       la singura pagină care are nevoie de el; pe restul paginilor `.col-main`
       rămâne o cutie obișnuită și blocul 3 îl conduce nestingherit.
       Pe un browser fără `:has()` regula pică în întregime și singura urmare e
       că pe homepage acordeonul apare ÎNAINTEA banner-ului — degradare
       vizuală, nu funcțională. */
    .mobile-variant-c .col2-left-layout .col-main:has(> .slider-container) {
        display: contents;
    }

    .mobile-variant-c .col-main:has(> .slider-container) > * {
        order: 2;
    }

    .mobile-variant-c .col-main > .slider-container {
        order: -1;
        margin-bottom: 12px;
    }

    /* ── C.3 Modulul de categorii urcă și devine vizibil.
       E singurul `.box` din bara laterală cu stil INLINE: producția îl randează
       `<div class="box" style="display: none;">` (`categories.ctp:2`, trap T14 —
       arborele e emis pentru crawlere și ascuns prin CSS inline). Selectorul
       `[style]` e deci exact acel marcaj al producției, nu unul inventat, și
       `!important` e obligatoriu ca să bată stilul inline. */
    .mobile-variant-c .col2-left-layout .col-left.sidebar > .box[style] {
        display: block !important;
        order: 0;
        width: 100%;
        margin: 0 0 12px 0;
    }

    /* ── C.4 „Cele Mai Vândute" + logo-urile de producători: ascunse.
       Măsurat: tema Mobile a producției nu le randează pe NICIUNA din cele
       patru pagini. În varianta A ele rămân sub produse, ca azi. */
    .mobile-variant-c .col2-left-layout .col-left.sidebar > .box:not([style]) {
        display: none;
    }

    /* ── C.5 Filtrele de categorie rămân SUB produse (order 2 = după `.col-main`,
       care are `order: 1` din blocul 3). Producția le pune într-un offcanvas
       (`#product_filter_off`) deschis din bara de sortare; nu portăm offcanvas-ul
       aici — comutatorul e despre ordinea modulelor, nu despre filtre. */
    .mobile-variant-c .col2-left-layout .col-left.sidebar > .filters-sidebar {
        order: 3;
        width: auto;
        margin: 16px 0 0 0;
    }

    /* ── C.6 Acordeonul: antetele rămân, listele se închid.
       `> span` e antetul roșu (stilul e deja al producției — vezi antetul
       blocului); aici se adaugă doar afordanța de atingere. */
    .mobile-variant-c .box-category > ul > li > span {
        cursor: pointer;
        position: relative;
        padding-right: 34px;
        -webkit-user-select: none;
        user-select: none;
    }

    /* Săgeata: triunghi din borduri, alb — nicio imagine nouă, nicio culoare
       nouă. Tema Mobile a producției folosește `fa-caret-down` în exact același
       rol, pe nivelul 2 (`categories.ctp:57`). */
    .mobile-variant-c .box-category > ul > li > span::after {
        content: "";
        position: absolute;
        top: 50%;
        right: 15px;
        margin-top: -3px;
        border-top: 6px solid #fff;
        border-right: 6px solid transparent;
        border-left: 6px solid transparent;
    }

    /* `.active` e clasa de stare pe care o pune `shop.js` — ACEEAȘI pe care o
       folosește deja `shop-mega-menu.js` (copia producției) pentru panoul
       deschis. Nu se introduce un al doilea vocabular de stare. */
    .mobile-variant-c .box-category > ul > li.active > span::after {
        border-top: none;
        border-bottom: 6px solid #fff;
    }

    /* Închis implicit. `shop.js` pune `display` INLINE la atingere; stilul
       inline bate regula asta (niciuna nu e `!important`) — exact mecanismul
       deja folosit pentru `.mega-menu-secondary`, nu unul nou. */
    .mobile-variant-c .box-category > ul > li > ul {
        display: none;
    }

    /* Suprafață de atins de 44px pe subcategorii, ca în tema Mobile a
       producției (`.category-list ul li a { display:block; padding:15px }`).
       Se aplică DOAR în varianta C și doar sub 768px. */
    .mobile-variant-c .box-category > ul > li > ul > li > a {
        display: block;
        padding: 6px 0;
    }
}

/* ==========================================================================
   11. MOBIL (≤767px): SILUETA TEMEI `Mobile` A PRODUCȚIEI
   ==========================================================================
   TOT blocul e într-un singur `@media (max-width: 767px)`. La 768px+ niciun
   selector de aici nu se potrivește — desktopul e neatins prin construcție.

   ── CE AM MĂSURAT (2026-08-30, Chrome headless 375px, UA de iPhone) ─────────
   `/product/bile-lelo-luna-classic`, aceeași pagină pe ambele părți:

     | ce                          | producție (tema Mobile) | portul, înainte |
     |-----------------------------|------------------------:|----------------:|
     | înălțime totală             |                  4240px |         11643px |
     | container                   |        `.container-fluid`| `.main-container.col2-left-layout` |
     | `.col-left.sidebar`         |                 INEXISTENT |          3865px |
     | rând separat pentru ☰       |                    NICIUNUL |     70px (`.links`) |
     | firimituri                  |  `.page-header`, 32px, 1 rând | `.breadcrumb`, 70px, 2 rânduri |

   Cele trei diferențe de mai jos sunt fidelitate de markup/CSS, nu preferințe.

   ── 11.1 BARA LATERALĂ IESE DIN FLUXUL DE MOBIL ─────────────────────────────
   Tema `Mobile` a producției nu randează NICIUNDE „Cele Mai Vândute" și nici
   logo-urile de producători: căutate pe toate cele patru pagini mobile ale
   producției, `0` apariții pentru `popularproducts` / `Producatori` /
   `.manufacturer-logo-wrapper`. Pe telefon, navigarea trăiește în sertarul ☰,
   deci cutiile astea n-au ce căuta în pagină.

   Se ascund CUTIILE (`> .box`), nu bara: `.filters-sidebar` NU e o `.box` și
   RĂMÂNE. Producția pune filtrele într-un offcanvas deschis din bara de
   sortare (`#product_filter_off`); portul nu-l are încă, iar ascunderea barei
   întregi ar face filtrarea imposibilă pe telefon — un regres funcțional, nu o
   economie. Rămâne sub produse până se portează offcanvas-ul.

   Măsurat: −3820px pe pagina de produs, −3157px pe categorie. */
@media (max-width: 767px) {

    .col2-left-layout .col-left.sidebar > .box {
        display: none !important;
    }

    /* Bara rămâne în DOM, dar fără cutii n-are conținut: îi luăm marginea, ca
       să nu lase 16px de gol pe paginile fără filtre (produs, home, oferte).
       Filtrele își primesc distanța înapoi, individual. */
    .col2-left-layout .col-left.sidebar {
        margin: 0 !important;
    }

    .col2-left-layout .col-left.sidebar > .filters-sidebar {
        margin-top: 16px;
    }

    /* ── 11.2 ☰ ÎN RÂNDUL DE HEADER, NU PE UN RÂND AL LUI ────────────────
       `shop.js` (`initMobileHeaderTrigger`) mută `#products-menu-toggle` ca
       primul copil al lui `.header-container`, adică la stânga logo-ului —
       locul din `Themed/Mobile/Elements/header.ctp:22-29`. Aici îl facem să
       arate a buton de iconiță, ca `.MobileMenuTriggerButton` (51×55, fundal
       `#f5f5f5`), și scoatem rândul rămas gol.

       Eticheta „PRODUSE" se ascunde prin `font-size: 0` pe link și se redă
       doar glifa ☰ din `.hamburger-icon` — fără markup nou, fără asset nou,
       fără o a doua iconiță de încărcat. */
    #header .header-container > .products-menu-toggle {
        order: -1;
        flex: 0 0 44px;
        width: 44px;
        height: 44px;
        margin: 0;
        padding: 0;
        float: none;
        display: flex;
        align-items: center;
        justify-content: center;
        background: #f5f5f5;
        border-radius: 3px;
        font-size: 0;
        letter-spacing: 0;
        text-decoration: none;
    }

    #header .header-container > .products-menu-toggle .hamburger-icon {
        font-size: 22px;
        line-height: 1;
    }

    /* Logo-ul cedează cei 44px + 8px de gap către declanșator. */
    #header .header-container > .products-menu-toggle ~ .header-logo {
        flex: 0 0 104px;
    }

    /* Rândul care găzduia bara roșie: după mutarea declanșatorului (11.2) și a
       celor șase intrări secundare (blocul 9) nu mai conține decât un
       `.col-left` gol și iconițele sociale, deja ascunse. Producția n-are rândul
       ăsta deloc pe telefon. −70px pe fiecare pagină. */
    #header .links {
        display: none;
    }

    /* ── 11.3 FIRIMITURILE: BARĂ ROȘIE DE UN RÂND ────────────────────────
       Producția: `.page-header` — `background: #cccccc url("/img/header-background-red.png")
       repeat-x top left; color: #fff; width: 100%; font-size: 16px;
       line-height: 32px; padding: 2px 3px; margin: 0 0 2px 0; max-height: 32px`
       (`mobile/css/stylesheet.css:99-109`). Un rând, tăiat, pe toată lățimea.
       Portul avea o cutie cu bordură care se rupea pe 2 rânduri (produs, 70px)
       și pe 7 (categorie, 137px, fiindcă acolo `.breadcrumb` înfășoară ȘI
       contorul + sortarea).

       Aceleași valori, aceeași imagine de fundal (`/img/header-background-red.png`
       e servit de webroot-ul live, deja folosit de `/img/logo_hd.svg`) —
       zero culori noi, zero asset nou.

       `display: block !important` fiindcă pe categorie `.breadcrumb` primește
       `style="display:flex…"` INLINE din `catalog/category.blade.php:42`, iar
       un stil inline nu poate fi bătut altfel. Bara de sortare NU se ascunde:
       iese din rândul flex și devine propriul rând dedesubt — exact ca
       `.inner-content` al producției (`Categories/view-2026.ctp:28`), care e
       separat de firimituri. Contorul `.total-products-count` (cârlig de
       harness) rămâne randat și lizibil. */
    .breadcrumb {
        display: block !important;
        background: #cccccc url("/img/header-background-red.png") repeat-x top left;
        border: none;
        color: #fff;
        padding: 0;
        margin: 0 0 2px 0;
        /* `width: auto`, NU `width: 100%` ca producția. Al ei stă direct în
           `body`; al nostru apare și în interiorul unor cutii cu padding
           (`.box.contact-form`), unde `100%` se măsoară pe cutia de conținut a
           părintelui și apoi se adaugă padding-ul ⇒ depășire orizontală.
           Măsurat pe `/contact`: 375 → 380px. Un element bloc umple oricum
           lățimea disponibilă, deci `auto` dă același rezultat fără depășire. */
        width: auto;
        box-sizing: border-box;
    }

    /* Doar `<span>`-ul firimiturilor e bara de un rând; ce urmează după el
       (bara de sortare) nu se taie.

       `box-sizing: border-box` ca `max-height: 32px` să însemne 32px de bară,
       nu 32 + 4 de padding. Producția face exact la fel: `.page-header` are
       `padding: 2px 3px; max-height: 32px; line-height: 32px` și măsoară 32px
       cap-coadă (măsurat pe `/articles` la 375px, UA iPhone). Fără el bara
       ieșea 36px. */
    .breadcrumb > span {
        display: block;
        box-sizing: border-box;
        max-height: 32px;
        padding: 2px 3px;
        font-size: 16px;
        line-height: 32px;
        white-space: nowrap;
        overflow: hidden;
        text-overflow: ellipsis;
        color: #fff;
    }

    /* Descendent, nu copil direct: firimiturile stau într-un `<span>` pe
       paginile care trec prin `shop/partials/breadcrumbs.blade.php`, dar
       coșul, magazinele și `/products/discounts` își emit încă propriul markup,
       cu `<a>`-urile copii direcți ai lui `.breadcrumb`. O singură regulă le
       acoperă pe amândouă și nu depinde de forma markup-ului.

       `!important` nu e neglijență: foaia PRODUCȚIEI, pe care o încărcăm ca
       atare, pune `color: #666666 !important` pe linkuri
       (`public/css/legacy/stylesheet.css:244-249`, replicat în
       `shop-legacy.css:589`). Fără el firimiturile rămân gri pe bara roșie —
       greu de citit. E singura cale.

       `div.breadcrumb`, nu `.breadcrumb`: selectorul producției e tot
       `.breadcrumb a` și tot `!important`, deci am fi avut specificitate EGALĂ
       și am fi câștigat doar fiindcă foaia noastră se încarcă mai târziu.
       Tipul în plus ne dă (0,1,2) față de (0,1,1) și scoate ordinea de
       încărcare din ecuație. Toate `.breadcrumb`-urile din storefront sunt
       `<div>`. */
    div.breadcrumb a {
        color: #fff !important;
    }

    /* Bara de sortare / contorul: rând propriu, pe fundal normal, sub bara
       roșie. Fără asta ar moșteni albul pe alb.

       Selector POZITIV (`> div`), nu „tot ce nu e span": bara de sortare e un
       `<div>` pe toate paginile care o au (categorie, căutare,
       `/products/latest`, favorite). Varianta prin negație prindea și
       `<a>`-urile firimiturilor de pe paginile fără `<span>` și le picta drept
       casete albe cu text gri peste bara roșie — defectul semnalat de owner pe
       pagina de produs (captură de pe telefon, 2026-08-30). Selectorul pozitiv
       nu poate reintroduce clasa aia de defect, oricare ar fi markup-ul. */
    .breadcrumb > div {
        color: #333;
        background: #fff;
        padding: 6px 0 0 0;
    }
}

/* ── 11.4 FIRIMITURILE PE DESKTOP: `<span>`-ul dispare din layout ──────────
   Pe pagina de produs, foaia PRODUCȚIEI face
   `.product-breadcrumb { display: flex; gap: 10px; }`
   (`public/css/legacy/product.css:16-28`). Fără înveliș, fiecare firimitură ȘI
   fiecare separator ` / ` devine flex item propriu, cu 10px de o parte și de
   alta — așa arată producția. De când firimiturile trec toate prin
   `shop/partials/breadcrumbs.blade.php`, ele stau într-un `<span>`, adică un
   SINGUR flex item, iar separatoarele se strâng: al doilea link se muta cu
   11.73px la stânga față de producție, la 1280, 1024 și 768 deopotrivă.

   `display: contents` scoate `<span>`-ul din arborele de layout și îi promovează
   copiii la flex items ai lui `.product-breadcrumb` — exact geometria
   producției, cu markup-ul unificat. Măsurat: linkurile revin la 473.09 / 465.09
   / 211.09, adică la pixel peste producție.

   DOAR desktop, și dintr-un `min-width` explicit: pe mobil `.breadcrumb > span`
   TREBUIE să rămână `display: block` (e bara roșie de un rând), iar selectorul
   de aici are specificitate mai mare (0,2,1 față de 0,1,1), deci într-un bloc
   necondiționat ar fi bătut regula de mobil. Pragul e cel al restului foii. */
@media (min-width: 768px) {
    .breadcrumb.product-breadcrumb > span {
        display: contents;
    }
}

/* ==========================================================================
   12. ARTICOLE — lista de pe /articles (card vertical pe mobil)
   ADOPTAT dintr-o investigație paralelă (`art-candidate.css`), renumerotat 11→12.
   VERIFICAT DE MINE ÎN BROWSER la 375px, UA iPhone, înainte de adoptare:
     producție `/articles`: card `.article-card`, h=292, titlu 17px/22.1px,
       `.article-text` NU EXISTĂ în markup, 0 elemente tăiate;
     portul, înainte:      card `.box-content.article`, h=210, titlu 26px/31.2px,
       teaser afișat, 10 elemente tăiate.
   Diagnosticul candidatului se confirmă punct cu punct. Cele două `!important`
   sunt necesare: bat stiluri INLINE (`height:210px`, `margin-right:15px`), pe
   care nimic altceva nu le poate bate. Pragul de 1023px nu intră în conflict cu
   blocurile mele (toate la ≤767px) și nu împarte niciun selector cu ele.
   --------------------------------------------------------------------------
   Producția NU rezolvă asta prin CSS: servește unui UA mobil o ALTĂ TEMĂ
   (`View/Themed/Mobile/Articles/index.ctp`) cu alt markup — `a.article-card`
   > `.article-card-image` + `h3.article-card-title` + `.article-card-meta` —
   stilizată din `public_html/mobile/css/articles.css`, foaie pe care portul nu
   o încarcă (decizia „o singură temă responsivă", `shop.layout` §1).

   Markup-ul nostru e cel DESKTOP al producției, byte-identic (verificat la
   1280: aceleași clase, același `docH`, același număr de elemente tăiate).
   Regulile de mai jos îl aduc la forma de card a temei mobile, cu VALORILE
   copiate din foaia mobilă a producției (17px/1.3, meta 12px #999, radius 8px,
   border #e6e6e6, umbra 0 1px 3px rgba(0,0,0,.06), imagine 16/9 object-fit).

   Cele două `!important` bat STILURI INLINE emise de view (paritate desktop):
   `style="height: 210px"` pe rând și `style="margin-right: 15px"` pe imagine.
   Fără ele nicio regulă nu poate câștiga. Sunt singurele din acest bloc.

   Sfera e `.articles .box-content.article` — DOAR lista. Pagina de articol
   singular folosește `.box-content.article` fără `.articles` deasupra, iar
   acolo tema mobilă a producției păstrează exact markup-ul desktop.

   PRAGUL e 1023px, nu 767px: producția servește tema mobilă și TABLETELOR
   (verificat cu UA de iPad la 768 — `div.articles.article-card-list`). Măsurat
   la 768 cu blocul ăsta: card 486px vs 491px în producție, lista 5183px vs
   5227px. La 767 cardul s-ar opri exact acolo unde producția îl păstrează.
   ========================================================================== */
@media (max-width: 1023px) {
    .articles .box-content.article {
        /* `height: 210px` inline + `overflow:hidden` din `articles.css` taie
           3600–4300px de conținut în fiecare rând. Cardul crește liber. */
        height: auto !important;
        padding: 0;
        margin-bottom: 16px;
        background: #fff;
        border: 1px solid #e6e6e6;
        border-radius: 8px;
        box-shadow: 0 1px 3px rgba(0, 0, 0, .06);
        overflow: hidden;
    }

    .articles .box-content.article:last-child {
        margin-bottom: 0;
    }

    /* Imaginea: din `float:left` + 240×160 fix, în bandă 16/9 pe toată lățimea. */
    .articles .box-content.article .article-image {
        float: none;
        margin-right: 0 !important;
        width: 100%;
        aspect-ratio: 16 / 9;
        overflow: hidden;
        background: #f2f2f2;
    }

    .articles .box-content.article .article-image a {
        display: block;
        height: 100%;
    }

    .articles .box-content.article .article-image img {
        display: block;
        width: 100%;
        height: 100%;
        object-fit: cover;
    }

    /* Titlul: 26px/31.2px (regula desktop) → 17px/1.3, ca `.article-card-title`. */
    .articles .box-content.article .article-summary > .heading {
        margin: 0;
        padding: 12px 14px 4px 14px;
        font-size: 17px;
        line-height: 1.3;
        font-weight: 700;
        color: #333;
    }

    .articles .box-content.article .article-summary > .heading a {
        color: inherit;
        text-decoration: none;
    }

    /* Meta: `span.author` și `span.views` sunt `display:block` pe desktop;
       tema mobilă le pune pe UN rând, 12px #999. */
    .articles .box-content.article .article-summary > span {
        display: inline;
        font-size: 12px;
        color: #999;
    }

    .articles .box-content.article .article-summary > span.author {
        color: #999;
        padding-left: 14px;
    }

    .articles .box-content.article .article-summary > span.views {
        font-size: 12px;
        padding-right: 14px;
    }

    .articles .box-content.article .article-summary > span.views > span {
        color: #999;
        text-decoration: none;
    }

    .articles .box-content.article .article-summary {
        padding-bottom: 14px;
    }

    /* Teaser-ul: tema mobilă a producției NU îl randează deloc în listă. */
    .articles .box-content.article .article-text {
        display: none;
    }
}

/* ==========================================================================
   13. SUBSOLUL PE MOBIL — forma compactă a temei `Mobile`
   ==========================================================================
   ── CORECTURĂ LA O PREMISĂ PRIMITĂ ─────────────────────────────────────────
   Mi s-a transmis că „tema mobilă a producției nu randează subsolul". NU e
   adevărat. `Themed/Mobile/Elements/footer.ctp` există (67 de linii) și e
   inclus de `Layouts/fullwidth.ctp:54`. Măsurat în browser (375px, UA iPhone),
   pe `/articles` ȘI pe `/category/…`:

       producție:  `footer.clearfix`   h=171   8 linkuri, 2 imagini
       portul:     `div#footer`        h=913  17 linkuri, 3 imagini

   Deci diferența e de FORMĂ, nu de prezență, iar reparația e compactare, nu
   ascundere. Ascunderea ar fi scos din pagină linkurile ANPC / SAL / SOL și
   „Retrageți-vă din contract aici" — obligatorii pentru un magazin online din
   România. NU se ascunde niciun link: toate cele 17 rămân în DOM și
   clicabile; se schimbă doar aranjarea.

   ── DE UNDE VIN CEI 913px (măsurat pe componente) ──────────────────────────
       .top-row          80px   5 linkuri care se rup pe 2 rânduri de 37px
       .footer-content  451px   logo 67px + `.icon-menu` cu 7 pastile de
                                `width: 108px` (`stylesheet.css:1504-1522`),
                                fiecare cu o iconiță-sprite de 40×40 + 10px
                                margine ⇒ 3 rânduri înalte pe un ecran de 375
       .copyrights      362px   text `uppercase` de 10px + 3 imagini

   Ce facem: pastilele devin text pe un rând (ca lista de linkuri a producției),
   sprite-ul decorativ de 40px dispare (subsolul mobil al producției n-are
   iconițe), logo-ul dispare (nici el nu e acolo), iar `.copyrights` primește
   spațiere strânsă. Zero culori noi — toate valorile sunt cele din foaia
   producției.
   ========================================================================== */
@media (max-width: 767px) {

    /* Rândul de navigare: 5 linkuri pe un rând compact, nu 2 rânduri de 37px. */
    #footer .top-row .menu {
        float: none;
        text-align: center;
        line-height: 1.6;
    }

    #footer .top-row .menu a {
        float: none;
        display: inline-block;
        padding: 2px 6px;
        font-size: 12px;
    }

    /* Logo-ul de subsol: absent din subsolul mobil al producției. */
    #footer .footer-content .logo {
        display: none;
    }

    /* Pastilele de 108px devin linkuri text, în flux, pe mijloc. */
    #footer .footer-content .icon-menu ul {
        text-align: center;
        padding: 0;
        margin: 0;
    }

    #footer .footer-content .icon-menu ul li {
        float: none;
        display: inline-block;
        width: auto;
        margin: 0 4px;
    }

    #footer .footer-content .icon-menu ul li a {
        display: inline-block;
        width: auto;
        padding: 3px 0;
        font-size: 12px;
    }

    /* Iconița-sprite de 40×40 (`footer-icons_1.png`): pur decorativă, absentă
       din subsolul mobil al producției. Ea și marginea ei de 10px sunt cele
       care fac cele 3 rânduri înalte. */
    #footer .footer-content .icon-menu ul li a span {
        display: none;
    }

    #footer .footer-content .wrapper-full {
        padding-top: 8px;
        padding-bottom: 8px;
    }

    /* Drepturile de autor + siglele de litigii: aceleași elemente, spațiere
       strânsă. Siglele rămân — sunt obligatorii. */
    #footer .copyrights .text-center {
        line-height: 1.5;
    }

    #footer .copyrights .litigii {
        max-height: 40px;
        width: auto;
    }
}

/* ==========================================================================
   Butonul de căutare, desprins de câmp între 768 și 1023px
   ==========================================================================
   Măsurat pe dev, pentru toți utilizatorii: butonul roșu se depărtează
   progresiv de capătul câmpului — 10px la 769, 75px la 900, 121px la 992,
   **137px la 1023**. De la 1024 în sus e lipit, ca în producție.

   Cauza e o nepotrivire de cutii, nu o valoare greșită. Plafonul de 600px stă
   pe `.search-wrapper` (`legacy/header.css:428-436`), dar `position: relative`
   de pe ea e **comentat** în foaia producției. Butonul, fiind
   `position: absolute; right: 0`, se ancorează atunci în primul strămoș
   poziționat — `.header-search` — pe care blocul de la `@media (max-width: 1023px)`
   de mai sus îl lasă `max-width: none`. Deci câmpul se oprește la 600px, iar
   butonul rămâne lipit de marginea unui container mult mai lat.

   Remediul aliniază ancora cu plafonul: aceeași limită, pe elementul care
   chiar poziționează butonul. Nu atinge valorile producției.

   Banda e 768-1023 dinadins: sub 768 căutarea ocupă tot rândul pe telefon și
   trebuie să rămână așa; peste 1023 preia `shop-header-desktop.css`, care
   rezolvă deja aceeași nepotrivire pentru benzile lui.

   Găsit 2026-08-30 de agentul care lucra la antetul de desktop, în afara ariei
   lui — a semnalat în loc să repare într-un fișier care nu era al lui.
   ========================================================================== */
@media (min-width: 768px) and (max-width: 1023px) {
    #header .header-search {
        max-width: 600px;
        margin-left: auto;
        margin-right: auto;
    }
}

/* ==========================================================================
   13. ARTICOLE — lista pe DESKTOP: textul nu se mai retează la jumătate de rând

   ÎMBUNĂTĂȚIRE DECLARATĂ, nu paritate. Aprobată de owner 2026-08-31:
   „aici pe versiunea dev poti sa rezolvi, nu ne atingem de cakephp".

   DEFECTUL, identic în producție (măsurat, cifre egale până la pixel pe ambele
   site-uri la 1416px — vezi 5.24 în registru):
     view-ul emite `style="height: 210px"` pe fiecare rând (înălțimea imaginii
     + 50, din `settings`), iar `articles.css` dă `.box-content.article
     { overflow: hidden }`. Textul real are ~2100px, deci se taie ~1890px.
     Nu există `line-clamp` și nici `text-overflow`, deci nu apar „…" — se
     retează pur și simplu.

   DE CE „UNEORI", și de ce ajustarea cifrei NU rezolvă:
     210px n-are nicio relație cu grila de rânduri de 19px. După padding rămân
     190px = 10 rânduri ȘI 18px — adică un rând vizibil aproape întreg, cu
     vârfurile literelor tăiate. Faza depinde de câte rânduri ocupă TITLUL, deci
     diferă de la un articol la altul: pe unele cade la 0,2px (arată curat), pe
     altele la 11,4px (se văd doar vârfurile). Orice altă valoare fixă mută
     problema pe alte articole, n-o elimină.

   REMEDIUL: înălțimea devine un MINIM, iar textul se taie pe graniță de rând,
   cu „…". Cardurile rămân aliniate pe cele 210px cât timp textul încape, și
   cresc doar cât trebuie când titlul e lung.

   `!important` pe `height` e obligatoriu: bate stilul INLINE emis de view.
   Aceeași tehnică și același motiv ca în blocul 12, de mai sus.

   Sfera e `.articles .box-content.article` — DOAR lista. Pagina de articol
   singular folosește `.box-content.article` fără `.articles` deasupra și
   trebuie să-și păstreze textul întreg.

   Peste 1023px, fiindcă sub acest prag blocul 12 rezolvă deja altfel (card
   vertical, fără teaser, ca tema mobilă a producției).
   ========================================================================== */
@media (min-width: 1024px) {
    .articles .box-content.article {
        height: auto !important;
        /* Cele 210px devin podea, nu tavan: cardurile scurte rămân exact cum
           erau, deci lista arată la fel când textul încape. */
        min-height: 210px;
    }

    .articles .box-content.article .article-text {
        /* 6 rânduri × 19px = 114px, cât rămâne sub titlu într-un card de 210px
           cu titlu pe două rânduri. Titlurile pe trei rânduri împing cardul cu
           un rând, în loc să reteze litere. */
        display: -webkit-box;
        -webkit-box-orient: vertical;
        -webkit-line-clamp: 6;
        line-clamp: 6;
        overflow: hidden;
    }
}
