:root {
	--wd-text-font: "Poppins", Arial, Helvetica, sans-serif;
	--wd-text-font-weight: 400;
	--wd-text-color: rgb(0,0,0);
	--wd-text-font-size: 14px;
	--wd-title-font: "Poppins", Arial, Helvetica, sans-serif;
	--wd-title-font-weight: 600;
	--wd-title-color: rgb(0,0,0);
	--wd-entities-title-font: "Poppins", Arial, Helvetica, sans-serif;
	--wd-entities-title-font-weight: 500;
	--wd-entities-title-color: #333333;
	--wd-entities-title-color-hover: rgb(51 51 51 / 65%);
	--wd-alternative-font: "Poppins", Arial, Helvetica, sans-serif;
	--wd-widget-title-font: "Poppins", Arial, Helvetica, sans-serif;
	--wd-widget-title-font-weight: 600;
	--wd-widget-title-transform: uppercase;
	--wd-widget-title-color: rgb(0,0,0);
	--wd-widget-title-font-size: 16px;
	--wd-header-el-font: "Poppins", Arial, Helvetica, sans-serif;
	--wd-header-el-font-weight: 500;
	--wd-header-el-transform: uppercase;
	--wd-header-el-font-size: 13px;
	--wd-otl-style: dotted;
	--wd-otl-width: 2px;
	--wd-primary-color: rgb(161,38,65);
	--wd-alternative-color: #fbbc34;
	--btn-default-bgcolor: #f7f7f7;
	--btn-default-bgcolor-hover: #efefef;
	--btn-accented-bgcolor: rgb(161,38,65);
	--btn-accented-bgcolor-hover: rgb(160,70,90);
	--wd-form-brd-width: 2px;
	--notices-success-bg: #459647;
	--notices-success-color: #fff;
	--notices-warning-bg: #E0B252;
	--notices-warning-color: #fff;
	--wd-link-color: #333333;
	--wd-link-color-hover: #242424;
}
.wd-age-verify-wrap {
	--wd-popup-width: 500px;
}
.wd-popup.wd-promo-popup {
	background-color: #111111;
	background-image: url(https://www.casakendra.ro/wp-content/uploads/2021/08/promo-popup.jpg);
	background-repeat: no-repeat;
	background-size: cover;
	background-position: center center;
}
.wd-promo-popup-wrap {
	--wd-popup-width: 800px;
	--wd-popup-padding: 15px;
}
:is(.woodmart-woocommerce-layered-nav, .wd-product-category-filter) .wd-scroll-content {
	max-height: 223px;
}
.wd-page-title .wd-page-title-bg img {
	object-fit: cover;
	object-position: center center;
}
.wd-footer {
	background-color: rgb(0,0,0);
	background-image: none;
}
html .product-image-summary-wrap .product_title, html .wd-single-title .product_title {
	font-weight: 600;
}
.mfp-wrap.wd-popup-quick-view-wrap {
	--wd-popup-width: 920px;
}
:root{
--wd-container-w: 1222px;
--wd-form-brd-radius: 0px;
--btn-default-color: #333;
--btn-default-color-hover: #333;
--btn-accented-color: #fff;
--btn-accented-color-hover: #fff;
--btn-default-brd-radius: 0px;
--btn-default-box-shadow: none;
--btn-default-box-shadow-hover: none;
--btn-default-box-shadow-active: none;
--btn-default-bottom: 0px;
--btn-accented-bottom-active: -1px;
--btn-accented-brd-radius: 0px;
--btn-accented-box-shadow: inset 0 -2px 0 rgba(0, 0, 0, .15);
--btn-accented-box-shadow-hover: inset 0 -2px 0 rgba(0, 0, 0, .15);
--wd-brd-radius: 0px;
}

@media (min-width: 1222px) {
section.elementor-section.wd-section-stretch > .elementor-container {
margin-left: auto;
margin-right: auto;
}
}


.wd-page-title {
background-color: #0a0a0a;
}

/* ============================================================================
   CASA KENDRA — strat de functionalitati
   Se pune in: WoodMart -> Theme settings -> Custom JS -> "Global custom JS"
   Cod brut, FARA <script>. Reversibil: se sterge tot din aceeasi caseta.

   PRINCIPIU DE SIGURANTA: fiecare functie isi cauta locul in pagina si, daca
   nu il gaseste, se opreste in liniste. Cel mai rau caz e "o functie nu apare",
   niciodata "pagina arata rupta". Comutatorul CFG.activ = false opreste tot.

   Selectorii sunt verificati in sursa temei Woodmart 7.6.0.
   ============================================================================ */
(function () {
  'use strict';

  /* ==========================================================================
     CONFIGURARE — singura zona pe care o modifici
     ========================================================================== */
  var CFG = {

    activ: true,      // false = opreste absolut tot
    debug: false,     // true = scrie in consola ce a pornit si ce nu

    /* --- bara de incredere de sub meniu ------------------------------------
       Afirmatii care exista deja pe site-ul vostru. Schimba textele dupa
       ce confirmi cu patronul.                                            */
    bara: {
      activ: true,
      puncte: [
        'Mobilă din Italia',
        'Montaj cu echipa proprie',
        'Showroom în Roman'
      ]
    },

    /* --- selector de finisaje pe pagina de produs --------------------------
       Pozele din galerie sunt, de fapt, finisajele. Le afisam ca variante cu
       nume, sub pret. Pentru produsele care nu sunt in lista de mai jos,
       variantele se numeroteaza: "Finisaj 1", "Finisaj 2"...

       Cheia e o bucata din adresa paginii de produs (slug).              */
    finisaje: {
      activ: true,
      titlu: 'Finisaje disponibile',
      nume: {
        'aria': [
          'Rovere corda / Antracit',
          'Rovere sabbia / Latte',
          'Rovere perla / Antracit',
          'Rovere castagno / Nebbia'
        ]
      }
    },

    /* --- buton "Cere oferta" la produsele fara pret ------------------------
       Cele 20 de produse fara pret au acum un buton "Citeste mai mult" care
       duce inapoi pe aceeasi pagina. Il transformam in cerere de oferta care
       ajunge pre-completata in formularul de contact.                     */
    cereOferta: {
      activ: true,
      text: 'Cere ofertă',
      paginaContact: '/contact/'
    },

    /* --- bara lipicioasa de produs, la derulare (doar desktop) -------------
       Pe telefon o face deja tema, daca ai pornit setarea din runbook.
       Ascunderea sub 1025px o face CSS-ul (@media max-width:1024px), NU JS:
       asa functioneaza corect si daca fereastra se redimensioneaza.       */
    baraLipicioasa: {
      activ: true
    },

    /* --- "Vazute recent" --------------------------------------------------- */
    vazuteRecent: {
      activ: true,
      titlu: 'Văzute recent',
      maxim: 6
    },

    /* --- estimare data de livrare ------------------------------------------
       5-10 zile lucratoare, exact cum scrie in politica voastra de livrare. */
    estimareLivrare: {
      activ: true,
      zileMin: 5,
      zileMax: 10
    },

    /* --- calculator de transport pe judet ----------------------------------
       ATENTIE: PORNIT PE "false" INTENTIONAT.
       Tarifele de mai jos sunt cele orientative din demonstratie, NU tarifele
       reale ale firmei. Nu publica preturi de transport pe care patronul nu
       le-a confirmat. Pune tarifele reale, apoi treci activ pe true.
       In sedinta: il pornesti in fata lui, ca demonstratie.               */
    transport: {
      activ: false,
      titlu: 'Cost estimativ de livrare și montaj',
      tarife: [
        ['Neamț', 149],
        ['Bacău', 249],
        ['Iași', 249],
        ['Suceava', 249],
        ['București / Ilfov', 349],
        ['Brașov', 349],
        ['Cluj', 379],
        ['Constanța', 379],
        ['Timiș', 399],
        ['Alt județ', 399]
      ]
    },

    /* --- calculator de rate ------------------------------------------------
       ATENTIE: PORNIT PE "false" INTENTIONAT.
       Rata calculata fara dobanda este mai mica decat cea reala, deci ar
       induce clientul in eroare. Cere de la TBI dobanda anuala efectiva,
       pune-o in dobandaAnuala, verifica o valoare cu ei, apoi treci pe true.
       Plafoanele 100-65.000 lei sunt cele configurate deja pe site.       */
    rate: {
      activ: false,
      titlu: 'Plata în rate',
      luni: [6, 12, 24, 36],
      dobandaAnuala: 0,     // ex. 0.2199 pentru 21,99%
      minim: 100,
      maxim: 65000,
      notita: 'Estimare orientativă. Rata finală se stabilește de TBI Bank la finalizarea comenzii.'
    }
  };

  /* ==========================================================================
     De aici in jos nu e nevoie sa modifici nimic.
     ========================================================================== */

  if (!CFG.activ) { return; }

  var CLASA = 'ck';   // prefix pentru tot ce injectam, ca sa fie usor de gasit

  function log() {
    if (!CFG.debug || !window.console) { return; }
    try { console.log.apply(console, ['[CK]'].concat([].slice.call(arguments))); } catch (e) {}
  }

  function q(sel, root) { return (root || document).querySelector(sel); }
  function qa(sel, root) { return [].slice.call((root || document).querySelectorAll(sel)); }

  function el(tag, cls, text) {
    var n = document.createElement(tag);
    if (cls) { n.className = cls; }
    if (text != null) { n.textContent = text; }
    return n;
  }

  /* Ruleaza o functie izolat: daca da eroare, restul merge inainte. */
  function sigur(nume, fn) {
    try {
      var r = fn();
      log(nume, r === false ? 'sarit (nu si-a gasit locul)' : 'ok');
    } catch (e) {
      log(nume, 'EROARE', e && e.message);
    }
  }

  /* --- formatare si parsare de preturi ------------------------------------ */

  function formateazaLei(n) {
    if (!isFinite(n)) { return ''; }
    var intreg = Math.floor(Math.abs(n));
    var zec = Math.round((Math.abs(n) - intreg) * 100);
    if (zec === 100) { intreg += 1; zec = 0; }
    var s = String(intreg).replace(/\B(?=(\d{3})+(?!\d))/g, '.');
    return (n < 0 ? '-' : '') + s + ',' + (zec < 10 ? '0' + zec : zec) + ' lei';
  }

  /* Accepta si "2.144,00 lei" si "2,144.00lei". Intoarce numar sau null. */
  function citestePret(text) {
    if (!text) { return null; }
    var t = String(text).replace(/[^\d.,]/g, '');
    if (!t) { return null; }
    var ultVirgula = t.lastIndexOf(',');
    var ultPunct = t.lastIndexOf('.');
    var zecimal = ultVirgula > ultPunct ? ',' : (ultPunct > -1 ? '.' : null);
    var curat;
    if (zecimal === ',') {
      curat = t.replace(/\./g, '').replace(',', '.');
    } else if (zecimal === '.') {
      // punct zecimal doar daca are exact 1-2 cifre dupa el
      var dupa = t.length - ultPunct - 1;
      curat = (dupa === 1 || dupa === 2) ? t.replace(/,/g, '') : t.replace(/[.,]/g, '');
    } else {
      curat = t;
    }
    var n = parseFloat(curat);
    return isFinite(n) ? n : null;
  }

  /* --- context de pagina --------------------------------------------------- */

  var estePagProdus = !!q('.single-product-page') ||
                      (document.body && document.body.className.indexOf('single-product') > -1);

  function sumar() {
    return q('.product-image-summary .summary-inner') ||
           q('.product-image-summary') ||
           q('.entry-summary') ||
           q('.summary');
  }

  function numeProdus() {
    var h = q('.product_title') || q('.single-product-page h1') || q('h1.entry-title');
    return h ? h.textContent.trim() : '';
  }

  function pretProdus() {
    var s = sumar();
    if (!s) { return null; }
    var p = q('.price', s);
    if (!p) { return null; }
    var txt = p.textContent.replace(/\s+/g, ' ').trim();
    if (!txt) { return null; }
    // la reduceri exista del + ins; luam ultimul numar (pretul curent)
    var ins = q('ins', p);
    return citestePret((ins || p).textContent);
  }

  function slugProdus() {
    try {
      var p = window.location.pathname.replace(/\/+$/, '').split('/');
      return decodeURIComponent(p[p.length - 1] || '').toLowerCase();
    } catch (e) { return ''; }
  }

  /* Locul in care agatam cardurile noi, sub pret, pe pagina de produs. */
  function ancoraSubPret() {
    var s = sumar();
    if (!s) { return null; }
    var gazda = q('.' + CLASA + '-zona', s);
    if (gazda) { return gazda; }
    gazda = el('div', CLASA + '-zona');
    var pret = q('.price', s);
    var form = q('form.cart', s);
    if (form) {
      form.parentNode.insertBefore(gazda, form);
    } else if (pret && pret.parentNode) {
      pret.parentNode.insertBefore(gazda, pret.nextSibling);
    } else {
      s.appendChild(gazda);
    }
    return gazda;
  }

  /* ==========================================================================
     1. BARA DE INCREDERE
     ========================================================================== */
  function baraIncredere() {
    if (!CFG.bara.activ || !CFG.bara.puncte.length) { return false; }
    if (q('.' + CLASA + '-trust')) { return false; }

    var gazda = q('.whb-header') || q('header.whb-header') || q('.main-page-wrapper');
    if (!gazda) { return false; }

    var bara = el('div', CLASA + '-trust');
    var inner = el('div', CLASA + '-trust-in');
    CFG.bara.puncte.forEach(function (t) {
      var s = el('span', CLASA + '-trust-i');
      s.appendChild(el('i', CLASA + '-tick'));
      s.appendChild(document.createTextNode(t));
      inner.appendChild(s);
    });
    bara.appendChild(inner);

    if (gazda.classList.contains('main-page-wrapper')) {
      gazda.parentNode.insertBefore(bara, gazda);
    } else {
      gazda.parentNode.insertBefore(bara, gazda.nextSibling);
    }
    return true;
  }

  /* ==========================================================================
     2. SELECTOR DE FINISAJE
     Pozele din galerie devin variante cu nume, sub pret.
     ========================================================================== */
  function selectorFinisaje() {
    if (!CFG.finisaje.activ || !estePagProdus) { return false; }
    if (q('.' + CLASA + '-fin')) { return false; }

    var wrap = q('.woocommerce-product-gallery__wrapper');
    if (!wrap) { return false; }

    var imagini = qa('.wd-carousel-item img', wrap);
    if (!imagini.length) { imagini = qa('img', wrap); }
    if (imagini.length < 2) { return false; }

    // elimina duplicatele dupa adresa imaginii (poza principala e si in galerie)
    var vazute = {}, cadre = [];
    imagini.forEach(function (img) {
      var src = img.getAttribute('data-large_image') || img.currentSrc || img.src || '';
      var cheie = src.split('?')[0].replace(/-\d+x\d+(\.\w+)$/, '$1');
      if (!cheie || vazute[cheie]) { return; }
      vazute[cheie] = 1;
      cadre.push({ mic: img.currentSrc || img.src, mare: src, nod: img });
    });
    if (cadre.length < 2) { return false; }

    var slug = slugProdus();
    var nume = null;
    Object.keys(CFG.finisaje.nume).forEach(function (k) {
      if (slug.indexOf(k) > -1) { nume = CFG.finisaje.nume[k]; }
    });

    var gazda = ancoraSubPret();
    if (!gazda) { return false; }

    var card = el('div', CLASA + '-card ' + CLASA + '-fin');
    var cap = el('div', CLASA + '-card-h');
    cap.appendChild(el('span', CLASA + '-card-t', CFG.finisaje.titlu));
    var eticheta = el('span', CLASA + '-fin-nume', (nume && nume[0]) || ('Varianta 1 din ' + cadre.length));
    cap.appendChild(eticheta);
    card.appendChild(cap);

    var rand = el('div', CLASA + '-fin-rand');
    cadre.forEach(function (c, i) {
      var b = el('button', CLASA + '-sw' + (i === 0 ? ' is-on' : ''));
      b.type = 'button';
      var et = (nume && nume[i]) || ('Varianta ' + (i + 1));
      b.setAttribute('aria-label', et);
      b.title = et;
      b.style.backgroundImage = 'url("' + c.mic + '")';
      b.addEventListener('click', function () {
        qa('.' + CLASA + '-sw', rand).forEach(function (x) { x.classList.remove('is-on'); });
        b.classList.add('is-on');
        eticheta.textContent = et;
        // muta galeria pe cadrul ales: apasa miniatura corespunzatoare
        var mini = qa('.wd-gallery-thumb .wd-carousel-item', document);
        if (mini[i]) {
          var tinta = q('img', mini[i]) || mini[i];
          tinta.click();
        } else if (c.nod) {
          c.nod.scrollIntoView({ block: 'nearest', inline: 'center' });
        }
      });
      rand.appendChild(b);
    });
    card.appendChild(rand);

    var nota = el('p', CLASA + '-nota',
      'Variantele sunt cele fotografiate. Pentru alte combinații, cereți ofertă.');
    card.appendChild(nota);

    gazda.appendChild(card);
    return true;
  }

  /* ==========================================================================
     3. "CERE OFERTA" LA PRODUSELE FARA PRET
     ========================================================================== */
  function linkOferta(nume) {
    var baza = CFG.cereOferta.paginaContact;
    return baza + (baza.indexOf('?') > -1 ? '&' : '?') + 'produs=' + encodeURIComponent(nume || '');
  }

  function ofertaPeCarduri() {
    if (!CFG.cereOferta.activ) { return false; }
    var carduri = qa('.wd-product');
    if (!carduri.length) { return false; }
    var atinse = 0;

    carduri.forEach(function (c) {
      if (c.getAttribute('data-ck-of')) { return; }
      var pret = q('.price', c);
      var arePret = pret && pret.textContent.replace(/\s+/g, '') !== '';
      if (arePret) { return; }

      var titlu = q('.wd-entities-title', c);
      var nume = titlu ? titlu.textContent.trim() : '';
      if (!nume) { return; }

      var btn = q('.wd-add-btn a.button, .wd-add-btn a', c);
      if (btn) {
        btn.textContent = CFG.cereOferta.text;
        btn.setAttribute('href', linkOferta(nume));
        btn.classList.add(CLASA + '-of-btn');
        btn.removeAttribute('data-quantity');
        btn.classList.remove('add_to_cart_button', 'ajax_add_to_cart');
      } else {
        var zona = q('.product-rating-price', c) || q('.product-information', c);
        if (!zona) { return; }
        var a = el('a', 'button ' + CLASA + '-of-btn', CFG.cereOferta.text);
        a.href = linkOferta(nume);
        zona.appendChild(a);
      }

      var eti = q('.product-rating-price', c) || q('.product-information', c);
      if (eti && !q('.' + CLASA + '-la-cerere', c)) {
        eti.insertBefore(el('span', CLASA + '-la-cerere', 'Preț la cerere'), eti.firstChild);
      }
      c.setAttribute('data-ck-of', '1');
      atinse++;
    });
    return atinse > 0;
  }

  function ofertaPeProdus() {
    if (!CFG.cereOferta.activ || !estePagProdus) { return false; }
    if (pretProdus() != null) { return false; }
    if (q('.' + CLASA + '-of-mare')) { return false; }

    var gazda = ancoraSubPret();
    if (!gazda) { return false; }
    var nume = numeProdus();

    var card = el('div', CLASA + '-card ' + CLASA + '-of-mare');
    card.appendChild(el('div', CLASA + '-of-t', 'Preț la cerere'));
    card.appendChild(el('p', CLASA + '-of-p',
      'Acest model se configurează după dimensiunile și finisajele dorite. ' +
      'Trimiteți-ne detaliile și primiți oferta pe email.'));
    var a = el('a', CLASA + '-of-cta', CFG.cereOferta.text);
    a.href = linkOferta(nume);
    card.appendChild(a);
    gazda.appendChild(card);

    // ascunde butonul inutil "Citeste mai mult"
    qa('.summary-inner a.button, .product-image-summary a.button').forEach(function (b) {
      if (b.classList.contains(CLASA + '-of-cta')) { return; }
      if (/citeste|citește|read more/i.test(b.textContent)) { b.style.display = 'none'; }
    });
    return true;
  }

  /* Pe pagina de contact: pre-completeaza formularul din ?produs= */
  function precompleteazaContact() {
    if (!CFG.cereOferta.activ) { return false; }
    var m = /[?&]produs=([^&]+)/.exec(window.location.search);
    if (!m) { return false; }
    var produs;
    try { produs = decodeURIComponent(m[1].replace(/\+/g, ' ')); } catch (e) { produs = m[1]; }
    if (!produs) { return false; }

    var subiect = q('input[name="your-subject"]') ||
                  q('input[name="text-1"]') ||
                  qa('input[type="text"]').filter(function (i) {
                    return !/name|nume|tel|phone/i.test(i.name + ' ' + (i.placeholder || ''));
                  })[1];
    var mesaj = q('textarea[name="your-message"]') || q('textarea');

    var scris = false;
    if (subiect && !subiect.value) {
      subiect.value = 'Cerere ofertă: ' + produs;
      scris = true;
    }
    if (mesaj && !mesaj.value) {
      mesaj.value = 'Bună ziua,\n\nDoresc o ofertă pentru ' + produs + '.\n\n' +
                    'Dimensiunile camerei: \nFinisajele preferate: \nLocalitatea pentru livrare: \n\nMulțumesc.';
      scris = true;
    }
    if (!scris) { return false; }

    var form = (mesaj && mesaj.closest) ? mesaj.closest('form') : null;
    if (form) {
      if (!q('.' + CLASA + '-conf', form)) {
        form.insertBefore(el('div', CLASA + '-conf',
          'Am completat cererea pentru „' + produs + '”. Adăugați detaliile și trimiteți.'), form.firstChild);
      }
      try { form.scrollIntoView({ behavior: 'smooth', block: 'center' }); } catch (e) {}
    }
    return true;
  }

  /* ==========================================================================
     4. BARA LIPICIOASA DE PRODUS (desktop)
     ========================================================================== */
  function baraProdus() {
    if (!CFG.baraLipicioasa.activ || !estePagProdus) { return false; }
    if (q('.' + CLASA + '-sticky')) { return false; }
    /* Fara verificare de latime aici, intentionat: o masuratoare facuta o
       singura data, la incarcare, ar lasa bara moarta definitiv daca fereastra
       era ingusta in acel moment. Ascunderea pe mobil o face CSS-ul. */

    var s = sumar();
    if (!s) { return false; }
    var nume = numeProdus();
    if (!nume) { return false; }
    var pret = pretProdus();

    var bara = el('div', CLASA + '-sticky');
    var inner = el('div', CLASA + '-sticky-in');

    var poza = q('.woocommerce-product-gallery__wrapper img');
    if (poza && (poza.currentSrc || poza.src)) {
      var im = el('span', CLASA + '-sticky-img');
      im.style.backgroundImage = 'url("' + (poza.currentSrc || poza.src) + '")';
      inner.appendChild(im);
    }

    var txt = el('span', CLASA + '-sticky-txt');
    txt.appendChild(el('strong', null, nume));
    txt.appendChild(el('span', CLASA + '-sticky-p',
      pret != null ? formateazaLei(pret) : 'Preț la cerere'));
    inner.appendChild(txt);

    var real = q('form.cart button[type="submit"], form.cart .single_add_to_cart_button', s);
    var act;
    if (pret != null && real) {
      act = el('button', CLASA + '-sticky-btn', 'Adaugă în coș');
      act.type = 'button';
      act.addEventListener('click', function () { real.click(); });
    } else {
      act = el('a', CLASA + '-sticky-btn', CFG.cereOferta.text);
      act.href = linkOferta(nume);
    }
    inner.appendChild(act);
    bara.appendChild(inner);
    document.body.appendChild(bara);

    /* Aratam bara cand sumarul produsului a ieșit complet pe deasupra ecranului.
       Primar: IntersectionObserver — nu depinde de evenimente de scroll, nu
       face calcule la fiecare cadru, si merge si acolo unde evenimentul de
       scroll nu se declanseaza (ex. derulare programatica).
       Rezerva: ascultator de scroll clasic, pentru browsere fara Observer. */
    function arata(on) { bara.classList.toggle('is-on', !!on); }

    /* Ambele mecanisme se ataseaza NECONDITIONAT, nu unul SAU altul.
       Motivul: exista medii in care IntersectionObserver exista dar nu emite
       niciodata (l-am prins in testare). Daca ar fi fost singurul mecanism,
       bara n-ar fi aparut niciodata acolo. Amandoua citesc aceeasi geometrie,
       deci nu se pot contrazice, iar costul ascultatorului e o comutare de
       clasa. */
    var prag = 0;
    function masoara() {
      var r = s.getBoundingClientRect();
      prag = r.bottom + (window.pageYOffset || document.documentElement.scrollTop);
    }
    function verifica() {
      arata((window.pageYOffset || document.documentElement.scrollTop) > prag);
    }
    masoara();
    verifica();
    window.addEventListener('scroll', verifica, { passive: true });
    window.addEventListener('resize', function () { masoara(); verifica(); });

    try {
      if (window.IntersectionObserver) {
        new window.IntersectionObserver(function (intrari) {
          for (var i = 0; i < intrari.length; i++) {
            var e = intrari[i];
            arata(!e.isIntersecting && e.boundingClientRect.top < 0);
          }
        }, { threshold: 0 }).observe(s);
      }
    } catch (e) { log('observer bara', 'indisponibil'); }

    return true;
  }

  /* ==========================================================================
     5. ESTIMARE DATA DE LIVRARE
     ========================================================================== */
  function zileLucratoare(n) {
    var d = new Date();
    var puse = 0;
    while (puse < n) {
      d.setDate(d.getDate() + 1);
      var z = d.getDay();
      if (z !== 0 && z !== 6) { puse++; }
    }
    return d;
  }

  var LUNI = ['ianuarie', 'februarie', 'martie', 'aprilie', 'mai', 'iunie',
              'iulie', 'august', 'septembrie', 'octombrie', 'noiembrie', 'decembrie'];

  function dataRo(d) { return d.getDate() + ' ' + LUNI[d.getMonth()]; }

  function estimareLivrare() {
    if (!CFG.estimareLivrare.activ || !estePagProdus) { return false; }
    if (q('.' + CLASA + '-liv')) { return false; }
    var gazda = ancoraSubPret();
    if (!gazda) { return false; }

    var a = zileLucratoare(CFG.estimareLivrare.zileMin);
    var b = zileLucratoare(CFG.estimareLivrare.zileMax);

    var d = el('div', CLASA + '-liv');
    d.appendChild(el('i', CLASA + '-liv-ic'));
    var t = el('span');
    t.appendChild(el('strong', null, 'Livrare estimată ' + dataRo(a) + ' – ' + dataRo(b)));
    t.appendChild(el('span', CLASA + '-liv-s',
      CFG.estimareLivrare.zileMin + '–' + CFG.estimareLivrare.zileMax +
      ' zile lucrătoare de la confirmarea comenzii, conform politicii de livrare.'));
    d.appendChild(t);
    gazda.appendChild(d);
    return true;
  }

  /* ==========================================================================
     6. CALCULATOR DE TRANSPORT PE JUDET  (implicit oprit)
     ========================================================================== */
  function calculatorTransport() {
    if (!CFG.transport.activ || !estePagProdus) { return false; }
    if (q('.' + CLASA + '-tr')) { return false; }
    var pret = pretProdus();
    var gazda = ancoraSubPret();
    if (!gazda) { return false; }

    var card = el('div', CLASA + '-card ' + CLASA + '-tr');
    var cap = el('div', CLASA + '-card-h');
    cap.appendChild(el('span', CLASA + '-card-t', CFG.transport.titlu));
    card.appendChild(cap);

    var sel = el('select', CLASA + '-sel');
    sel.appendChild(el('option', null, 'Alegeți județul…'));
    CFG.transport.tarife.forEach(function (t, i) {
      var o = el('option', null, t[0]);
      o.value = String(i);
      sel.appendChild(o);
    });
    card.appendChild(sel);

    var rez = el('div', CLASA + '-tr-rez');
    card.appendChild(rez);
    card.appendChild(el('p', CLASA + '-nota',
      'Estimare orientativă pentru livrare cu flotă proprie și montaj.'));

    sel.addEventListener('change', function () {
      var i = parseInt(sel.value, 10);
      if (isNaN(i) || !CFG.transport.tarife[i]) { rez.innerHTML = ''; return; }
      var cost = CFG.transport.tarife[i][1];
      rez.innerHTML = '';
      var r1 = el('div', CLASA + '-tr-r');
      r1.appendChild(el('span', null, 'Livrare și montaj'));
      r1.appendChild(el('b', null, formateazaLei(cost)));
      rez.appendChild(r1);
      if (pret != null) {
        var r2 = el('div', CLASA + '-tr-r is-total');
        r2.appendChild(el('span', null, 'Total de plată'));
        r2.appendChild(el('b', null, formateazaLei(pret + cost)));
        rez.appendChild(r2);
      }
    });

    gazda.appendChild(card);
    return true;
  }

  /* ==========================================================================
     7. CALCULATOR DE RATE  (implicit oprit)
     ========================================================================== */
  function calculatorRate() {
    if (!CFG.rate.activ || !estePagProdus) { return false; }
    if (q('.' + CLASA + '-rate')) { return false; }
    var pret = pretProdus();
    if (pret == null || pret < CFG.rate.minim || pret > CFG.rate.maxim) { return false; }
    var gazda = ancoraSubPret();
    if (!gazda) { return false; }

    function rataLunara(suma, luni) {
      var i = CFG.rate.dobandaAnuala / 12;
      if (!i) { return suma / luni; }
      return suma * i / (1 - Math.pow(1 + i, -luni));
    }

    var card = el('div', CLASA + '-card ' + CLASA + '-rate');
    var cap = el('div', CLASA + '-card-h');
    cap.appendChild(el('span', CLASA + '-card-t', CFG.rate.titlu));
    card.appendChild(cap);

    var rand = el('div', CLASA + '-rate-rand');
    var afis = el('div', CLASA + '-rate-afis');

    function alege(luni, btn) {
      qa('.' + CLASA + '-rate-b', rand).forEach(function (x) { x.classList.remove('is-on'); });
      if (btn) { btn.classList.add('is-on'); }
      afis.innerHTML = '';
      var v = el('span', CLASA + '-rate-v', formateazaLei(rataLunara(pret, luni)));
      afis.appendChild(v);
      afis.appendChild(el('span', CLASA + '-rate-l', ' / lună, ' + luni + ' luni'));
    }

    CFG.rate.luni.forEach(function (luni, i) {
      var b = el('button', CLASA + '-rate-b' + (i === 1 ? ' is-on' : ''), luni + ' luni');
      b.type = 'button';
      b.addEventListener('click', function () { alege(luni, b); });
      rand.appendChild(b);
    });
    card.appendChild(rand);
    card.appendChild(afis);
    card.appendChild(el('p', CLASA + '-nota', CFG.rate.notita));
    gazda.appendChild(card);

    alege(CFG.rate.luni[1] || CFG.rate.luni[0], qa('.' + CLASA + '-rate-b', rand)[1] || null);
    return true;
  }

  /* ==========================================================================
     8. "VAZUTE RECENT"
     ========================================================================== */
  var CHEIE_VR = 'ck_vazute_v1';

  function citesteVR() {
    try {
      var v = JSON.parse(window.localStorage.getItem(CHEIE_VR) || '[]');
      return Object.prototype.toString.call(v) === '[object Array]' ? v : [];
    } catch (e) { return []; }
  }

  function scrieVR(v) {
    try { window.localStorage.setItem(CHEIE_VR, JSON.stringify(v)); } catch (e) {}
  }

  function inregistreazaVR() {
    if (!CFG.vazuteRecent.activ || !estePagProdus) { return false; }
    var nume = numeProdus();
    if (!nume) { return false; }
    var poza = q('.woocommerce-product-gallery__wrapper img');
    var pret = pretProdus();
    var item = {
      n: nume,
      u: window.location.pathname,
      i: poza ? (poza.currentSrc || poza.src || '') : '',
      p: pret != null ? formateazaLei(pret) : 'Preț la cerere'
    };
    var v = citesteVR().filter(function (x) { return x && x.u !== item.u; });
    v.unshift(item);
    scrieVR(v.slice(0, CFG.vazuteRecent.maxim + 2));
    return true;
  }

  function afiseazaVR() {
    if (!CFG.vazuteRecent.activ) { return false; }
    if (q('.' + CLASA + '-vr')) { return false; }
    var v = citesteVR().filter(function (x) { return x && x.u !== window.location.pathname; });
    if (v.length < 2) { return false; }
    v = v.slice(0, CFG.vazuteRecent.maxim);

    var gazda = q('.related.products') || q('.upsells.products') ||
                q('.wd-products-holder') || q('.site-content') || q('.main-page-wrapper');
    if (!gazda) { return false; }

    var s = el('section', CLASA + '-vr');
    s.appendChild(el('h3', CLASA + '-vr-t', CFG.vazuteRecent.titlu));
    var rand = el('div', CLASA + '-vr-rand');
    v.forEach(function (x) {
      var a = el('a', CLASA + '-vr-i');
      a.href = x.u;
      if (x.i) {
        var im = el('span', CLASA + '-vr-img');
        im.style.backgroundImage = 'url("' + x.i + '")';
        a.appendChild(im);
      }
      a.appendChild(el('span', CLASA + '-vr-n', x.n));
      a.appendChild(el('span', CLASA + '-vr-p', x.p));
      rand.appendChild(a);
    });
    s.appendChild(rand);

    if (gazda.classList.contains('related') || gazda.classList.contains('upsells')) {
      gazda.parentNode.insertBefore(s, gazda);
    } else {
      gazda.appendChild(s);
    }
    return true;
  }

  /* ==========================================================================
     PORNIRE
     ========================================================================== */
  function porneste() {
    sigur('bara de incredere', baraIncredere);
    sigur('finisaje', selectorFinisaje);
    sigur('oferta pe carduri', ofertaPeCarduri);
    sigur('oferta pe produs', ofertaPeProdus);
    sigur('precompletare contact', precompleteazaContact);
    sigur('estimare livrare', estimareLivrare);
    sigur('calculator transport', calculatorTransport);
    sigur('calculator rate', calculatorRate);
    sigur('bara lipicioasa', baraProdus);
    sigur('inregistrare vazute', inregistreazaVR);
    sigur('afisare vazute', afiseazaVR);
  }

  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', porneste);
  } else {
    porneste();
  }

  /* Tema incarca produse prin AJAX (previzualizare rapida, filtre).
     Reaplicam butonul de oferta pe cardurile noi, cu masura. */
  try {
    if (window.MutationObserver) {
      var ceas = null;
      var obs = new MutationObserver(function () {
        if (ceas) { return; }
        ceas = setTimeout(function () {
          ceas = null;
          sigur('oferta pe carduri (reaplicat)', ofertaPeCarduri);
        }, 300);
      });
      var tinta = q('.wd-products-holder') || q('ul.products');
      if (tinta) { obs.observe(tinta, { childList: true, subtree: true }); }
    }
  } catch (e) { log('observer', 'indisponibil'); }

})();
