{"id":54,"date":"2025-10-06T17:55:02","date_gmt":"2025-10-06T14:55:02","guid":{"rendered":"https:\/\/sinusenergy.ro\/test-design\/services\/"},"modified":"2026-10-22T22:31:29","modified_gmt":"2026-10-22T19:31:29","slug":"services","status":"publish","type":"page","link":"https:\/\/sinusenergy.ro\/test-design\/services\/","title":{"rendered":"Servicii"},"content":{"rendered":"    <div id=\"sinus-calculator\" class=\"sinus-calc-container\">\n        <p class=\"calc-intro\">Selecta\u021bi categoria, serviciul, apoi introduce\u021bi cantitatea \u0219i regla\u021bi gradul de complexitate pentru o estimare c\u00e2t mai corect\u0103.<\/p>\n\t\t<p class=\"calc-intro\"><i>Pentru detalii privind gradul de complexitate \u0219i ceilal\u021bi termeni, click<\/i> <a href=\"https:\/\/www.sinusenergy.ro\/explicatii-utilizare-aplicatia-deviz\/\" target=\"_blank\" style=\"color:#ffffff; text-decoration: underline;\">aici.<\/a><\/p>      \n       \n\t\t<div class=\"calc-search-wrapper\">\n            <input type=\"text\" id=\"calc-search\" placeholder=\"Caut\u0103 un serviciu (ex: tablou, invertor, priz\u0103)... sau deschide o categorie\" oninput=\"filterServices()\">\n            <span class=\"search-icon\">\ud83d\udd0d<\/span>\n        <\/div>\n\n        <div id=\"calc-items-container\"><\/div>\n\n        <div class=\"calc-summary\">\n            <div class=\"total-box\">\n                <span>Total Estimativ (TVA inclus):<\/span>\n                <strong id=\"grand-total\">0,00 lei<\/strong>\n            <\/div>\n\n            <p class=\"calc-disclaimer\">\n                *Pre\u021bul final se stabile\u0219te \u00een urma vizitei la locul implement\u0103rii. Pre\u021burile includ TVA.<br>\n\t\t\t\tComanda minim\u0103 300 Ron.<br>\n                Dup\u0103 primirea cererii, pentru detalii, ve\u021bi fi contactat de un reprezentant al firmei.\n            <\/p>\n\n            <div class=\"calc-actions\">\n                <button type=\"button\" class=\"calc-reset\" onclick=\"resetCalculator()\">Reseteaz\u0103 tot<\/button>\n\n                \n                <button type=\"button\" class=\"calc-send\" onclick=\"openLeadForm()\">Solicit\u0103 ofert\u0103 detaliat\u0103<\/button>\n            <\/div>\n        <\/div>\n    <\/div>\n\n    <!-- MODAL CERERE OFERT\u0102 -->\n    <div id=\"lead-modal\" class=\"lead-modal\" aria-hidden=\"true\">\n        <div class=\"lead-modal-overlay\" onclick=\"closeLeadForm()\"><\/div>\n\n        <div class=\"lead-modal-card\" role=\"dialog\" aria-modal=\"true\" aria-labelledby=\"lead-modal-title\">\n            <button type=\"button\" class=\"lead-modal-close\" onclick=\"closeLeadForm()\" aria-label=\"\u00cenchide\">\u00d7<\/button>\n\n            <h4 id=\"lead-modal-title\">Date de contact pentru ofert\u0103<\/h4>\n\n            <div class=\"lead-grid\">\n                <div class=\"lead-field\">\n                    <label for=\"lead-name\">Nume complet<\/label>\n                    <input type=\"text\" id=\"lead-name\" autocomplete=\"name\" placeholder=\"Ex: Popescu Ion\">\n                <\/div>\n\n\t\t\t\t<div class=\"lead-field\">\n        <label for=\"lead-email\">Email<\/label>\n        <input type=\"email\" id=\"lead-email\" autocomplete=\"email\" placeholder=\"Ex: nume@domeniu.ro\">\n               <\/div>\n\t\t\t\t\n                <div class=\"lead-field\">\n                    <label for=\"lead-phone\">Telefon<\/label>\n                    <input type=\"tel\" id=\"lead-phone\" autocomplete=\"tel\" placeholder=\"Ex: 07xx xxx xxx\">\n                <\/div>\n            <\/div>\n\n            <div class=\"lead-field\">\n                <label for=\"lead-message\">Alte detalii (op\u021bional)<\/label>\n                <textarea id=\"lead-message\" rows=\"4\" placeholder=\"Ex: localitate, tip lucrare, acces, urgen\u021b\u0103, etc.\"><\/textarea>\n            <\/div>\n\n            <button type=\"button\" id=\"lead-send-btn\" class=\"lead-send-btn\" onclick=\"sendOfferAjax()\">\n                Trimite cererea\n            <\/button>\n\t\t\t<div class=\"lead-field\">\n                <label for=\"lead-message\"> <i>O copie a cererii o vei primi pe adresa de email introdus\u0103 mai sus.<\/i><\/label>\n            <\/div>\n            <div id=\"lead-status\" class=\"lead-status\" role=\"status\" aria-live=\"polite\"><\/div>\n        <\/div>\n    <\/div>\n\n    \n    <style>\n        .sinus-calc-container{\n  \t\t\tbackground:#023733; color:#fff; padding:25px; border-radius:8px;\n  \t\t\tfont-family:sans-serif; max-width:1100px; margin:20px auto;\n  \t\t\tposition: relative; z-index: 0; \/* izoleaz\u0103 stacking context *\/\n\t\t\t}\n\n\n        .calc-item { border-bottom: 1px solid rgba(255,255,255,0.1); padding: 20px 0; display: grid; grid-template-columns: 2fr 150px 1.5fr; gap: 25px; align-items: flex-end; }\n        .calc-label { display: block; font-size: 11px; color: #ED6F2C; text-transform: uppercase; margin-bottom: 8px; font-weight: bold; }\n        .calc-item-name { font-weight: bold; font-size: 15px; padding-bottom: 5px; }\n        .calc-item-price { color: #fff; font-size: 14px; font-weight: 600; }\n        .calc-controls { display: flex; align-items: flex-end; gap: 30px; }\n        .calc-qty-box, .calc-complex-box { display: flex; flex-direction: column; }\n        .calc-input { width: 80px; padding: 8px; border-radius: 4px; border: none; text-align: center; font-weight: bold; }\n\t\t\/* === Cantitate: + \/ - (mobil & desktop) === *\/\n.qty-stepper{\n  display: inline-flex;\n  align-items: center;\n  gap: 8px;\n}\n\n.qty-btn{\n  width: 34px;\n  height: 34px;\n  border-radius: 8px;\n  border: 1px solid rgba(255,255,255,0.25);\n  background: rgba(255,255,255,0.06);\n  color: #fff;\n  font-weight: 900;\n  font-size: 18px;\n  line-height: 1;\n  cursor: pointer;\n}\n\n.qty-stepper .calc-input{\n  width: 70px;\n}\n        .slider-group { display: flex; align-items: center; gap: 15px; }\n        .complex-slider { width: 130px; cursor: pointer; }\n        .complex-label { font-size: 13px; color: #ED6F2C; min-width: 70px; }\n\n        .calc-summary {\n    \t\tmargin-top: 30px;\n    \t\tpadding: 20px;\n    \t\tborder-top: 2px solid #ED6F2C;\n    \t\ttext-align: right;\n    \t\tbackground: #023733;\n    \t\tposition: relative;   \/* desktop: curge normal *\/\n    \t\tbottom: auto;\n    \t\tz-index: 1;\n    \t\tbox-shadow: 0 -10px 20px rgba(0,0,0,0.3);\n\t\t}\n\t\t@media (max-width: 768px) {\n    \t.calc-summary {\n        \tposition: sticky;\n        \tbottom: 0;\n        \tz-index: 2;\n    \t}\n\t\t}\n\/* Desktop: sticky \u00een interiorul calculatorului (nu fixed pe toat\u0103 pagina) *\/\n\t\t@media (min-width: 769px){\n  \t\t\t#sinus-calculator.has-sticky{\n    \t\tpadding-bottom: 0; \/* nu mai e nevoie, nu mai e fixed *\/\n  \t\t}\n  \t\t\t#sinus-calculator .calc-summary.is-sticky{\n    \t\tposition: sticky;\n    \t\tbottom: 0;\n    \t\tz-index: 2;\n  \t\t}\n\t\t}\n\n\/* Default: NU sticky nici pe mobil, nici pe desktop *\/\n\t\t#sinus-calculator .calc-summary{\n  \t\tposition: relative;\n  \t\tbottom: auto;\n\t\t}\n\n\/* Mobil: sticky jos *\/\n\t\t@media (max-width: 768px){\n  \t\t#sinus-calculator .calc-summary.is-sticky{\n    \tposition: sticky;\n    \tbottom: 0;\n    \tz-index: 2;\n  \t\t}\n\t\t}\n\n        .total-box {\n            font-size: 24px;\n            color: #ED6F2C;\n            display: flex;\n            justify-content: flex-end;\n            align-items: center;\n            gap: 15px;\n        }\n\n        .total-box strong { font-size: 32px; }\n        .calc-reset { background: transparent; border: 1px solid #fff; color: #fff; padding: 8px 20px; cursor: pointer; border-radius: 4px; margin-top: 15px; }\n\n        .calc-actions{ display:flex; justify-content:flex-end; gap: 12px; flex-wrap: wrap; align-items:center; }\n        .calc-send{ background:#ED6F2C; color:#023733; border:0; padding: 10px 18px; border-radius: 6px; cursor:pointer; font-weight: 800; margin-top: 15px; }\n        .calc-pdf {\n            background: #ffff;\n            color: #023733;\n            border: 1px solid #ffff;\n            padding: 10px 18px;\n            border-radius: 6px;\n            cursor: pointer;\n            font-weight: 800;\n            margin-top: 15px;\n            transition: all 0.3s;\n        }\n        .calc-pdf:hover { background: #e6e6e6; }\n\n        @media (max-width: 768px) {\n            .calc-item { grid-template-columns: 1fr; gap: 15px; }\n            .calc-controls { justify-content: space-between; }\n            .calc-actions{ justify-content: center; }\n            .calc-summary{ text-align: center; }\n            .total-box{ justify-content:center; }\n        }\n\n        .calc-category-section{\n            margin-bottom: 12px;\n            border: 1px solid rgba(255,204,0,0.18);\n            border-radius: 8px;\n            overflow: hidden;\n        }\n        .category-header{\n            background: rgba(255,204,0,0.10);\n            padding: 12px 14px;\n            cursor: pointer;\n            display:flex;\n            justify-content:space-between;\n            align-items:center;\n            font-weight:700;\n            color:#ED6F2C;\n        }\n        .category-header:hover { background: rgba(255, 204, 0, 0.2); }\n        .category-content{ padding: 0 0 8px 0; }\n        .toggle-icon { font-size: 14px; opacity: 0.9; }\n\n        .calc-search-wrapper { position: relative; margin-bottom: 20px; }\n        #calc-search {\n            width: 100%;\n            padding: 12px 40px 12px 15px;\n            border-radius: 8px;\n            border: 1px solid #ED6F2C;\n            background: rgba(255, 255, 255, 0.05);\n            color: white;\n            font-size: 16px;\n            outline: none;\n            transition: all 0.3s;\n        }\n        #calc-search:focus { background: rgba(255, 255, 255, 0.1); box-shadow: 0 0 10px rgba(255, 204, 0, 0.3); }\n        .search-icon { position: absolute; right: 15px; top: 50%; transform: translateY(-50%); color: #ED6F2C; pointer-events: none; }\n\n        \/* MODAL *\/\n        .lead-modal{ display:none; position: fixed; inset:0; z-index: 9999; }\n        .lead-modal.is-open{ display:block; }\n        .lead-modal-overlay{ position:absolute; inset:0; background: rgba(0,0,0,0.6); }\n        .lead-modal-card{\n            position: relative;\n            width: min(560px, calc(100% - 24px));\n            margin: 7vh auto;\n            background: #023733;\n            border: 1px solid rgba(255,204,0,0.35);\n            border-radius: 12px;\n            padding: 18px 18px 16px 18px;\n            box-shadow: 0 20px 60px rgba(0,0,0,0.5);\n        }\n        .lead-modal-card h4{ margin: 0 0 14px 0; color: #ffcc00; }\n        .lead-modal-close{\n            position:absolute; top: 10px; right: 12px;\n            width: 34px; height: 34px; border-radius: 50%;\n            border: 1px solid rgba(255,255,255,0.25);\n            background: transparent; color:#fff;\n            font-size: 22px; line-height: 30px;\n            cursor:pointer;\n        }\n        .lead-grid{ display:grid; grid-template-columns: 1fr; gap: 12px; }\n        @media (min-width: 700px){ .lead-grid{ grid-template-columns: 1fr 1fr; } }\n\n        .lead-field label{ display:block; font-size: 12px; color: rgba(255,255,255,0.85); margin: 0 0 6px 0; }\n        .lead-field input, .lead-field textarea{\n            width:100%;\n            box-sizing: border-box;\n            border: 0;\n            border-radius: 8px;\n            padding: 12px;\n            font-size: 16px;\n        }\n        .lead-send-btn{\n            width:100%;\n            margin-top: 12px;\n            background:#ED6F2C;\n            color:#023733;\n            border:0;\n            padding: 12px 16px;\n            border-radius: 10px;\n            font-weight: 900;\n            cursor:pointer;\n            font-size: 16px;\n        }\n        .lead-send-btn:disabled{ opacity: .65; cursor: not-allowed; }\n        .lead-status{ margin-top: 10px; font-size: 14px; color: #ffcc00; min-height: 18px; }\n\n        .calc-disclaimer {\n            font-size: 13px;\n            color: rgba(255, 255, 255, 0.7);\n            margin-top: 10px;\n            text-align: right;\n            font-style: italic;\n        }\n\n        #offer-discount{\n            width:100%;\n            box-sizing:border-box;\n            border:0;\n            border-radius:8px;\n            padding:12px;\n            font-size:16px;\n        }\n    <\/style>\n\n    <script>\n    const SINUS_AJAX_URL = \"https:\/\/sinusenergy.ro\/test-design\/wp-admin\/admin-ajax.php\";\n    const SINUS_OFFER_NONCE = \"3438dd198a\";\n\n    const servicii = [\n        { id: 1, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Montaj \/ \u00eenlocuire instala\u021bie electric\u0103 garsonier\u0103 - etapa 1\", min: 1800, max: 2800 },\n        { id: 2, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Montaj \/ \u00eenlocuire instala\u021bie electric\u0103 apartament 2 camere - etapa 1\", min: 1950, max: 4000 },\n        { id: 3, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Montaj \/ \u00eenlocuire instala\u021bie electric\u0103 apartament 3 camere - etapa 1\", min: 3000, max: 7000 },\n        { id: 4, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Montaj \/ \u00eenlocuire instala\u021bie electric\u0103 apartament 4 camere - etapa 1\", min: 4000, max: 10000 },\n        { id: 5, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Montaj \u0219i conectare aparate electrice ( \u00eentrerupatoare, prize, dulii prize, internet\/telefon) - etapa 2\", min: 25, max: 80 },\n        { id: 6, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Montaj tablou electric + 2 siguran\u021be\", min: 150, max: 195 },\n        { id: 7, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Montaj \u0219i conectare siguran\u021be suplimentare\", min: 35, max: 90 },\n        { id: 8, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Montaj corp iluminat\", min: 60, max: 120 },\n        { id: 9, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Montaj corp iluminat 2 circuite\", min: 70, max: 140 },\n        { id: 10, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Montaj l\u0103mpi cu senzor \/ proiectoare \/ crepusculare\", min: 70, max: 170 },\n        { id: 11, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Montaj automat scar\u0103\", min: 97.5, max: 250 },\n        { id: 12, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"\u00cenlocuit siguran\u021b\u0103 automat\u0103\", min: 45, max: 160 },\n        { id: 13, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Conexiuni \/ leg\u0103turi doze\", min: 52, max: 150 },\n        { id: 14, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Dezactivat instala\u021bia existent\u0103 - pre\u021b \/ \u00eenc\u0103pere\", min: 165, max: 280 },\n        { id: 15, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Pozat tub \/ copex \/ ml\", min: 2.5, max: 6 },\n        { id: 16, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Introdus conductor prin tub \/ ml \/ conductor\", min: 1.6, max: 2.5 },\n        { id: 17, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Spart sau t\u0103iat traseu c\u0103r\u0103mid\u0103 \/ ml\", min: 12, max: 35 },\n        { id: 18, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Spart sau t\u0103iat traseu beton \/ ml\", min: 25, max: 90 },\n        { id: 19, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Spart sau t\u0103iat traseu ml\", min: 25, max: 90 },\n        { id: 20, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Tras circuit separat\", min: 150, max: 500 },\n        { id: 21, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Identificat circuite electrice\", min: 40, max: 120 },\n        { id: 22, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Jonc\u021biuni electrice \u00een doze \/ tablouri electrice pre\u021b \/ jonc\u021biune\", min: 3, max: 12 },\n        { id: 23, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Conectat circuit \u00een tablou\", min: 65, max: 200 },\n        { id: 24, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Montaj doza + carotaj doza aparat\", min: 25, max: 100 },\n        { id: 25, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Montaj \u00eentrerupator cap scar\u0103 \/ buc\", min: 52, max: 80 },\n        { id: 26, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Montaj \u00eentrerupator cap cruce \/ buc\", min: 55, max: 95 },\n        { id: 27, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Montj tuburi PVC pentru pozare cabluri \/ m\", min: 6, max: 11 },\n        { id: 28, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Montaj releu pas cu pas\", min: 60.5, max: 110 },\n        { id: 30, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Montaj siguran\u021b\u0103 diferen\u021bial\u0103\", min: 55, max: 85 },\n        { id: 33, cat: \"Instala\u021bii Electrice Reziden\u021biale\", nume: \"Execu\u021bie priz\u0103 p\u0103m\u00e2nt\", min: 1400, max: 2500 },\n\t\t\n        { id: 36, cat: \"Sisteme Fotovoltaice\", nume: \"Montaj panouri fotovoltaice pe acoperi\u0219 de tabl\u0103 (pre\u021b \/ panou)\", min: 145, max: 200 },\n        { id: 37, cat: \"Sisteme Fotovoltaice\", nume: \"Execu\u021bie structur\u0103 panouri fotovoltaice amplasat\u0103 pe sol\", min: 800, max: 3500 },\n        { id: 38, cat: \"Sisteme Fotovoltaice\", nume: \"Montaj panouri fotovoltaice pe acoperi\u0219 de \u021bigl\u0103 (pre\u021b \/ panou)\", min: 160, max: 350 },\n        { id: 39, cat: \"Sisteme Fotovoltaice\", nume: \"Conectare \/ deconectare panouri fotovoltaice \u00een panoul CC\", min: 60, max: 150 },\n        { id: 40, cat: \"Sisteme Fotovoltaice\", nume: \"Montaj instalare \u0219i conectare invertor off grid \/ kw\", min: 250, max: 300 },\n        { id: 41, cat: \"Sisteme Fotovoltaice\", nume: \"Montaj instalare \u0219i conectare invertor on grid \/ kw\", min: 300, max: 400 },\n        { id: 42, cat: \"Sisteme Fotovoltaice\", nume: \"Programare invertor\", min: 80, max: 250 },\n        { id: 43, cat: \"Sisteme Fotovoltaice\", nume: \"Setare export 0 \/ nelimitat\", min: 95, max: 120 },\n        { id: 44, cat: \"Sisteme Fotovoltaice\", nume: \"Setare export 0 \/ nelimitat (dac\u0103 necesit\u0103 resetare)\", min: 160, max: 200 },\n        { id: 45, cat: \"Sisteme Fotovoltaice\", nume: \"Setare parametri cod de re\u021bea ANRE\", min: 85, max: 150 },\n        { id: 46, cat: \"Sisteme Fotovoltaice\", nume: \"Echipare tablou protec\u021bii CC - montaj separator\", min: 55, max: 75 },\n        { id: 47, cat: \"Sisteme Fotovoltaice\", nume: \"Echipare tablou protec\u021bii CC - montaj siguran\u021b\u0103 automat\u0103\", min: 55, max: 75 },\n        { id: 48, cat: \"Sisteme Fotovoltaice\", nume: \"Echipare tablou protec\u021bii CC - montaj desc\u0103rc\u0103tor\", min: 62, max: 120 },\n        { id: 49, cat: \"Sisteme Fotovoltaice\", nume: \"Echipoten\u021bializare rame suport panouri fotovoltaice\", min: 50, max: 180 },\n        { id: 50, cat: \"Sisteme Fotovoltaice\", nume: \"Montaj tablou electric CC \/ CA\", min: 110, max: 180 },\n        { id: 51, cat: \"Sisteme Fotovoltaice\", nume: \"Montaj contor bidirec\u021bional monofazat\", min: 155, max: 210 },\n        { id: 52, cat: \"Sisteme Fotovoltaice\", nume: \"Montaj contor bidirec\u021bional trifazat\", min: 190, max: 300 },\n        { id: 53, cat: \"Sisteme Fotovoltaice\", nume: \"Montaj acumulator Li-Ion \/ kw\", min: 80, max: 150 },\n        { id: 54, cat: \"Sisteme Fotovoltaice\", nume: \"Montaj acumulator deep cycle \/ gel \/ kw\", min: 60, max: 90 },\n        { id: 55, cat: \"Sisteme Fotovoltaice\", nume: \"Conectare invertor \u00een tabloul de distribu\u021bie\", min: 80, max: 300 },\n        { id: 56, cat: \"Sisteme Fotovoltaice\", nume: \"Montaj automatiz\u0103ri ex. ATS, backup box, etc.\", min: 175, max: 250 },\n        { id: 57, cat: \"Sisteme Fotovoltaice\", nume: \"Instalare software invertor pe terminal beneficiar\", min: 65, max: 75 },\n        { id: 69, cat: \"Sisteme Fotovoltaice\", nume: \"\u00centocmire proiect \u0219i dosar prosumator - depunere \u0219i activare cont la distribuitor\", min: 1200, max: 2000 },\n\t\t\n        { id: 58, cat: \"Automatiz\u0103ri & Securitate\", nume: \"Instalare camere supraveghere exterior\", min: 150, max: 250 },\n        { id: 59, cat: \"Automatiz\u0103ri & Securitate\", nume: \"Instalare camere PTZ exterior\", min: 200, max: 355 },\n        { id: 60, cat: \"Automatiz\u0103ri & Securitate\", nume: \"Instalare camera ANPR (recunoa\u0219tere numere)\", min: 500, max: 800 },\n        { id: 61, cat: \"Automatiz\u0103ri & Securitate\", nume: \"Instalare NVR \u0219i configurare\", min: 150, max: 180 },\n        { id: 62, cat: \"Automatiz\u0103ri & Securitate\", nume: \"Instalare \u0219i configurare NVR cu AI\", min: 200, max: 250 },\n        { id: 63, cat: \"Automatiz\u0103ri & Securitate\", nume: \"Instalare sisteme de alarmare PARADOX \/ DSC\", min: 150, max: 1500 },\n        { id: 64, cat: \"Automatiz\u0103ri & Securitate\", nume: \"Programare PLC-uri Siemens\", min: 150, max: 5000 },\n        { id: 65, cat: \"Automatiz\u0103ri & Securitate\", nume: \"Programare microcontrolere Arduino\", min: 150, max: 8000 },\n        { id: 66, cat: \"Automatiz\u0103ri & Securitate\", nume: \"Automatiz\u0103ri bazate pe RaspberryPI\", min: 200, max: 8000 },\n        { id: 67, cat: \"Automatiz\u0103ri & Securitate\", nume: \"Automatiz\u0103ri bazate pe relee \/ contactori\", min: 200, max: 8000 },\n        { id: 68, cat: \"Automatiz\u0103ri & Securitate\", nume: \"Automatiz\u0103ri poart\u0103 batant\u0103 \/ culisant\u0103\", min: 750, max: 2000 },\n        { id: 70, cat: \"Automatiz\u0103ri & Securitate\", nume: \"Identificare circuit curen\u021bi slabi\", min: 12, max: 50 },\n        { id: 71, cat: \"Automatiz\u0103ri & Securitate\", nume: \"Sertizare\", min: 4, max: 5 },\n        { id: 72, cat: \"Automatiz\u0103ri & Securitate\", nume: \"Conexiuni patch panel\", min: 14, max: 20 },\n\t\t\n        { id: 29, cat: \"Servicii Generale & Diagnosticare\", nume: \"Ora manopera\", min: 65, max: 450 },\n        { id: 31, cat: \"Servicii Generale & Diagnosticare\", nume: \"Diagnosticare defect\", min: 90, max: 500 },\n        { id: 32, cat: \"Servicii Generale & Diagnosticare\", nume: \"Verificare rezisten\u021b\u0103 de dispersie priz\u0103 p\u0103m\u00e2nt cu eliberare buletin verificare\", min: 300, max: 550 },\n        { id: 34, cat: \"Servicii Generale & Diagnosticare\", nume: \"Termoscanare \u0219i analiz\u0103 termografic\u0103 a tablourilor\", min: 150, max: 350 },\n        { id: 35, cat: \"Servicii Generale & Diagnosticare\", nume: \"Verificare prize \/ continuitate priz\u0103 p\u0103m\u00e2nt\", min: 11, max: 34 }\n    ];\n\n    function initCalc() {\n        const container = document.getElementById('calc-items-container');\n        if (!container) return;\n\n        container.innerHTML = \"\";\n\n        const categorii = [];\n        servicii.forEach(s => {\n            if (s.cat && !categorii.includes(s.cat)) categorii.push(s.cat);\n        });\n\n        categorii.forEach(cat => {\n            const section = document.createElement('div');\n            section.className = 'calc-category-section';\n\n            section.innerHTML = `\n                <div class=\"category-header\" onclick=\"toggleCategory(this)\">\n                    <span>${cat}<\/span>\n                    <span class=\"toggle-icon\">\u25b6<\/span>\n                <\/div>\n                <div class=\"category-content\" style=\"display:none;\"><\/div>\n            `;\n\n            const contentDiv = section.querySelector('.category-content');\n\n            servicii.filter(s => s.cat === cat).forEach(s => {\n                const div = document.createElement('div');\n                div.className = 'calc-item';\n\n                div.innerHTML = `\n                    <div class=\"calc-name-col\">\n                        <div class=\"calc-item-name\">${s.nume}<\/div>\n                    <\/div>\n\n                    <div class=\"calc-price-col\">\n                        <span class=\"calc-label\">Interval pre\u021b<\/span>\n                        <div class=\"calc-item-price\">${s.min} - ${s.max} lei<\/div>\n                    <\/div>\n\n                    <div class=\"calc-controls\">\n                        <div class=\"calc-qty-box\">\n                            <span class=\"calc-label\">Cantitate<\/span>\n                            <div class=\"qty-stepper\">\n  \t\t\t\t\t\t\t<button type=\"button\" class=\"qty-btn\" onclick=\"stepQty(${s.id}, -1)\" aria-label=\"Scade\">\u2212<\/button>\n  \t\t\t\t\t\t\t<input type=\"text\" inputmode=\"numeric\" pattern=\"[0-9]*\"\n         \t\t\t\t\tclass=\"calc-input\" id=\"qty-${s.id}\" value=\"0\"\n         \t\t\t\t\toninput=\"sanitizeQty(${s.id}); calculateTotal();\">\n  \t\t\t\t\t\t\t<button type=\"button\" class=\"qty-btn\" onclick=\"stepQty(${s.id}, 1)\" aria-label=\"Cre\u0219te\">+<\/button>\n\t\t\t\t\t<\/div>\n                        <\/div>\n\n                        <div class=\"calc-complex-box\">\n                            <span class=\"calc-label\">Complexitate<\/span>\n                            <div class=\"slider-group\">\n                                <input type=\"range\" class=\"complex-slider\" id=\"comp-${s.id}\" min=\"0\" max=\"10\" value=\"0\"\n                                    oninput=\"updateComplexLabel(${s.id}); calculateTotal();\">\n                                <span class=\"complex-label\" id=\"lbl-${s.id}\">Compl: 0<\/span>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                `;\n\n                contentDiv.appendChild(div);\n            });\n\n            container.appendChild(section);\n        });\n    }\n\n    function filterServices() {\n        const q = (document.getElementById('calc-search').value || \"\").toLowerCase().trim();\n        const categories = document.querySelectorAll('.calc-category-section');\n\n        categories.forEach(cat => {\n            const items = cat.querySelectorAll('.calc-item');\n            const content = cat.querySelector('.category-content');\n            const icon = cat.querySelector('.toggle-icon');\n            let hasVisibleItems = false;\n\n            items.forEach(item => {\n                const itemName = (item.querySelector('.calc-item-name').innerText || \"\").toLowerCase();\n                if (itemName.includes(q)) {\n                    item.style.display = \"\";\n                    hasVisibleItems = true;\n                } else {\n                    item.style.display = \"none\";\n                }\n            });\n\n            if (q.length > 0) {\n                if (hasVisibleItems) {\n                    cat.style.display = \"block\";\n                    content.style.display = \"block\";\n                    icon.innerText = \"\u25bc\";\n                } else {\n                    cat.style.display = \"none\";\n                }\n            } else {\n                cat.style.display = \"block\";\n                content.style.display = \"none\";\n                icon.innerText = \"\u25b6\";\n            }\n        });\n    }\n\n    function toggleCategory(header) {\n        const content = header.nextElementSibling;\n        const icon = header.querySelector('.toggle-icon');\n\n        const isHidden = content.style.display === \"none\";\n        content.style.display = isHidden ? \"block\" : \"none\";\n        icon.innerText = isHidden ? \"\u25bc\" : \"\u25b6\";\n    }\n\n    function updateComplexLabel(id) {\n        const val = document.getElementById('comp-' + id).value;\n        document.getElementById('lbl-' + id).innerText = 'Compl: ' + val;\n    }\n\n    function calculateTotal() {\n  let total = 0;\n\n  servicii.forEach(s => {\n    const qty = parseFloat(document.getElementById('qty-' + s.id)?.value) || 0;\n    const comp = parseInt(document.getElementById('comp-' + s.id)?.value) || 0;\n\n    if (qty > 0) {\n      const pretUnitar = s.min + (comp \/ 10 * (s.max - s.min));\n      total += qty * pretUnitar;\n    }\n  });\n\n  const gt = document.getElementById('grand-total');\n  if (gt) {\n    gt.innerText = total.toLocaleString('ro-RO', { minimumFractionDigits: 2 }) + ' lei';\n  }\n\n  const calc = document.getElementById('sinus-calculator');\n  const summary = calc ? calc.querySelector('.calc-summary') : null;\n\n  if (calc && summary) {\n    const shouldStick = total > 0;\n    summary.classList.toggle('is-sticky', shouldStick);\n    calc.classList.toggle('has-sticky', shouldStick);\n  }\n}\nfunction sanitizeQty(id){\n  const el = document.getElementById('qty-' + id);\n  if(!el) return;\n  let v = (el.value || '').replace(\/[^\\d]\/g, '');\n  if(v === '') v = '0';\n  el.value = String(Math.max(0, parseInt(v, 10) || 0));\n}\n\nfunction stepQty(id, delta){\n  const el = document.getElementById('qty-' + id);\n  if(!el) return;\n  sanitizeQty(id);\n  const cur = parseInt(el.value || '0', 10) || 0;\n  const next = Math.max(0, cur + delta);\n  el.value = String(next);\n  calculateTotal();\n}\n\nfunction resetCalculator() {\n    document.querySelectorAll('.calc-input').forEach(i => i.value = '0');\n    document.querySelectorAll('.complex-slider').forEach(i => i.value = 0);\n    document.querySelectorAll('.complex-label').forEach(l => l.innerText = 'Compl: 0');\n\n    document.querySelectorAll('.calc-category-section').forEach(section => {\n        const content = section.querySelector('.category-content');\n        const icon = section.querySelector('.toggle-icon');\n        if (content) content.style.display = \"none\";\n        if (icon) icon.innerText = \"\u25b6\";\n    });\n\n    calculateTotal();\n\n    \/* === FIX: r\u0103m\u00e2nem pe calculator, nu s\u0103rim \u00een footer === *\/\n    const calc = document.getElementById('sinus-calculator');\n    if (calc) {\n        calc.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    }\n}\n\n\n    function openLeadForm(){\n        const totalText = document.getElementById('grand-total').innerText || \"0\";\n        const totalVal = parseFloat(totalText.replace(\/\\.\/g,'').replace(',', '.')) || 0;\n\n        if(totalVal <= 0){\n            alert(\"Alege m\u0103car un serviciu (cantitate > 0) ca s\u0103 po\u021bi trimite cererea.\");\n            return;\n        }\n\n        const modal = document.getElementById('lead-modal');\n        modal.classList.add('is-open');\n        modal.setAttribute('aria-hidden', 'false');\n\n        document.getElementById('lead-status').innerText = \"\";\n        setTimeout(() => document.getElementById('lead-name').focus(), 50);\n    }\n\n    function closeLeadForm(){\n        const modal = document.getElementById('lead-modal');\n        modal.classList.remove('is-open');\n        modal.setAttribute('aria-hidden', 'true');\n    }\n\n    document.addEventListener('keydown', (e) => {\n        if(e.key === 'Escape'){\n            const modal = document.getElementById('lead-modal');\n            if(modal && modal.classList.contains('is-open')) closeLeadForm();\n\n            const pdfModal = document.getElementById('pdf-modal');\n            if(pdfModal && pdfModal.classList.contains('is-open')) closeOfferPdfModal();\n        }\n    });\n\n    function buildSelectedServices(){\n        const selected = [];\n\n        servicii.forEach(s => {\n            const qty = parseFloat(document.getElementById('qty-' + s.id)?.value) || 0;\n            const comp = parseInt(document.getElementById('comp-' + s.id)?.value) || 0;\n\n            if(qty > 0){\n                const pretUnitar = s.min + (comp \/ 10 * (s.max - s.min));\n                selected.push({\n                    id: s.id,\n                    cat: s.cat,\n                    nume: s.nume,\n                    qty: qty,\n                    comp: comp,\n                    min: s.min,\n                    max: s.max,\n                    total: Number((qty * pretUnitar).toFixed(2))\n                });\n            }\n        });\n\n        return selected;\n    }\n\n    function sendOfferAjax(){\n        const name = (document.getElementById('lead-name').value || \"\").trim();\n\t\tconst email = (document.getElementById('lead-email').value || \"\").trim();\n        const phone = (document.getElementById('lead-phone').value || \"\").trim();\n        const message = (document.getElementById('lead-message').value || \"\").trim();\n\n        if(!name || !phone || !email){\n            alert(\"Completeaz\u0103 te rog numele, emailul \u0219i telefonul.\");\n            return;\n        }\n\n        const services = buildSelectedServices();\n        if(services.length === 0){\n            alert(\"Nu ai niciun serviciu selectat (cantitate > 0).\");\n            return;\n        }\n\t\tconst emailOk = \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$\/.test(email);\n        if(!emailOk){\n           alert(\"Te rog introdu o adres\u0103 de email valid\u0103.\");\n           return;\n        }\n        const btn = document.getElementById('lead-send-btn');\n        const status = document.getElementById('lead-status');\n\n        btn.disabled = true;\n        status.innerText = \"Se trimite...\";\n\n        const totalText = document.getElementById('grand-total').innerText;\n\n        const body = new URLSearchParams();\n        body.append('action', 'sinus_send_calculator_offer');\n        body.append('nonce', SINUS_OFFER_NONCE);\n        body.append('name', name);\n\t\tbody.append('email', email);\n        body.append('phone', phone);\n        body.append('message', message);\n        body.append('services', JSON.stringify(services));\n        body.append('total', totalText);\n        body.append('page_url', window.location.href);\n\n        fetch(SINUS_AJAX_URL, {\n            method: 'POST',\n            headers: { 'Content-Type': 'application\/x-www-form-urlencoded; charset=UTF-8' },\n            body: body.toString(),\n            credentials: 'same-origin'\n        })\n        .then(r => r.json())\n        .then(data => {\n            if(data && data.success){\n                status.innerText = \"Cererea a fost trimis\u0103. Ve\u021bi fi contactat! Mul\u021bumim!\";\n                setTimeout(() => {\n                    closeLeadForm();\n                    btn.disabled = false;\n                }, 8000);\n            } else {\n                status.innerText = \"Eroare la trimitere. Te rog \u00eencearc\u0103 din nou.\";\n                btn.disabled = false;\n            }\n        })\n        .catch(() => {\n            status.innerText = \"Eroare de conexiune. Te rog \u00eencearc\u0103 din nou.\";\n            btn.disabled = false;\n        });\n    }\n\n    function syncDiscountUi(){\n        const discEl = document.getElementById('offer-discount');\n        const cb = document.getElementById('offer-show-discount');\n        if(!discEl || !cb) return;\n        const disc = parseInt(discEl.value || \"0\", 10);\n        cb.disabled = (disc === 0);\n        if(disc === 0) cb.checked = false;\n    }\n\n    function openOfferPdfModal(){\n        const totalText = document.getElementById('grand-total').innerText || \"0,00 lei\";\n        if (totalText === \"0,00 lei\" || totalText === \"0 lei\") {\n            alert(\"Selecteaz\u0103 m\u0103car un serviciu (cantitate > 0) ca s\u0103 po\u021bi genera oferta PDF.\");\n            return;\n        }\n\n        const d = new Date();\n        const dd = String(d.getDate()).padStart(2,'0');\n        const mm = String(d.getMonth()+1).padStart(2,'0');\n        const yyyy = d.getFullYear();\n        const today = `${dd}.${mm}.${yyyy}`;\n        const offerDateEl = document.getElementById('offer-date');\n        if(offerDateEl) offerDateEl.value = today;\n\n        const hh = String(d.getHours()).padStart(2,'0');\n        const mi = String(d.getMinutes()).padStart(2,'0');\n        const ss = String(d.getSeconds()).padStart(2,'0');\n        const autoNo = `OF-${yyyy}${mm}${dd}-${hh}${mi}${ss}`;\n        const offerNoInput = document.getElementById('offer-number');\n        if (offerNoInput && !offerNoInput.value.trim()) offerNoInput.value = autoNo;\n\n        syncDiscountUi();\n\n        const modal = document.getElementById('pdf-modal');\n        modal.classList.add('is-open');\n        modal.setAttribute('aria-hidden','false');\n        const status = document.getElementById('pdf-status');\n        if(status) status.innerText = \"\";\n    }\n\n    function closeOfferPdfModal(){\n        const modal = document.getElementById('pdf-modal');\n        if(!modal) return;\n        modal.classList.remove('is-open');\n        modal.setAttribute('aria-hidden','true');\n    }\n\n\tfunction generatePDF() {\n        const totalText = document.getElementById('grand-total').innerText;\n\n        const offerNo = (document.getElementById('offer-number')?.value || \"\").trim() || \"____\";\n        const offerDate = (document.getElementById('offer-date')?.value || \"\").trim() || (new Date().toLocaleDateString('ro-RO'));\n        const beneficiary = (document.getElementById('offer-beneficiary')?.value || \"\").trim();\n\t\tconst discountPct = parseInt(document.getElementById('offer-discount')?.value || \"0\", 10);\n        const showDiscountLine = !!document.getElementById('offer-show-discount')?.checked;\n\n        let randuriTabel = \"\";\n        let subtotalFaraDiscount = 0;\n\n        servicii.forEach(s => {\n            const qty = parseFloat(document.getElementById('qty-' + s.id)?.value) || 0;\n            const comp = parseInt(document.getElementById('comp-' + s.id)?.value) || 0;\n\n            if (qty > 0) {\n                const pretUnitar = s.min + (comp \/ 10 * (s.max - s.min));\n                const totalRand = qty * pretUnitar;\n                subtotalFaraDiscount += totalRand;\n\n                randuriTabel += `\n                    <tr>\n                        <td style=\"border: 1px solid #000; padding: 6px; text-align: left;\">${s.nume}<\/td>\n                        <td style=\"border: 1px solid #000; padding: 6px; text-align: center;\">${qty}<\/td>\n                        <td style=\"border: 1px solid #000; padding: 6px; text-align: center;\">${comp}\/10<\/td>\n                        <td style=\"border: 1px solid #000; padding: 6px; text-align: right;\">${pretUnitar.toLocaleString('ro-RO', {minimumFractionDigits: 2})} lei<\/td>\n                        <td style=\"border: 1px solid #000; padding: 6px; text-align: right;\">${totalRand.toLocaleString('ro-RO', {minimumFractionDigits: 2})} lei<\/td>\n                    <\/tr>`;\n            }\n        });\n\n        const valoareDiscount = (subtotalFaraDiscount * discountPct) \/ 100;\n        const totalFinal = subtotalFaraDiscount - valoareDiscount;\n\n        let randuriSumar = \"\";\n        if (discountPct > 0 && showDiscountLine) {\n            randuriSumar += `\n                <tr>\n                    <td colspan=\"4\" style=\"text-align: right; padding: 6px; font-weight: bold; border: 1px solid #000;\">SUBTOTAL (f\u0103r\u0103 discount):<\/td>\n                    <td style=\"text-align: right; padding: 6px; font-weight: bold; border: 1px solid #000;\">${subtotalFaraDiscount.toLocaleString('ro-RO', {minimumFractionDigits: 2})} lei<\/td>\n                <\/tr>\n                <tr>\n                    <td colspan=\"4\" style=\"text-align: right; padding: 6px; font-weight: bold; border: 1px solid #000; color: #d00;\">DISCOUNT ACORDAT (${discountPct}%):<\/td>\n                    <td style=\"text-align: right; padding: 6px; font-weight: bold; border: 1px solid #000; color: #d00;\">- ${valoareDiscount.toLocaleString('ro-RO', {minimumFractionDigits: 2})} lei<\/td>\n                <\/tr>\n            `;\n        }\n\n        randuriSumar += `\n            <tr style=\"background-color: #f9f9f9;\">\n                <td colspan=\"4\" style=\"text-align: right; padding: 8px; font-size: 14px; font-weight: bold; border: 1px solid #000;\">TOTAL ESTIMAT DE PLAT\u0102:<\/td>\n                <td style=\"text-align: right; padding: 8px; font-size: 14px; font-weight: bold; border: 1px solid #000;\">${totalFinal.toLocaleString('ro-RO', {minimumFractionDigits: 2})} lei<\/td>\n            <\/tr>\n        `;\n\n        const fereastraPrint = window.open('', '_blank', 'width=1000,height=800');\n        if(!fereastraPrint) return;\n\n        fereastraPrint.document.write(`\n            <html>\n            <head>\n                <title>Oferta Sinus Energy - ${offerNo}<\/title>\n                <style>\n                    @page { size: A4; margin: 0; }\n                    body { font-family: \"Segoe UI\", Tahoma, Geneva, Verdana, sans-serif; margin: 0; padding: 0; background: #fff; }\n                    \n                    \/* Containerul principal care are imaginea de fundal (antetul) *\/\n                    .page-container { \n                        position: relative;\n                        width: 210mm; \n                        height: 297mm;\n                        margin: auto;\n                        background-image: url('https:\/\/www.sinusenergy.ro\/wp-content\/uploads\/2026\/01\/antet_oferta_online.png');\n                        background-size: contain;\n                        background-repeat: no-repeat;\n                    }\n\n                    \/* Zona de con\u021binut - Aici regl\u0103m \u00eencadrarea \u00eentre linii *\/\n                    .content-body { \n                        position: absolute;\n                        top: 65mm;    \/* Cobor\u00e2m tabelul sub logo \u0219i datele firmei din antet *\/\n                        left: 15mm;   \/* Aliniere st\u00e2nga \u00eentre liniile verticale *\/\n                        right: 15mm;  \/* Aliniere dreapta \u00eentre liniile verticale *\/\n                        bottom: 40mm; \/* Spa\u021biu pentru subsol *\/\n                    }\n\n                    .titlu-document { \n                        text-align: center; \n                        font-size: 16px; \n                        font-weight: bold; \n                        margin-bottom: 20px; \n                        text-transform: uppercase; \n                        color: #023733;\n                    }\n\n                    table { width: 100%; border-collapse: collapse; margin-bottom: 15px; font-size: 12px; }\n                    th { background-color: #023733; color: #fff; border: 1px solid #000; padding: 8px; text-align: center; }\n                    \n                    .disclaimer { font-size: 10px; font-style: italic; margin-top: 15px; color: #444; }\n                    \n                    .footer-semnaturi { \n                        margin-top: 30px; \n                        width: 100%; \n                        font-size: 13px;\n                    }\n                    .semnatura-box { display: inline-block; width: 45%; vertical-align: top; }\n                    .stampila-placeholder { \n                        border: 1px dashed #ccc; \n                        width: 100px; \n                        height: 100px; \n                        margin-top: 10px; \n                        display: flex; \n                        align-items: center; \n                        justify-content: center; \n                        font-size: 9px; \n                        color: #aaa; \n                    }\n\n                    @media print {\n                        .no-print { display: none; }\n                        body { -webkit-print-color-adjust: exact; print-color-adjust: exact; }\n                        .page-container { box-shadow: none; }\n                    }\n\t\t\t\t\t\t.stampila-img{\n  \t\t\t\t\t\t\twidth: 170px;\n  \t\t\t\t\t\t\theight: auto;\n  \t\t\t\t\t\t\tdisplay: block;\n  \t\t\t\t\t\t\tmargin-top: 8px;\n\t\t\t\t\t}\n\n                <\/style>\n            <\/head>\n            <body>\n                <div class=\"page-container\">\n                    <div class=\"content-body\">\n                        <div class=\"titlu-document\">OFERT\u0102 DEVIZ MANOPER\u0102 NR. ${offerNo} \/ DATA: ${offerDate}<\/div>\n\n                        <table>\n                            <thead>\n                                <tr>\n                                    <th style=\"width: 45%;\">Descriere Serviciu<\/th>\n                                    <th style=\"width: 10%;\">Cant.<\/th>\n                                    <th style=\"width: 10%;\">Compl.<\/th>\n                                    <th style=\"width: 15%;\">Pre\u021b Unitar<\/th>\n                                    <th style=\"width: 20%;\">Total<\/th>\n                                <\/tr>\n                            <\/thead>\n                            <tbody>\n                                ${randuriTabel}\n                                ${randuriSumar}\n                            <\/tbody>\n                        <\/table>\n\n                        <p class=\"disclaimer\">\n                            * Pre\u021bul final se stabile\u0219te \u00een urma vizitei la locul implement\u0103rii. Pre\u021burile includ TVA.<br>\n                            * Prezenta ofert\u0103 este valabil\u0103 15 zile de la data emiterii.\n                        <\/p>\n\n                        <div class=\"footer-semnaturi\">\n                            <div class=\"semnatura-box\">\n                                <strong>Beneficiar,<\/strong><br><br>\n                                ${beneficiary || \"................................................\"}\n                            <\/div>\n\n                            <div class=\"semnatura-box\" style=\"text-align: right; float: right;\">\n                                <strong>Prestator,<\/strong><br>\n                                <strong>SINUS ELECTRO S.R.L.<\/strong><br><br>\n                                <div style=\"display: inline-block; text-align: center;\">\n                                    Semn\u0103tur\u0103 \u0219i \u0218tampil\u0103<br>\n                                    <img decoding=\"async\" src=\"https:\/\/www.sinusenergy.ro\/wp-content\/uploads\/2026\/01\/semnatura-stampila.png\" class=\"stampila-img\" alt=\"Semn\u0103tur\u0103 \u0219i \u0219tampil\u0103\">\n                                <\/div>\n                            <\/div>\n                        <\/div>\n                    <\/div>\n                <\/div>\n\n                <div class=\"no-print\" style=\"position: fixed; bottom: 20px; right: 20px;\">\n                    <button onclick=\"window.print()\" style=\"padding: 15px 30px; background: #023733; color: #fff; border: none; border-radius: 5px; cursor: pointer; font-weight: bold; box-shadow: 0 4px 10px rgba(0,0,0,0.3);\">\n                        PRINTEAZ\u0102 \/ SALVEAZ\u0102 PDF\n                    <\/button>\n                <\/div>\n            <\/body>\n            <\/html>\n        `);\n\n        fereastraPrint.document.close();\n        closeOfferPdfModal();\n    }\n\n    \/\/ expunem func\u021biile folosite direct \u00een HTML (onclick=\"\")\n    window.filterServices = filterServices;\n    window.toggleCategory = toggleCategory;\n    window.updateComplexLabel = updateComplexLabel;\n    window.calculateTotal = calculateTotal;\n\twindow.stepQty = stepQty;\n\twindow.sanitizeQty = sanitizeQty;\n\n    window.resetCalculator = resetCalculator;\n    window.openLeadForm = openLeadForm;\n    window.closeLeadForm = closeLeadForm;\n    window.sendOfferAjax = sendOfferAjax;\n\n    window.openOfferPdfModal = openOfferPdfModal;\n    window.closeOfferPdfModal = closeOfferPdfModal;\n    window.generatePDF = generatePDF;\n    window.syncDiscountUi = syncDiscountUi;\n\n    document.addEventListener('DOMContentLoaded', initCalc);\n    <\/script>\n    \n\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"template-services.php","meta":{"_jetpack_hide_featured_image":false,"_jetpack_featured_image_duplicate_dismissed":0,"footnotes":""},"class_list":["post-54","page","type-page","status-publish","hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/sinusenergy.ro\/test-design\/wp-json\/wp\/v2\/pages\/54","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sinusenergy.ro\/test-design\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sinusenergy.ro\/test-design\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sinusenergy.ro\/test-design\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sinusenergy.ro\/test-design\/wp-json\/wp\/v2\/comments?post=54"}],"version-history":[{"count":66,"href":"https:\/\/sinusenergy.ro\/test-design\/wp-json\/wp\/v2\/pages\/54\/revisions"}],"predecessor-version":[{"id":2588,"href":"https:\/\/sinusenergy.ro\/test-design\/wp-json\/wp\/v2\/pages\/54\/revisions\/2588"}],"wp:attachment":[{"href":"https:\/\/sinusenergy.ro\/test-design\/wp-json\/wp\/v2\/media?parent=54"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}