{"id":3332,"date":"2025-09-01T11:42:04","date_gmt":"2025-09-01T10:42:04","guid":{"rendered":"https:\/\/prontosolucoes.pt\/?page_id=3332"},"modified":"2026-09-11T22:33:13","modified_gmt":"2026-09-11T21:33:13","slug":"custos-porto","status":"publish","type":"page","link":"https:\/\/prontosolucoes.pt\/pt\/custos-porto\/","title":{"rendered":"Custos de Repara\u00e7\u00f5es em Porto (2026) \u2014 True Cost Porto"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"3332\" class=\"elementor elementor-3332\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3e10c61 e-con-full e-flex e-con e-parent\" data-id=\"3e10c61\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-24f3d7d elementor-widget elementor-widget-html\" data-id=\"24f3d7d\" 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  .pp-cost-hero {\r\n    --pp-navy: #0f2b49;\r\n    --pp-gold: #e1a134;\r\n    --pp-gold-dark: #c98922;\r\n    position: relative;\r\n    overflow: hidden;\r\n    background: #ffffff;\r\n    color: var(--pp-navy);\r\n    font-family: \"Montserrat\", sans-serif;\r\n  }\r\n\r\n  .pp-cost-hero,\r\n  .pp-cost-hero * {\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  .pp-cost-hero__shell {\r\n    display: grid;\r\n    grid-template-columns:\r\n      minmax(0, 0.96fr)\r\n      minmax(430px, 1.04fr);\r\n    gap: clamp(42px, 5.5vw, 76px);\r\n    align-items: center;\r\n    width: min(100% - 40px, 1180px);\r\n    min-height: 410px;\r\n    margin-inline: auto;\r\n    padding: 32px 0;\r\n  }\r\n\r\n  .pp-cost-hero__copy {\r\n    max-width: 610px;\r\n  }\r\n\r\n  .pp-cost-hero h1 {\r\n    max-width: 610px;\r\n    margin: 0;\r\n    color: #0F2B49;\r\n    font-family: \"Montserrat\", sans-serif;\r\n    font-size: 42px;\r\n    font-weight: 700;\r\n    letter-spacing: -0.03em;\r\n    line-height: 1.08;\r\n  }\r\n\r\n  .pp-cost-hero h1 span {\r\n    display: inline;\r\n    color: #0F2B49;\r\n  }\r\n\r\n  .pp-cost-hero__actions {\r\n    display: flex;\r\n    flex-wrap: wrap;\r\n    gap: 18px;\r\n    align-items: center;\r\n    margin-top: 34px;\r\n  }\r\n\r\n  .pp-cost-hero__button {\r\n    display: inline-flex;\r\n    gap: 12px;\r\n    align-items: center;\r\n    justify-content: center;\r\n    min-height: 52px;\r\n    padding: 14px 22px;\r\n    border: 1px solid var(--pp-gold-dark);\r\n    border-radius: 12px;\r\n    background: linear-gradient(\r\n      135deg,\r\n      var(--pp-gold),\r\n      var(--pp-gold-dark)\r\n    );\r\n    box-shadow: 0 12px 28px rgba(201, 137, 34, 0.22);\r\n    color: #ffffff;\r\n    font-family: \"Poppins\", 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      box-shadow 180ms ease,\r\n      transform 180ms ease;\r\n  }\r\n\r\n  .pp-cost-hero__button:hover {\r\n    box-shadow: 0 16px 34px rgba(201, 137, 34, 0.3);\r\n    color: #ffffff;\r\n    transform: translateY(-2px);\r\n  }\r\n\r\n  .pp-cost-hero__button:focus-visible {\r\n    outline: 3px solid rgba(15, 43, 73, 0.28);\r\n    outline-offset: 4px;\r\n  }\r\n\r\n  .pp-cost-hero__button svg {\r\n    flex: 0 0 auto;\r\n    width: 18px;\r\n    height: 18px;\r\n    transition: transform 180ms ease;\r\n  }\r\n\r\n  .pp-cost-hero__button:hover svg {\r\n    transform: translateX(3px);\r\n  }\r\n\r\n  .pp-cost-hero__updated {\r\n    display: inline-flex;\r\n    align-items: center;\r\n    margin: 0;\r\n    color: #4f5661;\r\n    font-family: \"Montserrat\", sans-serif;\r\n    font-size: 13px;\r\n    font-weight: 500;\r\n    line-height: 1.58;\r\n  }\r\n\r\n  .pp-cost-hero__media {\r\n    margin: 0;\r\n    overflow: hidden;\r\n    border-radius: 24px;\r\n  }\r\n\r\n  .pp-cost-hero__media picture {\r\n    display: block;\r\n    overflow: hidden;\r\n    border-radius: inherit;\r\n  }\r\n\r\n  .pp-cost-hero__image {\r\n    display: block;\r\n    width: 100%;\r\n    height: auto;\r\n    aspect-ratio: 16 \/ 9;\r\n    border: 1px solid rgba(15, 43, 73, 0.1);\r\n    border-radius: 24px;\r\n    background: #ffffff;\r\n    box-shadow: 0 24px 52px rgba(9, 29, 50, 0.2);\r\n    object-fit: cover;\r\n  }\r\n\r\n  @media (max-width: 900px) {\r\n    .pp-cost-hero__shell {\r\n      grid-template-columns: 1fr;\r\n      gap: 42px;\r\n      min-height: 0;\r\n      padding: 29px 0 66px;\r\n    }\r\n\r\n    .pp-cost-hero__copy {\r\n      max-width: 760px;\r\n    }\r\n\r\n    .pp-cost-hero h1 {\r\n      max-width: 720px;\r\n    }\r\n\r\n    .pp-cost-hero__media {\r\n      width: min(100%, 760px);\r\n    }\r\n  }\r\n\r\n  @media (max-width: 767px) {\r\n    body .elementor:has(.pp-cost-hero),\r\n    body .elementor-widget-html:has(.pp-cost-hero),\r\n    body .elementor-widget-html:has(.pp-cost-hero) > .elementor-widget-container {\r\n      margin: 0 !important;\r\n      padding: 0 !important;\r\n    }\r\n\r\n    body .e-con:has(> .elementor-widget-html .pp-cost-hero),\r\n    body .e-con:has(\r\n      > .e-con-inner\r\n      > .elementor-widget-html\r\n      .pp-cost-hero\r\n    ),\r\n    body .e-con > .e-con-inner:has(\r\n      > .elementor-widget-html\r\n      .pp-cost-hero\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    .pp-cost-hero__shell {\r\n      width: 100%;\r\n      max-width: 100%;\r\n      gap: 0;\r\n      padding: 0;\r\n    }\r\n\r\n    .pp-cost-hero__media {\r\n      order: 1;\r\n      width: 100%;\r\n      overflow: visible;\r\n      border-radius: 0;\r\n    }\r\n\r\n    .pp-cost-hero__media picture {\r\n      border-radius: 0;\r\n    }\r\n\r\n    .pp-cost-hero__copy {\r\n      position: relative;\r\n      z-index: 1;\r\n      order: 2;\r\n      width: 100%;\r\n      max-width: none;\r\n      margin-top: -28px;\r\n      padding: 34px 24px 48px;\r\n      border-radius: 24px 24px 0 0;\r\n      background: #ffffff;\r\n    }\r\n\r\n    .pp-cost-hero h1 {\r\n      font-size: clamp(2.1rem, 9vw, 2.6rem);\r\n      letter-spacing: -0.03em;\r\n      line-height: 1.1;\r\n    }\r\n\r\n    .pp-cost-hero__actions {\r\n      align-items: stretch;\r\n      margin-top: 28px;\r\n    }\r\n\r\n    .pp-cost-hero__button {\r\n      width: 100%;\r\n    }\r\n\r\n    .pp-cost-hero__updated {\r\n      width: 100%;\r\n      justify-content: center;\r\n    }\r\n\r\n    .pp-cost-hero__image {\r\n      aspect-ratio: 1402 \/ 1122;\r\n      border: 0;\r\n      border-radius: 0;\r\n      box-shadow: none;\r\n    }\r\n  }\r\n\r\n  html {\r\n    scroll-behavior: smooth;\r\n  }\r\n\r\n  #pp-cost-guides {\r\n    scroll-margin-top: 0;\r\n  }\r\n\r\n  @media (prefers-reduced-motion: reduce) {\r\n    html {\r\n      scroll-behavior: auto;\r\n    }\r\n\r\n    .pp-cost-hero__button,\r\n    .pp-cost-hero__button svg {\r\n      transition: none;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<section\r\n  class=\"pp-cost-hero\"\r\n  aria-labelledby=\"pp-cost-hero-title\"\r\n  data-pronto-cost-hero\r\n>\r\n  <div class=\"pp-cost-hero__shell\">\r\n    <div class=\"pp-cost-hero__copy\">\r\n      <h1 id=\"pp-cost-hero-title\">\r\n        How much does it cost to <span>repair your home<\/span> in Porto?\r\n      <\/h1>\r\n\r\n      <div class=\"pp-cost-hero__actions\">\r\n        <a\r\n          class=\"pp-cost-hero__button\"\r\n          href=\"#pp-cost-guides\"\r\n        >\r\n          <span data-pronto-cost-button>Explore price guides<\/span>\r\n\r\n          <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n            <path\r\n              d=\"M5 12h14M13 6l6 6-6 6\"\r\n              fill=\"none\"\r\n              stroke=\"currentColor\"\r\n              stroke-linecap=\"round\"\r\n              stroke-linejoin=\"round\"\r\n              stroke-width=\"2\"\r\n            ><\/path>\r\n          <\/svg>\r\n        <\/a>\r\n\r\n        <p class=\"pp-cost-hero__updated\">\r\n          Updated in August 2026\r\n        <\/p>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <figure class=\"pp-cost-hero__media\">\r\n      <picture>\r\n        <source\r\n          media=\"(max-width: 767px)\"\r\n          srcset=\"https:\/\/prontosolucoes.pt\/wp-content\/uploads\/2026\/08\/tecnicos-canalizacao-eletricidade-manutencao-domestica-colagem.webp\"\r\n          width=\"1402\"\r\n          height=\"1122\"\r\n        >\r\n\r\n        <img fetchpriority=\"high\"\r\n          class=\"pp-cost-hero__image\"\r\n          src=\"https:\/\/prontosolucoes.pt\/wp-content\/uploads\/2026\/08\/tecnicos-canalizacao-eletricidade-manutencao-domestica-porto.webp\"\r\n          alt=\"Plumbing, electrical and home maintenance technicians working in Porto\"\r\n          width=\"1280\"\r\n          height=\"720\"\r\n          loading=\"eager\"\r\n          decoding=\"async\"\r\n          fetchpriority=\"high\"\r\n        >\r\n      <\/picture>\r\n    <\/figure>\r\n  <\/div>\r\n<\/section>\r\n\r\n<script>\r\n  (function(){\r\n    const root = document.querySelector('[data-pronto-cost-hero]');\r\n    if(!root) return;\r\n\r\n    const isPortuguese = \/^\\\/pt(?:\\\/|$)\/.test(window.location.pathname);\r\n\r\n    const COPY = {\r\n      en: {\r\n        title: 'How much does it cost to <span>repair your home<\/span> in Porto?',\r\n        button: 'Explore price guides',\r\n        updatedPrefix: 'Updated in ',\r\n        locale: 'en-GB',\r\n        imageAlt: 'Plumbing, electrical and home maintenance technicians working in Porto'\r\n      },\r\n      pt: {\r\n        title: 'Quanto custa <span>reparar a sua casa<\/span> no Porto?',\r\n        button: 'Explorar guias de pre\u00e7os',\r\n        updatedPrefix: 'Atualizado em ',\r\n        locale: 'pt-PT',\r\n        imageAlt: 'T\u00e9cnicos de canaliza\u00e7\u00e3o, eletricidade e manuten\u00e7\u00e3o dom\u00e9stica a trabalhar no Porto'\r\n      }\r\n    };\r\n\r\n    const copy = isPortuguese ? COPY.pt : COPY.en;\r\n\r\n    const titleEl = root.querySelector('#pp-cost-hero-title');\r\n    const buttonEl = root.querySelector('[data-pronto-cost-button]');\r\n    const updatedEl = root.querySelector('.pp-cost-hero__updated');\r\n    const imageEl = root.querySelector('.pp-cost-hero__image');\r\n\r\n    if(titleEl){\r\n      titleEl.innerHTML = copy.title;\r\n    }\r\n\r\n    if(buttonEl){\r\n      buttonEl.textContent = copy.button;\r\n    }\r\n\r\n    if(imageEl){\r\n      imageEl.alt = copy.imageAlt;\r\n    }\r\n\r\n    if(updatedEl){\r\n      const now = new Date();\r\n\r\n      const monthYear = new Intl.DateTimeFormat(copy.locale, {\r\n        month: 'long',\r\n        year: 'numeric',\r\n        timeZone: 'Europe\/Lisbon'\r\n      }).format(now);\r\n\r\n      updatedEl.textContent = copy.updatedPrefix + monthYear;\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-04de3c3 e-con-full e-flex e-con e-parent\" data-id=\"04de3c3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-bae1c72 elementor-widget elementor-widget-html\" data-id=\"bae1c72\" 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-about-counter-section\"\r\n    aria-labelledby=\"ps-about-counter-title\"\r\n>\r\n    <div class=\"ps-about-counter-inner\">\r\n        <div class=\"ps-about-counter-heading\">\r\n            <h2\r\n                id=\"ps-about-counter-title\"\r\n                data-ps-about-counter-title\r\n            >\r\n                Trusted local experience, backed by results\r\n            <\/h2>\r\n        <\/div>\r\n\r\n        <div class=\"ps-about-counter-grid\">\r\n            <div class=\"ps-about-counter-box\">\r\n                <strong class=\"ps-about-counter\">\r\n                    <span\r\n                        class=\"ps-about-counter-number\"\r\n                        data-target=\"970\"\r\n                    >\r\n                        970\r\n                    <\/span><span\r\n                        class=\"ps-about-counter-suffix\"\r\n                        data-ps-about-jobs-suffix\r\n                    >+<\/span>\r\n                <\/strong>\r\n\r\n                <p data-ps-about-jobs-label>\r\n                    Jobs completed\r\n                <\/p>\r\n            <\/div>\r\n\r\n            <div class=\"ps-about-counter-box\">\r\n                <strong class=\"ps-about-counter\">\r\n                    <span\r\n                        class=\"ps-about-counter-number\"\r\n                        data-target=\"20\"\r\n                    >\r\n                        20\r\n                    <\/span><span\r\n                        class=\"ps-about-counter-suffix\"\r\n                        data-ps-about-response-suffix\r\n                    > min<\/span>\r\n                <\/strong>\r\n\r\n                <p data-ps-about-response-label>\r\n                    Average response time\r\n                <\/p>\r\n            <\/div>\r\n\r\n            <div class=\"ps-about-counter-box\">\r\n                <strong class=\"ps-about-counter\">\r\n                    <span\r\n                        class=\"ps-about-counter-number\"\r\n                        data-target=\"98\"\r\n                    >\r\n                        98\r\n                    <\/span><span\r\n                        class=\"ps-about-counter-suffix\"\r\n                        data-ps-about-first-visit-suffix\r\n                    >%<\/span>\r\n                <\/strong>\r\n\r\n                <p data-ps-about-first-visit-label>\r\n                    Fixed on first visit\r\n                <\/p>\r\n            <\/div>\r\n\r\n            <div class=\"ps-about-counter-box\">\r\n                <strong class=\"ps-about-counter\">\r\n                    <span\r\n                        class=\"ps-about-counter-number\"\r\n                        data-target=\"10\"\r\n                    >\r\n                        10\r\n                    <\/span><span\r\n                        class=\"ps-about-counter-suffix\"\r\n                        data-ps-about-experience-suffix\r\n                    >+ years<\/span>\r\n                <\/strong>\r\n\r\n                <p data-ps-about-experience-label>\r\n                    Average technician experience\r\n                <\/p>\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-about-counter-section),\r\n    body .elementor-widget-html:has(.ps-about-counter-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-about-counter-section\r\n    ),\r\n    body .e-con:has(\r\n        > .e-con-inner\r\n        > .elementor-widget-html\r\n        .ps-about-counter-section\r\n    ),\r\n    body .e-con > .e-con-inner:has(\r\n        > .elementor-widget-html\r\n        .ps-about-counter-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-about-counter-section {\r\n        width: 100%;\r\n        margin: 0;\r\n        padding: 88px 24px;\r\n        background: #ffffff;\r\n    }\r\n\r\n    .ps-about-counter-inner {\r\n        width: 100%;\r\n        max-width: 1180px;\r\n        margin: 0 auto;\r\n    }\r\n\r\n    .ps-about-counter-heading {\r\n        max-width: 760px;\r\n        margin: 0 auto 48px;\r\n        text-align: center;\r\n    }\r\n\r\n    .ps-about-counter-eyebrow {\r\n        margin: 0 0 12px;\r\n        color: #d28e1f;\r\n        font-family: \"Montserrat\", sans-serif;\r\n        font-size: 13px;\r\n        font-weight: 800;\r\n        letter-spacing: 0.14em;\r\n        line-height: 1.2;\r\n        text-transform: uppercase;\r\n    }\r\n\r\n    .ps-about-counter-heading h2 {\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-about-counter-grid {\r\n        display: grid;\r\n        grid-template-columns: repeat(4, minmax(0, 1fr));\r\n        gap: 18px;\r\n        width: 100%;\r\n    }\r\n\r\n    .ps-about-counter-box {\r\n        display: flex;\r\n        min-width: 0;\r\n        min-height: 170px;\r\n        flex-direction: column;\r\n        align-items: center;\r\n        justify-content: center;\r\n        padding: 30px 18px;\r\n        border: 1px solid #d6d9dc;\r\n        border-radius: 12px;\r\n        background: #ffffff;\r\n        text-align: center;\r\n    }\r\n\r\n    .ps-about-counter {\r\n        display: block;\r\n        margin: 0;\r\n        color: #e1a134;\r\n        font-family: \"Montserrat\", sans-serif;\r\n        font-size: clamp(38px, 4vw, 52px);\r\n        font-weight: 800;\r\n        letter-spacing: -0.04em;\r\n        line-height: 1;\r\n        white-space: nowrap;\r\n    }\r\n\r\n    .ps-about-counter-box p {\r\n        max-width: 190px;\r\n        margin: 14px 0 0;\r\n        color: #0f2b46;\r\n        font-family: \"Montserrat\", sans-serif;\r\n        font-size: 14px;\r\n        font-weight: 600;\r\n        line-height: 1.35;\r\n    }\r\n\r\n    @media (max-width: 900px) {\r\n        .ps-about-counter-section {\r\n            padding: 72px 20px;\r\n        }\r\n\r\n        .ps-about-counter-heading {\r\n            margin-bottom: 40px;\r\n        }\r\n\r\n        .ps-about-counter-grid {\r\n            grid-template-columns: repeat(2, minmax(0, 1fr));\r\n            gap: 16px;\r\n        }\r\n    }\r\n\r\n    @media (max-width: 480px) {\r\n        .ps-about-counter-section {\r\n            padding: 60px 16px;\r\n        }\r\n\r\n        .ps-about-counter-heading {\r\n            margin-bottom: 32px;\r\n        }\r\n\r\n        .ps-about-counter-heading h2 {\r\n            font-size: clamp(2rem, 8vw, 2.6rem);\r\n            line-height: 1.1;\r\n        }\r\n\r\n        .ps-about-counter-grid {\r\n            gap: 12px;\r\n        }\r\n\r\n        .ps-about-counter-box {\r\n            min-height: 145px;\r\n            padding: 22px 10px;\r\n            border-radius: 10px;\r\n        }\r\n\r\n        .ps-about-counter {\r\n            font-size: clamp(27px, 8vw, 34px);\r\n        }\r\n\r\n        .ps-about-counter-box p {\r\n            max-width: 140px;\r\n            margin-top: 11px;\r\n            font-size: 12px;\r\n            line-height: 1.35;\r\n        }\r\n    }\r\n<\/style>\r\n\r\n<script>\r\n    (function () {\r\n        const sections = document.querySelectorAll(\r\n            \".ps-about-counter-section\"\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 experience, backed by results\",\r\n                jobs:\r\n                    \"Jobs completed\",\r\n                response:\r\n                    \"Average response time\",\r\n                firstVisit:\r\n                    \"Fixed on first visit\",\r\n                experience:\r\n                    \"Average technician experience\",\r\n                jobsSuffix:\r\n                    \"+\",\r\n                responseSuffix:\r\n                    \" min\",\r\n                firstVisitSuffix:\r\n                    \"%\",\r\n                experienceSuffix:\r\n                    \"+ years\"\r\n            },\r\n            pt: {\r\n                title:\r\n                    \"Experi\u00eancia local de confian\u00e7a, comprovada pelos resultados\",\r\n                jobs:\r\n                    \"Trabalhos conclu\u00eddos\",\r\n                response:\r\n                    \"Tempo m\u00e9dio de resposta\",\r\n                firstVisit:\r\n                    \"Resolvido \u00e0 primeira visita\",\r\n                experience:\r\n                    \"Experi\u00eancia m\u00e9dia dos t\u00e9cnicos\",\r\n                jobsSuffix:\r\n                    \"+\",\r\n                responseSuffix:\r\n                    \" min\",\r\n                firstVisitSuffix:\r\n                    \"%\",\r\n                experienceSuffix:\r\n                    \"+ anos\"\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                \"[data-ps-about-counter-title]\"\r\n            );\r\n\r\n            const jobsLabelEl = section.querySelector(\r\n                \"[data-ps-about-jobs-label]\"\r\n            );\r\n\r\n            const responseLabelEl = section.querySelector(\r\n                \"[data-ps-about-response-label]\"\r\n            );\r\n\r\n            const firstVisitLabelEl = section.querySelector(\r\n                \"[data-ps-about-first-visit-label]\"\r\n            );\r\n\r\n            const experienceLabelEl = section.querySelector(\r\n                \"[data-ps-about-experience-label]\"\r\n            );\r\n\r\n            const jobsSuffixEl = section.querySelector(\r\n                \"[data-ps-about-jobs-suffix]\"\r\n            );\r\n\r\n            const responseSuffixEl = section.querySelector(\r\n                \"[data-ps-about-response-suffix]\"\r\n            );\r\n\r\n            const firstVisitSuffixEl = section.querySelector(\r\n                \"[data-ps-about-first-visit-suffix]\"\r\n            );\r\n\r\n            const experienceSuffixEl = section.querySelector(\r\n                \"[data-ps-about-experience-suffix]\"\r\n            );\r\n\r\n            if (titleEl) {\r\n                titleEl.textContent = copy.title;\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 (experienceLabelEl) {\r\n                experienceLabelEl.textContent =\r\n                    copy.experience;\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\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 animateCount = (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-about-counter-number\"\r\n                            );\r\n\r\n                        counters.forEach((counter) => {\r\n                            animateCount(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-about-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-about-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-02b1b58 e-con-full e-flex e-con e-parent\" data-id=\"02b1b58\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c6937fd elementor-widget elementor-widget-shortcode\" data-id=\"c6937fd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\r\n    <style>\r\n  .pp-cost-guides {\r\n    --pp-navy: #0f2b49;\r\n    --pp-navy-deep: #091d32;\r\n    --pp-gold: #e1a134;\r\n    --pp-gold-dark: #c98922;\r\n    --pp-ink: #17283a;\r\n    --pp-muted: #637386;\r\n    --pp-border: #dfe6ed;\r\n    --pp-surface: #ffffff;\r\n    --pp-background: #f4f6f8;\r\n    padding: clamp(68px, 8vw, 108px) 0;\r\n    overflow: hidden;\r\n    background: var(--pp-background);\r\n    color: var(--pp-ink);\r\n    font-family:\r\n      Poppins,\r\n      Inter,\r\n      system-ui,\r\n      -apple-system,\r\n      BlinkMacSystemFont,\r\n      \"Segoe UI\",\r\n      sans-serif;\r\n  }\r\n\r\n  .pp-cost-guides,\r\n  .pp-cost-guides * {\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  .pp-cost-guides__shell {\r\n    width: min(100% - 40px, 1180px);\r\n    margin-inline: auto;\r\n  }\r\n\r\n  .pp-cost-guides__header {\r\n    display: grid;\r\n    grid-template-columns:\r\n      minmax(0, 1fr)\r\n      minmax(320px, 0.7fr);\r\n    gap: 48px;\r\n    align-items: end;\r\n    margin-bottom: 40px;\r\n  }\r\n\r\n  .pp-cost-guides__eyebrow {\r\n    display: flex;\r\n    gap: 10px;\r\n    align-items: center;\r\n    margin: 0 0 14px;\r\n    color: var(--pp-gold-dark);\r\n    font-size: 12px;\r\n    font-weight: 750;\r\n    letter-spacing: 0.13em;\r\n    line-height: 1.4;\r\n    text-transform: uppercase;\r\n  }\r\n\r\n  .pp-cost-guides__eyebrow::before {\r\n    width: 32px;\r\n    height: 3px;\r\n    border-radius: 999px;\r\n    background: var(--pp-gold);\r\n    content: \"\";\r\n  }\r\n\r\n  .pp-cost-guides h2 {\r\n    max-width: 680px;\r\n    margin: 0;\r\n    color: var(--pp-navy);\r\n    font-size: clamp(34px, 4vw, 52px);\r\n    font-weight: 750;\r\n    letter-spacing: -0.04em;\r\n    line-height: 1.08;\r\n  }\r\n\r\n  .pp-cost-guides__intro {\r\n    max-width: 520px;\r\n    margin: 0;\r\n    color: var(--pp-muted);\r\n    font-size: 16px;\r\n    line-height: 1.75;\r\n  }\r\n\r\n  .pp-cost-guides__controls {\r\n    display: flex;\r\n    gap: 20px;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    margin-bottom: 28px;\r\n    padding: 10px;\r\n    border: 1px solid var(--pp-border);\r\n    border-radius: 16px;\r\n    background: var(--pp-surface);\r\n    box-shadow: 0 8px 24px rgba(15, 43, 73, 0.05);\r\n  }\r\n\r\n  .pp-cost-guides__filters {\r\n    display: flex;\r\n    gap: 8px;\r\n    align-items: center;\r\n  }\r\n\r\n  .pp-cost-guides__filter {\r\n    display: inline-flex;\r\n    gap: 9px;\r\n    align-items: center;\r\n    justify-content: center;\r\n    min-height: 44px;\r\n    padding: 10px 16px;\r\n    border: 1px solid transparent;\r\n    border-radius: 11px;\r\n    background: transparent;\r\n    color: #536579;\r\n    cursor: pointer;\r\n    font: inherit;\r\n    font-size: 14px;\r\n    font-weight: 700;\r\n    line-height: 1.2;\r\n    transition:\r\n      border-color 180ms ease,\r\n      background 180ms ease,\r\n      color 180ms ease;\r\n  }\r\n\r\n  .pp-cost-guides__filter span {\r\n    display: grid;\r\n    min-width: 23px;\r\n    height: 23px;\r\n    padding: 0 6px;\r\n    place-items: center;\r\n    border-radius: 999px;\r\n    background: #edf1f5;\r\n    color: #667789;\r\n    font-size: 11px;\r\n  }\r\n\r\n  .pp-cost-guides__filter:hover {\r\n    border-color: #d8e0e8;\r\n    background: #f6f8fa;\r\n    color: var(--pp-navy);\r\n  }\r\n\r\n  .pp-cost-guides__filter[aria-pressed=\"true\"] {\r\n    border-color: var(--pp-navy);\r\n    background: var(--pp-navy);\r\n    color: #ffffff;\r\n  }\r\n\r\n  .pp-cost-guides__filter[aria-pressed=\"true\"] span {\r\n    background: rgba(255, 255, 255, 0.15);\r\n    color: #ffffff;\r\n  }\r\n\r\n  .pp-cost-guides__filter:focus-visible,\r\n  .pp-cost-guides__estimate:focus-visible,\r\n  .pp-cost-guides__article-link:focus-visible,\r\n  .pp-cost-guides__help-button:focus-visible {\r\n    outline: 3px solid rgba(225, 161, 52, 0.42);\r\n    outline-offset: 3px;\r\n  }\r\n\r\n  .pp-cost-guides__status {\r\n    margin: 0 14px 0 0;\r\n    color: #718092;\r\n    font-size: 13px;\r\n    line-height: 1.4;\r\n  }\r\n\r\n  .pp-cost-guides__grid {\r\n    display: grid;\r\n    grid-template-columns: repeat(3, minmax(0, 1fr));\r\n    gap: 22px;\r\n  }\r\n\r\n  .pp-cost-guides__card {\r\n    --pp-guide-accent: #16879a;\r\n    --pp-guide-soft: #e8f5f7;\r\n    --pp-guide-line: linear-gradient(\r\n      90deg,\r\n      #bfe4e9,\r\n      #16879a\r\n    );\r\n    position: relative;\r\n    display: flex;\r\n    min-width: 0;\r\n    flex-direction: column;\r\n    padding: 25px;\r\n    overflow: hidden;\r\n    border: 1px solid var(--pp-border);\r\n    border-top: 4px solid var(--pp-guide-accent);\r\n    border-radius: 18px;\r\n    background: var(--pp-surface);\r\n    box-shadow: 0 12px 34px rgba(15, 43, 73, 0.07);\r\n    transition:\r\n      border-color 180ms ease,\r\n      box-shadow 180ms ease,\r\n      transform 180ms ease;\r\n  }\r\n\r\n  .pp-cost-guides__card[data-category=\"eletricidade\"] {\r\n    --pp-guide-accent: #d38c1f;\r\n    --pp-guide-soft: #fff5df;\r\n    --pp-guide-line: linear-gradient(\r\n      90deg,\r\n      #f8ddb0,\r\n      #d38c1f\r\n    );\r\n  }\r\n\r\n  .pp-cost-guides__card:hover {\r\n    border-color: #cdd7e1;\r\n    box-shadow: 0 18px 42px rgba(15, 43, 73, 0.11);\r\n    transform: translateY(-4px);\r\n  }\r\n\r\n  .pp-cost-guides__card[hidden] {\r\n    display: none;\r\n  }\r\n\r\n  .pp-cost-guides__media {\r\n    display: block;\r\n    width: 100%;\r\n    overflow: hidden;\r\n  }\r\n\r\n  .pp-cost-guides__media img {\r\n    display: block;\r\n    width: 100%;\r\n    height: auto;\r\n  }\r\n\r\n  .pp-cost-guides__card-top {\r\n    display: flex;\r\n    gap: 16px;\r\n    align-items: center;\r\n    justify-content: space-between;\r\n    margin-bottom: 22px;\r\n  }\r\n\r\n  .pp-cost-guides__category {\r\n    display: inline-flex;\r\n    align-items: center;\r\n    min-height: 29px;\r\n    padding: 6px 10px;\r\n    border-radius: 999px;\r\n    background: var(--pp-guide-soft);\r\n    color: var(--pp-guide-accent);\r\n    font-size: 11px;\r\n    font-weight: 750;\r\n    letter-spacing: 0.08em;\r\n    line-height: 1.2;\r\n    text-transform: uppercase;\r\n  }\r\n\r\n  .pp-cost-guides__icon {\r\n    display: grid;\r\n    flex: 0 0 auto;\r\n    width: 42px;\r\n    height: 42px;\r\n    place-items: center;\r\n    border-radius: 13px;\r\n    background: var(--pp-guide-soft);\r\n    color: var(--pp-guide-accent);\r\n  }\r\n\r\n  .pp-cost-guides__icon svg {\r\n    width: 22px;\r\n    height: 22px;\r\n  }\r\n\r\n  .pp-cost-guides__card h3 {\r\n    min-height: 54px;\r\n    margin: 0;\r\n    color: var(--pp-navy);\r\n    font-size: 21px;\r\n    font-weight: 750;\r\n    letter-spacing: -0.025em;\r\n    line-height: 1.3;\r\n  }\r\n\r\n  .pp-cost-guides__summary {\r\n    min-height: 69px;\r\n    margin: 12px 0 0;\r\n    color: var(--pp-muted);\r\n    font-size: 14px;\r\n    line-height: 1.65;\r\n  }\r\n\r\n  .pp-cost-guides__price {\r\n    margin-top: 23px;\r\n    padding: 18px;\r\n    border-radius: 14px;\r\n    background: #f6f8fa;\r\n  }\r\n\r\n  .pp-cost-guides__price-label {\r\n    display: block;\r\n    margin-bottom: 7px;\r\n    color: #6c7b8c;\r\n    font-size: 11px;\r\n    font-weight: 700;\r\n    letter-spacing: 0.07em;\r\n    line-height: 1.3;\r\n    text-transform: uppercase;\r\n  }\r\n\r\n  .pp-cost-guides__price strong {\r\n    display: block;\r\n    color: var(--pp-navy);\r\n    font-size: 31px;\r\n    font-weight: 800;\r\n    letter-spacing: -0.045em;\r\n    line-height: 1.05;\r\n  }\r\n\r\n  .pp-cost-guides__range {\r\n    margin-top: 17px;\r\n  }\r\n\r\n  .pp-cost-guides__range-line {\r\n    position: relative;\r\n    height: 7px;\r\n    border-radius: 999px;\r\n    background: var(--pp-guide-line);\r\n  }\r\n\r\n  .pp-cost-guides__range-line::before,\r\n  .pp-cost-guides__range-line::after {\r\n    position: absolute;\r\n    top: 50%;\r\n    width: 13px;\r\n    height: 13px;\r\n    border: 3px solid #ffffff;\r\n    border-radius: 50%;\r\n    background: var(--pp-guide-accent);\r\n    box-shadow: 0 0 0 1px rgba(15, 43, 73, 0.1);\r\n    content: \"\";\r\n    transform: translateY(-50%);\r\n  }\r\n\r\n  .pp-cost-guides__range-line::before {\r\n    left: -1px;\r\n  }\r\n\r\n  .pp-cost-guides__range-line::after {\r\n    right: -1px;\r\n  }\r\n\r\n  .pp-cost-guides__range-labels {\r\n    display: flex;\r\n    gap: 18px;\r\n    justify-content: space-between;\r\n    margin-top: 9px;\r\n    color: #788696;\r\n    font-size: 10px;\r\n    font-weight: 650;\r\n    line-height: 1.35;\r\n  }\r\n\r\n  .pp-cost-guides__range-labels span:last-child {\r\n    text-align: right;\r\n  }\r\n\r\n  .pp-cost-guides__drivers {\r\n    display: grid;\r\n    gap: 12px;\r\n    margin-top: 20px;\r\n  }\r\n\r\n  .pp-cost-guides__driver {\r\n    position: relative;\r\n    padding-left: 17px;\r\n  }\r\n\r\n  .pp-cost-guides__driver::before {\r\n    position: absolute;\r\n    top: 7px;\r\n    left: 0;\r\n    width: 7px;\r\n    height: 7px;\r\n    border-radius: 50%;\r\n    background: var(--pp-guide-accent);\r\n    content: \"\";\r\n  }\r\n\r\n  .pp-cost-guides__driver-label {\r\n    display: block;\r\n    margin-bottom: 4px;\r\n    color: var(--pp-navy);\r\n    font-size: 12px;\r\n    font-weight: 750;\r\n    line-height: 1.4;\r\n  }\r\n\r\n  .pp-cost-guides__driver p {\r\n    margin: 0;\r\n    color: #68788a;\r\n    font-size: 12px;\r\n    line-height: 1.55;\r\n  }\r\n\r\n  .pp-cost-guides__actions {\r\n    display: grid;\r\n    grid-template-columns: minmax(0, 1fr) auto;\r\n    gap: 12px;\r\n    align-items: center;\r\n    margin-top: auto;\r\n    padding-top: 25px;\r\n  }\r\n\r\n  .pp-cost-guides__estimate {\r\n    display: inline-flex;\r\n    gap: 9px;\r\n    align-items: center;\r\n    justify-content: center;\r\n    min-height: 46px;\r\n    padding: 11px 15px;\r\n    border: 1px solid var(--pp-navy);\r\n    border-radius: 11px;\r\n    background: var(--pp-navy);\r\n    color: #ffffff;\r\n    cursor: pointer;\r\n    font: inherit;\r\n    font-size: 13px;\r\n    font-weight: 750;\r\n    line-height: 1.2;\r\n    transition:\r\n      background 180ms ease,\r\n      transform 180ms ease;\r\n  }\r\n\r\n  .pp-cost-guides__estimate:hover {\r\n    background: var(--pp-navy-deep);\r\n    transform: translateY(-1px);\r\n  }\r\n\r\n  .pp-cost-guides__estimate svg,\r\n  .pp-cost-guides__article-link svg,\r\n  .pp-cost-guides__help-button svg {\r\n    flex: 0 0 auto;\r\n    width: 17px;\r\n    height: 17px;\r\n  }\r\n\r\n  .pp-cost-guides__article-link {\r\n    display: inline-flex;\r\n    gap: 6px;\r\n    align-items: center;\r\n    justify-content: center;\r\n    min-height: 44px;\r\n    color: var(--pp-navy);\r\n    font-size: 12px;\r\n    font-weight: 750;\r\n    line-height: 1.3;\r\n    text-align: center;\r\n    text-decoration: none;\r\n  }\r\n\r\n  .pp-cost-guides__article-link:hover {\r\n    color: var(--pp-gold-dark);\r\n    text-decoration: underline;\r\n    text-underline-offset: 3px;\r\n  }\r\n\r\n  .pp-cost-guides__help {\r\n    position: relative;\r\n    display: grid;\r\n    grid-column: 1 \/ -1;\r\n    grid-template-columns: auto minmax(0, 1fr) auto;\r\n    gap: 24px;\r\n    align-items: center;\r\n    margin-top: 2px;\r\n    padding: 30px 34px;\r\n    overflow: hidden;\r\n    border-radius: 19px;\r\n    cursor: pointer;\r\n    text-decoration: none;\r\n    background:\r\n      radial-gradient(\r\n        circle at 92% 0%,\r\n        rgba(225, 161, 52, 0.25),\r\n        transparent 27%\r\n      ),\r\n      linear-gradient(\r\n        135deg,\r\n        var(--pp-navy),\r\n        var(--pp-navy-deep)\r\n      );\r\n    box-shadow: 0 18px 42px rgba(9, 29, 50, 0.17);\r\n    color: #ffffff;\r\n  }\r\n\r\n  .pp-cost-guides__help::after {\r\n    position: absolute;\r\n    right: -74px;\r\n    bottom: -118px;\r\n    width: 250px;\r\n    height: 250px;\r\n    border: 1px solid rgba(255, 255, 255, 0.08);\r\n    border-radius: 50%;\r\n    box-shadow:\r\n      0 0 0 35px rgba(255, 255, 255, 0.025),\r\n      0 0 0 70px rgba(255, 255, 255, 0.018);\r\n    content: \"\";\r\n  }\r\n\r\n  .pp-cost-guides__help-icon {\r\n    display: block;\r\n    width: 82px;\r\n    height: 66px;\r\n    overflow: visible;\r\n    border-radius: 0;\r\n    background: transparent;\r\n    flex: 0 0 auto;\r\n  }\r\n\r\n  .pp-cost-guides__help-icon img {\r\n    display: block;\r\n    width: 100%;\r\n    height: 100%;\r\n    object-fit: contain;\r\n    transform: none;\r\n  }\r\n\r\n  .pp-cost-guides__help-copy {\r\n    position: relative;\r\n    z-index: 1;\r\n  }\r\n\r\n  .pp-cost-guides__help h3 {\r\n    min-height: 0;\r\n    margin: 0 0 5px;\r\n    color: #ffffff;\r\n    font-size: 21px;\r\n  }\r\n\r\n  .pp-cost-guides__help p {\r\n    margin: 0;\r\n    color: rgba(255, 255, 255, 0.72);\r\n    font-size: 13px;\r\n    line-height: 1.6;\r\n  }\r\n\r\n  .pp-cost-guides__help-button {\r\n    position: relative;\r\n    z-index: 1;\r\n    display: inline-flex;\r\n    gap: 9px;\r\n    align-items: center;\r\n    justify-content: center;\r\n    min-height: 48px;\r\n    padding: 12px 18px;\r\n    border: 1px solid var(--pp-gold-dark);\r\n    border-radius: 11px;\r\n    background: linear-gradient(\r\n      135deg,\r\n      var(--pp-gold),\r\n      var(--pp-gold-dark)\r\n    );\r\n    color: #17202a;\r\n    font-size: 13px;\r\n    font-weight: 800;\r\n    line-height: 1.2;\r\n    text-decoration: none;\r\n    transition:\r\n      box-shadow 180ms ease,\r\n      transform 180ms ease;\r\n  }\r\n\r\n  .pp-cost-guides__help-button:hover {\r\n    box-shadow: 0 12px 28px rgba(225, 161, 52, 0.22);\r\n    color: #17202a;\r\n    transform: translateY(-2px);\r\n  }\r\n\r\n  @media (max-width: 1020px) {\r\n    .pp-cost-guides__grid {\r\n      grid-template-columns: repeat(2, minmax(0, 1fr));\r\n    }\r\n  }\r\n\r\n  @media (max-width: 800px) {\r\n    .pp-cost-guides__header {\r\n      grid-template-columns: 1fr;\r\n      gap: 20px;\r\n    }\r\n\r\n    .pp-cost-guides__intro {\r\n      max-width: 680px;\r\n    }\r\n\r\n    .pp-cost-guides__controls {\r\n      align-items: flex-start;\r\n      flex-direction: column;\r\n    }\r\n\r\n    .pp-cost-guides__status {\r\n      margin: 0 8px 5px;\r\n    }\r\n\r\n    .pp-cost-guides__help {\r\n      grid-template-columns: auto minmax(0, 1fr);\r\n    }\r\n\r\n    .pp-cost-guides__help-button {\r\n      grid-column: 1 \/ -1;\r\n      justify-self: start;\r\n    }\r\n  }\r\n\r\n  @media (max-width: 620px) {\r\n    .pp-cost-guides {\r\n      padding: 58px 0;\r\n    }\r\n\r\n    .pp-cost-guides__shell {\r\n      width: min(100% - 28px, 1180px);\r\n    }\r\n\r\n    .pp-cost-guides h2 {\r\n      font-size: 36px;\r\n    }\r\n\r\n    .pp-cost-guides__controls {\r\n      padding: 8px;\r\n    }\r\n\r\n    .pp-cost-guides__filters {\r\n      display: grid;\r\n      grid-template-columns: repeat(3, minmax(0, 1fr));\r\n      width: 100%;\r\n    }\r\n\r\n    .pp-cost-guides__filter {\r\n      gap: 5px;\r\n      min-width: 0;\r\n      padding-inline: 8px;\r\n      font-size: 12px;\r\n    }\r\n\r\n    .pp-cost-guides__filter span {\r\n      display: none;\r\n    }\r\n\r\n    .pp-cost-guides__grid {\r\n      grid-template-columns: 1fr;\r\n    }\r\n\r\n    .pp-cost-guides__card {\r\n      padding: 22px 20px;\r\n    }\r\n\r\n    .pp-cost-guides__card h3,\r\n    .pp-cost-guides__summary {\r\n      min-height: 0;\r\n    }\r\n\r\n    .pp-cost-guides__actions {\r\n      grid-template-columns: 1fr;\r\n    }\r\n\r\n    .pp-cost-guides__article-link {\r\n      min-height: 40px;\r\n    }\r\n\r\n    .pp-cost-guides__help {\r\n      grid-template-columns: 72px minmax(0, 1fr);\r\n      grid-template-areas:\r\n        \"icon title\"\r\n        \"description description\"\r\n        \"button button\";\r\n      column-gap: 14px;\r\n      row-gap: 14px;\r\n      padding: 22px 20px;\r\n      align-items: center;\r\n    }\r\n\r\n    .pp-cost-guides__help-icon {\r\n      grid-area: icon;\r\n      width: 72px;\r\n      height: 58px;\r\n      align-self: center;\r\n      justify-self: start;\r\n    }\r\n\r\n    .pp-cost-guides__help-copy {\r\n      display: contents;\r\n    }\r\n\r\n    .pp-cost-guides__help h3 {\r\n      grid-area: title;\r\n      margin: 0;\r\n      font-size: 20px;\r\n      line-height: 1.25;\r\n      align-self: center;\r\n    }\r\n\r\n    .pp-cost-guides__help p {\r\n      grid-area: description;\r\n      margin: 0;\r\n      line-height: 1.55;\r\n    }\r\n\r\n    .pp-cost-guides__help-button {\r\n      grid-area: button;\r\n      grid-column: 1 \/ -1;\r\n      width: 100%;\r\n      margin-top: 2px;\r\n    }\r\n  }\r\n\r\n  @media (prefers-reduced-motion: reduce) {\r\n    .pp-cost-guides__card,\r\n    .pp-cost-guides__estimate,\r\n    .pp-cost-guides__help-button {\r\n      transition: none;\r\n    }\r\n  }\r\n        [data-pp-cost-guides-hub],\r\n        [data-pp-cost-guides-hub] * {\r\n            font-family: \"Montserrat\", sans-serif;\r\n        }\r\n\r\n        [data-pp-cost-guides-hub]\r\n        .pp-cost-guides__header.pp-cost-guides__header--centered {\r\n            display: flex !important;\r\n            grid-template-columns: none !important;\r\n            flex-direction: column !important;\r\n            align-items: center !important;\r\n            justify-content: center !important;\r\n            gap: 14px !important;\r\n            width: 100% !important;\r\n            margin: 0 0 40px !important;\r\n            text-align: center !important;\r\n        }\r\n\r\n        [data-pp-cost-guides-hub]\r\n        .pp-cost-guides__header--centered\r\n        .pp-cost-guides__eyebrow {\r\n            display: flex !important;\r\n            align-items: center !important;\r\n            justify-content: center !important;\r\n            width: 100% !important;\r\n            margin: 0 !important;\r\n            text-align: center !important;\r\n        }\r\n\r\n        [data-pp-cost-guides-hub]\r\n        .pp-cost-guides__header--centered h2 {\r\n            width: 100% !important;\r\n            max-width: 760px !important;\r\n            margin: 0 auto !important;\r\n            color: #0f2b49 !important;\r\n            font-family: \"Montserrat\", sans-serif !important;\r\n            font-size: 36px !important;\r\n            font-weight: 700 !important;\r\n            letter-spacing: -0.03em !important;\r\n            line-height: 1.15 !important;\r\n            text-align: center !important;\r\n        }\r\n\r\n        @media (max-width: 620px) {\r\n            [data-pp-cost-guides-hub]\r\n            .pp-cost-guides__header--centered h2 {\r\n                font-size: 30px !important;\r\n            }\r\n        }\r\n\r\n        [data-pp-cost-guides-hub]\r\n        .pp-cost-guides__card h3 {\r\n            font-family: \"Montserrat\", sans-serif !important;\r\n            font-weight: 700 !important;\r\n        }\r\n\r\n        [data-pp-cost-guides-hub]\r\n        .pp-cost-guides__summary {\r\n            font-family: \"Montserrat\", sans-serif !important;\r\n            font-weight: 500 !important;\r\n        }\r\n\r\n        [data-pp-cost-guides-hub]\r\n        .pp-cost-guides__estimate {\r\n            appearance: none !important;\r\n            border: 1px solid #0f2b49 !important;\r\n            background: #ffffff !important;\r\n            color: #0f2b49 !important;\r\n            font-family: \"Montserrat\", sans-serif !important;\r\n            font-weight: 700 !important;\r\n        }\r\n\r\n        [data-pp-cost-guides-hub]\r\n        .pp-cost-guides__estimate svg {\r\n            color: #0f2b49 !important;\r\n            stroke: currentColor !important;\r\n        }\r\n\r\n        [data-pp-cost-guides-hub]\r\n        .pp-cost-guides__estimate:hover {\r\n            border-color: #0f2b49 !important;\r\n            background: #0f2b49 !important;\r\n            color: #ffffff !important;\r\n        }\r\n\r\n        [data-pp-cost-guides-hub]\r\n        .pp-cost-guides__estimate:hover svg {\r\n            color: #ffffff !important;\r\n        }\r\n\r\n        [data-pp-cost-guides-hub]\r\n        .pp-cost-guides__article-link {\r\n            color: #0f2b49 !important;\r\n            font-family: \"Montserrat\", sans-serif !important;\r\n            font-weight: 700 !important;\r\n        }\r\n\r\n        [data-pp-cost-guides-hub]\r\n        .pp-cost-guides__help {\r\n            border: 1px solid #dfe6ed !important;\r\n            background: #ffffff !important;\r\n            box-shadow: 0 12px 34px rgba(15, 43, 73, 0.06) !important;\r\n        }\r\n\r\n        [data-pp-cost-guides-hub]\r\n        .pp-cost-guides__help::after {\r\n            display: none !important;\r\n        }\r\n\r\n        [data-pp-cost-guides-hub]\r\n        .pp-cost-guides__help h3 {\r\n            color: #0f2b49 !important;\r\n            font-family: \"Montserrat\", sans-serif !important;\r\n            font-weight: 700 !important;\r\n        }\r\n\r\n        [data-pp-cost-guides-hub]\r\n        .pp-cost-guides__help p {\r\n            color: #637386 !important;\r\n            font-family: \"Montserrat\", sans-serif !important;\r\n            font-weight: 500 !important;\r\n        }\r\n\r\n        [data-pp-cost-guides-hub]\r\n        .pp-cost-guides__help-icon {\r\n            background: #ffffff !important;\r\n        }\r\n\r\n        [data-pp-cost-guides-hub]\r\n        .pp-cost-guides__help-button {\r\n            border-color: #e1a134 !important;\r\n            background: #e1a134 !important;\r\n            color: #ffffff !important;\r\n            font-family: \"Montserrat\", sans-serif !important;\r\n            font-weight: 700 !important;\r\n        }\r\n\r\n        [data-pp-cost-guides-hub]\r\n        .pp-cost-guides__help-button svg {\r\n            color: #ffffff !important;\r\n            stroke: currentColor !important;\r\n        }\r\n\r\n        [data-pp-cost-guides-hub]\r\n        .pp-cost-guides__help-button:hover {\r\n            border-color: #c98922 !important;\r\n            background: #c98922 !important;\r\n            color: #ffffff !important;\r\n        }\r\n\r\n        body.pp-cost-estimate-open {\r\n            overflow: hidden;\r\n        }\r\n\r\n        body.pp-cost-estimate-open #whatsapp-toggle,\r\n        body.pp-cost-estimate-open #whatsapp-bubble {\r\n            z-index: 999997 !important;\r\n        }\r\n\r\n        .pp-cost-estimate-modal[aria-hidden=\"true\"] {\r\n            display: none;\r\n        }\r\n\r\n        .pp-cost-estimate-modal {\r\n            position: fixed;\r\n            inset: 0;\r\n            z-index: 999998;\r\n            display: block;\r\n            font-family: \"Montserrat\", sans-serif;\r\n        }\r\n\r\n        .pp-cost-estimate-modal__backdrop {\r\n            position: absolute;\r\n            inset: 0;\r\n            background: rgba(4, 12, 20, 0.74);\r\n            backdrop-filter: blur(8px) saturate(0.85);\r\n            -webkit-backdrop-filter: blur(8px) saturate(0.85);\r\n            opacity: 1;\r\n            transition: opacity 220ms cubic-bezier(0.22, 1, 0.36, 1);\r\n        }\r\n\r\n        .pp-cost-estimate-modal__sheet {\r\n            position: fixed;\r\n            left: 50%;\r\n            top: 40px;\r\n            transform: translateX(-50%);\r\n            display: flex;\r\n            flex-direction: column;\r\n            width: min(720px, calc(100vw - 28px));\r\n            max-height: calc(100dvh - 80px);\r\n            overflow: hidden;\r\n            border: 1px solid rgba(255, 255, 255, 0.65);\r\n            border-radius: 20px;\r\n            background: rgba(255, 255, 255, 0.96);\r\n            box-shadow: 0 24px 64px rgba(0, 0, 0, 0.30);\r\n        }\r\n\r\n        .pp-cost-estimate-modal.is-opening\r\n        .pp-cost-estimate-modal__backdrop {\r\n            animation: pp-cost-estimate-backdrop-in 240ms cubic-bezier(0.22, 1, 0.36, 1) both;\r\n        }\r\n\r\n        .pp-cost-estimate-modal.is-opening\r\n        .pp-cost-estimate-modal__sheet {\r\n            animation: pp-cost-estimate-sheet-in-desktop 280ms cubic-bezier(0.22, 1, 0.36, 1) both;\r\n        }\r\n\r\n        .pp-cost-estimate-modal.is-closing\r\n        .pp-cost-estimate-modal__backdrop {\r\n            animation: pp-cost-estimate-backdrop-out 520ms cubic-bezier(0.4, 0, 1, 1) both;\r\n        }\r\n\r\n        .pp-cost-estimate-modal.is-closing\r\n        .pp-cost-estimate-modal__sheet {\r\n            animation: pp-cost-estimate-sheet-out-desktop 520ms cubic-bezier(0.4, 0, 1, 1) both;\r\n        }\r\n\r\n        .pp-cost-estimate-modal.is-closing {\r\n            pointer-events: none;\r\n        }\r\n\r\n        .pp-cost-estimate-modal__topbar {\r\n            display: flex;\r\n            align-items: center;\r\n            gap: 10px;\r\n            padding: 14px;\r\n            border-bottom: 1px solid rgba(0, 0, 0, 0.08);\r\n            background: rgba(255, 255, 255, 0.96);\r\n            flex: 0 0 auto;\r\n        }\r\n\r\n        .pp-cost-estimate-modal__topmeta {\r\n            flex: 1;\r\n            min-width: 0;\r\n        }\r\n\r\n        .pp-cost-estimate-modal__title {\r\n            color: #0f2b46;\r\n            font-size: 16px;\r\n            font-weight: 800;\r\n            line-height: 1.2;\r\n        }\r\n\r\n        .pp-cost-estimate-modal__subtitle {\r\n            margin-top: 2px;\r\n            color: rgba(15, 43, 70, 0.72);\r\n            font-size: 12px;\r\n        }\r\n\r\n        .pp-cost-estimate-modal__close {\r\n            width: 40px;\r\n            height: 40px;\r\n            padding: 0;\r\n            border: 1px solid rgba(0, 0, 0, 0.10);\r\n            border-radius: 14px;\r\n            background: rgba(255, 255, 255, 0.92);\r\n            color: #0f2b46;\r\n            font-family: inherit;\r\n            font-size: 22px;\r\n            line-height: 1;\r\n            cursor: pointer;\r\n            flex: 0 0 auto;\r\n        }\r\n\r\n        .pp-cost-estimate-modal__body {\r\n            flex: 1 1 auto;\r\n            min-height: 0;\r\n            overflow: auto;\r\n            padding: 14px;\r\n            background: rgba(248, 250, 252, 0.92);\r\n        }\r\n\r\n        .pp-cost-estimate-modal__card {\r\n            padding: 16px;\r\n            border: 1px solid rgba(15, 43, 70, 0.10);\r\n            border-radius: 18px;\r\n            background: rgba(255, 255, 255, 0.96);\r\n        }\r\n\r\n        .pp-cost-estimate-modal__category {\r\n            display: inline-flex;\r\n            padding: 6px 10px;\r\n            border-radius: 999px;\r\n            background: rgba(225, 161, 52, 0.14);\r\n            color: #c98922;\r\n            font-size: 11px;\r\n            font-weight: 800;\r\n            letter-spacing: 0.08em;\r\n            text-transform: uppercase;\r\n        }\r\n\r\n        .pp-cost-estimate-modal__guide-title {\r\n            margin: 12px 0 0;\r\n            color: #0f2b46;\r\n            font-size: 20px;\r\n            font-weight: 800;\r\n            letter-spacing: -0.025em;\r\n            line-height: 1.25;\r\n        }\r\n\r\n        .pp-cost-estimate-modal__price {\r\n            margin-top: 16px;\r\n            padding: 16px;\r\n            border-radius: 16px;\r\n            background: rgba(15, 43, 70, 0.04);\r\n        }\r\n\r\n        .pp-cost-estimate-modal__price-label {\r\n            display: block;\r\n            color: rgba(15, 43, 70, 0.68);\r\n            font-size: 11px;\r\n            font-weight: 800;\r\n            letter-spacing: 0.08em;\r\n            text-transform: uppercase;\r\n        }\r\n\r\n        .pp-cost-estimate-modal__price-range {\r\n            display: block;\r\n            margin-top: 4px;\r\n            color: #0f2b46;\r\n            font-size: 34px;\r\n            font-weight: 800;\r\n            letter-spacing: -0.04em;\r\n            line-height: 1.08;\r\n        }\r\n\r\n        .pp-cost-estimate-modal__range-track {\r\n            position: relative;\r\n            height: 6px;\r\n            margin-top: 14px;\r\n            border-radius: 999px;\r\n            background: linear-gradient(90deg, #d9e6ea 0%, #3aa7b7 100%);\r\n        }\r\n\r\n        .pp-cost-estimate-modal__range-track::before,\r\n        .pp-cost-estimate-modal__range-track::after {\r\n            position: absolute;\r\n            top: 50%;\r\n            width: 10px;\r\n            height: 10px;\r\n            border: 2px solid #ffffff;\r\n            border-radius: 999px;\r\n            background: #2f9dad;\r\n            box-shadow: 0 0 0 1px rgba(15, 43, 70, 0.14);\r\n            content: \"\";\r\n            transform: translateY(-50%);\r\n        }\r\n\r\n        .pp-cost-estimate-modal__range-track::before {\r\n            left: 0;\r\n        }\r\n\r\n        .pp-cost-estimate-modal__range-track::after {\r\n            right: 0;\r\n        }\r\n\r\n        .pp-cost-estimate-modal__range-labels {\r\n            display: flex;\r\n            justify-content: space-between;\r\n            margin-top: 7px;\r\n            color: rgba(15, 43, 70, 0.64);\r\n            font-size: 11px;\r\n            font-weight: 700;\r\n        }\r\n\r\n        .pp-cost-estimate-modal__drivers {\r\n            display: grid;\r\n            grid-template-columns: repeat(2, minmax(0, 1fr));\r\n            gap: 10px;\r\n            margin-top: 12px;\r\n        }\r\n\r\n        .pp-cost-estimate-modal__driver {\r\n            padding: 14px;\r\n            border: 1px solid rgba(15, 43, 70, 0.10);\r\n            border-radius: 16px;\r\n            background: #ffffff;\r\n        }\r\n\r\n        .pp-cost-estimate-modal__driver-title {\r\n            display: block;\r\n            color: #0f2b46;\r\n            font-size: 13px;\r\n            font-weight: 800;\r\n        }\r\n\r\n        .pp-cost-estimate-modal__driver p {\r\n            margin: 6px 0 0;\r\n            color: rgba(15, 43, 70, 0.72);\r\n            font-size: 12px;\r\n            font-weight: 500;\r\n            line-height: 1.5;\r\n        }\r\n\r\n        .pp-cost-estimate-modal__footer {\r\n            padding: 14px;\r\n            border-top: 1px solid rgba(0, 0, 0, 0.08);\r\n            background: rgba(255, 255, 255, 0.98);\r\n        }\r\n\r\n        .pp-cost-estimate-modal__request {\r\n            width: 100%;\r\n            min-height: 50px;\r\n            padding: 13px 16px;\r\n            border: 1px solid rgba(0, 0, 0, 0.08);\r\n            border-radius: 16px;\r\n            background: #e1a134;\r\n            color: #0f2b46;\r\n            font-family: inherit;\r\n            font-size: 14px;\r\n            font-weight: 800;\r\n            cursor: pointer;\r\n        }\r\n\r\n        .pp-cost-estimate-modal__request:hover {\r\n            background: #c98922;\r\n        }\r\n\r\n        @keyframes pp-cost-estimate-backdrop-in {\r\n            0% {\r\n                opacity: 0;\r\n            }\r\n\r\n            100% {\r\n                opacity: 1;\r\n            }\r\n        }\r\n\r\n        @keyframes pp-cost-estimate-backdrop-out {\r\n            0% {\r\n                opacity: 1;\r\n            }\r\n\r\n            72% {\r\n                opacity: 1;\r\n            }\r\n\r\n            100% {\r\n                opacity: 0;\r\n            }\r\n        }\r\n\r\n        @keyframes pp-cost-estimate-sheet-in-desktop {\r\n            0% {\r\n                opacity: 0;\r\n                transform: translate(-50%, 42px) scale(0.98);\r\n            }\r\n\r\n            62% {\r\n                opacity: 1;\r\n                transform: translate(-50%, -4px) scale(1);\r\n            }\r\n\r\n            100% {\r\n                opacity: 1;\r\n                transform: translate(-50%, 0) scale(1);\r\n            }\r\n        }\r\n\r\n        @keyframes pp-cost-estimate-sheet-out-desktop {\r\n            0% {\r\n                opacity: 1;\r\n                transform: translate(-50%, 0) scale(1);\r\n            }\r\n\r\n            70% {\r\n                opacity: 1;\r\n                transform: translate(-50%, 165px) scale(0.91);\r\n            }\r\n\r\n            100% {\r\n                opacity: 0;\r\n                transform: translate(-50%, 290px) scale(0.82);\r\n            }\r\n        }\r\n\r\n        @keyframes pp-cost-estimate-sheet-in-mobile {\r\n            0% {\r\n                opacity: 0;\r\n                transform: translate3d(0, 68px, 0) scale(0.985);\r\n            }\r\n\r\n            64% {\r\n                opacity: 1;\r\n                transform: translate3d(0, -4px, 0) scale(1);\r\n            }\r\n\r\n            100% {\r\n                opacity: 1;\r\n                transform: translate3d(0, 0, 0) scale(1);\r\n            }\r\n        }\r\n\r\n        @keyframes pp-cost-estimate-sheet-out-mobile {\r\n            0% {\r\n                opacity: 1;\r\n                transform: translate3d(0, 0, 0) scale(1);\r\n            }\r\n\r\n            82% {\r\n                opacity: 1;\r\n                transform: translate3d(0, 100%, 0) scale(0.992);\r\n            }\r\n\r\n            100% {\r\n                opacity: 0;\r\n                transform: translate3d(0, 118%, 0) scale(0.988);\r\n            }\r\n        }\r\n\r\n        @media (max-width: 768px) {\r\n            .pp-cost-estimate-modal.is-opening\r\n            .pp-cost-estimate-modal__sheet {\r\n                animation: pp-cost-estimate-sheet-in-mobile 280ms cubic-bezier(0.22, 1, 0.36, 1) both;\r\n            }\r\n\r\n            .pp-cost-estimate-modal.is-closing\r\n            .pp-cost-estimate-modal__sheet {\r\n                animation: pp-cost-estimate-sheet-out-mobile 520ms cubic-bezier(0.4, 0, 1, 1) both;\r\n            }\r\n\r\n            .pp-cost-estimate-modal__sheet {\r\n                left: 0;\r\n                right: 0;\r\n                bottom: 0;\r\n                top: calc(env(safe-area-inset-top) + 10px);\r\n                transform: translate3d(0, 0, 0);\r\n                width: 100vw;\r\n                height: calc(100svh - env(safe-area-inset-top) - 10px);\r\n                height: calc(100dvh - env(safe-area-inset-top) - 10px);\r\n                max-height: none;\r\n                border-radius: 20px 20px 0 0;\r\n                will-change: transform;\r\n            }\r\n\r\n            .pp-cost-estimate-modal__drivers {\r\n                grid-template-columns: 1fr;\r\n            }\r\n\r\n            .pp-cost-estimate-modal__price-range {\r\n                font-size: 30px;\r\n            }\r\n        }\r\n\r\n        @media (prefers-reduced-motion: reduce) {\r\n            .pp-cost-estimate-modal__backdrop,\r\n            .pp-cost-estimate-modal__sheet {\r\n                transition-duration: 1ms !important;\r\n                animation-duration: 1ms !important;\r\n            }\r\n        }\r\n    <\/style>\r\n\r\n    <section\r\n        id=\"pp-cost-guides\"\r\n        class=\"pp-cost-guides\"\r\n        data-pp-cost-guides-hub\r\n        aria-labelledby=\"pp-cost-guides-title-dynamic\"\r\n    >\r\n        <div class=\"pp-cost-guides__shell\">\r\n\r\n            <header\r\n                class=\"pp-cost-guides__header pp-cost-guides__header--centered\"\r\n            >\r\n                <p class=\"pp-cost-guides__eyebrow\">\r\n                    Plan your repair\r\n                <\/p>\r\n\r\n                <h2 id=\"pp-cost-guides-title-dynamic\">\r\n                    Find out what your project may cost\r\n                <\/h2>\r\n            <\/header>\r\n\r\n            <div class=\"pp-cost-guides__grid\">\r\n\r\n                \r\n                \r\n                    <article\r\n                        class=\"pp-cost-guides__card\"\r\n                        data-pp-cost-card\r\n                        data-category=\"canalizacao\"\r\n                    >\r\n\r\n                        \r\n                            <a\r\n                                class=\"pp-cost-guides__media\"\r\n                                href=\"https:\/\/prontosolucoes.pt\/pt\/custos-porto\/renovar-canalizacao-no-porto\/\"\r\n                                aria-label=\"Quanto Custa Renovar a Canaliza\u00e7\u00e3o de um Apartamento no Porto em 2026?\"\r\n                            >\r\n                                <img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/prontosolucoes.pt\/wp-content\/uploads\/2026\/09\/tecnico-substituir-tubagens-renovacao-canalizacao-porto-1024x768.webp\" class=\"attachment-large size-large wp-post-image\" alt=\"Quanto Custa Renovar Canaliza\u00e7\u00e3o no Porto\" loading=\"lazy\" \/>                            <\/a>\r\n\r\n                        \r\n                        <div class=\"pp-cost-guides__card-top\">\r\n                            <span class=\"pp-cost-guides__category\">\r\n                                Plumbing                            <\/span>\r\n                        <\/div>\r\n\r\n                        <h3>\r\n                            Quanto Custa Renovar a Canaliza\u00e7\u00e3o de um Apartamento no Porto em 2026?                        <\/h3>\r\n\r\n                        <p class=\"pp-cost-guides__summary\">\r\n                            Se est\u00e1s a pensar renovar canaliza\u00e7\u00e3o num apartamento no Porto, \u00e9 f\u00e1cil encontrar pre\u00e7os completamente diferentes. Uma pesquisa pode mostrar algumas centenas de euros\u2026                        <\/p>\r\n\r\n                        <div class=\"pp-cost-guides__actions\">\r\n\r\n                            \r\n                                <button\r\n                                    class=\"pp-cost-guides__estimate\"\r\n                                    type=\"button\"\r\n                                    data-pp-estimate-toggle\r\n                                    data-guide-title=\"Quanto Custa Renovar a Canaliza\u00e7\u00e3o de um Apartamento no Porto em 2026?\"\r\n                                    data-guide-category=\"Plumbing\"\r\n                                    data-price-label=\"Refer\u00eancia de mercado 2026\"\r\n                                    data-price-range=\"\u20ac200\u2013\u20ac16.000\"\r\n                                    data-lower-heading=\"Tende a custar menos\"\r\n                                    data-lower-text=\"Interven\u00e7\u00f5es localizadas, uma \u00fanica divis\u00e3o, poucos pontos de \u00e1gua e tubagens com acesso simples\"\r\n                                    data-higher-heading=\"Tende a custar mais\"\r\n                                    data-higher-text=\"Renova\u00e7\u00e3o de v\u00e1rias divis\u00f5es ou de toda a rede, incluindo \u00e1gua e esgotos, abertura de paredes ou pavimentos, mais pontos, materiais e trabalhos de reposi\u00e7\u00e3o\"\r\n                                    aria-haspopup=\"dialog\"\r\n                                >\r\n                                    <span>\r\n                                        View estimate\r\n                                    <\/span>\r\n\r\n                                    <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n                                        <path\r\n                                            d=\"M5 12h14M13 6l6 6-6 6\"\r\n                                            fill=\"none\"\r\n                                            stroke=\"currentColor\"\r\n                                            stroke-linecap=\"round\"\r\n                                            stroke-linejoin=\"round\"\r\n                                            stroke-width=\"2\"\r\n                                        ><\/path>\r\n                                    <\/svg>\r\n                                <\/button>\r\n\r\n                            \r\n                            <a\r\n                                class=\"pp-cost-guides__article-link\"\r\n                                href=\"https:\/\/prontosolucoes.pt\/pt\/custos-porto\/renovar-canalizacao-no-porto\/\"\r\n                            >\r\n                                Read full guide\r\n                            <\/a>\r\n\r\n                        <\/div>\r\n\r\n                    <\/article>\r\n\r\n                \r\n                    <article\r\n                        class=\"pp-cost-guides__card\"\r\n                        data-pp-cost-card\r\n                        data-category=\"canalizacao\"\r\n                    >\r\n\r\n                        \r\n                            <a\r\n                                class=\"pp-cost-guides__media\"\r\n                                href=\"https:\/\/prontosolucoes.pt\/pt\/custos-porto\/quanto-custa-instalar-um-termoacumulador-no-porto\/\"\r\n                                aria-label=\"Quanto Custa Instalar um Termoacumulador no Porto? Pre\u00e7os em 2026\"\r\n                            >\r\n                                <img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/prontosolucoes.pt\/wp-content\/uploads\/2026\/09\/instalacao-termoacumulador-porto-1024x768.webp\" class=\"attachment-large size-large wp-post-image\" alt=\"Quanto Custa Instalar um Termoacumulador no Porto\" loading=\"lazy\" \/>                            <\/a>\r\n\r\n                        \r\n                        <div class=\"pp-cost-guides__card-top\">\r\n                            <span class=\"pp-cost-guides__category\">\r\n                                Plumbing                            <\/span>\r\n                        <\/div>\r\n\r\n                        <h3>\r\n                            Quanto Custa Instalar um Termoacumulador no Porto? Pre\u00e7os em 2026                        <\/h3>\r\n\r\n                        <p class=\"pp-cost-guides__summary\">\r\n                            Quanto custa instalar um termoacumulador no Porto? Em 2026, uma montagem simples pode ficar aproximadamente entre \u20ac60 e \u20ac150, dependendo da capacidade e do\u2026                        <\/p>\r\n\r\n                        <div class=\"pp-cost-guides__actions\">\r\n\r\n                            \r\n                                <button\r\n                                    class=\"pp-cost-guides__estimate\"\r\n                                    type=\"button\"\r\n                                    data-pp-estimate-toggle\r\n                                    data-guide-title=\"Quanto Custa Instalar um Termoacumulador no Porto? Pre\u00e7os em 2026\"\r\n                                    data-guide-category=\"Plumbing\"\r\n                                    data-price-label=\"Pre\u00e7o indicativo\"\r\n                                    data-price-range=\"\u20ac60\u2013\u20ac150+\"\r\n                                    data-lower-heading=\"Tende a custar menos\"\r\n                                    data-lower-text=\"Substitui\u00e7\u00e3o simples no mesmo local, com as liga\u00e7\u00f5es de \u00e1gua e alimenta\u00e7\u00e3o el\u00e9trica j\u00e1 preparadas e sem altera\u00e7\u00f5es adicionais\"\r\n                                    data-higher-heading=\"Tende a custar mais\"\r\n                                    data-higher-text=\"Quando o equipamento est\u00e1 inclu\u00eddo, o termoacumulador \u00e9 maior, \u00e9 necess\u00e1rio mudar de local, remover o antigo ou fazer altera\u00e7\u00f5es de canaliza\u00e7\u00e3o ou eletricidade. Nestes casos, o total pode chegar a \u20ac200\u2013\u20ac700+\"\r\n                                    aria-haspopup=\"dialog\"\r\n                                >\r\n                                    <span>\r\n                                        View estimate\r\n                                    <\/span>\r\n\r\n                                    <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n                                        <path\r\n                                            d=\"M5 12h14M13 6l6 6-6 6\"\r\n                                            fill=\"none\"\r\n                                            stroke=\"currentColor\"\r\n                                            stroke-linecap=\"round\"\r\n                                            stroke-linejoin=\"round\"\r\n                                            stroke-width=\"2\"\r\n                                        ><\/path>\r\n                                    <\/svg>\r\n                                <\/button>\r\n\r\n                            \r\n                            <a\r\n                                class=\"pp-cost-guides__article-link\"\r\n                                href=\"https:\/\/prontosolucoes.pt\/pt\/custos-porto\/quanto-custa-instalar-um-termoacumulador-no-porto\/\"\r\n                            >\r\n                                Read full guide\r\n                            <\/a>\r\n\r\n                        <\/div>\r\n\r\n                    <\/article>\r\n\r\n                \r\n                    <article\r\n                        class=\"pp-cost-guides__card\"\r\n                        data-pp-cost-card\r\n                        data-category=\"eletricidade\"\r\n                    >\r\n\r\n                        \r\n                            <a\r\n                                class=\"pp-cost-guides__media\"\r\n                                href=\"https:\/\/prontosolucoes.pt\/pt\/custos-porto\/trocar-quadro-eletrico-no-porto\/\"\r\n                                aria-label=\"Trocar Quadro El\u00e9trico no Porto: Quanto Custa em 2026?\"\r\n                            >\r\n                                <img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"655\" src=\"https:\/\/prontosolucoes.pt\/wp-content\/uploads\/2026\/08\/eletricista-a-testar-quadro-eletrico-no-porto-1024x655.webp\" class=\"attachment-large size-large wp-post-image\" alt=\"Trocar Quadro El\u00e9trico no Porto\" loading=\"lazy\" \/>                            <\/a>\r\n\r\n                        \r\n                        <div class=\"pp-cost-guides__card-top\">\r\n                            <span class=\"pp-cost-guides__category\">\r\n                                Electrical                            <\/span>\r\n                        <\/div>\r\n\r\n                        <h3>\r\n                            Trocar Quadro El\u00e9trico no Porto: Quanto Custa em 2026?                        <\/h3>\r\n\r\n                        <p class=\"pp-cost-guides__summary\">\r\n                            Trocar um quadro el\u00e9trico no Porto pode custar cerca de \u20ac250 a \u20ac500 numa substitui\u00e7\u00e3o residencial normal. V\u00ea o que influencia o pre\u00e7o, o\u2026                        <\/p>\r\n\r\n                        <div class=\"pp-cost-guides__actions\">\r\n\r\n                            \r\n                                <button\r\n                                    class=\"pp-cost-guides__estimate\"\r\n                                    type=\"button\"\r\n                                    data-pp-estimate-toggle\r\n                                    data-guide-title=\"Trocar Quadro El\u00e9trico no Porto: Quanto Custa em 2026?\"\r\n                                    data-guide-category=\"Electrical\"\r\n                                    data-price-label=\"Pre\u00e7o indicativo\"\r\n                                    data-price-range=\"\u20ac250\u2013\u20ac500\"\r\n                                    data-lower-heading=\"Tende a custar menos\"\r\n                                    data-lower-text=\"Quando o quadro \u00e9 pequeno, existem poucos circuitos e a cablagem atual est\u00e1 em boas condi\u00e7\u00f5es\"\r\n                                    data-higher-heading=\"Tende a custar mais\"\r\n                                    data-higher-text=\"Quando existem muitos circuitos, \u00e9 necess\u00e1rio reorganizar a instala\u00e7\u00e3o, corrigir cablagem ou instalar prote\u00e7\u00f5es adicionais\"\r\n                                    aria-haspopup=\"dialog\"\r\n                                >\r\n                                    <span>\r\n                                        View estimate\r\n                                    <\/span>\r\n\r\n                                    <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n                                        <path\r\n                                            d=\"M5 12h14M13 6l6 6-6 6\"\r\n                                            fill=\"none\"\r\n                                            stroke=\"currentColor\"\r\n                                            stroke-linecap=\"round\"\r\n                                            stroke-linejoin=\"round\"\r\n                                            stroke-width=\"2\"\r\n                                        ><\/path>\r\n                                    <\/svg>\r\n                                <\/button>\r\n\r\n                            \r\n                            <a\r\n                                class=\"pp-cost-guides__article-link\"\r\n                                href=\"https:\/\/prontosolucoes.pt\/pt\/custos-porto\/trocar-quadro-eletrico-no-porto\/\"\r\n                            >\r\n                                Read full guide\r\n                            <\/a>\r\n\r\n                        <\/div>\r\n\r\n                    <\/article>\r\n\r\n                \r\n                    <article\r\n                        class=\"pp-cost-guides__card\"\r\n                        data-pp-cost-card\r\n                        data-category=\"canalizacao\"\r\n                    >\r\n\r\n                        \r\n                            <a\r\n                                class=\"pp-cost-guides__media\"\r\n                                href=\"https:\/\/prontosolucoes.pt\/pt\/custos-porto\/desentupimento-de-esgoto-preco-porto\/\"\r\n                                aria-label=\"Desentupimento de Esgoto Pre\u00e7o Porto: Quanto Custa em 2026?\"\r\n                            >\r\n                                <img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"682\" src=\"https:\/\/prontosolucoes.pt\/wp-content\/uploads\/2026\/06\/desentupimento-caixa-esgoto-porto-1024x682.webp\" class=\"attachment-large size-large wp-post-image\" alt=\"Desentupimento de Esgoto Pre\u00e7o Porto\" loading=\"lazy\" \/>                            <\/a>\r\n\r\n                        \r\n                        <div class=\"pp-cost-guides__card-top\">\r\n                            <span class=\"pp-cost-guides__category\">\r\n                                Plumbing                            <\/span>\r\n                        <\/div>\r\n\r\n                        <h3>\r\n                            Desentupimento de Esgoto Pre\u00e7o Porto: Quanto Custa em 2026?                        <\/h3>\r\n\r\n                        <p class=\"pp-cost-guides__summary\">\r\n                            Um entupimento localizado e de f\u00e1cil acesso tende a custar menos do que um bloqueio mais profundo no esgoto que exija equipamento especializado.                        <\/p>\r\n\r\n                        <div class=\"pp-cost-guides__actions\">\r\n\r\n                            \r\n                                <button\r\n                                    class=\"pp-cost-guides__estimate\"\r\n                                    type=\"button\"\r\n                                    data-pp-estimate-toggle\r\n                                    data-guide-title=\"Desentupimento de Esgoto Pre\u00e7o Porto: Quanto Custa em 2026?\"\r\n                                    data-guide-category=\"Plumbing\"\r\n                                    data-price-label=\"Pre\u00e7o indicativo\"\r\n                                    data-price-range=\"\u20ac85\u2013\u20ac140+\"\r\n                                    data-lower-heading=\"Tende a custar menos\"\r\n                                    data-lower-text=\"Quando o entupimento \u00e9 recente, localizado e de f\u00e1cil acesso\"\r\n                                    data-higher-heading=\"Tende a custar mais\"\r\n                                    data-higher-text=\"Quando o entupimento \u00e9 mais profundo, afeta v\u00e1rios pontos ou exige equipamento especializado\"\r\n                                    aria-haspopup=\"dialog\"\r\n                                >\r\n                                    <span>\r\n                                        View estimate\r\n                                    <\/span>\r\n\r\n                                    <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n                                        <path\r\n                                            d=\"M5 12h14M13 6l6 6-6 6\"\r\n                                            fill=\"none\"\r\n                                            stroke=\"currentColor\"\r\n                                            stroke-linecap=\"round\"\r\n                                            stroke-linejoin=\"round\"\r\n                                            stroke-width=\"2\"\r\n                                        ><\/path>\r\n                                    <\/svg>\r\n                                <\/button>\r\n\r\n                            \r\n                            <a\r\n                                class=\"pp-cost-guides__article-link\"\r\n                                href=\"https:\/\/prontosolucoes.pt\/pt\/custos-porto\/desentupimento-de-esgoto-preco-porto\/\"\r\n                            >\r\n                                Read full guide\r\n                            <\/a>\r\n\r\n                        <\/div>\r\n\r\n                    <\/article>\r\n\r\n                \r\n                    <article\r\n                        class=\"pp-cost-guides__card\"\r\n                        data-pp-cost-card\r\n                        data-category=\"eletricidade\"\r\n                    >\r\n\r\n                        \r\n                            <a\r\n                                class=\"pp-cost-guides__media\"\r\n                                href=\"https:\/\/prontosolucoes.pt\/pt\/custos-porto\/quanto-custa-instalar-uma-tomada\/\"\r\n                                aria-label=\"Quanto Custa Instalar uma Tomada no Porto? Pre\u00e7os por Ponto em 2026\"\r\n                            >\r\n                                <img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"684\" src=\"https:\/\/prontosolucoes.pt\/wp-content\/uploads\/2026\/08\/instalar-tomada-cozinha-porto-1024x684.webp\" class=\"attachment-large size-large wp-post-image\" alt=\"Quanto Custa Instalar uma Tomada no Porto\" loading=\"lazy\" \/>                            <\/a>\r\n\r\n                        \r\n                        <div class=\"pp-cost-guides__card-top\">\r\n                            <span class=\"pp-cost-guides__category\">\r\n                                Electrical                            <\/span>\r\n                        <\/div>\r\n\r\n                        <h3>\r\n                            Quanto Custa Instalar uma Tomada no Porto? Pre\u00e7os por Ponto em 2026                        <\/h3>\r\n\r\n                        <p class=\"pp-cost-guides__summary\">\r\n                            Substituir uma tomada existente \u00e9 diferente de criar um novo ponto ou um circuito dedicado.                        <\/p>\r\n\r\n                        <div class=\"pp-cost-guides__actions\">\r\n\r\n                            \r\n                                <button\r\n                                    class=\"pp-cost-guides__estimate\"\r\n                                    type=\"button\"\r\n                                    data-pp-estimate-toggle\r\n                                    data-guide-title=\"Quanto Custa Instalar uma Tomada no Porto? Pre\u00e7os por Ponto em 2026\"\r\n                                    data-guide-category=\"Electrical\"\r\n                                    data-price-label=\"Pre\u00e7o indicativo\"\r\n                                    data-price-range=\"\u20ac40\u2013\u20ac150\"\r\n                                    data-lower-heading=\"Tende a custar menos\"\r\n                                    data-lower-text=\"Quando \u00e9 necess\u00e1rio apenas substituir o mecanismo num ponto existente\"\r\n                                    data-higher-heading=\"Tende a custar mais\"\r\n                                    data-higher-text=\"uando \u00e9 necess\u00e1rio instalar nova cablagem, abrir a parede ou criar um novo circuito\"\r\n                                    aria-haspopup=\"dialog\"\r\n                                >\r\n                                    <span>\r\n                                        View estimate\r\n                                    <\/span>\r\n\r\n                                    <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n                                        <path\r\n                                            d=\"M5 12h14M13 6l6 6-6 6\"\r\n                                            fill=\"none\"\r\n                                            stroke=\"currentColor\"\r\n                                            stroke-linecap=\"round\"\r\n                                            stroke-linejoin=\"round\"\r\n                                            stroke-width=\"2\"\r\n                                        ><\/path>\r\n                                    <\/svg>\r\n                                <\/button>\r\n\r\n                            \r\n                            <a\r\n                                class=\"pp-cost-guides__article-link\"\r\n                                href=\"https:\/\/prontosolucoes.pt\/pt\/custos-porto\/quanto-custa-instalar-uma-tomada\/\"\r\n                            >\r\n                                Read full guide\r\n                            <\/a>\r\n\r\n                        <\/div>\r\n\r\n                    <\/article>\r\n\r\n                \r\n                <a\r\n                    class=\"pp-cost-guides__help pronto-precall pp-service-any cta-cost-guide-help\"\r\n                    href=\"#\"\r\n                    aria-label=\"Explain the problem and request assistance\"\r\n                >\r\n\r\n                    <span class=\"pp-cost-guides__help-icon\">\r\n                        <img\r\n                            src=\"https:\/\/prontosolucoes.pt\/wp-content\/uploads\/2026\/08\/home-repair-technicians-plumbing-electrical-handyman-porto.webp\"\r\n                            alt=\"Three home repair technicians representing plumbing, electrical and handyman services in Porto\"\r\n                            loading=\"lazy\"\r\n                            decoding=\"async\"\r\n                        >\r\n                    <\/span>\r\n\r\n                    <div class=\"pp-cost-guides__help-copy\">\r\n\r\n                        <h3>\r\n                            Can\u2019t find your repair?\r\n                        <\/h3>\r\n\r\n                        <p>\r\n                            Tell us what\u2019s happening, and we\u2019ll help identify the service you need\r\n                        <\/p>\r\n\r\n                    <\/div>\r\n\r\n                    <span class=\"pp-cost-guides__help-button\">\r\n                        Explain the problem\r\n\r\n                        <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n                            <path\r\n                                d=\"M5 12h14M13 6l6 6-6 6\"\r\n                                fill=\"none\"\r\n                                stroke=\"currentColor\"\r\n                                stroke-linecap=\"round\"\r\n                                stroke-linejoin=\"round\"\r\n                                stroke-width=\"2\"\r\n                            ><\/path>\r\n                        <\/svg>\r\n                    <\/span>\r\n\r\n                <\/a>\r\n\r\n            <\/div>\r\n\r\n        <\/div>\r\n    <\/section>\r\n\r\n    <div\r\n        class=\"pp-cost-estimate-modal\"\r\n        data-pp-cost-estimate-modal\r\n        aria-hidden=\"true\"\r\n    >\r\n        <div\r\n            class=\"pp-cost-estimate-modal__backdrop\"\r\n            data-pp-estimate-close\r\n        ><\/div>\r\n\r\n        <div\r\n            class=\"pp-cost-estimate-modal__sheet\"\r\n            role=\"dialog\"\r\n            aria-modal=\"true\"\r\n            aria-labelledby=\"pp-cost-estimate-modal-title\"\r\n        >\r\n            <div class=\"pp-cost-estimate-modal__topbar\">\r\n                <div class=\"pp-cost-estimate-modal__topmeta\">\r\n                    <div\r\n                        id=\"pp-cost-estimate-modal-title\"\r\n                        class=\"pp-cost-estimate-modal__title\"\r\n                    >\r\n                        Cost estimate\r\n                    <\/div>\r\n\r\n                    <div class=\"pp-cost-estimate-modal__subtitle\">\r\n                        Indicative pricing\r\n                    <\/div>\r\n                <\/div>\r\n\r\n                <button\r\n                    type=\"button\"\r\n                    class=\"pp-cost-estimate-modal__close\"\r\n                    data-pp-estimate-close\r\n                    aria-label=\"Close\"\r\n                >\r\n                    &times;\r\n                <\/button>\r\n            <\/div>\r\n\r\n            <div class=\"pp-cost-estimate-modal__body\">\r\n                <div class=\"pp-cost-estimate-modal__card\">\r\n                    <span\r\n                        class=\"pp-cost-estimate-modal__category\"\r\n                        data-pp-modal-category\r\n                    ><\/span>\r\n\r\n                    <h3\r\n                        class=\"pp-cost-estimate-modal__guide-title\"\r\n                        data-pp-modal-guide-title\r\n                    ><\/h3>\r\n\r\n                    <div class=\"pp-cost-estimate-modal__price\">\r\n                        <span\r\n                            class=\"pp-cost-estimate-modal__price-label\"\r\n                            data-pp-modal-price-label\r\n                        ><\/span>\r\n\r\n                        <strong\r\n                            class=\"pp-cost-estimate-modal__price-range\"\r\n                            data-pp-modal-price-range\r\n                        ><\/strong>\r\n\r\n                        <div class=\"pp-cost-estimate-modal__range-track\"><\/div>\r\n\r\n                        <div class=\"pp-cost-estimate-modal__range-labels\">\r\n                            <span>Simpler<\/span>\r\n                            <span>More complex<\/span>\r\n                        <\/div>\r\n                    <\/div>\r\n\r\n                    <div class=\"pp-cost-estimate-modal__drivers\">\r\n                        <div class=\"pp-cost-estimate-modal__driver\">\r\n                            <span\r\n                                class=\"pp-cost-estimate-modal__driver-title\"\r\n                                data-pp-modal-lower-heading\r\n                            ><\/span>\r\n\r\n                            <p data-pp-modal-lower-text><\/p>\r\n                        <\/div>\r\n\r\n                        <div class=\"pp-cost-estimate-modal__driver\">\r\n                            <span\r\n                                class=\"pp-cost-estimate-modal__driver-title\"\r\n                                data-pp-modal-higher-heading\r\n                            ><\/span>\r\n\r\n                            <p data-pp-modal-higher-text><\/p>\r\n                        <\/div>\r\n                    <\/div>\r\n                <\/div>\r\n            <\/div>\r\n\r\n            <div class=\"pp-cost-estimate-modal__footer\">\r\n                <button\r\n                    type=\"button\"\r\n                    class=\"pp-cost-estimate-modal__request pronto-precall pp-service-any cta-cost-guide-estimate\"\r\n                    data-pp-cost-request-service\r\n                >\r\n                    Request service\r\n                <\/button>\r\n            <\/div>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <script>\r\n        (function () {\r\n            const roots = document.querySelectorAll(\r\n                \"[data-pp-cost-guides-hub]\"\r\n            );\r\n\r\n            const modal = document.querySelector(\r\n                \"[data-pp-cost-estimate-modal]\"\r\n            );\r\n\r\n            if (!modal) {\r\n                return;\r\n            }\r\n\r\n            const requestButton = modal.querySelector(\r\n                \"[data-pp-cost-request-service]\"\r\n            );\r\n\r\n            const serviceMap = {\r\n                canalizacao: \"plumbing\",\r\n                eletricidade: \"electrical\",\r\n                \"manutencao-geral\": \"premium\"\r\n            };\r\n\r\n            const serviceClasses = [\r\n                \"pp-service-plumbing\",\r\n                \"pp-service-electrical\",\r\n                \"pp-service-premium\",\r\n                \"pp-service-any\"\r\n            ];\r\n\r\n            let lastTrigger = null;\r\n            let openAnimationTimer = null;\r\n            let closeAnimationTimer = null;\r\n\r\n            const OPEN_ANIMATION_MS = 300;\r\n            const CLOSE_ANIMATION_MS = 520;\r\n\r\n            function prefersReducedMotion() {\r\n                return !!(\r\n                    window.matchMedia &&\r\n                    window.matchMedia(\r\n                        \"(prefers-reduced-motion: reduce)\"\r\n                    ).matches\r\n                );\r\n            }\r\n\r\n            function clearOpenAnimation() {\r\n                if (openAnimationTimer) {\r\n                    window.clearTimeout(openAnimationTimer);\r\n                    openAnimationTimer = null;\r\n                }\r\n\r\n                modal.classList.remove(\"is-opening\");\r\n            }\r\n\r\n            function clearCloseAnimation() {\r\n                if (closeAnimationTimer) {\r\n                    window.clearTimeout(closeAnimationTimer);\r\n                    closeAnimationTimer = null;\r\n                }\r\n\r\n                modal.classList.remove(\"is-closing\");\r\n            }\r\n\r\n            function runOpenAnimation() {\r\n                clearOpenAnimation();\r\n                clearCloseAnimation();\r\n\r\n                if (prefersReducedMotion()) {\r\n                    return;\r\n                }\r\n\r\n                void modal.offsetWidth;\r\n\r\n                modal.classList.add(\"is-opening\");\r\n\r\n                openAnimationTimer = window.setTimeout(\r\n                    function () {\r\n                        modal.classList.remove(\"is-opening\");\r\n                        openAnimationTimer = null;\r\n                    },\r\n                    OPEN_ANIMATION_MS\r\n                );\r\n            }\r\n\r\n            function finalizeEstimateClose(restoreFocus) {\r\n                modal.setAttribute(\r\n                    \"aria-hidden\",\r\n                    \"true\"\r\n                );\r\n\r\n                clearOpenAnimation();\r\n                clearCloseAnimation();\r\n\r\n                document.body.classList.remove(\r\n                    \"pp-cost-estimate-open\"\r\n                );\r\n\r\n                if (restoreFocus && lastTrigger) {\r\n                    window.requestAnimationFrame(\r\n                        function () {\r\n                            lastTrigger.focus();\r\n                        }\r\n                    );\r\n                }\r\n            }\r\n\r\n            function setText(selector, value) {\r\n                const element = modal.querySelector(selector);\r\n\r\n                if (element) {\r\n                    element.textContent = value || \"\";\r\n                }\r\n            }\r\n\r\n            function setRequestService(categorySlug) {\r\n                if (!requestButton) {\r\n                    return;\r\n                }\r\n\r\n                serviceClasses.forEach(function (className) {\r\n                    requestButton.classList.remove(className);\r\n                });\r\n\r\n                const service = serviceMap[categorySlug] || \"any\";\r\n\r\n                requestButton.classList.add(\r\n                    \"pp-service-\" + service\r\n                );\r\n            }\r\n\r\n            function openEstimate(button) {\r\n                const card = button.closest(\r\n                    \"[data-pp-cost-card]\"\r\n                );\r\n\r\n                const categorySlug = card\r\n                    ? card.dataset.category\r\n                    : \"\";\r\n\r\n                lastTrigger = button;\r\n\r\n                setText(\r\n                    \"[data-pp-modal-category]\",\r\n                    button.dataset.guideCategory\r\n                );\r\n\r\n                setText(\r\n                    \"[data-pp-modal-guide-title]\",\r\n                    button.dataset.guideTitle\r\n                );\r\n\r\n                setText(\r\n                    \"[data-pp-modal-price-label]\",\r\n                    button.dataset.priceLabel\r\n                );\r\n\r\n                setText(\r\n                    \"[data-pp-modal-price-range]\",\r\n                    button.dataset.priceRange\r\n                );\r\n\r\n                setText(\r\n                    \"[data-pp-modal-lower-heading]\",\r\n                    button.dataset.lowerHeading\r\n                );\r\n\r\n                setText(\r\n                    \"[data-pp-modal-lower-text]\",\r\n                    button.dataset.lowerText\r\n                );\r\n\r\n                setText(\r\n                    \"[data-pp-modal-higher-heading]\",\r\n                    button.dataset.higherHeading\r\n                );\r\n\r\n                setText(\r\n                    \"[data-pp-modal-higher-text]\",\r\n                    button.dataset.higherText\r\n                );\r\n\r\n                setRequestService(categorySlug);\r\n\r\n                clearOpenAnimation();\r\n                clearCloseAnimation();\r\n\r\n                modal.setAttribute(\r\n                    \"aria-hidden\",\r\n                    \"false\"\r\n                );\r\n\r\n                document.body.classList.add(\r\n                    \"pp-cost-estimate-open\"\r\n                );\r\n\r\n                runOpenAnimation();\r\n\r\n                const closeButton = modal.querySelector(\r\n                    \".pp-cost-estimate-modal__close\"\r\n                );\r\n\r\n                if (closeButton) {\r\n                    closeButton.focus();\r\n                }\r\n            }\r\n\r\n            function closeEstimate(restoreFocus) {\r\n                if (\r\n                    modal.getAttribute(\"aria-hidden\") === \"true\" ||\r\n                    modal.classList.contains(\"is-closing\")\r\n                ) {\r\n                    return;\r\n                }\r\n\r\n                clearOpenAnimation();\r\n                clearCloseAnimation();\r\n\r\n                void modal.offsetWidth;\r\n\r\n                modal.classList.add(\"is-closing\");\r\n\r\n                closeAnimationTimer = window.setTimeout(\r\n                    function () {\r\n                        finalizeEstimateClose(restoreFocus);\r\n                    },\r\n                    prefersReducedMotion()\r\n                        ? 16\r\n                        : CLOSE_ANIMATION_MS\r\n                );\r\n            }\r\n\r\n            roots.forEach(function (root) {\r\n                if (root.dataset.ppHubReady === \"true\") {\r\n                    return;\r\n                }\r\n\r\n                root.dataset.ppHubReady = \"true\";\r\n\r\n                root\r\n                    .querySelectorAll(\r\n                        \"[data-pp-estimate-toggle]\"\r\n                    )\r\n                    .forEach(function (button) {\r\n                        button.addEventListener(\r\n                            \"click\",\r\n                            function () {\r\n                                openEstimate(button);\r\n                            }\r\n                        );\r\n                    });\r\n            });\r\n\r\n            modal\r\n                .querySelectorAll(\r\n                    \"[data-pp-estimate-close]\"\r\n                )\r\n                .forEach(function (element) {\r\n                    element.addEventListener(\r\n                        \"click\",\r\n                        function () {\r\n                            closeEstimate(true);\r\n                        }\r\n                    );\r\n                });\r\n\r\n            if (requestButton) {\r\n                requestButton.addEventListener(\r\n                    \"click\",\r\n                    function () {\r\n                        closeEstimate(false);\r\n                    }\r\n                );\r\n            }\r\n\r\n            document.addEventListener(\r\n                \"keydown\",\r\n                function (event) {\r\n                    if (\r\n                        event.key === \"Escape\" &&\r\n                        modal.getAttribute(\r\n                            \"aria-hidden\"\r\n                        ) === \"false\"\r\n                    ) {\r\n                        closeEstimate(true);\r\n                    }\r\n                }\r\n            );\r\n        })();\r\n    <\/script>\r\n\r\n    <\/div>\n\t\t\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-4eaec16 e-con-full e-flex e-con e-parent\" data-id=\"4eaec16\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-6cfb825 elementor-widget elementor-widget-html\" data-id=\"6cfb825\" 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(.pp-popular-jobs),\r\n  body .elementor-widget-html:has(.pp-popular-jobs)\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    .pp-popular-jobs\r\n  ),\r\n  body .e-con:has(\r\n    > .e-con-inner\r\n    > .elementor-widget-html\r\n    .pp-popular-jobs\r\n  ),\r\n  body .e-con > .e-con-inner:has(\r\n    > .elementor-widget-html\r\n    .pp-popular-jobs\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  .pp-popular-jobs {\r\n    --pp-popular-navy: #0f2b49;\r\n    --pp-popular-gold: #e1a134;\r\n    --pp-popular-gold-dark: #c98922;\r\n    width: 100%;\r\n    margin: 0;\r\n    padding: 88px 24px;\r\n    background: #ffffff;\r\n    color: var(--pp-popular-navy);\r\n    font-family: \"Montserrat\", sans-serif;\r\n  }\r\n\r\n  .pp-popular-jobs,\r\n  .pp-popular-jobs * {\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  .pp-popular-jobs__inner {\r\n    width: 100%;\r\n    max-width: 1180px;\r\n    margin: 0 auto;\r\n  }\r\n\r\n  .pp-popular-jobs__heading {\r\n    max-width: 720px;\r\n    margin: 0 auto 48px;\r\n    text-align: center;\r\n  }\r\n\r\n  .pp-popular-jobs__heading h2 {\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  .pp-popular-jobs__heading p {\r\n    margin: 14px 0 0;\r\n    color: #4f5661;\r\n    font-family: \"Montserrat\", sans-serif;\r\n    font-size: 16px;\r\n    font-weight: 500;\r\n    line-height: 1.58;\r\n  }\r\n\r\n  .pp-popular-jobs__grid {\r\n    display: grid;\r\n    grid-template-columns: repeat(3, minmax(0, 1fr));\r\n    gap: 18px;\r\n    width: 100%;\r\n  }\r\n\r\n  .pp-popular-jobs__card {\r\n    display: grid;\r\n    grid-template-columns: 60px minmax(0, 1fr) 22px;\r\n    gap: 17px;\r\n    align-items: center;\r\n    width: 100%;\r\n    min-width: 0;\r\n    min-height: 168px;\r\n    margin: 0;\r\n    padding: 26px 22px;\r\n    appearance: none;\r\n    border: 1px solid #d6d9dc;\r\n    border-radius: 12px;\r\n    background: #ffffff;\r\n    box-shadow: 0 8px 24px rgba(15, 43, 73, 0.06);\r\n    color: #0f2b49;\r\n    font: inherit;\r\n    text-align: left;\r\n    cursor: pointer;\r\n    transition:\r\n      border-color 180ms ease,\r\n      box-shadow 180ms ease,\r\n      transform 180ms ease;\r\n  }\r\n\r\n  .pp-popular-jobs__icon {\r\n    display: grid;\r\n    width: 60px;\r\n    height: 60px;\r\n    place-items: center;\r\n    border-radius: 15px;\r\n    background: rgba(225, 161, 52, 0.14);\r\n    color: #0f2b49;\r\n  }\r\n\r\n  .pp-popular-jobs__icon svg {\r\n    width: 31px;\r\n    height: 31px;\r\n  }\r\n\r\n  .pp-popular-jobs__content {\r\n    display: block;\r\n    min-width: 0;\r\n  }\r\n\r\n  .pp-popular-jobs__title {\r\n    display: block;\r\n    color: #0f2b49;\r\n    font-family: \"Montserrat\", sans-serif;\r\n    font-size: 17px;\r\n    font-weight: 700;\r\n    letter-spacing: -0.015em;\r\n    line-height: 1.28;\r\n  }\r\n\r\n  .pp-popular-jobs__description {\r\n    display: block;\r\n    margin-top: 8px;\r\n    color: #4f5661;\r\n    font-family: \"Montserrat\", sans-serif;\r\n    font-size: 13px;\r\n    font-weight: 500;\r\n    line-height: 1.5;\r\n  }\r\n\r\n  .pp-popular-jobs__arrow {\r\n    display: grid;\r\n    width: 22px;\r\n    height: 22px;\r\n    place-items: center;\r\n    color: var(--pp-popular-gold-dark);\r\n    transition: transform 180ms ease;\r\n  }\r\n\r\n  .pp-popular-jobs__arrow svg {\r\n    width: 20px;\r\n    height: 20px;\r\n  }\r\n\r\n  @media (hover: hover) {\r\n    .pp-popular-jobs__card:hover {\r\n      border-color: rgba(225, 161, 52, 0.82);\r\n      box-shadow: 0 16px 34px rgba(15, 43, 73, 0.12);\r\n      transform: translateY(-3px);\r\n    }\r\n\r\n    .pp-popular-jobs__card:hover .pp-popular-jobs__arrow {\r\n      transform: translateX(3px);\r\n    }\r\n  }\r\n\r\n  .pp-popular-jobs__card:focus-visible {\r\n    border-color: var(--pp-popular-gold-dark);\r\n    outline: 3px solid rgba(15, 43, 73, 0.22);\r\n    outline-offset: 4px;\r\n  }\r\n\r\n  @media (max-width: 900px) {\r\n    .pp-popular-jobs {\r\n      padding: 72px 20px;\r\n    }\r\n\r\n    .pp-popular-jobs__heading {\r\n      margin-bottom: 40px;\r\n    }\r\n\r\n    .pp-popular-jobs__grid {\r\n      grid-template-columns: repeat(2, minmax(0, 1fr));\r\n      gap: 16px;\r\n    }\r\n  }\r\n\r\n  @media (max-width: 620px) {\r\n    .pp-popular-jobs {\r\n      padding: 60px 16px;\r\n    }\r\n\r\n    .pp-popular-jobs__heading {\r\n      margin-bottom: 32px;\r\n    }\r\n\r\n    .pp-popular-jobs__heading h2 {\r\n      font-size: clamp(2rem, 8vw, 2.6rem);\r\n      line-height: 1.1;\r\n    }\r\n\r\n    .pp-popular-jobs__heading p {\r\n      margin-top: 12px;\r\n      font-size: 14px;\r\n    }\r\n\r\n    .pp-popular-jobs__grid {\r\n      grid-template-columns: 1fr;\r\n      gap: 12px;\r\n    }\r\n\r\n    .pp-popular-jobs__card {\r\n      grid-template-columns: 52px minmax(0, 1fr) 20px;\r\n      gap: 14px;\r\n      min-height: 126px;\r\n      padding: 20px 18px;\r\n      border-radius: 10px;\r\n    }\r\n\r\n    .pp-popular-jobs__icon {\r\n      width: 52px;\r\n      height: 52px;\r\n      border-radius: 13px;\r\n    }\r\n\r\n    .pp-popular-jobs__icon svg {\r\n      width: 28px;\r\n      height: 28px;\r\n    }\r\n\r\n    .pp-popular-jobs__title {\r\n      font-size: 15px;\r\n      line-height: 1.3;\r\n    }\r\n\r\n    .pp-popular-jobs__description {\r\n      margin-top: 6px;\r\n      font-size: 12px;\r\n      line-height: 1.45;\r\n    }\r\n  }\r\n\r\n  @media (prefers-reduced-motion: reduce) {\r\n    .pp-popular-jobs__card,\r\n    .pp-popular-jobs__arrow {\r\n      transition: none;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<section\r\n  class=\"pp-popular-jobs\"\r\n  aria-labelledby=\"pp-popular-jobs-title\"\r\n  data-pronto-popular-jobs\r\n>\r\n  <div class=\"pp-popular-jobs__inner\">\r\n    <header class=\"pp-popular-jobs__heading\">\r\n      <h2 id=\"pp-popular-jobs-title\">\r\n        Common repairs\r\n      <\/h2>\r\n\r\n      <p>\r\n        Select the closest match to start your request.\r\n      <\/p>\r\n    <\/header>\r\n\r\n    <div class=\"pp-popular-jobs__grid\">\r\n\r\n      <button\r\n        type=\"button\"\r\n        class=\"pp-popular-jobs__card pronto-precall pp-service-plumbing pp-problem-clogged-drain cta-popular-job-drain-unblocking\"\r\n        aria-label=\"Start a request for drain unblocking\"\r\n      >\r\n        <span\r\n          class=\"pp-popular-jobs__icon\"\r\n          aria-hidden=\"true\"\r\n        >\r\n          <svg viewBox=\"0 0 24 24\">\r\n            <path\r\n              d=\"M4 10h16M6 10v1a6 6 0 0 0 12 0v-1M9 5h6M12 5v5M9 20h6\"\r\n              fill=\"none\"\r\n              stroke=\"currentColor\"\r\n              stroke-linecap=\"round\"\r\n              stroke-linejoin=\"round\"\r\n              stroke-width=\"1.8\"\r\n            ><\/path>\r\n          <\/svg>\r\n        <\/span>\r\n\r\n        <span class=\"pp-popular-jobs__content\">\r\n          <span class=\"pp-popular-jobs__title\">\r\n            Drain Unblocking\r\n          <\/span>\r\n\r\n          <span class=\"pp-popular-jobs__description\">\r\n            Blocked drains, sinks and waste pipes\r\n          <\/span>\r\n        <\/span>\r\n\r\n        <span\r\n          class=\"pp-popular-jobs__arrow\"\r\n          aria-hidden=\"true\"\r\n        >\r\n          <svg viewBox=\"0 0 24 24\">\r\n            <path\r\n              d=\"M5 12h14M13 6l6 6-6 6\"\r\n              fill=\"none\"\r\n              stroke=\"currentColor\"\r\n              stroke-linecap=\"round\"\r\n              stroke-linejoin=\"round\"\r\n              stroke-width=\"2\"\r\n            ><\/path>\r\n          <\/svg>\r\n        <\/span>\r\n      <\/button>\r\n\r\n      <button\r\n        type=\"button\"\r\n        class=\"pp-popular-jobs__card pronto-precall pp-service-plumbing pp-problemset-leak cta-popular-job-leaks-pipes-water\"\r\n        aria-label=\"Start a request for leaks, pipes and water supply\"\r\n      >\r\n        <span\r\n          class=\"pp-popular-jobs__icon\"\r\n          aria-hidden=\"true\"\r\n        >\r\n          <svg viewBox=\"0 0 24 24\">\r\n            <path\r\n              d=\"M5 5h7v4h3a4 4 0 0 1 4 4v1M5 3v4M3 5h4M19 17s-2 2.2-2 3.5a2 2 0 0 0 4 0C21 19.2 19 17 19 17Z\"\r\n              fill=\"none\"\r\n              stroke=\"currentColor\"\r\n              stroke-linecap=\"round\"\r\n              stroke-linejoin=\"round\"\r\n              stroke-width=\"1.8\"\r\n            ><\/path>\r\n          <\/svg>\r\n        <\/span>\r\n\r\n        <span class=\"pp-popular-jobs__content\">\r\n          <span class=\"pp-popular-jobs__title\">\r\n            Leaks, Pipes &amp; Water Supply\r\n          <\/span>\r\n\r\n          <span class=\"pp-popular-jobs__description\">\r\n            Leaks, burst pipes, low pressure, no water and supply-pipe repairs\r\n          <\/span>\r\n        <\/span>\r\n\r\n        <span\r\n          class=\"pp-popular-jobs__arrow\"\r\n          aria-hidden=\"true\"\r\n        >\r\n          <svg viewBox=\"0 0 24 24\">\r\n            <path\r\n              d=\"M5 12h14M13 6l6 6-6 6\"\r\n              fill=\"none\"\r\n              stroke=\"currentColor\"\r\n              stroke-linecap=\"round\"\r\n              stroke-linejoin=\"round\"\r\n              stroke-width=\"2\"\r\n            ><\/path>\r\n          <\/svg>\r\n        <\/span>\r\n      <\/button>\r\n\r\n      <button\r\n        type=\"button\"\r\n        class=\"pp-popular-jobs__card pronto-precall pp-service-plumbing pp-problem-toilet-problem cta-popular-job-toilet-cistern\"\r\n        aria-label=\"Start a request for toilet and cistern repair\"\r\n      >\r\n        <span\r\n          class=\"pp-popular-jobs__icon\"\r\n          aria-hidden=\"true\"\r\n        >\r\n          <svg viewBox=\"0 0 24 24\">\r\n            <path\r\n              d=\"M8 3h8v7H8V3Zm-1 7h10v2a6 6 0 0 1-6 6H9a2 2 0 0 1-2-2v-6Zm4 8v3M8 21h7\"\r\n              fill=\"none\"\r\n              stroke=\"currentColor\"\r\n              stroke-linecap=\"round\"\r\n              stroke-linejoin=\"round\"\r\n              stroke-width=\"1.8\"\r\n            ><\/path>\r\n          <\/svg>\r\n        <\/span>\r\n\r\n        <span class=\"pp-popular-jobs__content\">\r\n          <span class=\"pp-popular-jobs__title\">\r\n            Toilet &amp; Cistern Repair\r\n          <\/span>\r\n\r\n          <span class=\"pp-popular-jobs__description\">\r\n            Blocked toilets, cisterns, flush mechanisms, leaks and seals\r\n          <\/span>\r\n        <\/span>\r\n\r\n        <span\r\n          class=\"pp-popular-jobs__arrow\"\r\n          aria-hidden=\"true\"\r\n        >\r\n          <svg viewBox=\"0 0 24 24\">\r\n            <path\r\n              d=\"M5 12h14M13 6l6 6-6 6\"\r\n              fill=\"none\"\r\n              stroke=\"currentColor\"\r\n              stroke-linecap=\"round\"\r\n              stroke-linejoin=\"round\"\r\n              stroke-width=\"2\"\r\n            ><\/path>\r\n          <\/svg>\r\n        <\/span>\r\n      <\/button>\r\n\r\n      <button\r\n        type=\"button\"\r\n        class=\"pp-popular-jobs__card pronto-precall pp-service-plumbing pp-problem-no-hot-water cta-popular-job-water-heater\"\r\n        aria-label=\"Start a request for water heater repair\"\r\n      >\r\n        <span\r\n          class=\"pp-popular-jobs__icon\"\r\n          aria-hidden=\"true\"\r\n        >\r\n          <svg viewBox=\"0 0 24 24\">\r\n            <rect\r\n              x=\"7\"\r\n              y=\"3\"\r\n              width=\"10\"\r\n              height=\"18\"\r\n              rx=\"3\"\r\n              fill=\"none\"\r\n              stroke=\"currentColor\"\r\n              stroke-width=\"1.8\"\r\n            ><\/rect>\r\n\r\n            <path\r\n              d=\"M10 7h4M12 11s-2 2.3-2 3.7a2 2 0 0 0 4 0C14 13.3 12 11 12 11Z\"\r\n              fill=\"none\"\r\n              stroke=\"currentColor\"\r\n              stroke-linecap=\"round\"\r\n              stroke-linejoin=\"round\"\r\n              stroke-width=\"1.8\"\r\n            ><\/path>\r\n          <\/svg>\r\n        <\/span>\r\n\r\n        <span class=\"pp-popular-jobs__content\">\r\n          <span class=\"pp-popular-jobs__title\">\r\n            Water Heater Repair\r\n          <\/span>\r\n\r\n          <span class=\"pp-popular-jobs__description\">\r\n            No hot water and water-heater faults\r\n          <\/span>\r\n        <\/span>\r\n\r\n        <span\r\n          class=\"pp-popular-jobs__arrow\"\r\n          aria-hidden=\"true\"\r\n        >\r\n          <svg viewBox=\"0 0 24 24\">\r\n            <path\r\n              d=\"M5 12h14M13 6l6 6-6 6\"\r\n              fill=\"none\"\r\n              stroke=\"currentColor\"\r\n              stroke-linecap=\"round\"\r\n              stroke-linejoin=\"round\"\r\n              stroke-width=\"2\"\r\n            ><\/path>\r\n          <\/svg>\r\n        <\/span>\r\n      <\/button>\r\n\r\n      <button\r\n        type=\"button\"\r\n        class=\"pp-popular-jobs__card pronto-precall pp-service-electrical pp-problemset-emergency cta-popular-job-electrical-faults\"\r\n        aria-label=\"Start a request for electrical faults and power problems\"\r\n      >\r\n        <span\r\n          class=\"pp-popular-jobs__icon\"\r\n          aria-hidden=\"true\"\r\n        >\r\n          <svg viewBox=\"0 0 24 24\">\r\n            <path\r\n              d=\"m13.5 2-7 12h5l-1 8 7-12h-5l1-8Z\"\r\n              fill=\"none\"\r\n              stroke=\"currentColor\"\r\n              stroke-linecap=\"round\"\r\n              stroke-linejoin=\"round\"\r\n              stroke-width=\"1.8\"\r\n            ><\/path>\r\n          <\/svg>\r\n        <\/span>\r\n\r\n        <span class=\"pp-popular-jobs__content\">\r\n          <span class=\"pp-popular-jobs__title\">\r\n            Electrical Faults &amp; Power Problems\r\n          <\/span>\r\n\r\n          <span class=\"pp-popular-jobs__description\">\r\n            Power loss, short circuits, sockets and flickering lights\r\n          <\/span>\r\n        <\/span>\r\n\r\n        <span\r\n          class=\"pp-popular-jobs__arrow\"\r\n          aria-hidden=\"true\"\r\n        >\r\n          <svg viewBox=\"0 0 24 24\">\r\n            <path\r\n              d=\"M5 12h14M13 6l6 6-6 6\"\r\n              fill=\"none\"\r\n              stroke=\"currentColor\"\r\n              stroke-linecap=\"round\"\r\n              stroke-linejoin=\"round\"\r\n              stroke-width=\"2\"\r\n            ><\/path>\r\n          <\/svg>\r\n        <\/span>\r\n      <\/button>\r\n\r\n      <button\r\n        type=\"button\"\r\n        class=\"pp-popular-jobs__card pronto-precall pp-service-electrical pp-problemset-breaker cta-popular-job-panels-breakers-grounding\"\r\n        aria-label=\"Start a request for electrical panels, breakers and grounding\"\r\n      >\r\n        <span\r\n          class=\"pp-popular-jobs__icon\"\r\n          aria-hidden=\"true\"\r\n        >\r\n          <svg viewBox=\"0 0 24 24\">\r\n            <rect\r\n              x=\"5\"\r\n              y=\"3\"\r\n              width=\"14\"\r\n              height=\"18\"\r\n              rx=\"2\"\r\n              fill=\"none\"\r\n              stroke=\"currentColor\"\r\n              stroke-width=\"1.8\"\r\n            ><\/rect>\r\n\r\n            <path\r\n              d=\"M9 7h6M9 11h2M14 11h1M12 14v3M9 17h6M10 20h4\"\r\n              fill=\"none\"\r\n              stroke=\"currentColor\"\r\n              stroke-linecap=\"round\"\r\n              stroke-linejoin=\"round\"\r\n              stroke-width=\"1.8\"\r\n            ><\/path>\r\n          <\/svg>\r\n        <\/span>\r\n\r\n        <span class=\"pp-popular-jobs__content\">\r\n          <span class=\"pp-popular-jobs__title\">\r\n            Electrical Panels, Breakers &amp; Grounding\r\n          <\/span>\r\n\r\n          <span class=\"pp-popular-jobs__description\">\r\n            Panels, tripping breakers and grounding issues\r\n          <\/span>\r\n        <\/span>\r\n\r\n        <span\r\n          class=\"pp-popular-jobs__arrow\"\r\n          aria-hidden=\"true\"\r\n        >\r\n          <svg viewBox=\"0 0 24 24\">\r\n            <path\r\n              d=\"M5 12h14M13 6l6 6-6 6\"\r\n              fill=\"none\"\r\n              stroke=\"currentColor\"\r\n              stroke-linecap=\"round\"\r\n              stroke-linejoin=\"round\"\r\n              stroke-width=\"2\"\r\n            ><\/path>\r\n          <\/svg>\r\n        <\/span>\r\n      <\/button>\r\n\r\n    <\/div>\r\n  <\/div>\r\n<\/section>\r\n\r\n<script>\r\n  (function(){\r\n    const root = document.querySelector('[data-pronto-popular-jobs]');\r\n    if(!root) return;\r\n\r\n    const isPortuguese = \/^\\\/pt(?:\\\/|$)\/.test(window.location.pathname);\r\n\r\n    const COPY = {\r\n      en: {\r\n        heading: 'Common repairs',\r\n        subheading: 'Select the closest match to start your request.',\r\n        cards: [\r\n          {\r\n            title: 'Drain Unblocking',\r\n            description: 'Blocked drains, sinks and waste pipes',\r\n            aria: 'Start a request for drain unblocking'\r\n          },\r\n          {\r\n            title: 'Leaks, Pipes & Water Supply',\r\n            description: 'Leaks, burst pipes, low pressure, no water and supply-pipe repairs',\r\n            aria: 'Start a request for leaks, pipes and water supply'\r\n          },\r\n          {\r\n            title: 'Toilet & Cistern Repair',\r\n            description: 'Blocked toilets, cisterns, flush mechanisms, leaks and seals',\r\n            aria: 'Start a request for toilet and cistern repair'\r\n          },\r\n          {\r\n            title: 'Water Heater Repair',\r\n            description: 'No hot water and water-heater faults',\r\n            aria: 'Start a request for water heater repair'\r\n          },\r\n          {\r\n            title: 'Electrical Faults & Power Problems',\r\n            description: 'Power loss, short circuits, sockets and flickering lights',\r\n            aria: 'Start a request for electrical faults and power problems'\r\n          },\r\n          {\r\n            title: 'Electrical Panels, Breakers & Grounding',\r\n            description: 'Panels, tripping breakers and grounding issues',\r\n            aria: 'Start a request for electrical panels, breakers and grounding'\r\n          }\r\n        ]\r\n      },\r\n\r\n      pt: {\r\n        heading: 'Repara\u00e7\u00f5es comuns',\r\n        subheading: 'Selecione a op\u00e7\u00e3o mais pr\u00f3xima para iniciar o seu pedido.',\r\n        cards: [\r\n          {\r\n            title: 'Desentupimento de Ralos',\r\n            description: 'Desentupimentos de ralos, lavat\u00f3rios e tubagens de esgoto',\r\n            aria: 'Iniciar um pedido de desentupimento de ralos'\r\n          },\r\n          {\r\n            title: 'Fugas, Tubagens e Abastecimento de \u00c1gua',\r\n            description: 'Fugas, canos rebentados, baixa press\u00e3o, falta de \u00e1gua e repara\u00e7\u00f5es na tubagem de abastecimento',\r\n            aria: 'Iniciar um pedido para fugas, tubagens e abastecimento de \u00e1gua'\r\n          },\r\n          {\r\n            title: 'Repara\u00e7\u00e3o de Sanitas e Autoclismos',\r\n            description: 'Sanitas entupidas, autoclismos, mecanismos de descarga, fugas e vedantes',\r\n            aria: 'Iniciar um pedido de repara\u00e7\u00e3o de sanitas e autoclismos'\r\n          },\r\n          {\r\n            title: 'Repara\u00e7\u00e3o de Esquentadores',\r\n            description: 'Sem \u00e1gua quente e avarias no esquentador',\r\n            aria: 'Iniciar um pedido de repara\u00e7\u00e3o de esquentador'\r\n          },\r\n          {\r\n            title: 'Avarias El\u00e9tricas e Problemas de Energia',\r\n            description: 'Falta de energia, curtos-circuitos, tomadas e luzes a piscar',\r\n            aria: 'Iniciar um pedido para avarias el\u00e9tricas e problemas de energia'\r\n          },\r\n          {\r\n            title: 'Quadros El\u00e9tricos, Disjuntores e Liga\u00e7\u00e3o \u00e0 Terra',\r\n            description: 'Quadros el\u00e9tricos, disjuntores que disparam e problemas de liga\u00e7\u00e3o \u00e0 terra',\r\n            aria: 'Iniciar um pedido para quadros el\u00e9tricos, disjuntores e liga\u00e7\u00e3o \u00e0 terra'\r\n          }\r\n        ]\r\n      }\r\n    };\r\n\r\n    const copy = isPortuguese ? COPY.pt : COPY.en;\r\n\r\n    const headingEl = root.querySelector('#pp-popular-jobs-title');\r\n    const subheadingEl = root.querySelector('.pp-popular-jobs__heading p');\r\n    const cards = root.querySelectorAll('.pp-popular-jobs__card');\r\n\r\n    if(headingEl){\r\n      headingEl.textContent = copy.heading;\r\n    }\r\n\r\n    if(subheadingEl){\r\n      subheadingEl.textContent = copy.subheading;\r\n    }\r\n\r\n    cards.forEach(function(card, index){\r\n      const cardCopy = copy.cards[index];\r\n      if(!cardCopy) return;\r\n\r\n      const titleEl = card.querySelector('.pp-popular-jobs__title');\r\n      const descriptionEl = card.querySelector('.pp-popular-jobs__description');\r\n\r\n      if(titleEl){\r\n        titleEl.textContent = cardCopy.title;\r\n      }\r\n\r\n      if(descriptionEl){\r\n        descriptionEl.textContent = cardCopy.description;\r\n      }\r\n\r\n      card.setAttribute('aria-label', cardCopy.aria);\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-2254c46 e-con-full e-flex e-con e-parent\" data-id=\"2254c46\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1fdd98d elementor-widget elementor-widget-html\" data-id=\"1fdd98d\" 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<div class=\"pronto-newsletter-band\" data-pronto-newsletter>\r\n  <div class=\"pronto-newsletter-inner\">\r\n    <div class=\"pronto-newsletter-copy\">\r\n      <div class=\"pronto-newsletter-kicker\">Cost guides<\/div>\r\n      <h3 class=\"pronto-newsletter-title\">Plan property repairs with fewer surprises<\/h3>\r\n      <p class=\"pronto-newsletter-sub\">\r\n        Get one or two useful emails a month with local price guides, maintenance advice and practical ways to avoid costly repairs. Unsubscribe anytime.\r\n      <\/p>\r\n    <\/div>\r\n\r\n    <div class=\"pronto-newsletter-formwrap\">\r\n      <form class=\"pronto-newsletter-form\" novalidate>\r\n        <div class=\"pronto-newsletter-row\">\r\n          <input\r\n            class=\"pronto-newsletter-email\"\r\n            type=\"email\"\r\n            name=\"email\"\r\n            inputmode=\"email\"\r\n            autocomplete=\"email\"\r\n            placeholder=\"Your email\"\r\n            aria-label=\"Your email\"\r\n            required\r\n          \/>\r\n          <button class=\"pronto-newsletter-btn\" type=\"submit\" aria-label=\"Subscribe\">\r\n            \u2192\r\n          <\/button>\r\n        <\/div>\r\n\r\n        <!-- Honeypot (bots only). Must stay empty. -->\r\n        <input\r\n          class=\"pronto-newsletter-hp\"\r\n          type=\"text\"\r\n          name=\"hp_company\"\r\n          tabindex=\"-1\"\r\n          autocomplete=\"off\"\r\n          aria-hidden=\"true\"\r\n        \/>\r\n\r\n        <label class=\"pronto-newsletter-consent\">\r\n          <input class=\"pronto-newsletter-consentbox\" type=\"checkbox\" name=\"consent\" required \/>\r\n          <span>\r\n            <span data-pronto-consent-copy>I have read and accept the<\/span>\r\n            <a\r\n              href=\"https:\/\/prontosolucoes.pt\/privacy-policy\/\"\r\n              target=\"_blank\"\r\n              rel=\"noopener\"\r\n              data-pronto-privacy-link\r\n            >Privacy Policy<\/a>.\r\n          <\/span>\r\n        <\/label>\r\n        <div class=\"pronto-newsletter-msg\" aria-live=\"polite\"><\/div>\r\n      <\/form>\r\n    <\/div>\r\n  <\/div>\r\n<\/div>\r\n\r\n<style>\r\n  .pronto-newsletter-band{\r\n    --bg: #0F2B46;\r\n    --text: #FFFFFF;\r\n    --muted: rgba(255,255,255,0.85);\r\n    --field: #FFFFFF;\r\n\r\n    --btn: #E1A134;\r\n    --btnHover: #D97706;\r\n    --btnText: #0F2B49;\r\n\r\n    width: min(100% - 40px, 1180px);\r\n    box-sizing: border-box;\r\n    background: var(--bg);\r\n    color: var(--text);\r\n    border-radius: 18px;\r\n    padding: 28px;\r\n    margin: 24px auto;\r\n  }\r\n\r\n  .pronto-newsletter-inner{\r\n    display: grid;\r\n    grid-template-columns: 1.15fr 1fr;\r\n    gap: 22px;\r\n    align-items: center;\r\n  }\r\n\r\n  .pronto-newsletter-kicker{\r\n    font-size: 12px;\r\n    letter-spacing: 0.06em;\r\n    text-transform: uppercase;\r\n    color: var(--muted);\r\n    margin-bottom: 8px;\r\n  }\r\n\r\n  .pronto-newsletter-title{\r\n    margin: 0 0 10px 0;\r\n    font-size: 34px;\r\n    line-height: 1.05;\r\n    font-weight: 800;\r\n    color: var(--text);\r\n  }\r\n\r\n  .pronto-newsletter-sub{\r\n    margin: 0;\r\n    font-size: 15px;\r\n    line-height: 1.45;\r\n    color: var(--muted);\r\n    max-width: 52ch;\r\n  }\r\n\r\n  .pronto-newsletter-form{\r\n    margin: 0;\r\n  }\r\n\r\n  .pronto-newsletter-row{\r\n    display: flex;\r\n    gap: 12px;\r\n    align-items: stretch;\r\n  }\r\n\r\n.pronto-newsletter-band .pronto-newsletter-row input.pronto-newsletter-email{\r\n  flex: 1;\r\n  height: 48px;\r\n  border: 1px solid rgba(15,43,73,0.14);\r\n  border-radius: 999px;\r\n  padding: 0 16px;\r\n  background: #FFFFFF !important;\r\n  background-color: #FFFFFF !important;\r\n  color: #0F2B49 !important;\r\n  font-size: 15px;\r\n  outline: none;\r\n  box-shadow: 0 1px 0 rgba(255,255,255,0.06);\r\n  -webkit-text-fill-color: #0F2B49;\r\n}\r\n\r\n.pronto-newsletter-band .pronto-newsletter-row input.pronto-newsletter-email::placeholder{\r\n  color: rgba(15,43,73,0.55) !important;\r\n  opacity: 1;\r\n}\r\n\r\n.pronto-newsletter-band .pronto-newsletter-row input.pronto-newsletter-email:focus{\r\n  border-color: rgba(225,161,52,0.85);\r\n  box-shadow: 0 0 0 4px rgba(225,161,52,0.22);\r\n}\r\n.pronto-newsletter-email::placeholder{\r\n  color: rgba(15,43,73,0.55);\r\n}\r\n\r\n.pronto-newsletter-email:focus{\r\n  border-color: rgba(225,161,52,0.75);\r\n  box-shadow: 0 0 0 4px rgba(225,161,52,0.22);\r\n}\r\n\r\n.pronto-newsletter-disclaimer{\r\n  margin-top: 8px;\r\n  font-size: 11px;\r\n  line-height: 1.35;\r\n  color: rgba(255,255,255,0.78);\r\n}\r\n  .pronto-newsletter-btn{\r\n    width: 56px;\r\n    height: 48px;\r\n    border: 0;\r\n    border-radius: 999px;\r\n    background: var(--btn);\r\n    color: var(--btnText);\r\n    font-size: 20px;\r\n    font-weight: 900;\r\n    cursor: pointer;\r\n    transition: transform 0.08s ease, opacity 0.12s ease, background 0.12s ease;\r\n  }\r\n\r\n  .pronto-newsletter-btn:hover{\r\n    background: var(--btnHover);\r\n  }\r\n\r\n  .pronto-newsletter-btn:active{\r\n    transform: scale(0.98);\r\n  }\r\n\r\n  .pronto-newsletter-consent{\r\n    display: flex;\r\n    gap: 10px;\r\n    align-items: flex-start;\r\n    margin-top: 12px;\r\n    font-size: 12px;\r\n    line-height: 1.35;\r\n    color: var(--muted);\r\n  }\r\n\r\n  .pronto-newsletter-consent a{\r\n    color: var(--text);\r\n    text-decoration: underline;\r\n  }\r\n\r\n  .pronto-newsletter-consentbox{\r\n    margin-top: 3px;\r\n  }\r\n\r\n  .pronto-newsletter-msg{\r\n    margin-top: 10px;\r\n    font-size: 13px;\r\n    color: var(--text);\r\n  }\r\n\r\n  .pronto-newsletter-hp{\r\n    position: absolute !important;\r\n    left: -9999px !important;\r\n    width: 1px !important;\r\n    height: 1px !important;\r\n    opacity: 0 !important;\r\n  }\r\n\r\n  @media (max-width: 820px){\r\n    .pronto-newsletter-inner{\r\n      grid-template-columns: 1fr;\r\n    }\r\n    .pronto-newsletter-title{\r\n      font-size: 28px;\r\n    }\r\n    .pronto-newsletter-band{\r\n      padding: 22px;\r\n    }\r\n    .pronto-newsletter-btn{\r\n      width: 52px;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n<script>\r\n    (function(){\r\n        const root = document.querySelector('[data-pronto-newsletter]');\r\n        if(!root) return;\r\n\r\n        const isPortuguese = \/^\\\/pt(?:\\\/|$)\/.test(window.location.pathname);\r\n\r\n        const COPY = {\r\n            en: {\r\n                kicker: 'Cost guides',\r\n                title: 'Plan property repairs with fewer surprises',\r\n                sub: 'Get one or two useful emails a month with local price guides, maintenance advice and practical ways to avoid costly repairs. Unsubscribe anytime.',\r\n                email: 'Your email',\r\n                subscribe: 'Subscribe',\r\n                consent: 'I have read and accept the',\r\n                privacy: 'Privacy Policy',\r\n                success: 'Thank you. Your subscription has been registered.',\r\n                invalidEmail: 'Please enter a valid email address.',\r\n                consentRequired: 'Please accept the Privacy Policy.',\r\n                sending: 'Sending...',\r\n                rateLimit: 'Too many attempts. Please try again in a few minutes.',\r\n                temporaryError: 'Temporary error. Please try again.'\r\n            },\r\n            pt: {\r\n                kicker: 'Guias de pre\u00e7os',\r\n                title: 'Planeie as repara\u00e7\u00f5es do seu im\u00f3vel com menos surpresas',\r\n                sub: 'Receba um ou dois emails \u00fateis por m\u00eas com guias de pre\u00e7os locais, conselhos de manuten\u00e7\u00e3o e formas pr\u00e1ticas de evitar repara\u00e7\u00f5es dispendiosas. Pode cancelar quando quiser.',\r\n                email: 'O seu email',\r\n                subscribe: 'Subscrever',\r\n                consent: 'Li e aceito a',\r\n                privacy: 'Pol\u00edtica de Privacidade',\r\n                success: 'Obrigado. Subscri\u00e7\u00e3o registada.',\r\n                invalidEmail: 'Por favor, escreva um email v\u00e1lido.',\r\n                consentRequired: 'Por favor, aceite a Pol\u00edtica de Privacidade.',\r\n                sending: 'A enviar...',\r\n                rateLimit: 'Demasiadas tentativas. Tente novamente em alguns minutos.',\r\n                temporaryError: 'Erro tempor\u00e1rio. Tente novamente.'\r\n            }\r\n        };\r\n\r\n        const copy = isPortuguese ? COPY.pt : COPY.en;\r\n\r\n        const kickerEl = root.querySelector('.pronto-newsletter-kicker');\r\n        const titleEl = root.querySelector('.pronto-newsletter-title');\r\n        const subEl = root.querySelector('.pronto-newsletter-sub');\r\n        const form = root.querySelector('.pronto-newsletter-form');\r\n        const emailEl = root.querySelector('.pronto-newsletter-email');\r\n        const consentEl = root.querySelector('.pronto-newsletter-consentbox');\r\n        const consentCopyEl = root.querySelector('[data-pronto-consent-copy]');\r\n        const privacyLinkEl = root.querySelector('[data-pronto-privacy-link]');\r\n        const hpEl = root.querySelector('.pronto-newsletter-hp');\r\n        const msgEl = root.querySelector('.pronto-newsletter-msg');\r\n        const btnEl = root.querySelector('.pronto-newsletter-btn');\r\n\r\n        if(kickerEl){\r\n            kickerEl.textContent = copy.kicker;\r\n        }\r\n\r\n        if(titleEl){\r\n            titleEl.textContent = copy.title;\r\n        }\r\n\r\n        if(subEl){\r\n            subEl.textContent = copy.sub;\r\n        }\r\n\r\n        if(emailEl){\r\n            emailEl.placeholder = copy.email;\r\n            emailEl.setAttribute('aria-label', copy.email);\r\n        }\r\n\r\n        if(btnEl){\r\n            btnEl.setAttribute('aria-label', copy.subscribe);\r\n        }\r\n\r\n        if(consentCopyEl){\r\n            consentCopyEl.textContent = copy.consent;\r\n        }\r\n\r\n        if(privacyLinkEl){\r\n            privacyLinkEl.textContent = copy.privacy;\r\n        }\r\n\r\n        const ENDPOINT = '\/wp-json\/pronto\/v1\/subscribe';\r\n        const BTN_DEFAULT = btnEl ? (btnEl.getAttribute('data-default-label') || btnEl.textContent || '') : '';\r\n\r\n        function setMsg(text){\r\n            msgEl.textContent = text || '';\r\n        }\r\n\r\n        function setLoading(isLoading, loadingText){\r\n            if(!btnEl) return;\r\n            btnEl.disabled = !!isLoading;\r\n            btnEl.setAttribute('aria-busy', isLoading ? 'true' : 'false');\r\n            if(typeof loadingText === 'string' && loadingText){\r\n                btnEl.textContent = loadingText;\r\n            }else{\r\n                btnEl.textContent = BTN_DEFAULT;\r\n            }\r\n        }\r\n\r\n        function isValidEmail(email){\r\n            if(!email) return false;\r\n            const s = String(email).trim();\r\n            if(s.length < 5) return false;\r\n            return \/^[^\\s@]+@[^\\s@]+\\.[^\\s@]{2,}$\/.test(s);\r\n        }\r\n\r\n        form.addEventListener('submit', async function(e){\r\n            e.preventDefault();\r\n            setMsg('');\r\n\r\n            const email = (emailEl.value || '').trim();\r\n            const consent = !!consentEl.checked;\r\n            const hp = (hpEl.value || '').trim();\r\n\r\n            \/\/ Honeypot hit: silently pretend success.\r\n            if(hp){\r\n                setMsg(copy.success);\r\n                form.reset();\r\n                return;\r\n            }\r\n\r\n            if(!isValidEmail(email)){\r\n                setMsg(copy.invalidEmail);\r\n                emailEl.focus();\r\n                return;\r\n            }\r\n\r\n            if(!consent){\r\n                setMsg(copy.consentRequired);\r\n                consentEl.focus();\r\n                return;\r\n            }\r\n\r\n            setLoading(true, copy.sending);\r\n            setMsg(copy.sending);\r\n\r\n            const payload = {\r\n                email: email,\r\n                consent: true,\r\n                hp: '',\r\n                source_url: window.location.href\r\n            };\r\n\r\n            try{\r\n                const res = await fetch(ENDPOINT, {\r\n                    method: 'POST',\r\n                    headers: { 'Content-Type': 'application\/json' },\r\n                    body: JSON.stringify(payload),\r\n                    cache: 'no-store',\r\n                    credentials: 'same-origin'\r\n                });\r\n\r\n                let data = null;\r\n                try{\r\n                    data = await res.json();\r\n                }catch(_e){\r\n                    data = null;\r\n                }\r\n\r\n                if(!res.ok){\r\n                    if(res.status === 429){\r\n                        setMsg(copy.rateLimit);\r\n                    }else{\r\n                        setMsg(copy.temporaryError);\r\n                    }\r\n                    setLoading(false);\r\n                    return;\r\n                }\r\n\r\n                if(!data || data.ok !== true){\r\n                    setMsg(copy.temporaryError);\r\n                    setLoading(false);\r\n                    return;\r\n                }\r\n\r\n                \/\/ Success\r\n                setMsg(copy.success);\r\n\r\n                window.dispatchEvent(new CustomEvent('pronto_newsletter_signup', {\r\n                    detail: {\r\n                        email: email,\r\n                        consent: true,\r\n                        source_url: window.location.href,\r\n                        ts: Date.now()\r\n                    }\r\n                }));\r\n\r\n                form.reset();\r\n\r\n                \/\/ Success state persists 4s, then collapses\r\n                setTimeout(function(){\r\n                    setMsg('');\r\n                    setLoading(false);\r\n                }, 4000);\r\n\r\n            }catch(err){\r\n                setMsg(copy.temporaryError);\r\n                setLoading(false);\r\n            }\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-6c8e9c3 e-con-full e-flex e-con e-parent\" data-id=\"6c8e9c3\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3b4fd55 elementor-widget elementor-widget-html\" data-id=\"3b4fd55\" 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__answer-inner a {\r\n  color: #0F2B49;\r\n  font-weight: 700;\r\n  text-decoration-color: #E1A134;\r\n  text-decoration-thickness: 2px;\r\n  text-underline-offset: 3px;\r\n}\r\n\r\n.ps-faq-clean__answer-inner a:hover {\r\n  color: #c98922;\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-cost-faq-title\">\r\n  <div class=\"ps-faq-clean__wrap\">\r\n    <h2 class=\"ps-faq-clean__title\" id=\"ps-cost-faq-title\">Frequently asked questions about prices and quotes<\/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\">Is the estimate shown a final quote?<\/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>No. The estimate is an <strong>indicative range<\/strong> based on the different levels of work that may be required. The final price is only confirmed once the source of the problem, access, materials and required work are clear.<\/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\">Do the prices on this page include VAT?<\/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. The ranges shown on this page are stated with <strong>VAT included<\/strong>. The confirmed quote also shows the total amount payable before the work proceeds.<\/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\">Why are some price ranges so wide?<\/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 same symptom may require very different work. An accessible blockage does not require the same work as a deep blockage, just as a visible leak is not the same as a hidden source within the installation. You can see the types of work covered on our <a href=\"\/plumber-in-porto\/\" data-ps-faq-link=\"plumbing\">plumbing<\/a> and <a href=\"\/electrician-in-porto\/\" data-ps-faq-link=\"electrical\">electrical<\/a> service pages. The midpoint of the range <strong>does not automatically represent the expected price<\/strong>.<\/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\">Are photographs sufficient to confirm the price?<\/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>Sometimes, photographs make it possible to identify visible work and prepare a quote. When the source, depth or condition of the installation is unclear, it may be necessary to request more information or carry out an on-site diagnosis.<\/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 much does a diagnostic visit 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>For requests that require a diagnostic visit, the fee starts at <strong>\u20ac30 excluding VAT<\/strong>. It is paid before the visit and deducted from the final price when the service is accepted.<\/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\">Are materials included in the price?<\/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>It depends on the work. The quote should state which materials, equipment, dismantling or other work is included. You should not assume that every case within the same range uses the same materials.<\/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 the price change after I accept the quote?<\/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 accepted price applies to the scope described in the quote. If the diagnosis reveals that other work is required, the change and revised price are presented <strong>before any additional work<\/strong>.<\/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\">Am I required to proceed after the diagnosis?<\/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>No. After the diagnosis, you receive the recommended scope and price so you can decide. If you accept the service, the diagnosis fee is deducted from the final price. If you do not proceed, that fee covers the visit and diagnosis carried out. If you need a different type of repair, you can return to the <a href=\"\/\" data-ps-faq-link=\"home\">Pronto Solu\u00e7\u00f5es home page<\/a> to explore other services.<\/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 isPortuguese = \/^\\\/pt(?:\\\/|$)\/.test(window.location.pathname);\r\n\r\n  var faqLinks = {\r\n    home: isPortuguese ? \"\/pt\/\" : \"\/\",\r\n    plumbing: isPortuguese ? \"\/pt\/plumber-in-porto\/\" : \"\/plumber-in-porto\/\",\r\n    electrical: isPortuguese ? \"\/pt\/electrician-in-porto\/\" : \"\/electrician-in-porto\/\"\r\n  };\r\n\r\n  var sections = document.querySelectorAll(\".ps-faq-clean\");\r\n\r\n  sections.forEach(function (section) {\r\n    section.querySelectorAll(\"[data-ps-faq-link]\").forEach(function (link) {\r\n      var key = link.getAttribute(\"data-ps-faq-link\");\r\n\r\n      if (faqLinks[key]) {\r\n        link.setAttribute(\"href\", faqLinks[key]);\r\n      }\r\n    });\r\n\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-62a7342 e-con-full e-flex e-con e-parent\" data-id=\"62a7342\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-7bdd6c1 elementor-widget elementor-widget-html\" data-id=\"7bdd6c1\" 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(.pp-cost-help-section),\r\n  body .elementor-widget-html:has(.pp-cost-help-section) > .elementor-widget-container {\r\n    margin: 0 !important;\r\n    padding: 0 !important;\r\n    background: #f2f4f3 !important;\r\n  }\r\n\r\n  body .e-con:has(> .elementor-widget-html .pp-cost-help-section),\r\n  body .e-con:has(\r\n    > .e-con-inner\r\n    > .elementor-widget-html\r\n    .pp-cost-help-section\r\n  ),\r\n  body .e-con > .e-con-inner:has(\r\n    > .elementor-widget-html\r\n    .pp-cost-help-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    margin: 0 !important;\r\n    padding: 0 !important;\r\n    gap: 0 !important;\r\n    background: #f2f4f3 !important;\r\n  }\r\n  .pp-cost-help-section {\r\n    box-sizing: border-box;\r\n    width: 100vw;\r\n    margin-left: calc(50% - 50vw);\r\n    padding: 28px 0 56px;\r\n    background: #f2f4f3;\r\n  }\r\n\r\n  .pp-cost-help-section,\r\n  .pp-cost-help-section * {\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  .pp-cost-help-standalone {\r\n    box-sizing: border-box;\r\n    position: relative;\r\n    display: grid;\r\n    grid-template-columns: auto minmax(0, 1fr) auto;\r\n    gap: 24px;\r\n    align-items: center;\r\n    width: min(100% - 40px, 1180px);\r\n    margin-inline: auto;\r\n    padding: 30px 34px;\r\n    overflow: hidden;\r\n    border: 1px solid #dfe6ed;\r\n    border-radius: 19px;\r\n    background: #ffffff;\r\n    box-shadow: 0 12px 34px rgba(15, 43, 73, 0.06);\r\n    color: #17283a;\r\n    cursor: pointer;\r\n    font-family: \"Montserrat\", sans-serif;\r\n    text-decoration: none;\r\n  }\r\n\r\n  .pp-cost-help-standalone,\r\n  .pp-cost-help-standalone * {\r\n    box-sizing: border-box;\r\n  }\r\n\r\n  .pp-cost-help-standalone__icon {\r\n    display: block;\r\n    flex: 0 0 auto;\r\n    width: 82px;\r\n    height: 66px;\r\n    overflow: visible;\r\n    background: #ffffff;\r\n  }\r\n\r\n  .pp-cost-help-standalone__icon img {\r\n    display: block;\r\n    width: 100%;\r\n    height: 100%;\r\n    object-fit: contain;\r\n  }\r\n\r\n  .pp-cost-help-standalone__copy {\r\n    position: relative;\r\n    z-index: 1;\r\n  }\r\n\r\n  .pp-cost-help-standalone__copy h3 {\r\n    min-height: 0;\r\n    margin: 0 0 5px;\r\n    color: #0f2b49;\r\n    font-family: \"Montserrat\", sans-serif;\r\n    font-size: 21px;\r\n    font-weight: 700;\r\n    line-height: 1.3;\r\n  }\r\n\r\n  .pp-cost-help-standalone__copy p {\r\n    margin: 0;\r\n    color: #637386;\r\n    font-family: \"Montserrat\", sans-serif;\r\n    font-size: 13px;\r\n    font-weight: 500;\r\n    line-height: 1.6;\r\n  }\r\n\r\n  .pp-cost-help-standalone__button {\r\n    position: relative;\r\n    z-index: 1;\r\n    display: inline-flex;\r\n    gap: 9px;\r\n    align-items: center;\r\n    justify-content: center;\r\n    min-height: 48px;\r\n    padding: 12px 18px;\r\n    border: 1px solid #e1a134;\r\n    border-radius: 11px;\r\n    background: #e1a134;\r\n    color: #ffffff;\r\n    font-family: \"Montserrat\", sans-serif;\r\n    font-size: 13px;\r\n    font-weight: 700;\r\n    line-height: 1.2;\r\n    text-decoration: none;\r\n    transition:\r\n      border-color 180ms ease,\r\n      background 180ms ease,\r\n      box-shadow 180ms ease,\r\n      transform 180ms ease;\r\n  }\r\n\r\n  .pp-cost-help-standalone__button svg {\r\n    flex: 0 0 auto;\r\n    width: 17px;\r\n    height: 17px;\r\n    color: #ffffff;\r\n    stroke: currentColor;\r\n  }\r\n\r\n  .pp-cost-help-standalone__button:hover {\r\n    border-color: #c98922;\r\n    background: #c98922;\r\n    box-shadow: 0 12px 28px rgba(225, 161, 52, 0.22);\r\n    color: #ffffff;\r\n    transform: translateY(-2px);\r\n  }\r\n\r\n  .pp-cost-help-standalone:focus-visible {\r\n    outline: 3px solid rgba(225, 161, 52, 0.42);\r\n    outline-offset: 3px;\r\n  }\r\n\r\n  @media (max-width: 800px) {\r\n    .pp-cost-help-standalone {\r\n      grid-template-columns: auto minmax(0, 1fr);\r\n    }\r\n\r\n    .pp-cost-help-standalone__button {\r\n      grid-column: 1 \/ -1;\r\n      justify-self: start;\r\n    }\r\n  }\r\n\r\n  @media (max-width: 620px) {\r\n    .pp-cost-help-section {\r\n      padding: 22px 0 42px;\r\n    }\r\n\r\n    .pp-cost-help-standalone {\r\n      grid-template-columns: 72px minmax(0, 1fr);\r\n      grid-template-areas:\r\n        \"icon title\"\r\n        \"description description\"\r\n        \"button button\";\r\n      column-gap: 14px;\r\n      row-gap: 14px;\r\n      width: min(100% - 28px, 1180px);\r\n      padding: 22px 20px;\r\n      align-items: center;\r\n    }\r\n\r\n    .pp-cost-help-standalone__icon {\r\n      grid-area: icon;\r\n      width: 72px;\r\n      height: 58px;\r\n      align-self: center;\r\n      justify-self: start;\r\n    }\r\n\r\n    .pp-cost-help-standalone__copy {\r\n      display: contents;\r\n    }\r\n\r\n    .pp-cost-help-standalone__copy h3 {\r\n      grid-area: title;\r\n      margin: 0;\r\n      align-self: center;\r\n      font-size: 20px;\r\n      line-height: 1.25;\r\n    }\r\n\r\n    .pp-cost-help-standalone__copy p {\r\n      grid-area: description;\r\n      margin: 0;\r\n      line-height: 1.55;\r\n    }\r\n\r\n    .pp-cost-help-standalone__button {\r\n      grid-area: button;\r\n      grid-column: 1 \/ -1;\r\n      width: 100%;\r\n      margin-top: 2px;\r\n    }\r\n  }\r\n\r\n  @media (prefers-reduced-motion: reduce) {\r\n    .pp-cost-help-standalone__button {\r\n      transition: none;\r\n    }\r\n  }\r\n<\/style>\r\n\r\n\r\n<section class=\"pp-cost-help-section\">\r\n  <a\r\n    class=\"pp-cost-help-standalone pronto-precall pp-service-any cta-cost-guide-help\"\r\n    href=\"#\"\r\n    aria-label=\"Explain the problem and request assistance\"\r\n  >\r\n    <span class=\"pp-cost-help-standalone__icon\">\r\n      <img\r\n        src=\"https:\/\/prontosolucoes.pt\/wp-content\/uploads\/2026\/08\/home-repair-technicians-plumbing-electrical-handyman-porto.webp\"\r\n        alt=\"Three home repair technicians representing plumbing, electrical and handyman services in Porto\"\r\n        loading=\"lazy\"\r\n        decoding=\"async\"\r\n      >\r\n    <\/span>\r\n\r\n    <div class=\"pp-cost-help-standalone__copy\">\r\n      <h3>\r\n        Can\u2019t find your repair?\r\n      <\/h3>\r\n\r\n      <p>\r\n        Tell us what\u2019s happening, and we\u2019ll help identify the service you need\r\n      <\/p>\r\n    <\/div>\r\n\r\n    <span class=\"pp-cost-help-standalone__button\">\r\n      Explain the problem\r\n\r\n      <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\r\n        <path\r\n          d=\"M5 12h14M13 6l6 6-6 6\"\r\n          fill=\"none\"\r\n          stroke=\"currentColor\"\r\n          stroke-linecap=\"round\"\r\n          stroke-linejoin=\"round\"\r\n          stroke-width=\"2\"\r\n        ><\/path>\r\n      <\/svg>\r\n    <\/span>\r\n  <\/a>\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>How much does it cost to repair your home in Porto? Explore price guides Updated in August 2026 Trusted local experience, backed by results 970 + Jobs completed 20 min Average response time 98 % Fixed on first visit 10 + years Average technician experience Common repairs Select the closest match to start your request. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":6890,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-3332","page","type-page","status-publish","has-post-thumbnail","hentry"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":8}},"_links":{"self":[{"href":"https:\/\/prontosolucoes.pt\/pt\/wp-json\/wp\/v2\/pages\/3332","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=3332"}],"version-history":[{"count":53,"href":"https:\/\/prontosolucoes.pt\/pt\/wp-json\/wp\/v2\/pages\/3332\/revisions"}],"predecessor-version":[{"id":7207,"href":"https:\/\/prontosolucoes.pt\/pt\/wp-json\/wp\/v2\/pages\/3332\/revisions\/7207"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prontosolucoes.pt\/pt\/wp-json\/wp\/v2\/media\/6890"}],"wp:attachment":[{"href":"https:\/\/prontosolucoes.pt\/pt\/wp-json\/wp\/v2\/media?parent=3332"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}