{"id":2132,"date":"2025-05-08T16:22:12","date_gmt":"2025-05-08T15:22:12","guid":{"rendered":"https:\/\/prontosolucoes.pt\/?page_id=2132"},"modified":"2026-10-09T15:00:18","modified_gmt":"2026-10-09T14:00:18","slug":"electrician-in-porto","status":"publish","type":"page","link":"https:\/\/prontosolucoes.pt\/pt\/electrician-in-porto\/","title":{"rendered":"Eletricista no Porto"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"2132\" class=\"elementor elementor-2132\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8ddc41e e-con-full e-flex e-con e-parent\" data-id=\"8ddc41e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-e8af0a4 elementor-widget elementor-widget-html\" data-id=\"e8af0a4\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!-- PRONTO | Homepage Hero Content + Booking Lab Bar -->\r\n<div id=\"pronto-home-hero-content\" class=\"pronto-home-hero-content\">\r\n  <style>\r\n    body .elementor-widget-html:has(#pronto-home-hero-content),\r\n    body .elementor-widget-html:has(#pronto-home-hero-content) > .elementor-widget-container,\r\n    body .e-con:has(#pronto-home-hero-content),\r\n    body .e-con-inner:has(#pronto-home-hero-content) {\r\n      --padding-top: 0px !important;\r\n      --padding-right: 0px !important;\r\n      --padding-bottom: 0px !important;\r\n      --padding-left: 0px !important;\r\n      --gap: 0px !important;\r\n      margin: 0 !important;\r\n      padding: 0 !important;\r\n      gap: 0 !important;\r\n    }\r\n\r\n    body .elementor-widget-html:has(#pronto-home-hero-content) {\r\n      width: 100%;\r\n      min-height: 600px;\r\n      box-sizing: border-box;\r\n      padding: 80px 0 !important;\r\n      background:\r\n        linear-gradient(\r\n          rgba(0, 0, 0, 0.60),\r\n          rgba(0, 0, 0, 0.60)\r\n        ),\r\n        url(\"https:\/\/prontosolucoes.pt\/wp-content\/uploads\/2025\/05\/20250503_1423_Electrical-Work-Blueprint_remix_01jtb4zt7kedps726wsbwqrsky-1.webp\");\r\n      background-position: center center;\r\n      background-repeat: no-repeat;\r\n      background-size: cover;\r\n      background-attachment: scroll;\r\n    }\r\n\r\n    body .elementor-widget-html:has(#pronto-home-hero-content) > .elementor-widget-container {\r\n      width: 100%;\r\n      min-height: 440px;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n    }\r\n\r\n    #pronto-home-hero-content {\r\n      --pronto-navy: #0F2B49;\r\n      --pronto-yellow: #E1A134;\r\n      --pronto-white: #FFFFFF;\r\n    }\r\n\r\n    #pronto-home-hero-content.pronto-home-hero-content {\r\n      width: min(100%, 860px);\r\n      margin: 0 auto;\r\n      padding-left: 24px;\r\n      padding-right: 24px;\r\n      box-sizing: border-box;\r\n      text-align: center;\r\n    }\r\n    #pronto-home-hero-content .phc-title {\r\n      margin: 0 0 20px;\r\n      color: var(--pronto-white);\r\n      font: 800 54px\/1.05 \"Poppins\", system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\r\n      letter-spacing: -1px;\r\n      text-shadow: 0 2px 4px rgba(0, 0, 0, 0.38), 0 8px 22px rgba(0, 0, 0, 0.32);\r\n      transform: translateY(-12px);\r\n    }\r\n\r\n    #pronto-home-hero-content .phc-subtitle {\r\n      margin: 0 auto 36px;\r\n      max-width: 660px;\r\n      color: var(--pronto-white);\r\n      font: 500 18px\/1.45 \"Poppins\", system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\r\n      text-shadow: 0 1px 3px rgba(0, 0, 0, 0.34);\r\n    }\r\n    #pronto-home-hero-content .phb-button {\r\n      width: min(100%, 760px);\r\n      margin: 0 auto;\r\n      display: grid;\r\n      grid-template-columns: minmax(0, 1fr) auto;\r\n      align-items: center;\r\n      gap: 12px;\r\n      border: 1px solid rgba(255, 255, 255, 0.50);\r\n      border-radius: 18px;\r\n      padding: 12px;\r\n      box-sizing: border-box;\r\n      background: rgba(255, 255, 255, 0.22);\r\n      -webkit-backdrop-filter: blur(18px) saturate(170%);\r\n              backdrop-filter: blur(18px) saturate(170%);\r\n      box-shadow: 0 16px 38px rgba(0, 0, 0, 0.22);\r\n      cursor: pointer;\r\n      text-align: left;\r\n      appearance: none;\r\n      transition: transform 180ms ease, box-shadow 180ms ease;\r\n    }\r\n\r\n    #pronto-home-hero-content .phb-button:hover {\r\n      transform: translateY(-1px);\r\n      box-shadow: 0 18px 42px rgba(0, 0, 0, 0.26);\r\n    }\r\n\r\n    #pronto-home-hero-content .phb-button:focus-visible {\r\n      outline: 3px solid rgba(225, 161, 52, 0.55);\r\n      outline-offset: 3px;\r\n    }\r\n\r\n    #pronto-home-hero-content .phb-query {\r\n      min-height: 58px;\r\n      display: grid;\r\n      grid-template-columns: minmax(0, 1fr) auto minmax(140px, 0.42fr);\r\n      align-items: center;\r\n      border-radius: 14px;\r\n      background: rgba(255, 255, 255, 0.90);\r\n      -webkit-backdrop-filter: blur(10px) saturate(150%);\r\n              backdrop-filter: blur(10px) saturate(150%);\r\n      border: 1px solid rgba(255, 255, 255, 0.62);\r\n      color: var(--pronto-navy);\r\n      overflow: hidden;\r\n    }\r\n\r\n    #pronto-home-hero-content .phb-main,\r\n    #pronto-home-hero-content .phb-location {\r\n      min-height: 58px;\r\n      display: flex;\r\n      align-items: center;\r\n      background: transparent;\r\n      color: var(--pronto-navy);\r\n    }\r\n\r\n    #pronto-home-hero-content .phb-main {\r\n      gap: 11px;\r\n      min-width: 0;\r\n      padding: 0 20px;\r\n      font: 700 16px\/1.2 \"Poppins\", system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\r\n    }\r\n\r\n    #pronto-home-hero-content .phb-main-label {\r\n      white-space: nowrap;\r\n      overflow: hidden;\r\n      text-overflow: ellipsis;\r\n    }\r\n\r\n    #pronto-home-hero-content .phb-main-text-mobile {\r\n      display: none;\r\n    }\r\n\r\n    #pronto-home-hero-content .phb-divider {\r\n      width: 1px;\r\n      height: 30px;\r\n      background: rgba(15, 43, 73, 0.20);\r\n    }\r\n\r\n    #pronto-home-hero-content .phb-location {\r\n      justify-content: center;\r\n      gap: 8px;\r\n      padding: 0 18px;\r\n      font: 800 15px\/1.2 \"Poppins\", system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\r\n      white-space: nowrap;\r\n    }\r\n\r\n    #pronto-home-hero-content .phb-search-icon,\r\n    #pronto-home-hero-content .phb-location-icon {\r\n      flex: 0 0 auto;\r\n    }\r\n\r\n    #pronto-home-hero-content .phb-action {\r\n      min-height: 58px;\r\n      display: inline-flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      border-radius: 14px;\r\n      padding: 0 26px;\r\n      background: #D99425;\r\n      color: #FFFFFF;\r\n      font: 800 15px\/1 \"Poppins\", system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\r\n      white-space: nowrap;\r\n      text-shadow: 0 1px 1px rgba(0, 0, 0, 0.18);\r\n      box-shadow: 0 9px 22px rgba(225, 161, 52, 0.30);\r\n    }\r\n\r\n    #pronto-home-hero-content .phb-action-arrow {\r\n      display: none;\r\n    }\r\n    @media (min-width: 641px) and (max-width: 900px) {\r\n      #pronto-home-hero-content.pronto-home-hero-content {\r\n        width: min(100%, 820px);\r\n        padding-left: clamp(28px, 5vw, 44px);\r\n        padding-right: clamp(28px, 5vw, 44px);\r\n      }\r\n\r\n      #pronto-home-hero-content .phc-title {\r\n        max-width: 700px;\r\n        margin-left: auto;\r\n        margin-right: auto;\r\n        font-size: clamp(40px, 6vw, 48px);\r\n        line-height: 1.06;\r\n        transform: translateY(-6px);\r\n      }\r\n\r\n      #pronto-home-hero-content .phc-subtitle {\r\n        max-width: 580px;\r\n        margin-bottom: 30px;\r\n        font-size: 16px;\r\n        line-height: 1.42;\r\n      }\r\n\r\n      #pronto-home-hero-content .phb-button {\r\n        width: min(100%, 680px);\r\n        gap: 10px;\r\n        padding: 10px;\r\n        border-radius: 17px;\r\n      }\r\n\r\n      #pronto-home-hero-content .phb-query {\r\n        min-height: 54px;\r\n        grid-template-columns: minmax(0, 1fr) auto minmax(118px, 0.36fr);\r\n      }\r\n\r\n      #pronto-home-hero-content .phb-main,\r\n      #pronto-home-hero-content .phb-location {\r\n        min-height: 54px;\r\n      }\r\n\r\n      #pronto-home-hero-content .phb-main {\r\n        padding: 0 16px;\r\n        font-size: 15px;\r\n      }\r\n\r\n      #pronto-home-hero-content .phb-location {\r\n        padding: 0 14px;\r\n        font-size: 14px;\r\n      }\r\n\r\n      #pronto-home-hero-content .phb-action {\r\n        min-height: 54px;\r\n        padding: 0 22px;\r\n        font-size: 14px;\r\n      }\r\n    }\r\n    @media (max-width: 640px) {\r\n      body .elementor-widget-html:has(#pronto-home-hero-content) {\r\n        min-height: 350px;\r\n        padding: 32px 0 !important;\r\n        background-position: center right;\r\n      }\r\n\r\n      body .elementor-widget-html:has(#pronto-home-hero-content) > .elementor-widget-container {\r\n        min-height: 286px;\r\n      }\r\n\r\n      #pronto-home-hero-content.pronto-home-hero-content {\r\n        width: min(100%, 390px);\r\n        padding-top: 18px;\r\n        padding-left: 14px;\r\n        padding-right: 14px;\r\n        box-sizing: border-box;\r\n      }\r\n\r\n      #pronto-home-hero-content .phc-title {\r\n        max-width: 330px;\r\n        margin: 0 auto 12px;\r\n        font-size: 30px;\r\n        line-height: 1.08;\r\n        letter-spacing: -0.6px;\r\n        transform: none;\r\n      }\r\n\r\n      #pronto-home-hero-content .phc-subtitle {\r\n        max-width: 310px;\r\n        margin-bottom: 18px;\r\n        font-size: 14px;\r\n        line-height: 1.38;\r\n      }\r\n\r\n      #pronto-home-hero-content .phb-button {\r\n        width: min(94%, 350px);\r\n        margin-left: auto;\r\n        margin-right: auto;\r\n        grid-template-columns: minmax(0, 1fr) auto;\r\n        gap: 7px;\r\n        padding: 7px;\r\n        border-radius: 16px;\r\n      }\r\n\r\n      #pronto-home-hero-content .phb-query {\r\n        min-height: 42px;\r\n        grid-template-columns: minmax(0, 1fr) auto minmax(78px, auto);\r\n        border-radius: 12px;\r\n      }\r\n\r\n      #pronto-home-hero-content .phb-main,\r\n      #pronto-home-hero-content .phb-location {\r\n        min-height: 42px;\r\n      }\r\n\r\n      #pronto-home-hero-content .phb-main {\r\n        gap: 6px;\r\n        padding: 0 9px;\r\n        font-size: 12.5px;\r\n      }\r\n\r\n      #pronto-home-hero-content .phb-main-label {\r\n        font-size: 0;\r\n        line-height: 1;\r\n      }\r\n\r\n      #pronto-home-hero-content .phb-main-text-desktop {\r\n        display: none;\r\n      }\r\n\r\n      #pronto-home-hero-content .phb-main-text-mobile {\r\n        display: inline;\r\n        font: 700 11.5px\/1.12 \"Poppins\", system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\r\n        letter-spacing: -0.15px;\r\n      }\r\n\r\n      #pronto-home-hero-content .phb-divider {\r\n        height: 22px;\r\n      }\r\n\r\n      #pronto-home-hero-content .phb-location {\r\n        gap: 4px;\r\n        padding: 0 8px;\r\n        font-size: 12.3px;\r\n      }\r\n\r\n      #pronto-home-hero-content .phb-search-icon,\r\n      #pronto-home-hero-content .phb-location-icon {\r\n        width: 16px;\r\n        height: 16px;\r\n      }\r\n\r\n      #pronto-home-hero-content .phb-action {\r\n        min-width: 42px;\r\n        min-height: 42px;\r\n        padding: 0;\r\n        border-radius: 12px;\r\n        font-size: 0;\r\n      }\r\n\r\n      #pronto-home-hero-content .phb-action-text {\r\n        display: none;\r\n      }\r\n\r\n      #pronto-home-hero-content .phb-action-arrow {\r\n        display: inline;\r\n        font: 900 22px\/1 \"Poppins\", system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\r\n      }\r\n    }\r\n  <\/style>\r\n\r\n  <h1 class=\"phc-title\">24h Electrician in Porto<\/h1>\r\n\r\n  <p class=\"phc-subtitle\">Fast help for breaker faults, sockets, lights, power cuts and urgent electrical issues in Porto.<\/p>\r\n\r\n  <button type=\"button\"\r\n          class=\"phb-button pronto-precall cta-hero-booking pp-service-electrical\"\r\n          aria-label=\"Open booking flow\">\r\n    <span class=\"phb-query\">\r\n      <span class=\"phb-main\">\r\n        <span class=\"phb-main-label\">\r\n          <span class=\"phb-main-text-desktop\">What do you need help with?<\/span>\r\n          <span class=\"phb-main-text-mobile\">How can we help?<\/span>\r\n        <\/span>\r\n      <\/span>\r\n\r\n      <span class=\"phb-divider\" aria-hidden=\"true\"><\/span>\r\n\r\n      <span class=\"phb-location\">\r\n        <svg class=\"phb-location-icon\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\r\n          <path d=\"M12 21C12 21 5.5 14.75 5.5 9.5C5.5 5.91 8.41 3 12 3C15.59 3 18.5 5.91 18.5 9.5C18.5 14.75 12 21 12 21Z\" stroke=\"#0F2B49\" stroke-width=\"2.4\" stroke-linejoin=\"round\"><\/path>\r\n          <circle cx=\"12\" cy=\"9.5\" r=\"2.2\" stroke=\"#0F2B49\" stroke-width=\"2.2\"><\/circle>\r\n        <\/svg>\r\n        <span id=\"pronto-hero-bar-location-text\">Zip Code<\/span>\r\n      <\/span>\r\n    <\/span>\r\n\r\n    <span class=\"phb-action\">\r\n      <span class=\"phb-action-text\">Get Help Now<\/span>\r\n      <span class=\"phb-action-arrow\" aria-hidden=\"true\">\u2192<\/span>\r\n    <\/span>\r\n  <\/button>\r\n\r\n  <script>\r\n    (() => {\r\n      \"use strict\";\r\n\r\n      function runHeroLocationHint() {\r\n        const locationText = document.getElementById(\"pronto-hero-bar-location-text\");\r\n\r\n        if (!locationText) return;\r\n\r\n        function cleanLocation(value) {\r\n          const text = String(value || \"\")\r\n            .trim()\r\n            .replace(\/\\s+\/g, \" \");\r\n\r\n          if (!text) return \"\";\r\n          if (text === \"-\") return \"\";\r\n          if (text.length > 48) return \"\";\r\n\r\n          return text;\r\n        }\r\n\r\n        function resolveHeroBackendUrl(pathname) {\r\n          const fromGlobal = String(window.PRONTO_BOOKING_SUBMIT_URL || \"\").trim();\r\n          const overlay = document.getElementById(\"pronto-precall-overlay\");\r\n          const fromOverlay = overlay\r\n            ? String(overlay.getAttribute(\"data-submit-url\") || \"\").trim()\r\n            : \"\";\r\n          const seedUrl = fromGlobal || fromOverlay;\r\n\r\n          if (seedUrl) {\r\n            try {\r\n              const submitUrl = new URL(seedUrl, window.location.href);\r\n              return new URL(pathname, `${submitUrl.origin}\/`).toString();\r\n            } catch (error) {}\r\n          }\r\n\r\n          return pathname;\r\n        }\r\n\r\n        function applyHeroLocation(value) {\r\n          const cleaned = cleanLocation(value);\r\n          locationText.textContent = cleaned || \"Area\";\r\n        }\r\n\r\n        applyHeroLocation(\"Area\");\r\n\r\n        fetch(resolveHeroBackendUrl(\"\/address\/booking-hero-area-hint\"), {\r\n          method: \"GET\",\r\n          headers: {\r\n            \"Accept\": \"application\/json\"\r\n          }\r\n        })\r\n          .then((response) => response.json())\r\n          .then((data) => {\r\n            if (!data || data.ok !== true) return;\r\n\r\n            applyHeroLocation(data.display_area);\r\n          })\r\n          .catch(() => {\r\n            applyHeroLocation(\"Area\");\r\n          });\r\n      }\r\n\r\n      if (document.readyState === \"loading\") {\r\n        document.addEventListener(\"DOMContentLoaded\", runHeroLocationHint, { once: true });\r\n      } else {\r\n        runHeroLocationHint();\r\n      }\r\n    })();\r\n  <\/script>\r\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-1ef9c05 e-con-full e-flex e-con e-parent\" data-id=\"1ef9c05\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-48ad116 elementor-widget elementor-widget-html\" data-id=\"48ad116\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\r\n  .pronto-electrical-card-section {\r\n    width: 100%;\r\n    max-width: none;\r\n    margin: 0 auto;\r\n    padding: 10px 0 8px;\r\n    background: #F0F6FE;\r\n  }\r\n\r\n  .pronto-electrical-card-section > h2 {\r\n    margin: 0 20px 34px;\r\n    color: #0F2B49;\r\n    font-family: \"Montserrat\", sans-serif;\r\n    font-size: 36px;\r\n    font-weight: 700;\r\n    line-height: 1.08;\r\n    letter-spacing: -0.03em;\r\n    text-align: center;\r\n  }\r\n\r\n  .pronto-electrical-card-section > p {\r\n    margin: 0 20px 22px;\r\n    color: #0F2B49;\r\n    font-size: 16px;\r\n    font-weight: 700;\r\n    line-height: 1.5;\r\n    text-align: center;\r\n  }\r\n\r\n  @media (max-width: 767px) {\r\n    .pronto-electrical-card-section > h2 {\r\n      margin: 0 16px 36px;\r\n      font-size: clamp(2rem, 8vw, 2.6rem);\r\n      line-height: 1.1;\r\n      letter-spacing: -0.03em;\r\n    }\r\n\r\n    .pronto-electrical-card-section > p {\r\n      margin: 0 20px 24px;\r\n      font-size: 16px;\r\n      font-weight: 700;\r\n      line-height: 1.5;\r\n    }\r\n  }\r\n\r\n  .pronto-electrical-card-grid {\r\n    width: min(calc(100% - 48px), 1220px);\r\n    max-width: 1220px;\r\n    margin: 0 auto;\r\n    display: grid;\r\n    grid-template-columns: repeat(3, minmax(0, 1fr));\r\n    gap: 18px;\r\n  }\r\n\r\n  .pronto-electrical-card {\r\n    position: relative;\r\n    min-height: clamp(330px, 30vw, 405px);\r\n    border: 0;\r\n    border-radius: 14px;\r\n    overflow: hidden;\r\n    text-decoration: none;\r\n    color: #ffffff;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    width: 100%;\r\n    padding: 0;\r\n    background-position: center;\r\n    background-size: cover;\r\n    background-repeat: no-repeat;\r\n    box-shadow: none;\r\n    transform: scale(1);\r\n    transform-origin: center center;\r\n    transition: transform 0.28s ease, box-shadow 0.28s ease;\r\n    will-change: transform;\r\n    font: inherit;\r\n    text-align: inherit;\r\n    cursor: pointer;\r\n    appearance: none;\r\n    -webkit-appearance: none;\r\n  }\r\n\r\n  .pronto-electrical-card::before {\r\n    content: \"\";\r\n    position: absolute;\r\n    inset: 0;\r\n    background: rgba(0, 0, 0, 0.58);\r\n    z-index: 1;\r\n  }\r\n\r\n  .pronto-electrical-card:hover {\r\n    z-index: 4;\r\n    transform: scale(1.035);\r\n    box-shadow: 0 18px 38px rgba(15, 43, 70, 0.28);\r\n  }\r\n\r\n  .pronto-electrical-card:focus-visible {\r\n    outline: 3px solid rgba(225, 161, 52, 0.95);\r\n    outline-offset: 4px;\r\n  }\r\n\r\n  .pronto-electrical-card-content {\r\n    position: relative;\r\n    z-index: 2;\r\n    width: 100%;\r\n    padding: 28px 24px;\r\n    text-align: center;\r\n  }\r\n\r\n  .pronto-electrical-card-title {\r\n    display: block;\r\n    font-size: 26px;\r\n    line-height: 1.18;\r\n    font-weight: 800;\r\n    color: #ffffff;\r\n    margin: 0 0 34px;\r\n    text-shadow: 0 2px 8px rgba(0, 0, 0, 0.45);\r\n  }\r\n\r\n  .pronto-electrical-card-text {\r\n    display: block;\r\n    font-size: 17px;\r\n    line-height: 1.55;\r\n    font-weight: 700;\r\n    color: #ffffff;\r\n    margin: 0 0 24px;\r\n    text-shadow: 0 2px 8px rgba(0, 0, 0, 0.45);\r\n  }\r\n\r\n  .pronto-electrical-card-button {\r\n    display: inline-flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    min-height: 40px;\r\n    padding: 10px 22px;\r\n    border-radius: 12px;\r\n    background: #E1A134;\r\n    color: #ffffff;\r\n    font-size: 16px;\r\n    line-height: 1;\r\n    font-weight: 800;\r\n    text-decoration: none;\r\n    box-shadow: 0 8px 18px rgba(0, 0, 0, 0.18);\r\n    transition: background 0.22s ease, transform 0.22s ease;\r\n  }\r\n\r\n  .pronto-electrical-card:hover .pronto-electrical-card-button {\r\n    background: #D97706;\r\n    transform: translateY(-1px);\r\n  }\r\n\r\n  .pronto-electrical-card-breaker {\r\n    background-image: url(\"https:\/\/prontosolucoes.pt\/wp-content\/uploads\/2026\/04\/electricista-no-porto-reparacao-quadro-eletrico.webp\");\r\n  }\r\n\r\n  .pronto-electrical-card-socket {\r\n    background-image: url(\"https:\/\/prontosolucoes.pt\/wp-content\/uploads\/2026\/04\/electricista-no-porto-reparacao-tomada.webp\");\r\n  }\r\n\r\n  .pronto-electrical-card-short {\r\n    background-image: url(\"https:\/\/prontosolucoes.pt\/wp-content\/uploads\/2026\/04\/electricista-no-porto-incendio-quadro-eletrico.webp\");\r\n  }\r\n\r\n  @media (max-width: 1180px) {\r\n    .pronto-electrical-card-grid {\r\n      width: min(calc(100% - 36px), 1080px);\r\n      gap: 16px;\r\n    }\r\n\r\n    .pronto-electrical-card {\r\n      min-height: 350px;\r\n    }\r\n\r\n    .pronto-electrical-card-title {\r\n      font-size: 22px;\r\n      margin-bottom: 24px;\r\n    }\r\n\r\n    .pronto-electrical-card-text {\r\n      font-size: 15px;\r\n      line-height: 1.48;\r\n    }\r\n\r\n    .pronto-electrical-card-button {\r\n      font-size: 14px;\r\n      padding: 10px 18px;\r\n    }\r\n  }\r\n\r\n  @media (max-width: 900px) {\r\n    .pronto-electrical-card-grid {\r\n      width: min(calc(100% - 28px), 660px);\r\n      grid-template-columns: 1fr;\r\n      gap: 16px;\r\n    }\r\n\r\n    .pronto-electrical-card {\r\n      min-height: 330px;\r\n    }\r\n\r\n    .pronto-electrical-card:hover {\r\n      transform: scale(1.018);\r\n    }\r\n  }\r\n\r\n  @media (max-width: 480px) {\r\n    .pronto-electrical-card-grid {\r\n      width: min(calc(100% - 22px), 440px);\r\n      gap: 14px;\r\n    }\r\n\r\n    .pronto-electrical-card {\r\n      min-height: 315px;\r\n    }\r\n\r\n    .pronto-electrical-card-content {\r\n      padding: 24px 18px;\r\n    }\r\n\r\n    .pronto-electrical-card-title {\r\n      font-size: 23px;\r\n      margin-bottom: 22px;\r\n    }\r\n\r\n    .pronto-electrical-card-text {\r\n      font-size: 15px;\r\n      line-height: 1.45;\r\n      margin-bottom: 22px;\r\n    }\r\n\r\n    .pronto-electrical-card-button {\r\n      max-width: 100%;\r\n      font-size: 14px;\r\n      line-height: 1.2;\r\n      padding: 11px 16px;\r\n      white-space: normal;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<div class=\"pronto-electrical-card-section\">\r\n  <h2>\r\n    Need Help Fast? We've Got You Covered\r\n  <\/h2>\r\n\r\n  <p>\r\n    Certified Electricians, ready when you need them\r\n  <\/p>\r\n\r\n  <div class=\"pronto-electrical-card-grid\">\r\n    <button type=\"button\" class=\"pronto-electrical-card pronto-electrical-card-breaker pronto-precall pp-service-electrical pp-problemset-breaker cta-electrical-card-breaker\">\r\n      <span class=\"pronto-electrical-card-content\">\r\n        <span class=\"pronto-electrical-card-title\">Circuit Breaker Repair<br>&amp; Maintenance<\/span>\r\n        <span class=\"pronto-electrical-card-text\">Fix faulty wiring, troubleshoot<br>flickers, and upgrade to LEDs. We<br>handle both residential and<br>commercial spaces<\/span>\r\n        <span class=\"pronto-electrical-card-button\">Request Service<\/span>\r\n      <\/span>\r\n    <\/button>\r\n\r\n    <button type=\"button\" class=\"pronto-electrical-card pronto-electrical-card-socket pronto-precall pp-service-electrical pp-problemset-socket cta-electrical-card-socket\">\r\n      <span class=\"pronto-electrical-card-content\">\r\n        <span class=\"pronto-electrical-card-title\">Electrical Socket<br>Installation<\/span>\r\n        <span class=\"pronto-electrical-card-text\">Install or replace wall sockets,<br>safely and neatly. Great for home<br>upgrades and remodelling<\/span>\r\n        <span class=\"pronto-electrical-card-button\">Request Service<\/span>\r\n      <\/span>\r\n    <\/button>\r\n\r\n    <button type=\"button\" class=\"pronto-electrical-card pronto-electrical-card-short pronto-precall pp-service-electrical pp-problemset-short-circuit cta-electrical-card-short-circuit\">\r\n      <span class=\"pronto-electrical-card-content\">\r\n        <span class=\"pronto-electrical-card-title\">Short Circuit Repair<\/span>\r\n        <span class=\"pronto-electrical-card-text\">Fix power outages, sparks, and<br>circuit failures fast. Our licensed<br>electricians provide expert<br>diagnostics and safe repairs in<br>Porto, available 24\/7<\/span>\r\n        <span class=\"pronto-electrical-card-button\">Request Service<\/span>\r\n      <\/span>\r\n    <\/button>\r\n  <\/div>\r\n<\/div>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-b2f7e57 e-con-full e-flex e-con e-parent\" data-id=\"b2f7e57\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-8f99903 elementor-widget elementor-widget-html\" data-id=\"8f99903\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\r\n  body .elementor-widget-html:has([data-cta=\"benefits-cta\"]),\r\n  body .elementor-widget-html:has([data-cta=\"benefits-cta\"]) > .elementor-widget-container,\r\n  body .e-con:has([data-cta=\"benefits-cta\"]),\r\n  body .e-con-inner:has([data-cta=\"benefits-cta\"]) {\r\n    --padding-top: 0px !important;\r\n    --padding-right: 0px !important;\r\n    --padding-bottom: 0px !important;\r\n    --padding-left: 0px !important;\r\n    --gap: 0px !important;\r\n    margin: 0 !important;\r\n    padding: 0 !important;\r\n    gap: 0 !important;\r\n    background: #EEF6FD !important;\r\n  }\r\n  section:has([data-cta=\"benefits-cta\"]) {\r\n    box-sizing: border-box;\r\n    width: 100%;\r\n    padding: 42px 64px 64px;\r\n    display: grid;\r\n    grid-template-columns: minmax(0, 1.08fr) minmax(320px, 0.92fr);\r\n    gap: 72px;\r\n    align-items: start;\r\n    background: #EEF6FD;\r\n    font-family: \"Poppins\", system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\r\n  }\r\n\r\n  section:has([data-cta=\"benefits-cta\"]) * {\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  section:has([data-cta=\"benefits-cta\"]) > div:first-of-type {\r\n    min-width: 0;\r\n  }\r\n\r\n  section:has([data-cta=\"benefits-cta\"]) > div:first-of-type > h2 {\r\n    max-width: 470px;\r\n    margin: 0;\r\n    color: #0F2B49;\r\n    font-family: \"Montserrat\", sans-serif;\r\n    font-size: 36px;\r\n    font-weight: 700;\r\n    line-height: 1.08;\r\n    letter-spacing: -0.03em;\r\n  }\r\n\r\n  section:has([data-cta=\"benefits-cta\"]) > div:first-of-type > div {\r\n    display: grid;\r\n    grid-template-columns: repeat(3, minmax(0, 1fr));\r\n    gap: 24px;\r\n    margin-top: 52px;\r\n  }\r\n\r\n  section:has([data-cta=\"benefits-cta\"]) > div:first-of-type > div > div {\r\n    min-width: 0;\r\n    text-align: center;\r\n  }\r\n\r\n  section:has([data-cta=\"benefits-cta\"]) > div:first-of-type > div > div > img {\r\n    display: block;\r\n    width: auto;\r\n    height: 54px;\r\n    max-width: 64px;\r\n    margin: 0 auto;\r\n    object-fit: contain;\r\n    position: relative;\r\n    z-index: 1;\r\n    transform: translateY(0) scale(1);\r\n    transform-origin: center;\r\n    transition:\r\n      transform 0.25s ease,\r\n      filter 0.25s ease;\r\n  }\r\n\r\n  section:has([data-cta=\"benefits-cta\"]) > div:first-of-type > div > div:nth-child(2) > img,\r\n  section:has([data-cta=\"benefits-cta\"]) > div:first-of-type > div > div:nth-child(3) > img {\r\n    filter:\r\n      brightness(0)\r\n      saturate(100%)\r\n      invert(27%)\r\n      sepia(50%)\r\n      saturate(2573%)\r\n      hue-rotate(175deg)\r\n      brightness(25%)\r\n      contrast(71%);\r\n  }\r\n\r\n  section:has([data-cta=\"benefits-cta\"]) > div:first-of-type > div > div > img:hover {\r\n    transform: translateY(-4px) scale(1.08);\r\n    filter: drop-shadow(0 6px 6px rgba(15, 43, 73, 0.18));\r\n  }\r\n\r\n  section:has([data-cta=\"benefits-cta\"]) > div:first-of-type > div > div:nth-child(2) > img:hover,\r\n  section:has([data-cta=\"benefits-cta\"]) > div:first-of-type > div > div:nth-child(3) > img:hover {\r\n    filter:\r\n      brightness(0)\r\n      saturate(100%)\r\n      invert(27%)\r\n      sepia(50%)\r\n      saturate(2573%)\r\n      hue-rotate(175deg)\r\n      brightness(25%)\r\n      contrast(71%)\r\n      drop-shadow(0 6px 6px rgba(15, 43, 73, 0.18));\r\n  }\r\n\r\n  section:has([data-cta=\"benefits-cta\"]) > div:first-of-type > div > div > h3 {\r\n    min-height: 46px;\r\n    margin: 18px 0 0;\r\n    display: flex;\r\n    align-items: flex-start;\r\n    justify-content: center;\r\n    color: #1A365D;\r\n    font-size: 17px;\r\n    font-weight: 700;\r\n    line-height: 1.08;\r\n  }\r\n\r\n  section:has([data-cta=\"benefits-cta\"]) > div:first-of-type > div > div > p {\r\n    margin: 19px 0 0;\r\n    color: #4A5568;\r\n    font-size: 14px;\r\n    font-weight: 600;\r\n    line-height: 1.55;\r\n  }\r\n\r\n  section:has([data-cta=\"benefits-cta\"]) > div:last-of-type {\r\n    min-width: 0;\r\n    display: flex;\r\n    flex-direction: column;\r\n    align-items: center;\r\n    padding-top: 7px;\r\n  }\r\n\r\n  section:has([data-cta=\"benefits-cta\"]) > div:last-of-type > figure {\r\n    width: 100%;\r\n    max-width: 350px;\r\n    margin: 0;\r\n    text-align: center;\r\n  }\r\n\r\n  section:has([data-cta=\"benefits-cta\"]) > div:last-of-type > figure > img {\r\n    display: block;\r\n    width: 100%;\r\n    aspect-ratio: 3 \/ 2;\r\n    object-fit: cover;\r\n    border-radius: 18px;\r\n    box-shadow: rgba(0, 0, 0, 0.28) 0 2px 10px 0;\r\n  }\r\n\r\n  section:has([data-cta=\"benefits-cta\"]) > div:last-of-type > figure > figcaption {\r\n    margin-top: 20px;\r\n    color: #1A365D;\r\n    font-size: 16px;\r\n    font-weight: 600;\r\n    line-height: 1.45;\r\n  }\r\n\r\n  section:has([data-cta=\"benefits-cta\"]) .pronto-benefits-button-html {\r\n    margin-top: 25px;\r\n    text-align: center;\r\n  }\r\n\r\n  .pronto-benefits-button-html .cta-benefits-cta {\r\n    appearance: none;\r\n    box-sizing: border-box;\r\n    display: inline-block;\r\n    padding: 12px 24px;\r\n    border: 0;\r\n    border-radius: 14px;\r\n    background: #E1A134;\r\n    color: #FFFFFF;\r\n    fill: #FFFFFF;\r\n    font-family: \"Poppins\", system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\r\n    font-size: 18px;\r\n    font-weight: 800;\r\n    line-height: 1;\r\n    text-align: center;\r\n    text-decoration: none;\r\n    cursor: pointer;\r\n    box-shadow: rgba(0, 0, 0, 0.5) 0px 0px 10px 0px;\r\n    transition: all 0.3s ease;\r\n  }\r\n\r\n  .pronto-benefits-button-html .cta-benefits-cta:hover {\r\n    background: #D97706;\r\n    transform: scale(1.03);\r\n  }\r\n\r\n  .pronto-benefits-button-html .elementor-button-content-wrapper {\r\n    display: inline-flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    gap: 8px;\r\n  }\r\n\r\n  .pronto-benefits-button-html .elementor-button-icon {\r\n    display: inline-flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n  }\r\n\r\n  .pronto-benefits-button-html .elementor-button-icon svg {\r\n    width: 15px;\r\n    height: 15px;\r\n    fill: currentColor;\r\n  }\r\n\r\n  @media (max-width: 767px) {\r\n    section:has([data-cta=\"benefits-cta\"]) {\r\n      display: block;\r\n      padding: 46px 16px 54px;\r\n    }\r\n\r\n    section:has([data-cta=\"benefits-cta\"]) > div:first-of-type > h2 {\r\n      max-width: none;\r\n      margin: 0 auto;\r\n      font-family: \"Montserrat\", sans-serif;\r\n      font-size: 28px;\r\n      font-weight: 700;\r\n      line-height: 1.1;\r\n      letter-spacing: -0.03em;\r\n      text-align: center;\r\n    }\r\n\r\n    section:has([data-cta=\"benefits-cta\"]) > div:first-of-type > h2 br {\r\n      display: none;\r\n    }\r\n\r\n    section:has([data-cta=\"benefits-cta\"]) > div:first-of-type > div {\r\n      gap: 10px;\r\n      margin-top: 50px;\r\n    }\r\n\r\n    section:has([data-cta=\"benefits-cta\"]) > div:first-of-type > div > div > img {\r\n      height: 48px;\r\n      max-width: 56px;\r\n    }\r\n\r\n    section:has([data-cta=\"benefits-cta\"]) > div:first-of-type > div > div > h3 {\r\n      min-height: 38px;\r\n      margin-top: 20px;\r\n      font-size: 15px;\r\n      line-height: 1.05;\r\n    }\r\n\r\n    section:has([data-cta=\"benefits-cta\"]) > div:first-of-type > div > div > p {\r\n      margin-top: 27px;\r\n      font-size: 14px;\r\n      font-weight: 600;\r\n      line-height: 1.5;\r\n    }\r\n\r\n    section:has([data-cta=\"benefits-cta\"]) > div:last-of-type {\r\n      margin-top: 42px;\r\n      padding-top: 0;\r\n    }\r\n\r\n    section:has([data-cta=\"benefits-cta\"]) > div:last-of-type > figure {\r\n      max-width: none;\r\n    }\r\n\r\n    section:has([data-cta=\"benefits-cta\"]) > div:last-of-type > figure > figcaption {\r\n      margin-top: 20px;\r\n      font-size: 16px;\r\n      line-height: 1.5;\r\n    }\r\n\r\n    section:has([data-cta=\"benefits-cta\"]) .pronto-benefits-button-html {\r\n      margin-top: 24px;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<section>\r\n  <div>\r\n    <h2>\r\n      The ideal combination<br>\r\n      of speed and<br>\r\n      customer service\r\n    <\/h2>\r\n\r\n    <div>\r\n      <div>\r\n        <img decoding=\"async\"\r\n          src=\"https:\/\/prontosolucoes.pt\/wp-content\/uploads\/2025\/05\/energy-icon.svg\"\r\n          alt=\"\"\r\n        >\r\n\r\n        <h3>\r\n          Fast response\r\n        <\/h3>\r\n\r\n        <p>\r\n          Under 1h arrival,<br>\r\n          day or night\r\n        <\/p>\r\n      <\/div>\r\n\r\n      <div>\r\n        <img decoding=\"async\"\r\n          src=\"https:\/\/prontosolucoes.pt\/wp-content\/uploads\/2025\/05\/24-hours-phone-support-icon.svg\"\r\n          alt=\"\"\r\n        >\r\n\r\n        <h3>\r\n          24\/7<br>\r\n          Availability\r\n        <\/h3>\r\n\r\n        <p>\r\n          Direct contact, no<br>\r\n          call centers\r\n        <\/p>\r\n      <\/div>\r\n\r\n      <div>\r\n        <img decoding=\"async\"\r\n          src=\"https:\/\/prontosolucoes.pt\/wp-content\/uploads\/2025\/05\/verify-verified-check-icon.svg\"\r\n          alt=\"\"\r\n        >\r\n\r\n        <h3>\r\n          certified pros\r\n        <\/h3>\r\n\r\n        <p>\r\n          Verified local<br>\r\n          electricians\r\n        <\/p>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div>\r\n    <figure>\r\n      <img decoding=\"async\"\r\n        src=\"https:\/\/prontosolucoes.pt\/wp-content\/uploads\/2025\/04\/20250425_2219_Tool-Van-Ready_remix_01jsqd1ft7ej4t80t3pemyxsxe.webp\"\r\n        alt=\"\"\r\n      >\r\n\r\n      <figcaption>\r\n        Fast, trusted and professional services\r\n      <\/figcaption>\r\n    <\/figure>\r\n\r\n    <div class=\"pronto-benefits-button-html\">\r\n      <button\r\n        type=\"button\"\r\n        class=\"cta-benefits-cta pronto-precall pp-service-electrical\"\r\n        data-cta=\"benefits-cta\"\r\n      >\r\n        <span class=\"elementor-button-content-wrapper\">\r\n          <span class=\"elementor-button-icon\">\r\n            <svg\r\n              aria-hidden=\"true\"\r\n              class=\"e-font-icon-svg e-far-arrow-alt-circle-right\"\r\n              viewBox=\"0 0 512 512\"\r\n              xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\r\n            >\r\n              <path d=\"M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256zm72 20v-40c0-6.6 5.4-12 12-12h116v-67c0-10.7 12.9-16 20.5-8.5l99 99c4.7 4.7 4.7 12.3 0 17l-99 99c-7.6 7.6-20.5 2.2-20.5-8.5v-67H140c-6.6 0-12-5.4-12-12z\"><\/path>\r\n            <\/svg>\r\n          <\/span>\r\n\r\n          <span class=\"elementor-button-text\">\r\n            Request Help Now\r\n          <\/span>\r\n        <\/span>\r\n      <\/button>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-6f22ace e-con-full e-flex e-con e-parent\" data-id=\"6f22ace\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a17f821 elementor-widget elementor-widget-html\" data-id=\"a17f821\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<section id=\"pronto-reviews-premium\" class=\"pronto-reviews-premium\">\r\n  <style>\r\n    #pronto-reviews-premium {\r\n      --pronto-navy: #0F2B46;\r\n      --pronto-muted: #667085;\r\n      --pronto-card: #FFFFFF;\r\n      --pronto-bg: #F0F6FE;\r\n      --pronto-border: rgba(15, 43, 70, 0.08);\r\n      --pronto-shadow:\r\n        0 6px 14px rgba(15, 43, 70, 0.12),\r\n        0 2px 4px rgba(15, 43, 70, 0.06);\r\n      --pronto-star: #00B67A;\r\n\r\n      width: 100%;\r\n      padding: 72px 20px;\r\n      background: var(--pronto-bg);\r\n      box-sizing: border-box;\r\n      overflow: hidden;\r\n    }\r\n\r\n    #pronto-reviews-premium * {\r\n      box-sizing: border-box;\r\n    }\r\n\r\n    #pronto-reviews-premium {\r\n      display: block;\r\n      margin: 0;\r\n    }\r\n\r\n    .elementor-widget-html:has(#pronto-reviews-premium),\r\n    .elementor-widget-html:has(#pronto-reviews-premium) > .elementor-widget-container,\r\n    .elementor-element:has(#pronto-reviews-premium),\r\n    .e-con:has(#pronto-reviews-premium) {\r\n      background-color: #F0F6FE !important;\r\n    }\r\n\r\n    #pronto-reviews-premium .pronto-reviews-viewport {\r\n      width: 100%;\r\n    }\r\n\r\n    #pronto-reviews-premium .pronto-reviews-title {\r\n      margin: 0 0 44px;\r\n      color: #0F2B49 !important;\r\n      font-family: \"Montserrat\", sans-serif;\r\n      font-size: 36px;\r\n      font-weight: 700;\r\n      line-height: 1.08;\r\n      letter-spacing: -0.03em;\r\n      text-align: center;\r\n    }\r\n\r\n    #pronto-reviews-premium .pronto-reviews-track {\r\n      display: grid;\r\n      grid-template-columns: repeat(3, minmax(0, 1fr));\r\n      gap: 24px;\r\n    }\r\n\r\n    #pronto-reviews-premium .pronto-review-card {\r\n      min-height: 190px;\r\n      padding: 24px;\r\n      background: var(--pronto-card);\r\n      border: 1px solid var(--pronto-border);\r\n      border-radius: 22px;\r\n      box-shadow: var(--pronto-shadow);\r\n    }\r\n\r\n    #pronto-reviews-premium .pronto-review-card-clone {\r\n      display: none;\r\n    }\r\n\r\n    #pronto-reviews-premium .pronto-review-top {\r\n      display: grid;\r\n      grid-template-columns: 48px 1fr;\r\n      gap: 18px;\r\n      align-items: start;\r\n      margin-bottom: 16px;\r\n    }\r\n\r\n    #pronto-reviews-premium .pronto-review-avatar {\r\n      width: 48px;\r\n      height: 48px;\r\n      border-radius: 999px;\r\n      object-fit: cover;\r\n      display: block;\r\n      background: #EDF1F5;\r\n    }\r\n\r\n    #pronto-reviews-premium .pronto-review-stars {\r\n      display: flex;\r\n      gap: 3px;\r\n      margin: 2px 0 13px;\r\n    }\r\n\r\n    #pronto-reviews-premium .pronto-star-box {\r\n      width: 30px;\r\n      height: 30px;\r\n      display: inline-flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      background: var(--pronto-star);\r\n      color: #FFFFFF;\r\n      border-radius: 0;\r\n      font-size: 18px;\r\n      font-weight: 800;\r\n      line-height: 1;\r\n    }\r\n\r\n    #pronto-reviews-premium .pronto-review-meta {\r\n      display: flex;\r\n      align-items: center;\r\n      gap: 12px;\r\n      flex-wrap: wrap;\r\n    }\r\n\r\n    #pronto-reviews-premium .pronto-review-name {\r\n      color: #0F2B49;\r\n      font-family: \"Montserrat\", sans-serif;\r\n      font-size: 16px;\r\n      font-weight: 700;\r\n      line-height: 1.35;\r\n      letter-spacing: 0;\r\n    }\r\n\r\n    #pronto-reviews-premium .pronto-review-location {\r\n      display: inline-flex;\r\n      align-items: center;\r\n      gap: 7px;\r\n      color: var(--pronto-muted);\r\n      font-family: \"Montserrat\", sans-serif;\r\n      font-size: 14px;\r\n      font-weight: 500;\r\n      line-height: 1.5;\r\n    }\r\n\r\n    #pronto-reviews-premium .pronto-review-location svg {\r\n      width: 18px;\r\n      height: 18px;\r\n      flex: 0 0 18px;\r\n      stroke: currentColor;\r\n    }\r\n\r\n    #pronto-reviews-premium .pronto-review-text {\r\n      margin: 0;\r\n      color: #0F2B49;\r\n      font-family: \"Montserrat\", sans-serif;\r\n      font-size: 0.95rem;\r\n      font-weight: 600;\r\n      line-height: 1.6;\r\n      letter-spacing: 0;\r\n    }\r\n\r\n    @media (max-width: 1024px) {\r\n      #pronto-reviews-premium {\r\n        padding: 58px 0;\r\n      }\r\n\r\n      #pronto-reviews-premium .pronto-reviews-title {\r\n        padding: 0 20px;\r\n        margin-bottom: 44px;\r\n        font-size: 36px;\r\n        line-height: 1.08;\r\n        white-space: normal;\r\n      }\r\n\r\n      #pronto-reviews-premium .pronto-reviews-inner {\r\n        width: 100%;\r\n      }\r\n\r\n      #pronto-reviews-premium .pronto-reviews-viewport {\r\n        width: 100%;\r\n        overflow-x: auto;\r\n        overflow-y: hidden;\r\n        scroll-snap-type: x mandatory;\r\n        scrollbar-width: none;\r\n        -ms-overflow-style: none;\r\n        -webkit-overflow-scrolling: touch;\r\n      }\r\n\r\n      #pronto-reviews-premium .pronto-reviews-viewport::-webkit-scrollbar {\r\n        display: none;\r\n      }\r\n\r\n      #pronto-reviews-premium.pronto-carousel-ready .pronto-reviews-viewport {\r\n        scroll-behavior: smooth;\r\n      }\r\n\r\n      #pronto-reviews-premium.pronto-carousel-reset .pronto-reviews-viewport {\r\n        scroll-behavior: auto;\r\n      }\r\n\r\n      #pronto-reviews-premium .pronto-reviews-track {\r\n        display: flex;\r\n        width: max-content;\r\n        gap: 18px;\r\n        padding: 0 20px 16px;\r\n      }\r\n\r\n      #pronto-reviews-premium .pronto-review-card {\r\n        flex: 0 0 min(82vw, 430px);\r\n        scroll-snap-align: start;\r\n        box-shadow: 0 8px 22px rgba(15, 43, 70, 0.055);\r\n      }\r\n\r\n      #pronto-reviews-premium .pronto-review-card-clone {\r\n        display: block;\r\n      }\r\n    }\r\n\r\n    @media (max-width: 520px) {\r\n      #pronto-reviews-premium .pronto-reviews-title {\r\n        padding: 0 12px;\r\n        margin-bottom: 30px;\r\n        font-size: clamp(2rem, 8vw, 2.6rem);\r\n        line-height: 1.1;\r\n        letter-spacing: -0.03em;\r\n        white-space: normal;\r\n      }\r\n\r\n      #pronto-reviews-premium .pronto-review-card {\r\n        flex-basis: 86vw;\r\n        min-height: 185px;\r\n        padding: 21px;\r\n        border-radius: 20px;\r\n        box-shadow:\r\n          0 5px 12px rgba(15, 43, 70, 0.10),\r\n          0 2px 4px rgba(15, 43, 70, 0.05);\r\n      }\r\n\r\n      #pronto-reviews-premium .pronto-review-top {\r\n        grid-template-columns: 44px 1fr;\r\n        gap: 14px;\r\n        margin-bottom: 20px;\r\n      }\r\n\r\n      #pronto-reviews-premium .pronto-review-avatar {\r\n        width: 44px;\r\n        height: 44px;\r\n      }\r\n\r\n      #pronto-reviews-premium .pronto-star-box {\r\n        width: 25px;\r\n        height: 25px;\r\n        font-size: 15px;\r\n      }\r\n\r\n      #pronto-reviews-premium .pronto-review-name {\r\n        font-size: 16px;\r\n        line-height: 1.35;\r\n      }\r\n\r\n      #pronto-reviews-premium .pronto-review-location {\r\n        font-size: 14px;\r\n      }\r\n\r\n      #pronto-reviews-premium .pronto-review-text {\r\n        font-size: 0.95rem;\r\n        font-weight: 600;\r\n        line-height: 1.6;\r\n      }\r\n    }\r\n\r\n    @media (prefers-reduced-motion: reduce) {\r\n      #pronto-reviews-premium.pronto-carousel-ready .pronto-reviews-viewport {\r\n        scroll-behavior: auto;\r\n      }\r\n    }\r\n  <\/style>\r\n\r\n  <div class=\"pronto-reviews-inner\">\r\n    <h2 class=\"pronto-reviews-title\">What Porto Locals Are Saying<\/h2>\r\n\r\n    <div class=\"pronto-reviews-viewport\">\r\n      <div class=\"pronto-reviews-track\" aria-label=\"Customer reviews from Porto locals\">\r\n      <article class=\"pronto-review-card\">\r\n        <div class=\"pronto-review-top\">\r\n          <img decoding=\"async\" class=\"pronto-review-avatar\" src=\"https:\/\/prontosolucoes.pt\/wp-content\/uploads\/2021\/03\/mike.webp\" alt=\"Rui from Le\u00e7a da Palmeira\" loading=\"lazy\">\r\n          <div>\r\n            <div class=\"pronto-review-stars\" aria-label=\"5 out of 5 stars\">\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n            <\/div>\r\n            <div class=\"pronto-review-meta\">\r\n              <span class=\"pronto-review-name\">Rui<\/span>\r\n              <span class=\"pronto-review-location\">\r\n                <svg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\r\n                  <path d=\"M12 21s7-5.2 7-12a7 7 0 1 0-14 0c0 6.8 7 12 7 12Z\" stroke-width=\"2\"><\/path>\r\n                  <path d=\"M12 11.5a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Z\" stroke-width=\"2\"><\/path>\r\n                <\/svg>\r\n                Le\u00e7a da Palmeira\r\n              <\/span>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n        <p class=\"pronto-review-text\">Booked by WhatsApp. Super smooth and polite technician.<\/p>\r\n      <\/article>\r\n\r\n      <article class=\"pronto-review-card\">\r\n        <div class=\"pronto-review-top\">\r\n          <img decoding=\"async\" class=\"pronto-review-avatar\" src=\"https:\/\/prontosolucoes.pt\/wp-content\/uploads\/2020\/09\/ava-woman-4.webp\" alt=\"Beatriz from Campanh\u00e3\" loading=\"lazy\">\r\n          <div>\r\n            <div class=\"pronto-review-stars\" aria-label=\"5 out of 5 stars\">\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n            <\/div>\r\n            <div class=\"pronto-review-meta\">\r\n              <span class=\"pronto-review-name\">Beatriz<\/span>\r\n              <span class=\"pronto-review-location\">\r\n                <svg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\r\n                  <path d=\"M12 21s7-5.2 7-12a7 7 0 1 0-14 0c0 6.8 7 12 7 12Z\" stroke-width=\"2\"><\/path>\r\n                  <path d=\"M12 11.5a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Z\" stroke-width=\"2\"><\/path>\r\n                <\/svg>\r\n                Campanh\u00e3\r\n              <\/span>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n        <p class=\"pronto-review-text\">They arrived under one hour during the blackout - lifesaver!<\/p>\r\n      <\/article>\r\n\r\n      <article class=\"pronto-review-card\">\r\n        <div class=\"pronto-review-top\">\r\n          <img decoding=\"async\" class=\"pronto-review-avatar\" src=\"https:\/\/prontosolucoes.pt\/wp-content\/uploads\/2020\/09\/man-with-beard-smiling-avatar.webp\" alt=\"Carlos from Matosinhos\" loading=\"lazy\">\r\n          <div>\r\n            <div class=\"pronto-review-stars\" aria-label=\"5 out of 5 stars\">\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n            <\/div>\r\n            <div class=\"pronto-review-meta\">\r\n              <span class=\"pronto-review-name\">Carlos<\/span>\r\n              <span class=\"pronto-review-location\">\r\n                <svg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\r\n                  <path d=\"M12 21s7-5.2 7-12a7 7 0 1 0-14 0c0 6.8 7 12 7 12Z\" stroke-width=\"2\"><\/path>\r\n                  <path d=\"M12 11.5a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Z\" stroke-width=\"2\"><\/path>\r\n                <\/svg>\r\n                Matosinhos\r\n              <\/span>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n        <p class=\"pronto-review-text\">Booking was easy on WhatsApp. Technician arrived right on time and fixed a bad leak under the bathroom sink.<\/p>\r\n      <\/article>\r\n\r\n      <article class=\"pronto-review-card\">\r\n        <div class=\"pronto-review-top\">\r\n          <img decoding=\"async\" class=\"pronto-review-avatar\" src=\"https:\/\/prontosolucoes.pt\/wp-content\/uploads\/2020\/09\/ava-man-1.webp\" alt=\"Filipe from Cedofeita\" loading=\"lazy\">\r\n          <div>\r\n            <div class=\"pronto-review-stars\" aria-label=\"5 out of 5 stars\">\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n            <\/div>\r\n            <div class=\"pronto-review-meta\">\r\n              <span class=\"pronto-review-name\">Filipe<\/span>\r\n              <span class=\"pronto-review-location\">\r\n                <svg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\r\n                  <path d=\"M12 21s7-5.2 7-12a7 7 0 1 0-14 0c0 6.8 7 12 7 12Z\" stroke-width=\"2\"><\/path>\r\n                  <path d=\"M12 11.5a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Z\" stroke-width=\"2\"><\/path>\r\n                <\/svg>\r\n                Cedofeita\r\n              <\/span>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n        <p class=\"pronto-review-text\">The electrician explained everything and didn\u2019t rush. Honest guy.<\/p>\r\n      <\/article>\r\n\r\n      <article class=\"pronto-review-card\">\r\n        <div class=\"pronto-review-top\">\r\n          <img decoding=\"async\" class=\"pronto-review-avatar\" src=\"https:\/\/prontosolucoes.pt\/wp-content\/uploads\/2020\/09\/ava-woman-3.webp\" alt=\"Ana from Paranhos\" loading=\"lazy\">\r\n          <div>\r\n            <div class=\"pronto-review-stars\" aria-label=\"5 out of 5 stars\">\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n            <\/div>\r\n            <div class=\"pronto-review-meta\">\r\n              <span class=\"pronto-review-name\">Ana<\/span>\r\n              <span class=\"pronto-review-location\">\r\n                <svg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\r\n                  <path d=\"M12 21s7-5.2 7-12a7 7 0 1 0-14 0c0 6.8 7 12 7 12Z\" stroke-width=\"2\"><\/path>\r\n                  <path d=\"M12 11.5a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Z\" stroke-width=\"2\"><\/path>\r\n                <\/svg>\r\n                Paranhos\r\n              <\/span>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n        <p class=\"pronto-review-text\">They fixed a plumbing emergency without charging extra for the weekend.<\/p>\r\n      <\/article>\r\n\r\n      <article class=\"pronto-review-card\">\r\n        <div class=\"pronto-review-top\">\r\n          <img decoding=\"async\" class=\"pronto-review-avatar\" src=\"https:\/\/prontosolucoes.pt\/wp-content\/uploads\/2020\/09\/ava-woman-1.webp\" alt=\"Mariana from S\u00e3o Jo\u00e3o\" loading=\"lazy\">\r\n          <div>\r\n            <div class=\"pronto-review-stars\" aria-label=\"5 out of 5 stars\">\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n              <span class=\"pronto-star-box\">\u2605<\/span>\r\n            <\/div>\r\n            <div class=\"pronto-review-meta\">\r\n              <span class=\"pronto-review-name\">Mariana<\/span>\r\n              <span class=\"pronto-review-location\">\r\n                <svg viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\r\n                  <path d=\"M12 21s7-5.2 7-12a7 7 0 1 0-14 0c0 6.8 7 12 7 12Z\" stroke-width=\"2\"><\/path>\r\n                  <path d=\"M12 11.5a2.5 2.5 0 1 0 0-5 2.5 2.5 0 0 0 0 5Z\" stroke-width=\"2\"><\/path>\r\n                <\/svg>\r\n                S\u00e3o Jo\u00e3o\r\n              <\/span>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n        <p class=\"pronto-review-text\">Called them for a blocked kitchen sink. Super polite and got it sorted quickly without mess.<\/p>\r\n      <\/article>\r\n      <\/div>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <script>\r\n    (function () {\r\n      var section = document.getElementById(\"pronto-reviews-premium\");\r\n\r\n      if (!section) {\r\n        return;\r\n      }\r\n\r\n      var viewport = section.querySelector(\".pronto-reviews-viewport\");\r\n      var track = section.querySelector(\".pronto-reviews-track\");\r\n\r\n      if (!viewport || !track || track.dataset.prontoCarouselLoaded === \"1\") {\r\n        return;\r\n      }\r\n\r\n      track.dataset.prontoCarouselLoaded = \"1\";\r\n\r\n      var mediaQuery = window.matchMedia(\"(max-width: 1024px)\");\r\n      var reduceMotionQuery = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\r\n      var hasEntered = false;\r\n      var hasStarted = false;\r\n      var currentIndex = 0;\r\n      var originalCount = 0;\r\n      var positions = [];\r\n      var slideTimer = null;\r\n      var resumeTimer = null;\r\n      var resizeTimer = null;\r\n      var slideDuration = 760;\r\n      var pauseDuration = 2300;\r\n      var userPauseDuration = 4200;\r\n\r\n      function getOriginalCards() {\r\n        return Array.prototype.slice.call(track.querySelectorAll(\".pronto-review-card:not(.pronto-review-card-clone)\"));\r\n      }\r\n\r\n      function createClones() {\r\n        if (track.dataset.prontoCarouselCloned === \"1\") {\r\n          return;\r\n        }\r\n\r\n        var originalCards = getOriginalCards();\r\n\r\n        originalCards.forEach(function (card) {\r\n          var clone = card.cloneNode(true);\r\n          clone.setAttribute(\"aria-hidden\", \"true\");\r\n          clone.classList.add(\"pronto-review-card-clone\");\r\n          track.appendChild(clone);\r\n        });\r\n\r\n        track.dataset.prontoCarouselCloned = \"1\";\r\n      }\r\n\r\n      function getCardScrollPosition(card) {\r\n        return card.getBoundingClientRect().left - viewport.getBoundingClientRect().left + viewport.scrollLeft;\r\n      }\r\n\r\n      function measurePositions() {\r\n        var originalCards = getOriginalCards();\r\n        var firstClone = track.querySelector(\".pronto-review-card-clone\");\r\n\r\n        if (!originalCards.length || !firstClone) {\r\n          return false;\r\n        }\r\n\r\n        positions = originalCards.map(function (card) {\r\n          return getCardScrollPosition(card);\r\n        });\r\n\r\n        positions.push(getCardScrollPosition(firstClone));\r\n        originalCount = originalCards.length;\r\n\r\n        return positions.length > 1;\r\n      }\r\n\r\n      function clearSlideTimer() {\r\n        window.clearTimeout(slideTimer);\r\n      }\r\n\r\n      function isCarouselAllowed() {\r\n        return hasEntered && mediaQuery.matches && !reduceMotionQuery.matches;\r\n      }\r\n\r\n      function moveToIndex(index, smooth) {\r\n        if (!positions[index] && positions[index] !== 0) {\r\n          return;\r\n        }\r\n\r\n        if (smooth) {\r\n          section.classList.remove(\"pronto-carousel-reset\");\r\n          viewport.scrollTo({\r\n            left: positions[index],\r\n            behavior: \"smooth\"\r\n          });\r\n          return;\r\n        }\r\n\r\n        section.classList.add(\"pronto-carousel-reset\");\r\n        viewport.scrollLeft = positions[index];\r\n\r\n        window.requestAnimationFrame(function () {\r\n          section.classList.remove(\"pronto-carousel-reset\");\r\n        });\r\n      }\r\n\r\n      function scheduleNextSlide(delay) {\r\n        clearSlideTimer();\r\n\r\n        if (!isCarouselAllowed()) {\r\n          return;\r\n        }\r\n\r\n        slideTimer = window.setTimeout(function () {\r\n          slideToNextCard();\r\n        }, delay);\r\n      }\r\n\r\n      function slideToNextCard() {\r\n        if (!isCarouselAllowed()) {\r\n          return;\r\n        }\r\n\r\n        var nextIndex = currentIndex + 1;\r\n\r\n        moveToIndex(nextIndex, true);\r\n        currentIndex = nextIndex;\r\n\r\n        slideTimer = window.setTimeout(function () {\r\n          if (currentIndex >= originalCount) {\r\n            currentIndex = 0;\r\n            moveToIndex(0, false);\r\n          }\r\n\r\n          scheduleNextSlide(pauseDuration);\r\n        }, slideDuration);\r\n      }\r\n\r\n      function startCarousel() {\r\n        if (!isCarouselAllowed()) {\r\n          section.classList.remove(\"pronto-carousel-ready\", \"pronto-carousel-reset\");\r\n          return;\r\n        }\r\n\r\n        createClones();\r\n\r\n        window.requestAnimationFrame(function () {\r\n          if (!measurePositions()) {\r\n            return;\r\n          }\r\n\r\n          section.classList.add(\"pronto-carousel-ready\");\r\n\r\n          if (!hasStarted) {\r\n            hasStarted = true;\r\n            currentIndex = 0;\r\n            moveToIndex(0, false);\r\n          } else if (currentIndex >= originalCount) {\r\n            currentIndex = 0;\r\n            moveToIndex(0, false);\r\n          } else {\r\n            moveToIndex(currentIndex, false);\r\n          }\r\n\r\n          scheduleNextSlide(pauseDuration);\r\n        });\r\n      }\r\n\r\n      function refreshCarousel() {\r\n        if (!hasStarted) {\r\n          return;\r\n        }\r\n\r\n        window.clearTimeout(resizeTimer);\r\n\r\n        resizeTimer = window.setTimeout(function () {\r\n          if (!isCarouselAllowed()) {\r\n            return;\r\n          }\r\n\r\n          window.requestAnimationFrame(function () {\r\n            if (!measurePositions()) {\r\n              return;\r\n            }\r\n\r\n            if (currentIndex >= originalCount) {\r\n              currentIndex = 0;\r\n            }\r\n\r\n            moveToIndex(currentIndex, false);\r\n          });\r\n        }, 180);\r\n      }\r\n\r\n      function pauseAfterUserInteraction() {\r\n        if (!section.classList.contains(\"pronto-carousel-ready\")) {\r\n          return;\r\n        }\r\n\r\n        clearSlideTimer();\r\n        window.clearTimeout(resumeTimer);\r\n\r\n        resumeTimer = window.setTimeout(function () {\r\n          if (!isCarouselAllowed()) {\r\n            return;\r\n          }\r\n\r\n          scheduleNextSlide(1200);\r\n        }, userPauseDuration);\r\n      }\r\n\r\n      function observeSection() {\r\n        if (!(\"IntersectionObserver\" in window)) {\r\n          hasEntered = true;\r\n          startCarousel();\r\n          return;\r\n        }\r\n\r\n        var observer = new IntersectionObserver(function (entries) {\r\n          entries.forEach(function (entry) {\r\n            if (!entry.isIntersecting || hasEntered) {\r\n              return;\r\n            }\r\n\r\n            hasEntered = true;\r\n            startCarousel();\r\n            observer.disconnect();\r\n          });\r\n        }, {\r\n          threshold: 0.25\r\n        });\r\n\r\n        observer.observe(section);\r\n      }\r\n\r\n      viewport.addEventListener(\"touchstart\", pauseAfterUserInteraction, { passive: true });\r\n      viewport.addEventListener(\"pointerdown\", pauseAfterUserInteraction);\r\n      viewport.addEventListener(\"wheel\", pauseAfterUserInteraction, { passive: true });\r\n      window.addEventListener(\"resize\", refreshCarousel);\r\n\r\n      observeSection();\r\n    })();\r\n  <\/script>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-33ef435 e-con-full e-flex e-con e-parent\" data-id=\"33ef435\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-9c01422 elementor-widget elementor-widget-html\" data-id=\"9c01422\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<section\r\n    class=\"ps-trusted-work-section\"\r\n    aria-labelledby=\"ps-trusted-work-title\"\r\n    data-ps-trusted-work\r\n>\r\n    <div class=\"ps-trusted-work-inner\">\r\n        <div class=\"ps-trusted-work-visual\">\r\n            <h2\r\n                class=\"ps-trusted-work-title\"\r\n                id=\"ps-trusted-work-title\"\r\n            >\r\n                Trusted Local Experts in Electrical Repairs\r\n            <\/h2>\r\n\r\n            <div class=\"ps-trusted-work-media\">\r\n                <img\r\n                    src=\"https:\/\/prontosolucoes.pt\/wp-content\/uploads\/2026\/07\/electrician-in-porto.webp\"\r\n                    alt=\"Professional electrician carrying out electrical work in Porto\"\r\n                    loading=\"lazy\"\r\n                    decoding=\"async\"\r\n                >\r\n            <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"ps-trusted-work-content\">\r\n            <p class=\"ps-trusted-work-copy\">\r\n                <strong>Pronto Solu\u00e7\u00f5es<\/strong> connects you with certified\r\n                electricians and plumbers in Porto. From urgent repairs to\r\n                routine services, we deliver trusted home services backed by\r\n                our numbers.\r\n            <\/p>\r\n\r\n            <a\r\n                class=\"ps-trusted-work-link\"\r\n                href=\"https:\/\/prontosolucoes.pt\/about\/\"\r\n            >\r\n                <span data-ps-trusted-link-text>Learn more<\/span>\r\n                <span aria-hidden=\"true\">\u2192<\/span>\r\n            <\/a>\r\n\r\n            <div class=\"ps-trusted-counter-grid\">\r\n                <div class=\"ps-trusted-counter-box\">\r\n                    <strong class=\"ps-trusted-counter\">\r\n                        <span\r\n                            class=\"ps-trusted-counter-number\"\r\n                            data-target=\"970\"\r\n                        >\r\n                            970\r\n                        <\/span><span\r\n                            class=\"ps-trusted-counter-suffix\"\r\n                            data-ps-trusted-jobs-suffix\r\n                        >+<\/span>\r\n                    <\/strong>\r\n\r\n                    <p data-ps-trusted-jobs-label>\r\n                        Jobs Completed\r\n                    <\/p>\r\n                <\/div>\r\n\r\n                <div class=\"ps-trusted-counter-box\">\r\n                    <strong class=\"ps-trusted-counter\">\r\n                        <span\r\n                            class=\"ps-trusted-counter-number\"\r\n                            data-target=\"20\"\r\n                        >\r\n                            20\r\n                        <\/span><span\r\n                            class=\"ps-trusted-counter-suffix\"\r\n                            data-ps-trusted-response-suffix\r\n                        > min<\/span>\r\n                    <\/strong>\r\n\r\n                    <p data-ps-trusted-response-label>\r\n                        Quick Response\r\n                    <\/p>\r\n                <\/div>\r\n\r\n                <div class=\"ps-trusted-counter-box\">\r\n                    <strong class=\"ps-trusted-counter\">\r\n                        <span\r\n                            class=\"ps-trusted-counter-number\"\r\n                            data-target=\"98\"\r\n                        >\r\n                            98\r\n                        <\/span><span\r\n                            class=\"ps-trusted-counter-suffix\"\r\n                            data-ps-trusted-first-visit-suffix\r\n                        >%<\/span>\r\n                    <\/strong>\r\n\r\n                    <p data-ps-trusted-first-visit-label>\r\n                        Fixed on First Visit\r\n                    <\/p>\r\n                <\/div>\r\n\r\n                <div class=\"ps-trusted-counter-box\">\r\n                    <strong class=\"ps-trusted-counter\">\r\n                        <span\r\n                            class=\"ps-trusted-counter-number\"\r\n                            data-target=\"10\"\r\n                        >\r\n                            10\r\n                        <\/span><span\r\n                            class=\"ps-trusted-counter-suffix\"\r\n                            data-ps-trusted-experience-suffix\r\n                        >+ Years<\/span>\r\n                    <\/strong>\r\n\r\n                    <p data-ps-trusted-experience-label>\r\n                        Avg. Technician Experience\r\n                    <\/p>\r\n                <\/div>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n<\/section>\r\n\r\n<style>\r\n    body .elementor-widget-html:has(.ps-trusted-work-section),\r\n    body .elementor-widget-html:has(.ps-trusted-work-section)\r\n        > .elementor-widget-container {\r\n        margin: 0 !important;\r\n        padding: 0 !important;\r\n    }\r\n\r\n    body .e-con:has(\r\n        > .elementor-widget-html\r\n        .ps-trusted-work-section\r\n    ),\r\n    body .e-con:has(\r\n        > .e-con-inner\r\n        > .elementor-widget-html\r\n        .ps-trusted-work-section\r\n    ),\r\n    body .e-con > .e-con-inner:has(\r\n        > .elementor-widget-html\r\n        .ps-trusted-work-section\r\n    ) {\r\n        --padding-top: 0px !important;\r\n        --padding-right: 0px !important;\r\n        --padding-bottom: 0px !important;\r\n        --padding-left: 0px !important;\r\n        --gap: 0px !important;\r\n        width: 100% !important;\r\n        max-width: none !important;\r\n        margin: 0 !important;\r\n        padding: 0 !important;\r\n        gap: 0 !important;\r\n    }\r\n\r\n    .ps-trusted-work-section {\r\n        width: 100%;\r\n        margin: 0;\r\n        padding: 88px 24px;\r\n        background: #FAFBFC;\r\n        font-family: \"Montserrat\", sans-serif;\r\n    }\r\n\r\n    .ps-trusted-work-inner {\r\n        display: grid;\r\n        grid-template-columns:\r\n            minmax(0, 1fr)\r\n            minmax(0, 1fr);\r\n        align-items: stretch;\r\n        gap: clamp(48px, 6vw, 76px);\r\n        width: 100%;\r\n        max-width: 1180px;\r\n        margin: 0 auto;\r\n    }\r\n\r\n    .ps-trusted-work-title {\r\n        max-width: 520px;\r\n        margin: 0;\r\n        color: #0F2B49;\r\n        font-family: \"Montserrat\", sans-serif;\r\n        font-size: 36px;\r\n        font-weight: 700;\r\n        letter-spacing: -0.03em;\r\n        line-height: 1.08;\r\n    }\r\n\r\n    .ps-trusted-work-media {\r\n        width: 100%;\r\n        margin-top: 32px;\r\n        overflow: hidden;\r\n        aspect-ratio: 3 \/ 2;\r\n        border-radius: 18px;\r\n        background: #e7eaed;\r\n    }\r\n\r\n    .ps-trusted-work-media img {\r\n        display: block;\r\n        width: 100%;\r\n        height: 100%;\r\n        object-fit: cover;\r\n        object-position: center center;\r\n    }\r\n\r\n    .ps-trusted-work-content {\r\n        display: flex;\r\n        flex-direction: column;\r\n        justify-content: center;\r\n        padding-top: 0;\r\n    }\r\n\r\n    .ps-trusted-work-copy {\r\n        max-width: 580px;\r\n        margin: 0;\r\n        color: #0F2B49;\r\n        font-family: \"Montserrat\", sans-serif;\r\n        font-size: 17px;\r\n        font-weight: 500;\r\n        line-height: 1.7;\r\n    }\r\n\r\n    .ps-trusted-work-copy strong {\r\n        font-weight: 700;\r\n    }\r\n\r\n    .ps-trusted-work-link {\r\n        display: inline-flex;\r\n        width: fit-content;\r\n        max-width: max-content;\r\n        align-items: center;\r\n        gap: 8px;\r\n        margin-top: 16px;\r\n        padding-bottom: 4px;\r\n        border-bottom: 2px solid #E1A134;\r\n        color: #0F2B49;\r\n        font-family: \"Montserrat\", sans-serif;\r\n        font-size: 15px;\r\n        font-weight: 700;\r\n        line-height: 1.2;\r\n        text-decoration: none;\r\n        transition:\r\n            color 0.2s ease,\r\n            gap 0.2s ease;\r\n    }\r\n\r\n    .ps-trusted-work-link:hover,\r\n    .ps-trusted-work-link:focus-visible {\r\n        gap: 12px;\r\n        color: #d97706;\r\n    }\r\n\r\n    .ps-trusted-work-link:focus-visible {\r\n        outline: 3px solid rgba(225, 161, 52, 0.24);\r\n        outline-offset: 4px;\r\n    }\r\n\r\n    .ps-trusted-counter-grid {\r\n        display: grid;\r\n        grid-template-columns:\r\n            repeat(2, minmax(0, 1fr));\r\n        gap: 16px;\r\n        width: 100%;\r\n        margin-top: 28px;\r\n    }\r\n\r\n    .ps-trusted-counter-box {\r\n        display: flex;\r\n        min-width: 0;\r\n        min-height: 122px;\r\n        flex-direction: column;\r\n        align-items: center;\r\n        justify-content: center;\r\n        padding: 22px 14px;\r\n        border: 1px solid rgba(15, 43, 73, 0.12);\r\n        border-radius: 12px;\r\n        background: #ffffff;\r\n        box-shadow:\r\n            0 8px 14px -7px rgba(15, 43, 73, 0.28),\r\n            0 3px 6px -3px rgba(15, 43, 73, 0.16);\r\n        text-align: center;\r\n        transition:\r\n            box-shadow 0.25s ease,\r\n            transform 0.25s ease;\r\n    }\r\n\r\n    .ps-trusted-counter-box:hover {\r\n        box-shadow:\r\n            0 11px 18px -8px rgba(15, 43, 73, 0.32),\r\n            0 4px 8px -3px rgba(15, 43, 73, 0.18);\r\n        transform: translateY(-3px);\r\n    }\r\n\r\n    .ps-trusted-counter {\r\n        display: block;\r\n        margin: 0;\r\n        color: #E1A134;\r\n        font-family: \"Montserrat\", sans-serif;\r\n        font-size: 36px;\r\n        font-weight: 700;\r\n        letter-spacing: -0.03em;\r\n        line-height: 1;\r\n        white-space: nowrap;\r\n    }\r\n\r\n    .ps-trusted-counter-box p {\r\n        margin: 10px 0 0;\r\n        color: #0F2B46;\r\n        font-family: \"Montserrat\", sans-serif;\r\n        font-size: 14px;\r\n        font-weight: 500;\r\n        line-height: 1.3;\r\n    }\r\n\r\n    @media (min-width: 901px) {\r\n        .ps-trusted-work-content {\r\n            align-self: center;\r\n        }\r\n    }\r\n\r\n    @media (max-width: 900px) {\r\n        .ps-trusted-work-section {\r\n            padding: 72px 20px;\r\n        }\r\n\r\n        .ps-trusted-work-inner {\r\n            grid-template-columns: 1fr;\r\n            gap: 38px;\r\n        }\r\n\r\n        .ps-trusted-work-visual,\r\n        .ps-trusted-work-content {\r\n            width: 100%;\r\n            max-width: 720px;\r\n            margin: 0 auto;\r\n        }\r\n\r\n        .ps-trusted-work-content {\r\n            padding-top: 0;\r\n        }\r\n    }\r\n\r\n    @media (max-width: 767px) {\r\n        .ps-trusted-work-section {\r\n            padding: 56px 16px;\r\n        }\r\n\r\n        .ps-trusted-work-inner {\r\n            gap: 30px;\r\n        }\r\n\r\n        .ps-trusted-work-title {\r\n            max-width: 420px;\r\n            margin: 0 auto;\r\n            font-size: clamp(2rem, 8vw, 2.6rem);\r\n            line-height: 1.1;\r\n            text-align: center;\r\n        }\r\n\r\n        .ps-trusted-work-media {\r\n            margin-top: 26px;\r\n            border-radius: 16px;\r\n        }\r\n\r\n        .ps-trusted-work-copy {\r\n            font-size: 16px;\r\n            line-height: 1.65;\r\n        }\r\n\r\n        .ps-trusted-counter-grid {\r\n            gap: 12px;\r\n            margin-top: 24px;\r\n        }\r\n\r\n        .ps-trusted-counter-box {\r\n            min-height: 116px;\r\n            padding: 18px 10px;\r\n            border-radius: 9px;\r\n        }\r\n\r\n        .ps-trusted-counter {\r\n            font-size: 30px;\r\n        }\r\n\r\n        .ps-trusted-counter-box p {\r\n            max-width: 130px;\r\n            margin-top: 9px;\r\n            font-size: 12px;\r\n            line-height: 1.3;\r\n        }\r\n    }\r\n\r\n    @media (max-width: 380px) {\r\n        .ps-trusted-counter-grid {\r\n            gap: 10px;\r\n        }\r\n\r\n        .ps-trusted-counter-box {\r\n            padding-right: 8px;\r\n            padding-left: 8px;\r\n        }\r\n\r\n        .ps-trusted-counter {\r\n            font-size: 27px;\r\n        }\r\n    }\r\n<\/style>\r\n\r\n<script>\r\n    (function () {\r\n        const sections = document.querySelectorAll(\r\n            \"[data-ps-trusted-work]\"\r\n        );\r\n\r\n        if (!sections.length) {\r\n            return;\r\n        }\r\n\r\n        const canonicalLink = document.querySelector(\r\n            'link[rel=\"canonical\"]'\r\n        );\r\n\r\n        let canonicalPath = \"\";\r\n\r\n        if (canonicalLink && canonicalLink.href) {\r\n            canonicalPath = new URL(\r\n                canonicalLink.href,\r\n                window.location.origin\r\n            ).pathname;\r\n        }\r\n\r\n        const isPortuguese =\r\n            \/^\\\/pt(?:\\\/|$)\/.test(window.location.pathname) ||\r\n            \/^\\\/pt(?:\\\/|$)\/.test(canonicalPath);\r\n\r\n        const COPY = {\r\n            en: {\r\n                title:\r\n                    \"Trusted Local Experts in Electrical Repairs\",\r\n                description:\r\n                    \"connects you with certified electricians and plumbers in Porto. From urgent repairs to routine services, we deliver trusted home services backed by our numbers.\",\r\n                learnMore: \"Learn more\",\r\n                jobs: \"Jobs Completed\",\r\n                response: \"Quick Response\",\r\n                firstVisit: \"Fixed on First Visit\",\r\n                jobsSuffix: \"+\",\r\n                responseSuffix: \" min\",\r\n                firstVisitSuffix: \"%\",\r\n                experienceSuffix: \"+ Years\",\r\n                experience: \"Avg. Technician Experience\"\r\n            },\r\n            pt: {\r\n                title:\r\n                    \"Profissionais locais de confian\u00e7a para repara\u00e7\u00f5es el\u00e9tricas\",\r\n                description:\r\n                    \"liga-o a eletricistas e canalizadores certificados no Porto. Desde repara\u00e7\u00f5es urgentes a servi\u00e7os de manuten\u00e7\u00e3o, disponibilizamos servi\u00e7os de confian\u00e7a para a sua casa, comprovados pelos nossos resultados.\",\r\n                learnMore: \"Saiba mais\",\r\n                jobs: \"Trabalhos Conclu\u00eddos\",\r\n                response: \"Resposta r\u00e1pida\",\r\n                firstVisit: \"Resolvido \u00e0 primeira visita\",\r\n                jobsSuffix: \"+\",\r\n                responseSuffix: \" min\",\r\n                firstVisitSuffix: \"%\",\r\n                experienceSuffix: \"+ Anos\",\r\n                experience: \"Experi\u00eancia m\u00e9dia dos t\u00e9cnicos\"\r\n            }\r\n        };\r\n\r\n        const copy = isPortuguese\r\n            ? COPY.pt\r\n            : COPY.en;\r\n\r\n        sections.forEach((section) => {\r\n            const titleEl = section.querySelector(\r\n                \".ps-trusted-work-title\"\r\n            );\r\n\r\n            const copyEl = section.querySelector(\r\n                \".ps-trusted-work-copy\"\r\n            );\r\n\r\n            const linkTextEl = section.querySelector(\r\n                \"[data-ps-trusted-link-text]\"\r\n            );\r\n\r\n            const jobsLabelEl = section.querySelector(\r\n                \"[data-ps-trusted-jobs-label]\"\r\n            );\r\n\r\n            const responseLabelEl = section.querySelector(\r\n                \"[data-ps-trusted-response-label]\"\r\n            );\r\n\r\n            const firstVisitLabelEl = section.querySelector(\r\n                \"[data-ps-trusted-first-visit-label]\"\r\n            );\r\n\r\n            const jobsSuffixEl = section.querySelector(\r\n                \"[data-ps-trusted-jobs-suffix]\"\r\n            );\r\n\r\n            const responseSuffixEl = section.querySelector(\r\n                \"[data-ps-trusted-response-suffix]\"\r\n            );\r\n\r\n            const firstVisitSuffixEl = section.querySelector(\r\n                \"[data-ps-trusted-first-visit-suffix]\"\r\n            );\r\n\r\n            const experienceSuffixEl = section.querySelector(\r\n                \"[data-ps-trusted-experience-suffix]\"\r\n            );\r\n\r\n            const experienceLabelEl = section.querySelector(\r\n                \"[data-ps-trusted-experience-label]\"\r\n            );\r\n\r\n            if (titleEl) {\r\n                titleEl.textContent = copy.title;\r\n            }\r\n\r\n            if (copyEl) {\r\n                copyEl.innerHTML =\r\n                    \"<strong>Pronto Solu\u00e7\u00f5es<\/strong> \" +\r\n                    copy.description;\r\n            }\r\n\r\n            if (linkTextEl) {\r\n                linkTextEl.textContent = copy.learnMore;\r\n            }\r\n\r\n            if (jobsLabelEl) {\r\n                jobsLabelEl.textContent = copy.jobs;\r\n            }\r\n\r\n            if (responseLabelEl) {\r\n                responseLabelEl.textContent = copy.response;\r\n            }\r\n\r\n            if (firstVisitLabelEl) {\r\n                firstVisitLabelEl.textContent =\r\n                    copy.firstVisit;\r\n            }\r\n\r\n            if (jobsSuffixEl) {\r\n                jobsSuffixEl.textContent =\r\n                    copy.jobsSuffix;\r\n            }\r\n\r\n            if (responseSuffixEl) {\r\n                responseSuffixEl.textContent =\r\n                    copy.responseSuffix;\r\n            }\r\n\r\n            if (firstVisitSuffixEl) {\r\n                firstVisitSuffixEl.textContent =\r\n                    copy.firstVisitSuffix;\r\n            }\r\n\r\n            if (experienceSuffixEl) {\r\n                experienceSuffixEl.textContent =\r\n                    copy.experienceSuffix;\r\n            }\r\n\r\n            if (experienceLabelEl) {\r\n                experienceLabelEl.textContent =\r\n                    copy.experience;\r\n            }\r\n        });\r\n\r\n        const reducedMotion =\r\n            window.matchMedia &&\r\n            window.matchMedia(\r\n                \"(prefers-reduced-motion: reduce)\"\r\n            ).matches;\r\n\r\n        if (\r\n            reducedMotion ||\r\n            !(\"IntersectionObserver\" in window)\r\n        ) {\r\n            return;\r\n        }\r\n\r\n        const duration = 1400;\r\n\r\n        const animateCounter = (counter) => {\r\n            const target = Number(\r\n                counter.getAttribute(\"data-target\")\r\n            );\r\n\r\n            if (!Number.isFinite(target)) {\r\n                return;\r\n            }\r\n\r\n            const startTime = performance.now();\r\n            let previousValue = -1;\r\n\r\n            counter.textContent = \"0\";\r\n\r\n            const update = (currentTime) => {\r\n                const progress = Math.min(\r\n                    (currentTime - startTime) \/ duration,\r\n                    1\r\n                );\r\n\r\n                const currentValue = Math.round(\r\n                    target * progress\r\n                );\r\n\r\n                if (currentValue !== previousValue) {\r\n                    counter.textContent =\r\n                        `${currentValue}`;\r\n\r\n                    previousValue = currentValue;\r\n                }\r\n\r\n                if (progress < 1) {\r\n                    requestAnimationFrame(update);\r\n                } else {\r\n                    counter.textContent =\r\n                        `${target}`;\r\n                }\r\n            };\r\n\r\n            requestAnimationFrame(update);\r\n        };\r\n\r\n        const observer = new IntersectionObserver(\r\n            (entries) => {\r\n                entries.forEach((entry) => {\r\n                    if (\r\n                        entry.isIntersecting &&\r\n                        entry.target.dataset.animated !== \"true\"\r\n                    ) {\r\n                        entry.target.dataset.animated = \"true\";\r\n\r\n                        const counters =\r\n                            entry.target.querySelectorAll(\r\n                                \".ps-trusted-counter-number\"\r\n                            );\r\n\r\n                        counters.forEach((counter) => {\r\n                            animateCounter(counter);\r\n                        });\r\n\r\n                        observer.unobserve(entry.target);\r\n                    }\r\n                });\r\n            },\r\n            {\r\n                threshold: 0.35\r\n            }\r\n        );\r\n\r\n        sections.forEach((section) => {\r\n            const grid = section.querySelector(\r\n                \".ps-trusted-counter-grid\"\r\n            );\r\n\r\n            if (!grid) {\r\n                return;\r\n            }\r\n\r\n            const counters = grid.querySelectorAll(\r\n                \".ps-trusted-counter-number\"\r\n            );\r\n\r\n            counters.forEach((counter) => {\r\n                counter.textContent = \"0\";\r\n            });\r\n\r\n            observer.observe(grid);\r\n        });\r\n    })();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4c8d920a e-con-full e-flex e-con e-parent\" data-id=\"4c8d920a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d998576 elementor-widget__width-inherit elementor-widget elementor-widget-html\" data-id=\"d998576\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!--\r\n  PRONTO SOLU\u00c7\u00d5ES | Option B Coverage Map \u2022 Electrical \u2022 EN\r\n  1 Elementor HTML widget. CAOP 2025 geometry retained for the active service areas,\r\n  loaded from \/wp-content\/uploads\/pronto-coverage\/coverage-municipalities-caop2025-v1.json.\r\n  Leaflet 1.9.4 is self-hosted in \/wp-content\/uploads\/pronto-coverage\/leaflet-1.9.4\/.\r\n  City buttons select\/highlight. The permanent links below are ordinary crawlable HTML anchors.\r\n  Publish the same widget on the EN source hub; TranslatePress serves the \/pt\/ version.\r\n  Both locale link lists exist in initial HTML; the appropriate list is shown by page language.\r\n  Active areas follow Pronto's preferred commercial order.\r\n-->\r\n<section class=\"ps-coverage\" id=\"psCoverageSection\" data-ps-lang=\"auto\" data-carto-basemap-key=\"cb1_2dmm_2_865a8aa2b1f7ba1f9601899a\" aria-labelledby=\"psCoverageTitle\">\r\n  <div class=\"ps-coverage__inner\">\r\n    <div class=\"ps-coverage__heading\">\r\n      <h2 class=\"ps-coverage__title\" id=\"psCoverageTitle\" data-ps-copy=\"title\">Electricians across Greater Porto<\/h2>\r\n      <p class=\"ps-coverage__intro\" data-ps-copy=\"intro\">Select a municipality on the map to see its local electrical service page.<\/p>\r\n    <\/div>\r\n    <div class=\"ps-coverage__areas\" aria-label=\"Select municipality\" data-ps-aria-copy=\"areasLabel\">\r\n      <button class=\"ps-coverage__area\" type=\"button\" data-ps-area=\"Porto\" aria-pressed=\"false\">Porto<\/button>\r\n      <button class=\"ps-coverage__area\" type=\"button\" data-ps-area=\"Matosinhos\" aria-pressed=\"false\">Matosinhos<\/button>\r\n      <button class=\"ps-coverage__area\" type=\"button\" data-ps-area=\"Vila Nova de Gaia\" aria-pressed=\"false\">Vila Nova de Gaia<\/button>\r\n      <button class=\"ps-coverage__area\" type=\"button\" data-ps-area=\"Gondomar\" aria-pressed=\"false\">Gondomar<\/button>\r\n      <button class=\"ps-coverage__area\" type=\"button\" data-ps-area=\"Maia\" aria-pressed=\"false\">Maia<\/button>\r\n      <button class=\"ps-coverage__area\" type=\"button\" data-ps-area=\"Valongo\" aria-pressed=\"false\">Valongo<\/button>\r\n    <\/div>\r\n    <div class=\"ps-coverage__map-shell\">\r\n      <div class=\"ps-coverage__map\" id=\"psCoverageMap\" role=\"region\" aria-label=\"Interactive map of Pronto Solu\u00e7\u00f5es service areas\"><\/div>\r\n      <div class=\"ps-coverage__loading\" id=\"psCoverageLoading\" aria-live=\"polite\">\r\n        <span class=\"ps-coverage__spinner\" aria-hidden=\"true\"><\/span>\r\n        <span data-ps-copy=\"loading\">Loading map\u2026<\/span>\r\n      <\/div>\r\n    <\/div>\r\n    <p class=\"ps-coverage__error\" id=\"psCoverageError\" role=\"status\" hidden>The map could not be loaded. You can still use the municipality links below.<\/p>\r\n    <div class=\"ps-coverage__selection\" id=\"psCoverageSelection\" role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\r\n      <div class=\"ps-coverage__selection-copy\">\r\n        <h3 class=\"ps-coverage__selection-title\" id=\"psCoverageSelectionTitle\">Select a municipality<\/h3>\r\n        <p class=\"ps-coverage__selection-text\" id=\"psCoverageSelectionText\">Choose an area above or on the map to see the corresponding service.<\/p>\r\n      <\/div>\r\n      <a class=\"ps-coverage__selection-action\" id=\"psCoverageSelectionLink\" hidden>\r\n        View electrical service &rarr;\r\n      <\/a>\r\n    <\/div>\r\n    <nav class=\"ps-coverage__destinations\" data-ps-links-lang=\"en\" translate=\"no\" aria-label=\"Direct links to electrical services by municipality\">\r\n      <div class=\"ps-coverage__destination-list\">\r\n        <a class=\"ps-coverage__direct-link\" data-ps-destination=\"Porto\" href=\"https:\/\/prontosolucoes.pt\/electrician-in-porto\/\">Electrician in Porto<\/a>\r\n        <a class=\"ps-coverage__direct-link\" data-ps-destination=\"Matosinhos\" href=\"https:\/\/prontosolucoes.pt\/en\/matosinhos\/electrician\/\">Electrician in Matosinhos<\/a>\r\n        <a class=\"ps-coverage__direct-link\" data-ps-destination=\"Vila Nova de Gaia\" href=\"https:\/\/prontosolucoes.pt\/en\/vila-nova-de-gaia\/electrician\/\">Electrician in Vila Nova de Gaia<\/a>\r\n        <a class=\"ps-coverage__direct-link\" data-ps-destination=\"Gondomar\" href=\"https:\/\/prontosolucoes.pt\/en\/gondomar\/electrician\/\">Electrician in Gondomar<\/a>\r\n        <a class=\"ps-coverage__direct-link\" data-ps-destination=\"Maia\" href=\"https:\/\/prontosolucoes.pt\/en\/maia\/electrician\/\">Electrician in Maia<\/a>\r\n        <a class=\"ps-coverage__direct-link\" data-ps-destination=\"Valongo\" href=\"https:\/\/prontosolucoes.pt\/en\/valongo\/electrician\/\">Electrician in Valongo<\/a>\r\n      <\/div>\r\n    <\/nav>\r\n    <nav class=\"ps-coverage__destinations\" data-ps-links-lang=\"pt\" translate=\"no\" aria-label=\"Ver todos os servi\u00e7os por concelho\">\r\n      <p class=\"ps-coverage__destinations-heading\">Ver todos os servi\u00e7os por concelho<\/p>\r\n      <div class=\"ps-coverage__destination-list\">\r\n        <a class=\"ps-coverage__direct-link\" data-ps-destination=\"Porto\" href=\"https:\/\/prontosolucoes.pt\/pt\/electrician-in-porto\/\">Eletricista no Porto<\/a>\r\n        <a class=\"ps-coverage__direct-link\" data-ps-destination=\"Matosinhos\" href=\"https:\/\/prontosolucoes.pt\/matosinhos\/eletricista\/\">Eletricista em Matosinhos<\/a>\r\n        <a class=\"ps-coverage__direct-link\" data-ps-destination=\"Vila Nova de Gaia\" href=\"https:\/\/prontosolucoes.pt\/vila-nova-de-gaia\/eletricista\/\">Eletricista em Vila Nova de Gaia<\/a>\r\n        <a class=\"ps-coverage__direct-link\" data-ps-destination=\"Gondomar\" href=\"https:\/\/prontosolucoes.pt\/gondomar\/eletricista\/\">Eletricista em Gondomar<\/a>\r\n        <a class=\"ps-coverage__direct-link\" data-ps-destination=\"Maia\" href=\"https:\/\/prontosolucoes.pt\/maia\/eletricista\/\">Eletricista na Maia<\/a>\r\n        <a class=\"ps-coverage__direct-link\" data-ps-destination=\"Valongo\" href=\"https:\/\/prontosolucoes.pt\/valongo\/eletricista\/\">Eletricista em Valongo<\/a>\r\n      <\/div>\r\n    <\/nav>\r\n  <\/div>\r\n<\/section>\r\n\r\n<style>\r\n  #psCoverageSection,\r\n  #psCoverageSection *{\r\n    box-sizing:border-box;\r\n  }\r\n\r\n  #psCoverageSection{\r\n    width:100%;\r\n    padding:clamp(28px, 5vw, 58px) clamp(16px, 3vw, 30px);\r\n    background:transparent;\r\n    color:#0F2B46;\r\n    font-family:\"Montserrat\", sans-serif;\r\n  }\r\n\r\n  #psCoverageSection .ps-coverage__inner{\r\n    width:100%;\r\n    max-width:1180px;\r\n    margin:0 auto;\r\n  }\r\n\r\n  #psCoverageSection .ps-coverage__heading{\r\n    max-width:720px;\r\n    margin:0 auto 20px;\r\n    text-align:center;\r\n  }\r\n\r\n  #psCoverageSection .ps-coverage__eyebrow{\r\n    margin:0 0 8px;\r\n    color:#2563EB;\r\n    font-size:12px;\r\n    line-height:1.25;\r\n    font-weight:800;\r\n    letter-spacing:.11em;\r\n    text-transform:uppercase;\r\n  }\r\n\r\n  #psCoverageSection .ps-coverage__title{\r\n    margin:0;\r\n    color:#0F2B49;\r\n    font-size:36px;\r\n    line-height:1.08;\r\n    font-weight:700;\r\n    letter-spacing:-.03em;\r\n  }\r\n\r\n  #psCoverageSection .ps-coverage__intro{\r\n    margin:12px auto 0;\r\n    max-width:620px;\r\n    color:#0F2B49;\r\n    font-size:1.02rem;\r\n    line-height:1.72;\r\n    font-weight:500;\r\n  }\r\n\r\n  #psCoverageSection .ps-coverage__areas{\r\n    display:flex;\r\n    flex-wrap:wrap;\r\n    gap:8px;\r\n    margin:0 0 14px;\r\n  }\r\n\r\n  #psCoverageSection .ps-coverage__area{\r\n    min-height:36px;\r\n    margin:0;\r\n    padding:8px 13px;\r\n    border:1px solid rgba(15,43,73,.24);\r\n    border-radius:11px;\r\n    background:#F8FAFF;\r\n    color:#0F2B49;\r\n    font:inherit;\r\n    font-size:13px;\r\n    line-height:1;\r\n    font-weight:750;\r\n    cursor:pointer;\r\n    box-shadow:none;\r\n    transition:\r\n      background-color .16s ease,\r\n      border-color .16s ease,\r\n      color .16s ease,\r\n      transform .16s ease;\r\n  }\r\n\r\n  #psCoverageSection .ps-coverage__area:hover,\r\n  #psCoverageSection .ps-coverage__area:focus-visible{\r\n    border-color:#0F2B49;\r\n    background:rgba(15,43,73,.06);\r\n    color:#0F2B49;\r\n    outline:none;\r\n    transform:translateY(-1px);\r\n  }\r\n\r\n  #psCoverageSection .ps-coverage__area[aria-pressed=\"true\"]{\r\n    border-color:#0F2B49;\r\n    background:#0F2B49;\r\n    color:#FFFFFF;\r\n  }\r\n  #psCoverageSection .ps-coverage__map-shell{\r\n    position:relative;\r\n    width:100%;\r\n    height:clamp(320px, 43vw, 440px);\r\n    overflow:hidden;\r\n    border:1px solid rgba(15,43,70,.12);\r\n    border-radius:20px;\r\n    background:#F4F7F5;\r\n    box-shadow:0 14px 36px rgba(15,43,70,.08);\r\n    isolation:isolate;\r\n    contain:layout paint;\r\n  }\r\n\r\n  #psCoverageSection .ps-coverage__map{\r\n    position:relative;\r\n    z-index:1;\r\n    width:100%;\r\n    height:100%;\r\n    background:#F4F7F5;\r\n    font-family:inherit;\r\n  }\r\n\r\n  #psCoverageSection .ps-coverage__loading{\r\n    position:absolute;\r\n    z-index:2;\r\n    inset:0;\r\n    display:flex;\r\n    align-items:center;\r\n    justify-content:center;\r\n    gap:10px;\r\n    padding:20px;\r\n    background:#F4F7F5;\r\n    color:#536579;\r\n    font-size:13px;\r\n    font-weight:700;\r\n    transition:opacity .2s ease, visibility .2s ease;\r\n  }\r\n\r\n  #psCoverageSection .ps-coverage__loading.is-hidden{\r\n    opacity:0;\r\n    visibility:hidden;\r\n    pointer-events:none;\r\n  }\r\n\r\n  #psCoverageSection .ps-coverage__spinner{\r\n    width:18px;\r\n    height:18px;\r\n    border:2px solid rgba(37,99,235,.18);\r\n    border-top-color:#2563EB;\r\n    border-radius:999px;\r\n    animation:psCoverageSpin .75s linear infinite;\r\n  }\r\n\r\n  #psCoverageSection .ps-coverage__error{\r\n    margin:12px 0 0;\r\n    padding:12px 14px;\r\n    border:1px solid rgba(185,28,28,.18);\r\n    border-radius:12px;\r\n    background:#FEF2F2;\r\n    color:#7F1D1D;\r\n    font-size:13px;\r\n    line-height:1.45;\r\n    font-weight:700;\r\n  }\r\n\r\n  #psCoverageSection .leaflet-container{\r\n    width:100%;\r\n    height:100%;\r\n    background:#F4F7F5;\r\n    font-family:inherit;\r\n  }\r\n\r\n  #psCoverageSection .leaflet-tile-pane{\r\n    opacity:.93;\r\n  }\r\n\r\n  \/* Tiles overlap by 1px (see initialiseMap). Leaflet's default plus-lighter blending would add the\r\n     overlapping pixel twice and draw a bright line on every tile edge, so these tiles blend normally. *\/\r\n  #psCoverageSection .leaflet-container img.leaflet-tile{\r\n    mix-blend-mode:normal;\r\n  }\r\n\r\n  #psCoverageSection .leaflet-interactive{\r\n    outline:none;\r\n  }\r\n\r\n  #psCoverageSection .ps-coverage__map-label{\r\n    margin:0;\r\n    padding:0;\r\n    border:0;\r\n    background:transparent;\r\n    box-shadow:none;\r\n    color:#0F2B46;\r\n    font-size:12px;\r\n    line-height:1.1;\r\n    font-weight:850;\r\n    text-align:center;\r\n    text-shadow:\r\n      0 1px 0 rgba(255,255,255,.95),\r\n      0 0 4px rgba(255,255,255,.82);\r\n    pointer-events:none;\r\n  }\r\n\r\n  #psCoverageSection .ps-coverage__map-label::before{\r\n    display:none;\r\n  }\r\n\r\n  #psCoverageSection .leaflet-control-attribution{\r\n    margin:0;\r\n    padding:2px 5px;\r\n    border-radius:7px 0 0 0;\r\n    background:rgba(255,255,255,.78);\r\n    color:rgba(15,43,70,.62);\r\n    font-size:8px;\r\n    line-height:1.2;\r\n    white-space:nowrap;\r\n  }\r\n\r\n  #psCoverageSection .leaflet-control-attribution a{\r\n    color:rgba(15,43,70,.72);\r\n    text-decoration:none;\r\n  }\r\n\r\n  #psCoverageSection .leaflet-popup-content-wrapper{\r\n    padding:0;\r\n    overflow:hidden;\r\n    border-radius:14px;\r\n    box-shadow:0 14px 34px rgba(15,43,70,.16);\r\n    transition:transform .16s ease, box-shadow .16s ease;\r\n  }\r\n\r\n  #psCoverageSection .leaflet-popup-tip-container{\r\n    transition:transform .16s ease;\r\n  }\r\n\r\n  #psCoverageSection .leaflet-popup:hover .leaflet-popup-content-wrapper,\r\n  #psCoverageSection .leaflet-popup:focus-within .leaflet-popup-content-wrapper{\r\n    transform:translateY(-2px);\r\n    box-shadow:0 18px 38px rgba(15,43,70,.22);\r\n  }\r\n\r\n  #psCoverageSection .leaflet-popup:hover .leaflet-popup-tip-container,\r\n  #psCoverageSection .leaflet-popup:focus-within .leaflet-popup-tip-container{\r\n    transform:translateY(-2px);\r\n  }\r\n\r\n  #psCoverageSection .leaflet-popup-content{\r\n    min-width:170px;\r\n    margin:0;\r\n    color:#0F2B46;\r\n    font-family:inherit;\r\n    line-height:1.4;\r\n  }\r\n\r\n  #psCoverageSection .ps-coverage__popup-link{\r\n    display:block;\r\n    padding:14px 16px;\r\n    color:#0F2B46;\r\n    text-decoration:none;\r\n    cursor:pointer;\r\n    transition:background-color .16s ease, transform .1s ease;\r\n  }\r\n\r\n  #psCoverageSection .ps-coverage__popup-link:hover,\r\n  #psCoverageSection .ps-coverage__popup-link:focus-visible{\r\n    background:rgba(37,99,235,.06);\r\n    color:#0F2B46;\r\n    text-decoration:none;\r\n  }\r\n\r\n  #psCoverageSection .ps-coverage__popup-link:focus-visible{\r\n    outline:2px solid #2563EB;\r\n    outline-offset:-2px;\r\n  }\r\n\r\n  #psCoverageSection .ps-coverage__popup-link:active{\r\n    background:rgba(37,99,235,.10);\r\n    transform:scale(.985);\r\n  }\r\n\r\n  #psCoverageSection .ps-coverage__popup-arrow{\r\n    display:inline-block;\r\n    margin-left:5px;\r\n    transition:transform .16s ease;\r\n  }\r\n\r\n  #psCoverageSection .ps-coverage__popup-link:hover .ps-coverage__popup-arrow,\r\n  #psCoverageSection .ps-coverage__popup-link:focus-visible .ps-coverage__popup-arrow{\r\n    transform:translateX(4px);\r\n  }\r\n\r\n  #psCoverageSection .ps-coverage__popup-link:active .ps-coverage__popup-arrow{\r\n    transform:translateX(6px);\r\n  }\r\n\r\n  #psCoverageSection .ps-coverage__popup-kicker{\r\n    display:block;\r\n    margin-bottom:3px;\r\n    color:#2563EB;\r\n    font-size:10px;\r\n    line-height:1.2;\r\n    font-weight:850;\r\n    letter-spacing:.08em;\r\n    text-transform:uppercase;\r\n  }\r\n\r\n  #psCoverageSection .ps-coverage__popup-name{\r\n    display:block;\r\n    color:#0F2B46;\r\n    font-size:14px;\r\n    line-height:1.25;\r\n    font-weight:850;\r\n  }\r\n\r\n  @keyframes psCoverageSpin{\r\n    to{\r\n      transform:rotate(360deg);\r\n    }\r\n  }\r\n\r\n  @media (max-width: 767px){\r\n    #psCoverageSection{\r\n      padding:30px 14px;\r\n    }\r\n\r\n    #psCoverageSection .ps-coverage__heading{\r\n      margin-bottom:16px;\r\n    }\r\n\r\n    #psCoverageSection .ps-coverage__title{\r\n      font-size:clamp(2rem, 8vw, 2.6rem);\r\n      line-height:1.1;\r\n    }\r\n\r\n    #psCoverageSection .ps-coverage__areas{\r\n      gap:7px;\r\n    }\r\n\r\n    #psCoverageSection .ps-coverage__area{\r\n      min-height:34px;\r\n      padding:8px 11px;\r\n      font-size:12px;\r\n    }\r\n\r\n    #psCoverageSection .ps-coverage__map-shell{\r\n      height:300px;\r\n      border-radius:16px;\r\n    }\r\n\r\n    #psCoverageSection .ps-coverage__map-label{\r\n      font-size:10px;\r\n    }\r\n\r\n    #psCoverageSection .leaflet-control-attribution{\r\n      max-width:100%;\r\n      overflow:hidden;\r\n      font-size:8px;\r\n      text-overflow:ellipsis;\r\n    }\r\n  }\r\n\r\n  @media (prefers-reduced-motion: reduce){\r\n    #psCoverageSection .ps-coverage__area,\r\n    #psCoverageSection .ps-coverage__loading{\r\n      transition:none;\r\n    }\r\n\r\n    #psCoverageSection .ps-coverage__spinner{\r\n      animation:none;\r\n    }\r\n  }\r\n\r\n  \/* OPTION B: selected municipality and permanent crawlable links *\/\r\n  #psCoverageSection .ps-coverage__selection {\r\n    display:flex;\r\n    align-items:center;\r\n    justify-content:space-between;\r\n    flex-wrap:wrap;\r\n    gap:14px;\r\n    margin-top:15px;\r\n    padding:18px 20px;\r\n    border:1px solid rgba(37,99,235,.16);\r\n    border-radius:16px;\r\n    background:#F8FAFF;\r\n  }\r\n  #psCoverageSection .ps-coverage__selection-copy { flex:1 1 240px; min-width:0; }\r\n  #psCoverageSection .ps-coverage__selection-title {\r\n    margin:0;\r\n    color:#0F2B46;\r\n    font-size:19px;\r\n    line-height:1.3;\r\n    font-weight:850;\r\n  }\r\n  #psCoverageSection .ps-coverage__selection-text {\r\n    margin:6px 0 0;\r\n    color:#536579;\r\n    font-size:14px;\r\n    line-height:1.5;\r\n  }\r\n  #psCoverageSection .ps-coverage__selection-action {\r\n    display:inline-flex;\r\n    align-items:center;\r\n    justify-content:center;\r\n    min-height:46px;\r\n    padding:12px 17px;\r\n    border-radius:14px;\r\n    background:#0F2B49;\r\n    color:#FFF;\r\n    font-size:16px;\r\n    font-weight:800;\r\n    line-height:1.25;\r\n    text-align:center;\r\n    text-decoration:none;\r\n    transition:background-color .16s ease;\r\n  }\r\n  #psCoverageSection .ps-coverage__selection-action:hover,\r\n  #psCoverageSection .ps-coverage__selection-action:focus-visible {\r\n    background:#0C2440;\r\n    color:#FFF;\r\n    outline:2px solid #0C2440;\r\n    outline-offset:3px;\r\n  }\r\n  #psCoverageSection .ps-coverage__selection-action[hidden] { display:none; }\r\n  #psCoverageSection .ps-coverage__destinations { margin:18px 0 0; }\r\n  #psCoverageSection .ps-coverage__destinations-heading {\r\n    margin:0 0 9px;\r\n    color:#536579;\r\n    font-size:12px;\r\n    font-weight:800;\r\n    letter-spacing:.025em;\r\n  }\r\n  #psCoverageSection .ps-coverage__destination-list {\r\n    display:flex;\r\n    flex-wrap:wrap;\r\n    gap:8px 16px;\r\n  }\r\n  #psCoverageSection .ps-coverage__direct-link {\r\n    display:inline-block;\r\n    color:#1746A2;\r\n    font-size:13px;\r\n    line-height:1.6;\r\n    font-weight:650;\r\n    text-decoration:underline;\r\n    text-underline-offset:3px;\r\n  }\r\n  #psCoverageSection .ps-coverage__direct-link:hover,\r\n  #psCoverageSection .ps-coverage__direct-link:focus-visible {\r\n    color:#0F2B46;\r\n    text-decoration-thickness:2px;\r\n  }\r\n  @media (max-width:767px) {\r\n    #psCoverageSection .ps-coverage__selection { padding:16px; }\r\n    #psCoverageSection .ps-coverage__selection-title { font-size:17px; }\r\n    #psCoverageSection .ps-coverage__selection-action { width:100%; }\r\n    #psCoverageSection .ps-coverage__destination-list { gap:8px 12px; }\r\n  }\r\n\r\n  \/* TranslatePress fallback without JavaScript: show links for the document language. *\/\r\n  #psCoverageSection [data-ps-links-lang=\"pt\"] { display:none; }\r\n  html[lang^=\"pt\"] #psCoverageSection [data-ps-links-lang=\"pt\"] { display:block; }\r\n  html[lang^=\"pt\"] #psCoverageSection [data-ps-links-lang=\"en\"] { display:none; }\r\n  #psCoverageSection [data-ps-links-lang][hidden] { display:none !important; }\r\n<\/style>\r\n\r\n<script>\r\n  (function () {\r\n    \"use strict\";\r\n\r\n    const section = document.getElementById(\"psCoverageSection\");\r\n\r\n    if (!section || section.dataset.psCoverageReady === \"true\") {\r\n      return;\r\n    }\r\n\r\n    section.dataset.psCoverageReady = \"true\";\r\n\r\n    \/\/ Self-hosted assets: Leaflet 1.9.4 and the CAOP 2025 geometry, uploaded to wp-content\/uploads.\r\n    const assetBase = \"\/wp-content\/uploads\/pronto-coverage\/\";\r\n    const geojsonUrl = assetBase + \"coverage-municipalities-caop2025-v1.json\";\r\n\r\n    const mapElement = document.getElementById(\"psCoverageMap\");\r\n    const loadingElement = document.getElementById(\"psCoverageLoading\");\r\n    const errorElement = document.getElementById(\"psCoverageError\");\r\n    const areaButtons = Array.from(section.querySelectorAll(\"[data-ps-area]\"));\r\n    const selectionTitle = section.querySelector(\"#psCoverageSelectionTitle\");\r\n    const selectionText = section.querySelector(\"#psCoverageSelectionText\");\r\n    const selectionLink = section.querySelector(\"#psCoverageSelectionLink\");\r\n    const linksByArea = Object.create(null);\r\n    const documentLanguage = (document.documentElement.lang || \"\").toLowerCase();\r\n    const isPortuguese = section.dataset.psLang === \"pt\" || (section.dataset.psLang !== \"en\" && (documentLanguage.startsWith(\"pt\") || \/^\\\/pt(?:\\\/|$)\/.test(window.location.pathname)));\r\n    \/\/ Both language-specific link sets are in the static HTML for crawler discovery.\r\n    \/\/ Only the current page language's real anchors are used by the selection panel.\r\n    const activeLang = isPortuguese ? \"pt\" : \"en\";\r\n    section.querySelectorAll(\"[data-ps-links-lang]\").forEach(function (nav) {\r\n      nav.hidden = nav.getAttribute(\"data-ps-links-lang\") !== activeLang;\r\n    });\r\n    section.querySelectorAll('[data-ps-links-lang=\"' + activeLang + '\"] a[data-ps-destination][href]')\r\n      .forEach(function (anchor) {\r\n        linksByArea[anchor.getAttribute(\"data-ps-destination\")] = anchor;\r\n      });\r\n\r\n    const copy = isPortuguese\r\n      ? {\r\n          eyebrow: \"\u00c1reas de cobertura\",\r\n          title: \"Eletricistas no Grande Porto\",\r\n          intro: \"Escolhe um concelho no mapa para veres a p\u00e1gina de eletricidade da tua zona.\",\r\n          loading: \"A carregar mapa\u2026\",\r\n          error: \"N\u00e3o foi poss\u00edvel carregar o mapa. Podes continuar pelos links dos concelhos abaixo.\",\r\n          mapLabel: \"Mapa interativo das \u00e1reas de cobertura da Pronto Solu\u00e7\u00f5es\",\r\n          areasLabel: \"Selecionar munic\u00edpio\",\r\n          popupKicker: \"Servi\u00e7o de eletricidade\",\r\n          selectedIntro: \"Consulta os servi\u00e7os de eletricidade para esta zona.\",\r\n          selectedAction: \"Ver eletricista nesta zona \u2192\"\r\n        }\r\n      : {\r\n          eyebrow: \"Service areas\",\r\n          title: \"Electricians across Greater Porto\",\r\n          intro: \"Select a municipality on the map to see its local electrical service page.\",\r\n          loading: \"Loading map\u2026\",\r\n          error: \"The map could not be loaded. You can still use the municipality links below.\",\r\n          mapLabel: \"Interactive map of Pronto Solu\u00e7\u00f5es service areas\",\r\n          areasLabel: \"Select municipality\",\r\n          popupKicker: \"Electrical service\",\r\n          selectedIntro: \"Explore our electrical services for this area.\",\r\n          selectedAction: \"View local electrician page \u2192\"\r\n        };\r\n\r\n    const areaTitles = isPortuguese\r\n      ? {\r\n          \"Porto\": \"Eletricista no Porto\",\r\n          \"Matosinhos\": \"Eletricista em Matosinhos\",\r\n          \"Vila Nova de Gaia\": \"Eletricista em Vila Nova de Gaia\",\r\n          \"Gondomar\": \"Eletricista em Gondomar\",\r\n          \"Maia\": \"Eletricista na Maia\",\r\n          \"Valongo\": \"Eletricista em Valongo\"\r\n        }\r\n      : {\r\n          \"Porto\": \"Electrician in Porto\",\r\n          \"Matosinhos\": \"Electrician in Matosinhos\",\r\n          \"Vila Nova de Gaia\": \"Electrician in Vila Nova de Gaia\",\r\n          \"Gondomar\": \"Electrician in Gondomar\",\r\n          \"Maia\": \"Electrician in Maia\",\r\n          \"Valongo\": \"Electrician in Valongo\"\r\n        };\r\n\r\n    section.querySelectorAll(\"[data-ps-copy]\").forEach(function (element) {\r\n      const key = element.getAttribute(\"data-ps-copy\");\r\n\r\n      if (copy[key]) {\r\n        element.textContent = copy[key];\r\n      }\r\n    });\r\n\r\n    section.querySelectorAll(\"[data-ps-aria-copy]\").forEach(function (element) {\r\n      const key = element.getAttribute(\"data-ps-aria-copy\");\r\n\r\n      if (copy[key]) {\r\n        element.setAttribute(\"aria-label\", copy[key]);\r\n      }\r\n    });\r\n\r\n    mapElement.setAttribute(\"aria-label\", copy.mapLabel);\r\n    errorElement.textContent = copy.error;\r\n\r\n    let map = null;\r\n    let mapStarted = false;\r\n    let activeArea = \"\";\r\n    let pendingArea = \"\";\r\n    let geojsonPromise = null;\r\n    const layersByArea = {};\r\n\r\n    function loadLeaflet() {\r\n      if (window.psCoverageLeafletPromise) {\r\n        return window.psCoverageLeafletPromise;\r\n      }\r\n\r\n      if (window.L) {\r\n        return Promise.resolve(window.L);\r\n      }\r\n\r\n      const stylesheetUrl = assetBase + \"leaflet-1.9.4\/leaflet.css\";\r\n      const scriptUrl = assetBase + \"leaflet-1.9.4\/leaflet.js\";\r\n\r\n      \/\/ The map must not initialise before Leaflet's CSS has applied, or it draws unstyled.\r\n      const stylesheetReady = new Promise(function (resolve, reject) {\r\n        let stylesheet = document.querySelector('link[href=\"' + stylesheetUrl + '\"]');\r\n\r\n        if (stylesheet && stylesheet.sheet) {\r\n          resolve();\r\n          return;\r\n        }\r\n\r\n        if (!stylesheet) {\r\n          stylesheet = document.createElement(\"link\");\r\n          stylesheet.rel = \"stylesheet\";\r\n          stylesheet.href = stylesheetUrl;\r\n          stylesheet.integrity = \"sha256-p4NxAoJBhIIN+hmNHrzRCf9tD\/miZyoHS5obTRR9BMY=\";\r\n          stylesheet.crossOrigin = \"anonymous\";\r\n        }\r\n\r\n        stylesheet.addEventListener(\"load\", function () {\r\n          resolve();\r\n        }, { once: true });\r\n        stylesheet.addEventListener(\"error\", function () {\r\n          reject(new Error(\"leaflet_css_failed\"));\r\n        }, { once: true });\r\n\r\n        if (!stylesheet.parentNode) {\r\n          document.head.appendChild(stylesheet);\r\n        }\r\n      });\r\n\r\n      const scriptReady = new Promise(function (resolve, reject) {\r\n        const existingScript = document.querySelector('script[src=\"' + scriptUrl + '\"]');\r\n\r\n        function finishLoading() {\r\n          if (window.L) {\r\n            resolve(window.L);\r\n          } else {\r\n            reject(new Error(\"leaflet_unavailable\"));\r\n          }\r\n        }\r\n\r\n        if (existingScript) {\r\n          existingScript.addEventListener(\"load\", finishLoading, { once: true });\r\n          existingScript.addEventListener(\"error\", function () {\r\n            reject(new Error(\"leaflet_failed\"));\r\n          }, { once: true });\r\n          return;\r\n        }\r\n\r\n        const script = document.createElement(\"script\");\r\n        script.src = scriptUrl;\r\n        script.integrity = \"sha256-20nQCchB9co0qIjJZRGuk2\/Z9VM+kNiyxNV1lvTlZBo=\";\r\n        script.crossOrigin = \"anonymous\";\r\n        script.async = true;\r\n        script.addEventListener(\"load\", finishLoading, { once: true });\r\n        script.addEventListener(\"error\", function () {\r\n          reject(new Error(\"leaflet_failed\"));\r\n        }, { once: true });\r\n        document.head.appendChild(script);\r\n      });\r\n\r\n      window.psCoverageLeafletPromise = Promise.all([stylesheetReady, scriptReady]).then(function (results) {\r\n        return results[1];\r\n      });\r\n\r\n      return window.psCoverageLeafletPromise;\r\n    }\r\n\r\n    function loadGeojson() {\r\n      if (!geojsonPromise) {\r\n        geojsonPromise = fetch(geojsonUrl).then(function (response) {\r\n          if (!response.ok) {\r\n            throw new Error(\"geojson_failed\");\r\n          }\r\n\r\n          return response.json();\r\n        });\r\n      }\r\n\r\n      return geojsonPromise;\r\n    }\r\n\r\n    function featureName(feature) {\r\n      if (!feature || !feature.properties) {\r\n        return \"\";\r\n      }\r\n\r\n      return feature.properties.key || feature.properties.name || \"\";\r\n    }\r\n\r\n    function defaultStyle() {\r\n      return {\r\n        color: \"#2563EB\",\r\n        weight: 2,\r\n        opacity: 1,\r\n        fillColor: \"#60A5FA\",\r\n        fillOpacity: 0.2\r\n      };\r\n    }\r\n\r\n    function activeStyle() {\r\n      return {\r\n        color: \"#1746A2\",\r\n        weight: 3,\r\n        opacity: 1,\r\n        fillColor: \"#3B82F6\",\r\n        fillOpacity: 0.43\r\n      };\r\n    }\r\n\r\n    function hoverStyle() {\r\n      return {\r\n        color: \"#1D4ED8\",\r\n        weight: 2.6,\r\n        opacity: 1,\r\n        fillColor: \"#60A5FA\",\r\n        fillOpacity: 0.33\r\n      };\r\n    }\r\n\r\n    function popupContent(areaName) {\r\n      const destination = linksByArea[areaName];\r\n      const link = document.createElement(\"a\");\r\n      const kicker = document.createElement(\"span\");\r\n      const name = document.createElement(\"strong\");\r\n      const arrow = document.createElement(\"span\");\r\n\r\n      link.className = \"ps-coverage__popup-link\";\r\n      link.href = destination.href;\r\n\r\n      kicker.className = \"ps-coverage__popup-kicker\";\r\n      kicker.textContent = copy.popupKicker;\r\n\r\n      name.className = \"ps-coverage__popup-name\";\r\n      name.textContent = areaName;\r\n\r\n      arrow.className = \"ps-coverage__popup-arrow\";\r\n      arrow.setAttribute(\"aria-hidden\", \"true\");\r\n      arrow.textContent = \"\u2192\";\r\n\r\n      name.appendChild(arrow);\r\n      link.appendChild(kicker);\r\n      link.appendChild(name);\r\n\r\n      return link;\r\n    }\r\n\r\n    function updateSelectedPanel(areaName) {\r\n      const anchor = linksByArea[areaName];\r\n      selectionTitle.textContent = areaTitles[areaName] || areaName;\r\n      selectionText.textContent = copy.selectedIntro;\r\n\r\n      if (anchor) {\r\n        selectionLink.href = anchor.href;\r\n        selectionLink.textContent = copy.selectedAction;\r\n        selectionLink.hidden = false;\r\n      } else {\r\n        selectionLink.hidden = true;\r\n        selectionLink.removeAttribute(\"href\");\r\n      }\r\n    }\r\n\r\n    function setActiveArea(areaName, openPopup) {\r\n      \/\/ Update the panel immediately, even before Leaflet has finished loading.\r\n      activeArea = areaName;\r\n      areaButtons.forEach(function (button) {\r\n        const isActive = button.getAttribute(\"data-ps-area\") === activeArea;\r\n        button.setAttribute(\"aria-pressed\", isActive ? \"true\" : \"false\");\r\n      });\r\n      updateSelectedPanel(areaName);\r\n\r\n      if (!layersByArea[areaName]) {\r\n        pendingArea = areaName;\r\n        startMap();\r\n        return;\r\n      }\r\n\r\n      Object.keys(layersByArea).forEach(function (name) {\r\n        layersByArea[name].setStyle(name === activeArea ? activeStyle() : defaultStyle());\r\n      });\r\n\r\n      const activeLayer = layersByArea[activeArea];\r\n      activeLayer.bringToFront();\r\n\r\n      if (openPopup) {\r\n        activeLayer.bindPopup(popupContent(activeArea), {\r\n          closeButton: false,\r\n          autoPan: true,\r\n          offset: [0, -4]\r\n        });\r\n        activeLayer.openPopup();\r\n      }\r\n    }\r\n\r\n    function initialiseMap(geojson) {\r\n      map = window.L.map(mapElement, {\r\n        zoomControl: false,\r\n        attributionControl: true,\r\n        scrollWheelZoom: false,\r\n        doubleClickZoom: false,\r\n        boxZoom: false,\r\n        keyboard: true,\r\n        dragging: false,\r\n        touchZoom: false,\r\n        zoomSnap: 0.25,\r\n        zoomDelta: 0.25\r\n      });\r\n\r\n      map.attributionControl.setPrefix(false);\r\n\r\n      const cartoBasemapKey = (section.dataset.cartoBasemapKey || \"\").trim();\r\n      const sharedTileOptions = {\r\n        minZoom: 8,\r\n        maxZoom: 19,\r\n        updateWhenIdle: true,\r\n        keepBuffer: 1,\r\n        crossOrigin: true\r\n      };\r\n      \/\/ Each tile is drawn 1px larger than its grid cell, so neighbouring tiles overlap by 1px and no gap can open\r\n      \/\/ at fractional zoom (zoomSnap 0.25). Needs the mix-blend-mode:normal rule in the <style> block: with Leaflet's\r\n      \/\/ default plus-lighter blending the overlapping pixel is added twice and draws a bright line on every tile edge.\r\n      const OverlappingTileLayer = window.L.TileLayer.extend({\r\n        _initTile: function (tile) {\r\n          window.L.TileLayer.prototype._initTile.call(this, tile);\r\n\r\n          const tileSize = this.getTileSize();\r\n          tile.style.width = tileSize.x + 1 + \"px\";\r\n          tile.style.height = tileSize.y + 1 + \"px\";\r\n        }\r\n      });\r\n      let baseTiles;\r\n\r\n      if (cartoBasemapKey) {\r\n        baseTiles = new OverlappingTileLayer(\r\n          \"https:\/\/{s}.basemaps.cartocdn.com\/rastertiles\/voyager_nolabels\/{z}\/{x}\/{y}{r}.png?key=\" +\r\n            encodeURIComponent(cartoBasemapKey),\r\n          Object.assign({}, sharedTileOptions, {\r\n            subdomains: \"abcd\",\r\n            attribution: '&copy; <a href=\"https:\/\/www.openstreetmap.org\/copyright\">OpenStreetMap<\/a> &copy; <a href=\"https:\/\/carto.com\/attributions\">CARTO<\/a>'\r\n          })\r\n        );\r\n      } else {\r\n        baseTiles = new OverlappingTileLayer(\r\n          \"https:\/\/{s}.tile.openstreetmap.org\/{z}\/{x}\/{y}.png\",\r\n          Object.assign({}, sharedTileOptions, {\r\n            subdomains: \"abc\",\r\n            attribution: '&copy; <a href=\"https:\/\/www.openstreetmap.org\/copyright\">OpenStreetMap<\/a>'\r\n          })\r\n        );\r\n      }\r\n      baseTiles.addTo(map);\r\n\r\n      const geojsonLayer = window.L.geoJSON(geojson, {\r\n        style: defaultStyle,\r\n        onEachFeature: function (feature, layer) {\r\n          const areaName = featureName(feature);\r\n\r\n          if (!areaName) {\r\n            return;\r\n          }\r\n\r\n          layersByArea[areaName] = layer;\r\n\r\n          layer.bindTooltip(areaName, {\r\n            permanent: true,\r\n            direction: \"center\",\r\n            className: \"ps-coverage__map-label\"\r\n          });\r\n\r\n          layer.on(\"click\", function () {\r\n            setActiveArea(areaName, true);\r\n          });\r\n\r\n          layer.on(\"mouseover\", function () {\r\n            if (activeArea !== areaName) {\r\n              layer.setStyle(hoverStyle());\r\n            }\r\n          });\r\n\r\n          layer.on(\"mouseout\", function () {\r\n            layer.setStyle(activeArea === areaName ? activeStyle() : defaultStyle());\r\n          });\r\n        }\r\n      }).addTo(map);\r\n\r\n      function fitMap() {\r\n        const isMobile = window.matchMedia(\"(max-width: 767px)\").matches;\r\n        const padding = isMobile ? [22, 22] : [10, 10];\r\n\r\n        map.invalidateSize();\r\n        map.fitBounds(geojsonLayer.getBounds(), {\r\n          padding: padding,\r\n          animate: false\r\n        });\r\n      }\r\n\r\n      window.requestAnimationFrame(fitMap);\r\n\r\n      if (window.ResizeObserver) {\r\n        let resizeFrame = null;\r\n        const resizeObserver = new ResizeObserver(function () {\r\n          if (resizeFrame) {\r\n            window.cancelAnimationFrame(resizeFrame);\r\n          }\r\n\r\n          resizeFrame = window.requestAnimationFrame(fitMap);\r\n        });\r\n\r\n        resizeObserver.observe(mapElement);\r\n      } else {\r\n        window.addEventListener(\"resize\", fitMap, { passive: true });\r\n      }\r\n\r\n      loadingElement.classList.add(\"is-hidden\");\r\n\r\n      if (pendingArea && layersByArea[pendingArea]) {\r\n        const areaToOpen = pendingArea;\r\n        pendingArea = \"\";\r\n        setActiveArea(areaToOpen, true);\r\n      }\r\n    }\r\n\r\n    function showMapError() {\r\n      loadingElement.classList.add(\"is-hidden\");\r\n      errorElement.hidden = false;\r\n    }\r\n\r\n    function startMap() {\r\n      if (mapStarted) {\r\n        return;\r\n      }\r\n\r\n      mapStarted = true;\r\n      Promise.all([loadLeaflet(), loadGeojson()])\r\n        .then(function (results) {\r\n          initialiseMap(results[1]);\r\n        })\r\n        .catch(showMapError);\r\n    }\r\n\r\n    areaButtons.forEach(function (button) {\r\n      button.addEventListener(\"click\", function () {\r\n        setActiveArea(button.getAttribute(\"data-ps-area\"), true);\r\n      });\r\n\r\n      button.addEventListener(\"mouseenter\", function () {\r\n        const areaName = button.getAttribute(\"data-ps-area\");\r\n\r\n        if (layersByArea[areaName] && activeArea !== areaName) {\r\n          layersByArea[areaName].setStyle(hoverStyle());\r\n        }\r\n      });\r\n\r\n      button.addEventListener(\"mouseleave\", function () {\r\n        const areaName = button.getAttribute(\"data-ps-area\");\r\n\r\n        if (layersByArea[areaName]) {\r\n          layersByArea[areaName].setStyle(activeArea === areaName ? activeStyle() : defaultStyle());\r\n        }\r\n      });\r\n    });\r\n\r\n    if (\"IntersectionObserver\" in window) {\r\n      const mapObserver = new IntersectionObserver(function (entries) {\r\n        if (entries.some(function (entry) { return entry.isIntersecting; })) {\r\n          mapObserver.disconnect();\r\n          startMap();\r\n        }\r\n      }, {\r\n        rootMargin: \"300px 0px\"\r\n      });\r\n\r\n      mapObserver.observe(section);\r\n    } else {\r\n      startMap();\r\n    }\r\n  })();\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-54ff7e3 e-con-full e-flex e-con e-parent\" data-id=\"54ff7e3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2c5c8ce elementor-widget elementor-widget-html\" data-id=\"2c5c8ce\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\r\n.ps-faq-clean {\r\n  background: #f2f4f3;\r\n  padding: 72px 20px 56px;\r\n  font-family: \"Montserrat\", sans-serif;\r\n  color: #0F2B49;\r\n}\r\n\r\n.ps-faq-clean__wrap {\r\n  max-width: 980px;\r\n  margin: 0 auto;\r\n}\r\n\r\n.ps-faq-clean__title {\r\n  margin: 0 0 44px;\r\n  color: #0F2B49;\r\n  text-align: center;\r\n  font-family: \"Montserrat\", sans-serif;\r\n  font-size: 36px;\r\n  line-height: 1.08;\r\n  letter-spacing: -0.03em;\r\n  font-weight: 700;\r\n}\r\n\r\n.ps-faq-clean__list {\r\n  display: grid;\r\n  gap: 18px;\r\n}\r\n\r\n.ps-faq-clean__item {\r\n  background: #ffffff;\r\n  border: 1px solid #d9ddda;\r\n  border-radius: 18px;\r\n  overflow: hidden;\r\n  box-shadow: 0 2px 8px rgba(15, 43, 73, 0.06), 0 1px 2px rgba(15, 43, 73, 0.04);\r\n  transition: box-shadow 0.18s ease, border-color 0.18s ease;\r\n}\r\n\r\n.ps-faq-clean__item:hover {\r\n  box-shadow: 0 6px 16px rgba(15, 43, 73, 0.10), 0 2px 6px rgba(15, 43, 73, 0.05);\r\n}\r\n\r\n.ps-faq-clean__item[hidden] {\r\n  display: none !important;\r\n}\r\n\r\n.ps-faq-clean__extras {\r\n  margin-top: -18px;\r\n  display: grid;\r\n  gap: 18px;\r\n  max-height: 0;\r\n  opacity: 0;\r\n  overflow: hidden;\r\n  transition: max-height 0.34s ease, opacity 0.22s ease, margin-top 0.34s ease;\r\n  will-change: max-height, opacity;\r\n}\r\n\r\n.ps-faq-clean__extras.is-open {\r\n  margin-top: 0;\r\n  max-height: 2200px;\r\n  opacity: 1;\r\n}\r\n\r\n.ps-faq-clean__trigger {\r\n  width: 100%;\r\n  border: 0;\r\n  background: transparent;\r\n  padding: 18px 24px;\r\n  display: grid;\r\n  grid-template-columns: minmax(0, 1fr) auto;\r\n  gap: 18px;\r\n  align-items: center;\r\n  text-align: left;\r\n  cursor: pointer;\r\n}\r\n\r\n.ps-faq-clean__trigger:focus-visible {\r\n  outline: 3px solid rgba(16, 35, 59, 0.14);\r\n  outline-offset: -3px;\r\n}\r\n\r\n.ps-faq-clean__question {\r\n  display: block;\r\n  color: #0F2B49;\r\n  font-family: \"Montserrat\", sans-serif;\r\n  font-size: 16px;\r\n  line-height: 1.35;\r\n  font-weight: 700;\r\n}\r\n\r\n.ps-faq-clean__toggle {\r\n  width: 42px;\r\n  height: 42px;\r\n  border: 1px solid #d1d5d2;\r\n  border-radius: 999px;\r\n  background: #ffffff;\r\n  position: relative;\r\n  flex: 0 0 42px;\r\n}\r\n\r\n.ps-faq-clean__toggle::before,\r\n.ps-faq-clean__toggle::after {\r\n  content: \"\";\r\n  position: absolute;\r\n  top: 50%;\r\n  left: 50%;\r\n  width: 14px;\r\n  height: 2px;\r\n  background: #0F2B49;\r\n  border-radius: 999px;\r\n  transform: translate(-50%, -50%);\r\n  transition: transform 0.22s ease, opacity 0.22s ease;\r\n}\r\n\r\n.ps-faq-clean__toggle::after {\r\n  transform: translate(-50%, -50%) rotate(90deg);\r\n}\r\n\r\n.ps-faq-clean__item.is-open .ps-faq-clean__toggle::after {\r\n  opacity: 0;\r\n  transform: translate(-50%, -50%) rotate(90deg) scaleX(0.2);\r\n}\r\n\r\n.ps-faq-clean__answer {\r\n  display: grid;\r\n  grid-template-rows: 0fr;\r\n  transition: grid-template-rows 0.28s ease;\r\n}\r\n\r\n.ps-faq-clean__item.is-open .ps-faq-clean__answer {\r\n  grid-template-rows: 1fr;\r\n}\r\n\r\n.ps-faq-clean__answer-inner {\r\n  overflow: hidden;\r\n  padding: 0 24px;\r\n}\r\n\r\n.ps-faq-clean__item.is-open .ps-faq-clean__answer-inner {\r\n  padding-bottom: 22px;\r\n}\r\n\r\n.ps-faq-clean__answer-inner p {\r\n  margin: 0;\r\n  color: #0F2B49;\r\n  font-family: \"Montserrat\", sans-serif;\r\n  font-size: 1.02rem;\r\n  line-height: 1.72;\r\n  font-weight: 500;\r\n}\r\n\r\n.ps-faq-clean__footer {\r\n  display: flex;\r\n  justify-content: center;\r\n  margin-top: 28px;\r\n}\r\n\r\n.ps-faq-clean__more {\r\n  width: auto;\r\n  min-width: 0;\r\n  min-height: 50px;\r\n  padding: 14px 28px;\r\n  border: 0;\r\n  border-radius: 20px;\r\n  background: #0F2B49;\r\n  color: #ffffff;\r\n  font-family: \"Montserrat\", sans-serif;\r\n  font-size: 1rem;\r\n  line-height: 1;\r\n  font-weight: 700;\r\n  display: inline-flex;\r\n  align-items: center;\r\n  justify-content: center;\r\n  cursor: pointer;\r\n  transition: transform 0.18s ease, opacity 0.18s ease;\r\n}\r\n\r\n.ps-faq-clean__more:hover {\r\n  transform: translateY(-1px);\r\n  background: #0c2440;\r\n}\r\n\r\n.ps-faq-clean__more:focus-visible {\r\n  outline: 3px solid rgba(16, 35, 59, 0.18);\r\n  outline-offset: 2px;\r\n}\r\n\r\n.ps-faq-clean__item.is-open {\r\n  border-color: #E1A134 !important;\r\n  box-shadow: inset 0 0 0 1px #E1A134;\r\n}\r\n\r\n@media (max-width: 767px) {\r\n  .ps-faq-clean {\r\n    padding: 54px 16px 42px;\r\n  }\r\n\r\n  .ps-faq-clean__title {\r\n    margin-bottom: 30px;\r\n    font-size: clamp(2rem, 8vw, 2.6rem);\r\n    line-height: 1.1;\r\n  }\r\n\r\n  .ps-faq-clean__trigger {\r\n    padding: 18px 18px;\r\n    gap: 14px;\r\n  }\r\n\r\n  .ps-faq-clean__question {\r\n    font-size: 1rem;\r\n    line-height: 1.3;\r\n  }\r\n\r\n  .ps-faq-clean__toggle {\r\n    width: 38px;\r\n    height: 38px;\r\n    flex-basis: 38px;\r\n  }\r\n\r\n  .ps-faq-clean__answer-inner {\r\n    padding: 0 18px;\r\n  }\r\n\r\n  .ps-faq-clean__item.is-open .ps-faq-clean__answer-inner {\r\n    padding-bottom: 18px;\r\n  }\r\n\r\n  .ps-faq-clean__more {\r\n    width: auto;\r\n  }\r\n}\r\n<\/style>\r\n\r\n<section class=\"ps-faq-clean\" aria-labelledby=\"ps-faq-home-title\">\r\n  <div class=\"ps-faq-clean__wrap\">\r\n    <h2 class=\"ps-faq-clean__title\" id=\"ps-faq-home-title\">Frequently asked questions<\/h2>\r\n\r\n    <div class=\"ps-faq-clean__list\">\r\n      <article class=\"ps-faq-clean__item is-open\">\r\n        <button class=\"ps-faq-clean__trigger\" type=\"button\" aria-expanded=\"true\">\r\n          <span class=\"ps-faq-clean__question\">How much does an electrician in Porto cost?<\/span>\r\n          <span class=\"ps-faq-clean__toggle\" aria-hidden=\"true\"><\/span>\r\n        <\/button>\r\n        <div class=\"ps-faq-clean__answer\">\r\n          <div class=\"ps-faq-clean__answer-inner\">\r\n            <p>The cost of an electrician in Porto depends on the type of fault, how complex the diagnosis is, the materials needed, and whether the service is urgent. A faulty socket or switch usually costs less than a problem involving the electrical panel or an urgent electrical failure.<\/p>\r\n          <\/div>\r\n        <\/div>\r\n      <\/article>\r\n\r\n      <article class=\"ps-faq-clean__item\">\r\n        <button class=\"ps-faq-clean__trigger\" type=\"button\" aria-expanded=\"false\">\r\n          <span class=\"ps-faq-clean__question\">When should I call an electrician in Porto urgently?<\/span>\r\n          <span class=\"ps-faq-clean__toggle\" aria-hidden=\"true\"><\/span>\r\n        <\/button>\r\n        <div class=\"ps-faq-clean__answer\">\r\n          <div class=\"ps-faq-clean__answer-inner\">\r\n            <p>You should call an electrician in Porto urgently when there is a burning smell, sparks, a breaker that keeps tripping, hot sockets, unexplained power loss, or any other sign of electrical danger. In these cases, safety should come first. For official information about electrical installations in Portugal, you can also consult <a href=\"https:\/\/www.dgeg.gov.pt\/pt\/areas-setoriais\/energia\/energia-eletrica\/instalacoes-de-utilizacao-de-energia-eletrica\/instalacoes-eletricas-de-servico-particular-tipo-a-b-e-c\/\" target=\"_blank\" rel=\"noopener\">DGEG<\/a>.<\/p>\r\n          <\/div>\r\n        <\/div>\r\n      <\/article>\r\n\r\n      <article class=\"ps-faq-clean__item\">\r\n        <button class=\"ps-faq-clean__trigger\" type=\"button\" aria-expanded=\"false\">\r\n          <span class=\"ps-faq-clean__question\">What services does an electrician in Porto provide?<\/span>\r\n          <span class=\"ps-faq-clean__toggle\" aria-hidden=\"true\"><\/span>\r\n        <\/button>\r\n        <div class=\"ps-faq-clean__answer\">\r\n          <div class=\"ps-faq-clean__answer-inner\">\r\n            <p>An electrician in Porto can repair sockets, switches, lighting, breakers, electrical panels, short circuits, and other common electrical faults. <a href=\"https:\/\/prontosolucoes.pt\/\">Pronto Solu\u00e7\u00f5es<\/a> handles both minor repairs and urgent electrical issues in homes, apartments, shops, and offices.<\/p>\r\n          <\/div>\r\n        <\/div>\r\n      <\/article>\r\n\r\n      <div class=\"ps-faq-clean__extras\">\r\n        <article class=\"ps-faq-clean__item ps-faq-clean__item--extra\">\r\n          <button class=\"ps-faq-clean__trigger\" type=\"button\" aria-expanded=\"false\">\r\n            <span class=\"ps-faq-clean__question\">Does an electrician in Porto fix breakers that keep tripping?<\/span>\r\n            <span class=\"ps-faq-clean__toggle\" aria-hidden=\"true\"><\/span>\r\n          <\/button>\r\n          <div class=\"ps-faq-clean__answer\">\r\n            <div class=\"ps-faq-clean__answer-inner\">\r\n              <p>Yes, an electrician in Porto can fix breakers that keep tripping and identify whether the cause is overload, a faulty appliance, electrical leakage, or an ageing installation. This kind of issue should not be ignored, because it can worsen over time.<\/p>\r\n            <\/div>\r\n          <\/div>\r\n        <\/article>\r\n\r\n      <article class=\"ps-faq-clean__item ps-faq-clean__item--extra\">\r\n        <button class=\"ps-faq-clean__trigger\" type=\"button\" aria-expanded=\"false\">\r\n          <span class=\"ps-faq-clean__question\">Does an electrician in Porto repair sockets, switches, and electrical panels?<\/span>\r\n          <span class=\"ps-faq-clean__toggle\" aria-hidden=\"true\"><\/span>\r\n        <\/button>\r\n        <div class=\"ps-faq-clean__answer\">\r\n          <div class=\"ps-faq-clean__answer-inner\">\r\n            <p>Yes, an electrician in Porto repairs sockets, switches, light points, and electrical panels. In many cases, the visible fault is only the symptom of a deeper issue, so proper diagnosis matters.<\/p>\r\n          <\/div>\r\n        <\/div>\r\n      <\/article>\r\n\r\n      <article class=\"ps-faq-clean__item ps-faq-clean__item--extra\">\r\n        <button class=\"ps-faq-clean__trigger\" type=\"button\" aria-expanded=\"false\">\r\n          <span class=\"ps-faq-clean__question\">How quickly can an electrician in Porto arrive?<\/span>\r\n          <span class=\"ps-faq-clean__toggle\" aria-hidden=\"true\"><\/span>\r\n        <\/button>\r\n        <div class=\"ps-faq-clean__answer\">\r\n          <div class=\"ps-faq-clean__answer-inner\">\r\n            <p>The arrival time of an electrician in Porto depends on the location, urgency, and team availability. Whenever possible, urgent requests in Porto are prioritised so safety can be restored as quickly as possible.<\/p>\r\n          <\/div>\r\n        <\/div>\r\n      <\/article>\r\n\r\n      <article class=\"ps-faq-clean__item ps-faq-clean__item--extra\">\r\n        <button class=\"ps-faq-clean__trigger\" type=\"button\" aria-expanded=\"false\">\r\n          <span class=\"ps-faq-clean__question\">Is it dangerous to ignore flickering lights at home?<\/span>\r\n          <span class=\"ps-faq-clean__toggle\" aria-hidden=\"true\"><\/span>\r\n        <\/button>\r\n        <div class=\"ps-faq-clean__answer\">\r\n          <div class=\"ps-faq-clean__answer-inner\">\r\n            <p>Yes, ignoring flickering lights can be dangerous because the issue may be linked to a loose connection, overload, moisture, or a circuit fault. If the problem happens often, it is best to ask for an electrician in Porto to inspect it before it gets worse.<\/p>\r\n          <\/div>\r\n        <\/div>\r\n      <\/article>\r\n\r\n      <article class=\"ps-faq-clean__item ps-faq-clean__item--extra\">\r\n        <button class=\"ps-faq-clean__trigger\" type=\"button\" aria-expanded=\"false\">\r\n          <span class=\"ps-faq-clean__question\">Is it dangerous to use hot sockets or sockets that smell burnt?<\/span>\r\n          <span class=\"ps-faq-clean__toggle\" aria-hidden=\"true\"><\/span>\r\n        <\/button>\r\n        <div class=\"ps-faq-clean__answer\">\r\n          <div class=\"ps-faq-clean__answer-inner\">\r\n            <p>Yes, hot sockets or sockets with a burning smell are warning signs and should stop being used immediately. In these situations, the safest option is to switch off the circuit if you know which one it is and call an electrician in Porto to inspect the issue.<\/p>\r\n          <\/div>\r\n        <\/div>\r\n      <\/article>\r\n\r\n      <article class=\"ps-faq-clean__item ps-faq-clean__item--extra\">\r\n        <button class=\"ps-faq-clean__trigger\" type=\"button\" aria-expanded=\"false\">\r\n          <span class=\"ps-faq-clean__question\">Does an electrician in Porto work in older apartments?<\/span>\r\n          <span class=\"ps-faq-clean__toggle\" aria-hidden=\"true\"><\/span>\r\n        <\/button>\r\n        <div class=\"ps-faq-clean__answer\">\r\n          <div class=\"ps-faq-clean__answer-inner\">\r\n            <p>Yes, an electrician in Porto often works in older apartments, where ageing cables, loose sockets, outdated panels, and systems that no longer suit modern consumption are common. In Porto, this is very relevant in older residential buildings.<\/p>\r\n          <\/div>\r\n        <\/div>\r\n      <\/article>\r\n\r\n        <article class=\"ps-faq-clean__item ps-faq-clean__item--extra\">\r\n          <button class=\"ps-faq-clean__trigger\" type=\"button\" aria-expanded=\"false\">\r\n            <span class=\"ps-faq-clean__question\">Do I need an electrician or a plumber?<\/span>\r\n            <span class=\"ps-faq-clean__toggle\" aria-hidden=\"true\"><\/span>\r\n          <\/button>\r\n          <div class=\"ps-faq-clean__answer\">\r\n            <div class=\"ps-faq-clean__answer-inner\">\r\n              <p>If the problem involves sockets, circuit breakers, lighting, power loss, or the electrical panel, you usually need an electrician in Porto. If the issue involves leaks, pipes, toilets, taps, water pressure, or drainage, you may need a <a href=\"https:\/\/prontosolucoes.pt\/plumber-in-porto\/\">plumber in Porto<\/a>. For toilets, sinks, blocked drains, or wastewater backing up, see our <a href=\"https:\/\/prontosolucoes.pt\/desentupimento-no-porto\">drain unblocking in Porto<\/a> service.<\/p>\r\n            <\/div>\r\n          <\/div>\r\n        <\/article>\r\n        \r\n        <article class=\"ps-faq-clean__item ps-faq-clean__item--extra\">\r\n          <button class=\"ps-faq-clean__trigger\" type=\"button\" aria-expanded=\"false\">\r\n            <span class=\"ps-faq-clean__question\">Can I ask for an estimate before calling an electrician in Porto?<\/span>\r\n            <span class=\"ps-faq-clean__toggle\" aria-hidden=\"true\"><\/span>\r\n          <\/button>\r\n          <div class=\"ps-faq-clean__answer\">\r\n            <div class=\"ps-faq-clean__answer-inner\">\r\n              <p>Yes, you can ask for an initial indication before calling an electrician in Porto, especially if you explain the symptoms clearly or send photos of the affected area. In more complex faults, the final cost may depend on the on-site inspection.<\/p>\r\n            <\/div>\r\n          <\/div>\r\n        <\/article>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"ps-faq-clean__footer\">\r\n      <button class=\"ps-faq-clean__more\" type=\"button\" aria-expanded=\"false\">View more questions<\/button>\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<script>\r\ndocument.addEventListener(\"DOMContentLoaded\", function () {\r\n  var sections = document.querySelectorAll(\".ps-faq-clean\");\r\n\r\n  sections.forEach(function (section) {\r\n    var items = Array.from(section.querySelectorAll(\".ps-faq-clean__item\"));\r\n    var extraItems = Array.from(section.querySelectorAll(\".ps-faq-clean__item--extra\"));\r\n    var extrasWrap = section.querySelector(\".ps-faq-clean__extras\");\r\n    var moreButton = section.querySelector(\".ps-faq-clean__more\");\r\n    var expanded = false;\r\n\r\n    function closeAllItems() {\r\n      items.forEach(function (item) {\r\n        item.classList.remove(\"is-open\");\r\n\r\n        var trigger = item.querySelector(\".ps-faq-clean__trigger\");\r\n        if (trigger) {\r\n          trigger.setAttribute(\"aria-expanded\", \"false\");\r\n        }\r\n      });\r\n    }\r\n\r\n    function syncMoreButton() {\r\n      if (!moreButton) return;\r\n\r\n      if (extraItems.length === 0 || expanded) {\r\n        moreButton.hidden = true;\r\n        return;\r\n      }\r\n\r\n      moreButton.hidden = false;\r\n      moreButton.textContent = \"View more questions\";\r\n      moreButton.setAttribute(\"aria-expanded\", \"false\");\r\n    }\r\n\r\n    items.forEach(function (item) {\r\n      var trigger = item.querySelector(\".ps-faq-clean__trigger\");\r\n\r\n      if (!trigger) return;\r\n\r\n      trigger.addEventListener(\"click\", function () {\r\n        var isOpen = item.classList.contains(\"is-open\");\r\n\r\n        closeAllItems();\r\n\r\n        if (!isOpen) {\r\n          item.classList.add(\"is-open\");\r\n          trigger.setAttribute(\"aria-expanded\", \"true\");\r\n        }\r\n      });\r\n    });\r\n\r\n    if (moreButton && extrasWrap) {\r\n      moreButton.addEventListener(\"click\", function () {\r\n        if (expanded) return;\r\n\r\n        expanded = true;\r\n        extrasWrap.classList.add(\"is-open\");\r\n        moreButton.style.display = \"none\";\r\n      });\r\n    }\r\n\r\n    if (extrasWrap) {\r\n      extrasWrap.classList.remove(\"is-open\");\r\n    }\r\n\r\n    syncMoreButton();\r\n  });\r\n});\r\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-995b5e5 e-con-full e-flex e-con e-parent\" data-id=\"995b5e5\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b498276 elementor-widget elementor-widget-html\" data-id=\"b498276\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<style>\r\n  body .elementor-widget-html:has([data-cta=\"final-call\"]),\r\n  body .elementor-widget-html:has([data-cta=\"final-call\"]) > .elementor-widget-container,\r\n  body .e-con:has([data-cta=\"final-call\"]),\r\n  body .e-con-inner:has([data-cta=\"final-call\"]) {\r\n    --padding-top: 0px !important;\r\n    --padding-right: 0px !important;\r\n    --padding-bottom: 0px !important;\r\n    --padding-left: 0px !important;\r\n    --gap: 0px !important;\r\n    margin: 0 !important;\r\n    padding: 0 !important;\r\n    gap: 0 !important;\r\n    background: #0E0D0B !important;\r\n  }\r\n  section:has([data-cta=\"final-call\"]) {\r\n    box-sizing: border-box;\r\n    width: 100%;\r\n    display: grid;\r\n    grid-template-columns: 1fr 1fr;\r\n    background: #0E0D0B;\r\n    overflow: hidden;\r\n    font-family: \"Poppins\", system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\r\n  }\r\n\r\n  section:has([data-cta=\"final-call\"]) * {\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  section:has([data-cta=\"final-call\"]) > div:first-of-type {\r\n    min-width: 0;\r\n    padding: 18px 38px 28px;\r\n    display: flex;\r\n    flex-direction: column;\r\n    justify-content: center;\r\n    color: #FFFFFF;\r\n  }\r\n\r\n  section:has([data-cta=\"final-call\"]) > div:first-of-type > h2 {\r\n    margin: 0;\r\n    color: #FFFFFF;\r\n    font-family: \"Poppins\", system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\r\n    font-size: 40px;\r\n    font-weight: 700;\r\n    line-height: 1.08;\r\n    letter-spacing: -0.02em;\r\n  }\r\n\r\n  section:has([data-cta=\"final-call\"]) > div:first-of-type > p:first-of-type {\r\n    margin: 42px 0 0;\r\n    color: #FFFFFF;\r\n    font-size: 18px;\r\n    font-weight: 700;\r\n    line-height: 1.65;\r\n  }\r\n\r\n  section:has([data-cta=\"final-call\"]) > div:first-of-type > p:first-of-type strong {\r\n    font-weight: 800;\r\n  }\r\n\r\n  section:has([data-cta=\"final-call\"]) > div:first-of-type > p:first-of-type em {\r\n    font-style: italic;\r\n  }\r\n\r\n  section:has([data-cta=\"final-call\"]) > div:first-of-type > p:last-of-type {\r\n    margin: 22px 0 0;\r\n    color: #FFFFFF;\r\n    font-size: 16px;\r\n    font-weight: 700;\r\n    line-height: 1.5;\r\n  }\r\n\r\n  section:has([data-cta=\"final-call\"]) .pronto-final-button-html {\r\n    margin-top: 40px;\r\n    text-align: center;\r\n  }\r\n\r\n  .pronto-final-button-html .cta-final-call {\r\n    appearance: none;\r\n    box-sizing: border-box;\r\n    display: inline-block;\r\n    padding: 12px 24px;\r\n    border: 0;\r\n    border-radius: 14px;\r\n    background: #E1A134;\r\n    color: #FFFFFF;\r\n    fill: #FFFFFF;\r\n    font-family: \"Poppins\", system-ui, -apple-system, Segoe UI, Roboto, Arial, sans-serif;\r\n    font-size: 18px;\r\n    font-weight: 800;\r\n    line-height: 1;\r\n    text-align: center;\r\n    text-decoration: none;\r\n    cursor: pointer;\r\n    box-shadow: rgba(0, 0, 0, 0.5) 0px 0px 10px 0px;\r\n    transition: all 0.3s ease;\r\n  }\r\n\r\n  .pronto-final-button-html .cta-final-call:hover {\r\n    background: #D97706;\r\n    transform: scale(1.03);\r\n  }\r\n\r\n  .pronto-final-button-html .elementor-button-content-wrapper {\r\n    display: inline-flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n    gap: 8px;\r\n  }\r\n\r\n  .pronto-final-button-html .elementor-button-icon {\r\n    display: inline-flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n  }\r\n\r\n  .pronto-final-button-html .elementor-button-icon svg {\r\n    width: 15px;\r\n    height: 15px;\r\n    fill: currentColor;\r\n  }\r\n\r\n  section:has([data-cta=\"final-call\"]) > div:last-of-type {\r\n    min-width: 0;\r\n    padding: 14px 28px 14px 0;\r\n    display: flex;\r\n    align-items: center;\r\n    justify-content: center;\r\n  }\r\n\r\n  section:has([data-cta=\"final-call\"]) > div:last-of-type > img {\r\n    display: block;\r\n    width: 100%;\r\n    max-width: 470px;\r\n    height: auto;\r\n    border-radius: 16px;\r\n    object-fit: cover;\r\n  }\r\n\r\n  @media (max-width: 767px) {\r\n    section:has([data-cta=\"final-call\"]) {\r\n      display: block;\r\n    }\r\n\r\n    section:has([data-cta=\"final-call\"]) > div:first-of-type {\r\n      padding: 12px 24px 0;\r\n    }\r\n\r\n    section:has([data-cta=\"final-call\"]) > div:first-of-type > h2 {\r\n      font-size: 36px;\r\n      line-height: 1.18;\r\n      letter-spacing: -0.02em;\r\n      text-align: left;\r\n    }\r\n\r\n    section:has([data-cta=\"final-call\"]) > div:first-of-type > p:first-of-type {\r\n      margin-top: 42px;\r\n      font-size: 18px;\r\n      font-weight: 700;\r\n      line-height: 1.7;\r\n      text-align: left;\r\n    }\r\n\r\n    section:has([data-cta=\"final-call\"]) > div:first-of-type > p:last-of-type {\r\n      margin-top: 22px;\r\n      font-size: 16px;\r\n      font-weight: 700;\r\n      line-height: 1.5;\r\n      white-space: nowrap;\r\n      text-align: left;\r\n    }\r\n\r\n    section:has([data-cta=\"final-call\"]) .pronto-final-button-html {\r\n      margin-top: 40px;\r\n      text-align: center;\r\n    }\r\n\r\n    section:has([data-cta=\"final-call\"]) > div:last-of-type {\r\n      padding: 40px 24px 0;\r\n    }\r\n\r\n    section:has([data-cta=\"final-call\"]) > div:last-of-type > img {\r\n      width: 100%;\r\n      max-width: none;\r\n      height: auto;\r\n      border-radius: 12px;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<section>\r\n  <div>\r\n    <h2>\r\n      Need an Electrician in<br>\r\n      Porto Right Now?\r\n    <\/h2>\r\n\r\n    <p>\r\n      Fast, reliable, professional help <strong><em>24\/7<\/em><\/strong> in every Porto neighbourhood\r\n    <\/p>\r\n\r\n    <p>\r\n      NO HIDDEN FEES, NO HASSLE\r\n    <\/p>\r\n\r\n    <div class=\"pronto-final-button-html\">\r\n      <button\r\n        type=\"button\"\r\n        class=\"cta-final-call pronto-precall pp-service-electrical\"\r\n        data-cta=\"final-call\"\r\n      >\r\n        <span class=\"elementor-button-content-wrapper\">\r\n          <span class=\"elementor-button-icon\">\r\n            <svg\r\n              aria-hidden=\"true\"\r\n              class=\"e-font-icon-svg e-far-arrow-alt-circle-right\"\r\n              viewBox=\"0 0 512 512\"\r\n              xmlns=\"http:\/\/www.w3.org\/2000\/svg\"\r\n            >\r\n              <path d=\"M504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256zm72 20v-40c0-6.6 5.4-12 12-12h116v-67c0-10.7 12.9-16 20.5-8.5l99 99c4.7 4.7 4.7 12.3 0 17l-99 99c-7.6 7.6-20.5 2.2-20.5-8.5v-67H140c-6.6 0-12-5.4-12-12z\"><\/path>\r\n            <\/svg>\r\n          <\/span>\r\n\r\n          <span class=\"elementor-button-text\">\r\n            Electrical Help\r\n          <\/span>\r\n        <\/span>\r\n      <\/button>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div>\r\n    <img decoding=\"async\"\r\n      src=\"https:\/\/prontosolucoes.pt\/wp-content\/uploads\/2026\/04\/pronto-technicians-network-footer.webp\"\r\n      alt=\"equipa t\u00e9cnica canaliza\u00e7\u00e3o e eletricidade Porto pronto solu\u00e7\u00f5es rede t\u00e9cnicos profissionais\"\r\n    >\r\n  <\/div>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>24h Electrician in Porto Fast help for breaker faults, sockets, lights, power cuts and urgent electrical issues in Porto. What do you need help with? How can we help? Zip Code Get Help Now \u2192 Need Help Fast? We&#8217;ve Got You Covered Certified Electricians, ready when you need them Circuit Breaker Repair&amp; Maintenance Fix faulty [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2132","page","type-page","status-publish","hentry"],"blocksy_meta":{"has_hero_section":"disabled","styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":8},"content_style_source":"inherit","content_style":"wide","vertical_spacing_source":"custom","content_area_spacing":"none"},"_links":{"self":[{"href":"https:\/\/prontosolucoes.pt\/pt\/wp-json\/wp\/v2\/pages\/2132","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prontosolucoes.pt\/pt\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/prontosolucoes.pt\/pt\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/prontosolucoes.pt\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prontosolucoes.pt\/pt\/wp-json\/wp\/v2\/comments?post=2132"}],"version-history":[{"count":33,"href":"https:\/\/prontosolucoes.pt\/pt\/wp-json\/wp\/v2\/pages\/2132\/revisions"}],"predecessor-version":[{"id":7715,"href":"https:\/\/prontosolucoes.pt\/pt\/wp-json\/wp\/v2\/pages\/2132\/revisions\/7715"}],"wp:attachment":[{"href":"https:\/\/prontosolucoes.pt\/pt\/wp-json\/wp\/v2\/media?parent=2132"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}