<!DOCTYPE html><html lang="en-GB"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="description" content="Find out if your home is ready for a heat pump. Get your personalised HeatPass in under 2 minutes, with realistic costs after the £7,500 BUS grant."><title>Is your home ready for a heat pump? | HeatPass</title><link rel="icon" type="image/svg+xml" href="/favicon.svg"><meta name="format-detection" content="telephone=no,date=no,email=no,address=no"><meta property="og:type" content="website"><meta property="og:url" content="https://heatpass.co.uk/"><meta property="og:title" content="Is your home ready for a heat pump? | HeatPass"><meta property="og:description" content="Find out if your home is ready for a heat pump. Get your personalised HeatPass in under 2 minutes, with realistic costs after the £7,500 BUS grant."><meta property="og:image" content="https://heatpass.co.uk/og-image.jpg"><meta name="twitter:card" content="summary_large_image"><!-- Fonts are self-hosted via @fontsource-variable (see src/styles/global.css).
       No external font CDN — no preconnect, no Google Fonts <link>. --><!--
    Cookie consent — pre-paint reader.

    Runs before any other script so already-consented visitors get GA4 /
    Clarity injected without waiting for the banner module to download.
    First-time visitors hit the inline check, find no cookie, and fall
    through silently — the banner module renders the dialog when ready.

    `import.meta.env.PUBLIC_*` is replaced at build time. With empty values
    (Phase A — no GA / Clarity property yet) the snippet is a no-op even when
    consent has been granted; Phase C just wires the env vars in.

    Spec: docs/engineering/analytics-and-consent.md.
  --><script>(function(){const GA4_ID = "G-4L6DTRP281";
const CLARITY_ID = "wh8mhhfrjo";
const MIN_POLICY_VERSION = "1.0";

    window.__heatpassEnv = { GA4_ID: GA4_ID, CLARITY_ID: CLARITY_ID };
    (function () {
      try {
        var match = document.cookie.match(/(?:^|; )heatpass_consent=([^;]+)/);
        if (!match) return;
        var data = JSON.parse(decodeURIComponent(match[1]));
        if (!data || !data.categories || data.categories.analytics !== true) return;
        if (!data.policy_version || data.policy_version < MIN_POLICY_VERSION) return;

        window.__heatpassTrackersInjected = true;

        if (GA4_ID) {
          var s = document.createElement('script');
          s.async = true;
          s.src = 'https://www.googletagmanager.com/gtag/js?id=' + GA4_ID;
          document.head.appendChild(s);
          window.dataLayer = window.dataLayer || [];
          window.gtag = function () { window.dataLayer.push(arguments); };
          window.gtag('js', new Date());
          window.gtag('config', GA4_ID, { anonymize_ip: true });
        }

        if (CLARITY_ID) {
          (function (c, l, a, r, i, t, y) {
            c[a] = c[a] || function () { (c[a].q = c[a].q || []).push(arguments); };
            t = l.createElement(r); t.async = 1; t.src = 'https://www.clarity.ms/tag/' + i;
            y = l.getElementsByTagName(r)[0]; y.parentNode.insertBefore(t, y);
          })(window, document, 'clarity', 'script', CLARITY_ID);
        }
      } catch (e) { /* never block paint on consent reader errors */ }
    })();
  })();</script><!-- Per-page head content — see file header for the contract. --><script>
    (function () {
      try {
        if (!window.matchMedia('(prefers-reduced-motion: reduce)').matches) {
          document.documentElement.classList.add('reveal-ready');
        }
      } catch (e) {}
    })();
  </script><link rel="stylesheet" href="/_astro/blog.B46SSTQ6.css">
<link rel="stylesheet" href="/_astro/blog.4aFat0U-.css">
<style>#mobile-nav-panel[data-astro-cid-dmqpwcec]{pointer-events:none}#mobile-nav-backdrop[data-astro-cid-dmqpwcec]{opacity:0;transition:opacity .3s var(--ease-out-quart)}#mobile-nav-sheet[data-astro-cid-dmqpwcec]{opacity:0;transform:translateY(-8px);transition:opacity .3s var(--ease-out-quart),transform .3s var(--ease-out-quart)}#mobile-nav-panel[data-astro-cid-dmqpwcec][data-open=true]{pointer-events:auto}#mobile-nav-panel[data-astro-cid-dmqpwcec][data-open=true] #mobile-nav-backdrop[data-astro-cid-dmqpwcec]{opacity:1}#mobile-nav-panel[data-astro-cid-dmqpwcec][data-open=true] #mobile-nav-sheet[data-astro-cid-dmqpwcec]{opacity:1;transform:translateY(0)}.mobile-nav-icon[data-astro-cid-dmqpwcec]{transition:opacity .2s var(--ease-out-quart)}.mobile-nav-icon-close[data-astro-cid-dmqpwcec]{position:absolute;opacity:0}#mobile-nav-toggle[data-astro-cid-dmqpwcec][aria-expanded=true] .mobile-nav-icon-open[data-astro-cid-dmqpwcec]{opacity:0}#mobile-nav-toggle[data-astro-cid-dmqpwcec][aria-expanded=true] .mobile-nav-icon-close[data-astro-cid-dmqpwcec]{opacity:1}#nav-cta[data-astro-cid-dmqpwcec]{transition:background-color .2s var(--ease-out-quart),box-shadow .2s var(--ease-out-quart),opacity .29s var(--ease-out-quart),translate .29s var(--ease-out-quart)}#nav-cta[data-astro-cid-dmqpwcec][inert]{transition:opacity .22s var(--ease-out-quart),translate .22s var(--ease-out-quart);opacity:0;translate:10px 0}@media (prefers-reduced-motion: reduce){#nav-cta[data-astro-cid-dmqpwcec],#nav-cta[data-astro-cid-dmqpwcec][inert],#mobile-nav-backdrop[data-astro-cid-dmqpwcec],#mobile-nav-sheet[data-astro-cid-dmqpwcec],.mobile-nav-icon[data-astro-cid-dmqpwcec]{transition:none}}
.stats-card[data-astro-cid-gplzgdxk]{container-type:inline-size}.stats-row[data-astro-cid-gplzgdxk]{display:flex;flex-direction:column;row-gap:.25rem}@container (min-width: 420px){.stats-row[data-astro-cid-gplzgdxk]{flex-direction:row;align-items:baseline;justify-content:space-between;-moz-column-gap:1.5rem;column-gap:1.5rem}}.rail-nav[data-astro-cid-uu4pfah3]{position:absolute;top:50%;transform:translateY(-50%);z-index:2;width:2.25rem;height:2.25rem;display:none;align-items:center;justify-content:center;border-radius:9999px;background:rgb(var(--color-surface) / .55);color:rgb(var(--color-on-surface));backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);box-shadow:0 1px 2px #0f0f0f14,0 4px 12px -4px #0f0f0f1f;opacity:.7;transition:opacity .18s ease-out,transform .18s ease-out,background-color .18s ease-out,box-shadow .18s ease-out}.rail-nav[data-astro-cid-uu4pfah3].is-visible{display:flex}.rail-nav[data-astro-cid-uu4pfah3]:hover{opacity:1;background:rgb(var(--color-surface) / .9);box-shadow:0 2px 4px #0f0f0f1f,0 10px 22px -4px #0f0f0f38}.rail-nav[data-astro-cid-uu4pfah3]:active{transform:translateY(-50%) translateY(1px);opacity:1}.rail-nav[data-astro-cid-uu4pfah3][disabled]{opacity:.22;pointer-events:none;box-shadow:none}.rail-nav-prev[data-astro-cid-uu4pfah3]{left:-.75rem}.rail-nav-next[data-astro-cid-uu4pfah3]{right:-.75rem}@media (min-width: 640px){.rail-nav[data-astro-cid-uu4pfah3]{display:none!important}}.faq-item[data-astro-cid-al2ca2vr] summary[data-astro-cid-al2ca2vr]::-webkit-details-marker{display:none}.faq-item[data-astro-cid-al2ca2vr] summary[data-astro-cid-al2ca2vr]{-webkit-tap-highlight-color:transparent}.faq-item[data-astro-cid-al2ca2vr] .icon[data-astro-cid-al2ca2vr]{transition:transform .22s cubic-bezier(.25,1,.5,1)}.faq-item[data-astro-cid-al2ca2vr][open] .icon[data-astro-cid-al2ca2vr]{transform:rotate(180deg)}html.reveal-ready #how-it-works>div>div>*,html.reveal-ready #how-it-works ol>li,html.reveal-ready #whats-in>div>h2,html.reveal-ready #whats-in>div>div,html.reveal-ready #why-different>div>h2,html.reveal-ready #why-different ol>li,html.reveal-ready #scenario-preview>div>div,html.reveal-ready #honest-angle>div>div,html.reveal-ready #faq>div>div,html.reveal-ready #faq ul>li,html.reveal-ready #final-cta>div>div{opacity:0;transform:translateY(10px);will-change:opacity,transform}
</style><script type="module" src="/_astro/hoisted.FfiHDrHe.js"></script></head> <!--
  Site-wide CTA click tracking. Deferred (default Astro <script> behaviour)
  so it doesn't block paint. The script is a no-op when analytics consent
  hasn't been granted (window.gtag will be undefined). Phase 3 of the
  instrumentation plan; see docs/engineering/analytics-instrumentation-plan.md.
--> <body class="bg-surface text-on-surface font-body antialiased"> <header id="site-nav" class="fixed top-0 left-0 right-0 z-50 transition-shadow duration-300" style="background: rgb(var(--color-surface) / 0.8); backdrop-filter: blur(20px); -webkit-backdrop-filter: blur(20px);" data-astro-cid-dmqpwcec> <div class="max-w-6xl mx-auto px-6 md:px-10 h-16 flex items-center justify-between gap-4" data-astro-cid-dmqpwcec> <a href="/" aria-label="HeatPass home" class="shrink-0 focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-primary rounded-sm" data-astro-cid-dmqpwcec> <img src="/favicon.svg" alt="HeatPass" class="h-8 w-auto block sm:hidden" data-astro-cid-dmqpwcec> <img src="/logo.svg" alt="HeatPass" class="h-7 w-auto hidden sm:block" data-astro-cid-dmqpwcec> </a> <nav aria-label="Primary" class="hidden md:flex items-center gap-7 lg:gap-9" data-astro-cid-dmqpwcec> <a href="/how-it-works" class="font-body text-sm text-on-surface/75 hover:text-on-surface transition-colors duration-200 focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-primary rounded-sm" data-astro-cid-dmqpwcec> How it works </a><a href="/guides" class="font-body text-sm text-on-surface/75 hover:text-on-surface transition-colors duration-200 focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-primary rounded-sm" data-astro-cid-dmqpwcec> Guides </a><a href="/installers" class="font-body text-sm text-on-surface/75 hover:text-on-surface transition-colors duration-200 focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-primary rounded-sm" data-astro-cid-dmqpwcec> For installers </a> </nav> <div class="flex items-center gap-1.5 md:gap-0" data-astro-cid-dmqpwcec> <button id="mobile-nav-toggle" type="button" class="md:hidden relative inline-flex items-center justify-center h-10 w-10 text-on-surface/80 hover:text-on-surface transition-colors duration-200 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary rounded-full" aria-label="Open menu" aria-expanded="false" aria-controls="mobile-nav-panel" data-astro-cid-dmqpwcec> <svg class="mobile-nav-icon mobile-nav-icon-open" width="22" height="22" viewBox="0 0 22 22" fill="none" aria-hidden="true" data-astro-cid-dmqpwcec> <path d="M3 8h16M3 14h16" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" data-astro-cid-dmqpwcec></path> </svg> <svg class="mobile-nav-icon mobile-nav-icon-close" width="22" height="22" viewBox="0 0 22 22" fill="none" aria-hidden="true" data-astro-cid-dmqpwcec> <path d="M6 6l10 10M16 6L6 16" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" data-astro-cid-dmqpwcec></path> </svg> </button> <a id="nav-cta" href="/#hero-postcode-input" data-track-cta="nav_get_pass" class="shrink-0 font-body font-bold text-sm text-on-primary bg-primary hover:bg-primary-container px-4 md:px-5 py-2.5 rounded-full shadow-button hover:shadow-button-hover active:translate-y-px focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary whitespace-nowrap" inert data-astro-cid-dmqpwcec>
Get my HeatPass
</a> </div> </div> </header> <!-- Mobile navigation sheet. Slides down from under the fixed header; falls within the No-Line rule by using surface-container-low against the surface page canvas. --> <div id="mobile-nav-panel" class="fixed inset-x-0 top-16 bottom-0 z-40 md:hidden" inert data-astro-cid-dmqpwcec> <div id="mobile-nav-backdrop" class="absolute inset-0 bg-surface-dark/40" data-astro-cid-dmqpwcec></div> <div id="mobile-nav-sheet" role="dialog" aria-modal="true" aria-label="Site navigation" class="relative bg-surface-container-low px-6 pt-8 pb-10 shadow-ambient-md" data-astro-cid-dmqpwcec> <p class="font-body font-bold text-xs tracking-label uppercase text-on-surface/60 mb-6" data-astro-cid-dmqpwcec>
Menu
</p> <nav aria-label="Mobile primary" class="flex flex-col" data-astro-cid-dmqpwcec> <a href="/how-it-works" class="font-display font-semibold text-2xl tracking-heading text-on-surface py-4 focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-primary rounded-sm" data-mobile-nav-link data-astro-cid-dmqpwcec> How it works </a><a href="/guides" class="font-display font-semibold text-2xl tracking-heading text-on-surface py-4 focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-primary rounded-sm" data-mobile-nav-link data-astro-cid-dmqpwcec> Guides </a><a href="/installers" class="font-display font-semibold text-2xl tracking-heading text-on-surface py-4 focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-primary rounded-sm" data-mobile-nav-link data-astro-cid-dmqpwcec> For installers </a> </nav> </div> </div>       <main> <!-- Above-the-fold block: hero stretches to fill remaining space; trust strip anchors the bottom. --> <div class="min-h-svh flex flex-col"> <section id="hero" class="flex-1 flex items-center pt-24 pb-12 md:pt-28 md:pb-20 px-6 md:px-10"> <div class="w-full max-w-6xl mx-auto"> <div class="grid grid-cols-1 lg:grid-cols-[1fr_420px] xl:grid-cols-[1fr_480px] gap-12 lg:gap-16 xl:gap-24 items-center"> <!-- Copy + form --> <div class="text-center lg:text-left"> <p class="font-body font-bold text-xs tracking-label uppercase text-primary mb-6">
UK heat pump suitability
</p> <h1 class="font-display font-black text-hero text-on-surface mb-7 max-w-2xl mx-auto lg:mx-0">
Find out if your home is <em class="italic text-primary">ready</em> for a heat pump
</h1> <p class="font-body text-lg text-on-surface/70 leading-relaxed mb-8 lg:mb-12 max-w-lg mx-auto lg:mx-0">
We'll tell you whether a heat pump suits your home, what it would roughly cost after
          the grant, and match you with one vetted local installer. If your home isn't ready
          yet, we'll say that too.
</p> <!-- Mobile hero illustration — sits between subheadline and postcode form on <lg.
             Capped width keeps rendered height ≤180px so the CTA stays above the fold. --> <div class="lg:hidden mb-8 mx-auto w-full max-w-[320px] sm:max-w-[380px]" aria-hidden="true"> <img src="/_astro/heatpass-hero-mobile.DPHqYk60_Zv8RQE.webp" srcset="/_astro/heatpass-hero-mobile.DPHqYk60_Z1dTqvl.webp 320w, /_astro/heatpass-hero-mobile.DPHqYk60_1Ango.webp 480w, /_astro/heatpass-hero-mobile.DPHqYk60_1YvUMm.webp 640w, /_astro/heatpass-hero-mobile.DPHqYk60_Z17JEuB.webp 800w" alt="" sizes="(max-width: 640px) 320px, 380px" class="w-full h-auto block" loading="eager" fetchpriority="high" width="1672" height="941" decoding="async"> </div> <form id="hero-postcode" data-postcode-form data-track-source="hero" novalidate class="w-full max-w-xl mx-auto lg:mx-0"> <div aria-hidden="true" style="position:absolute;left:-9999px;opacity:0;pointer-events:none;height:0;overflow:hidden;"> <label for="hero-postcode-hp">Address</label> <input id="hero-postcode-hp" type="text" name="address" tabindex="-1" autocomplete="off"> </div> <label for="hero-postcode-input" class="block font-body font-bold text-xs tracking-label uppercase text-on-surface/55 mb-2 text-center sm:text-left ml-0 sm:ml-1"> Your postcode </label> <div class="flex flex-col sm:flex-row gap-3"> <input id="hero-postcode-input" type="text" name="postcode" autocomplete="postal-code" placeholder="e.g. SW1A 1AA" spellcheck="false" inputmode="text" aria-describedby="hero-postcode-error" class="flex-1 min-w-0 bg-surface-container-highest px-5 py-4 rounded-xl font-body text-base text-on-surface placeholder:text-on-surface/35 shadow-input hover:shadow-input-focus focus:shadow-input-focus focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/40 transition-shadow duration-200"> <button type="submit" class="shrink-0 bg-primary hover:bg-primary-container text-on-primary font-body font-bold text-base px-7 py-4 rounded-full shadow-button hover:shadow-button-hover transition-[background-color,box-shadow,transform] duration-200 active:translate-y-px focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary whitespace-nowrap"> Get my HeatPass </button> </div> <p id="hero-postcode-error" role="alert" aria-live="polite" class="hidden mt-3 font-body text-sm text-center sm:text-left ml-0 sm:ml-1 text-primary"></p> <p class="mt-4 font-body text-sm text-center sm:text-left ml-0 sm:ml-1 text-on-surface/55"> Free. Two minutes. Nothing shared unless you say so. </p> </form> </div> <!-- Desktop hero illustration — right column, ≥lg only --> <div class="hidden lg:block" aria-hidden="true"> <div class="relative mx-auto w-full max-w-[480px]"> <img src="/_astro/heatpass-hero.jBPbZjGR_1XKzVf.webp" srcset="/_astro/heatpass-hero.jBPbZjGR_Z1arSgb.webp 400w, /_astro/heatpass-hero.jBPbZjGR_52Uvy.webp 560w, /_astro/heatpass-hero.jBPbZjGR_22Xt2w.webp 720w, /_astro/heatpass-hero.jBPbZjGR_ZMK4IG.webp 960w" alt="" sizes="(min-width: 1280px) 480px, 420px" class="w-full h-auto block" loading="eager" fetchpriority="high" width="1254" height="1254" decoding="async"> </div> </div> </div> </div> </section> <section aria-label="Trust signals" class="bg-surface-container-low"> <div class="max-w-6xl mx-auto px-6 md:px-10 py-6 md:py-7"> <ul class="flex flex-col sm:flex-row sm:flex-wrap sm:items-center sm:justify-center gap-y-3 gap-x-6 md:gap-x-10"> <li class="flex items-center gap-3 font-body text-sm text-on-surface/70"> <span class="w-1.5 h-1.5 rounded-full bg-primary/70 shrink-0" aria-hidden="true"></span> <span>Uses official government EPC data</span> </li><li class="flex items-center gap-3 font-body text-sm text-on-surface/70"> <span class="w-1.5 h-1.5 rounded-full bg-primary/70 shrink-0" aria-hidden="true"></span> <span>MCS-certified installers only</span> </li><li class="flex items-center gap-3 font-body text-sm text-on-surface/70"> <span class="w-1.5 h-1.5 rounded-full bg-primary/70 shrink-0" aria-hidden="true"></span> <span>Independent of MCS and GOV.UK</span> </li> </ul> </div> </section> </div> <section id="how-it-works" class="bg-surface section px-6 md:px-10"> <div class="max-w-6xl mx-auto"> <div class="mb-14 md:mb-20 max-w-3xl"> <p class="font-body font-bold text-xs tracking-label uppercase text-on-surface/60 mb-5">
How it works
</p> <h2 class="font-display font-black text-h2 text-on-surface leading-tight tracking-heading"> <span class="whitespace-nowrap max-[400px]:whitespace-normal">Three steps.</span>  <span class="whitespace-nowrap max-[400px]:whitespace-normal">One answer.</span> </h2> </div> <ol class="grid grid-cols-1 md:grid-cols-3 gap-14 md:gap-12 lg:gap-16"> <li> <p class="font-display font-black text-primary leading-[0.85] tracking-display mb-6 md:mb-7" style="font-size: clamp(4.5rem, 9vw, 7rem);" aria-hidden="true"> 01 </p> <h3 class="font-display font-bold text-2xl md:text-[1.75rem] text-on-surface tracking-heading mb-4 leading-tight max-w-[22ch]"> Enter your postcode </h3> <p class="font-body text-base text-on-surface/70 leading-relaxed max-w-[34ch]"> We pull your home&#39;s details from the official EPC register. That&#39;s your starting point. </p> </li><li> <p class="font-display font-black text-primary leading-[0.85] tracking-display mb-6 md:mb-7" style="font-size: clamp(4.5rem, 9vw, 7rem);" aria-hidden="true"> 02 </p> <h3 class="font-display font-bold text-2xl md:text-[1.75rem] text-on-surface tracking-heading mb-4 leading-tight max-w-[22ch]"> Answer a few questions </h3> <p class="font-body text-base text-on-surface/70 leading-relaxed max-w-[34ch]"> Things the records can&#39;t tell us. Ownership, outdoor space, your priorities. Under 2 minutes. </p> </li><li> <p class="font-display font-black text-primary leading-[0.85] tracking-display mb-6 md:mb-7" style="font-size: clamp(4.5rem, 9vw, 7rem);" aria-hidden="true"> 03 </p> <h3 class="font-display font-bold text-2xl md:text-[1.75rem] text-on-surface tracking-heading mb-4 leading-tight max-w-[22ch]"> Get your HeatPass </h3> <p class="font-body text-base text-on-surface/70 leading-relaxed max-w-[34ch]"> A personalised verdict with costs, savings, and any upgrades needed first. If you&#39;re ready, we connect you to one vetted installer. Exclusively, not shared. </p> </li> </ol> <div class="mt-20 md:mt-24"> <a href="#midpage-cta" class="inline-flex items-center gap-2 font-body font-bold text-sm text-primary hover:text-primary-container transition-colors duration-200 focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-primary rounded-sm">
Start my check
<span aria-hidden="true">&rarr;</span> </a> </div> </div> </section> <!-- Mid-page postcode CTA — full-bleed deep green for visual rhythm --> <section id="midpage-cta" class="bg-secondary text-on-secondary py-16 md:py-20 px-6 md:px-10"> <div class="max-w-6xl mx-auto grid grid-cols-1 lg:grid-cols-[1fr_1fr] gap-10 lg:gap-20 items-center"> <div> <p class="font-body font-bold text-xs tracking-label uppercase text-on-secondary/70 mb-5">
Convinced? Start here.
</p> <h2 class="font-display font-bold text-2xl md:text-4xl text-on-secondary tracking-heading leading-tight max-w-md">
Drop in a postcode and we'll do the first minute's work for you.
</h2> </div> <div> <form id="mid-postcode" data-postcode-form data-track-source="midpage" novalidate class="w-full max-w-lg mx-auto sm:mx-0"> <div aria-hidden="true" style="position:absolute;left:-9999px;opacity:0;pointer-events:none;height:0;overflow:hidden;"> <label for="mid-postcode-hp">Address</label> <input id="mid-postcode-hp" type="text" name="address" tabindex="-1" autocomplete="off"> </div> <label for="mid-postcode-input" class="block font-body font-bold text-xs tracking-label uppercase text-on-secondary/75 mb-2 text-center sm:text-left ml-0 sm:ml-1"> Your postcode </label> <div class="flex flex-col sm:flex-row gap-3"> <input id="mid-postcode-input" type="text" name="postcode" autocomplete="postal-code" placeholder="e.g. SW1A 1AA" spellcheck="false" inputmode="text" aria-describedby="mid-postcode-error" class="flex-1 min-w-0 bg-surface text-on-surface px-4 py-3.5 rounded-xl font-body text-base text-on-surface placeholder:text-on-surface/35 shadow-input hover:shadow-input-focus focus:shadow-input-focus focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/40 transition-shadow duration-200"> <button type="submit" class="shrink-0 bg-primary hover:bg-primary-container text-on-primary font-body font-bold text-sm px-6 py-3.5 rounded-full shadow-button hover:shadow-button-hover transition-[background-color,box-shadow,transform] duration-200 active:translate-y-px focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary whitespace-nowrap"> Get my HeatPass </button> </div> <p id="mid-postcode-error" role="alert" aria-live="polite" class="hidden mt-3 font-body text-sm text-center sm:text-left ml-0 sm:ml-1 text-on-secondary"></p>  </form> </div> </div> </section> <section id="whats-in" class="bg-surface section px-6 md:px-10" data-astro-cid-gplzgdxk> <div class="max-w-6xl mx-auto" data-astro-cid-gplzgdxk> <h2 class="mb-14 md:mb-20 font-display font-black text-h2 text-on-surface leading-tight tracking-heading max-w-3xl" data-astro-cid-gplzgdxk>
Here's what a HeatPass looks like.
</h2> <div class="grid grid-cols-1 lg:grid-cols-[1fr_1fr] gap-14 lg:gap-24 items-start lg:items-stretch" data-astro-cid-gplzgdxk> <!-- Annotated mockup --> <figure class="mockup relative lg:flex lg:flex-col lg:h-full" aria-label="Example HeatPass result for a typical three-bedroom semi" data-astro-cid-gplzgdxk> <div class="stats-card bg-surface-container rounded-2xl p-6 md:p-8 shadow-ambient lg:flex-1 lg:flex lg:flex-col" data-astro-cid-gplzgdxk> <div class="flex items-start justify-between mb-8" data-astro-cid-gplzgdxk> <div data-astro-cid-gplzgdxk> <p class="font-body font-bold text-xs tracking-label uppercase text-on-surface/45 mb-2" data-astro-cid-gplzgdxk>
Your HeatPass
</p> <p class="font-body text-sm text-on-surface/55" data-astro-cid-gplzgdxk>
48 Oakfield Road, Chelmsford CM2
</p> </div> <span class="font-body font-bold text-xs tracking-label uppercase text-on-surface/55" data-astro-cid-gplzgdxk>
Sample
</span> </div> <!-- Verdict --> <div data-mock-anchor="A" class="flex items-center gap-3 mb-8" data-astro-cid-gplzgdxk> <span class="w-3.5 h-3.5 rounded-full bg-tertiary shrink-0" data-astro-cid-gplzgdxk></span> <p class="font-display font-bold text-2xl md:text-3xl text-on-surface tracking-heading" data-astro-cid-gplzgdxk>
Full Pass
</p> </div> <!-- Stats — all three rows stack/inline together via a container query on the card.
               Shared class 'stats-row' drives the flip so rows don't behave independently. --> <dl class="flex flex-col gap-5" data-astro-cid-gplzgdxk> <div data-mock-anchor="B" class="stats-row" data-astro-cid-gplzgdxk> <dt class="font-body text-sm text-on-surface/55 leading-snug" data-astro-cid-gplzgdxk>Estimated net cost after the grant</dt> <dd class="font-display font-bold text-xl md:text-2xl text-on-surface tracking-heading whitespace-nowrap" data-astro-cid-gplzgdxk> <span data-count-to="4200" data-astro-cid-gplzgdxk>£4,200</span> <span class="text-on-surface/35 font-bold text-base" data-astro-cid-gplzgdxk>to</span> <span data-count-to="6800" data-astro-cid-gplzgdxk>£6,800</span> </dd> </div> <div data-mock-anchor="C" class="stats-row" data-astro-cid-gplzgdxk> <dt class="font-body text-sm text-on-surface/55 leading-snug" data-astro-cid-gplzgdxk>Estimated annual saving vs gas</dt> <dd class="font-display font-bold text-xl md:text-2xl text-primary tracking-heading whitespace-nowrap" data-astro-cid-gplzgdxk> <span data-count-to="285" data-astro-cid-gplzgdxk>£285</span> <span class="text-on-surface/35 font-bold text-base" data-astro-cid-gplzgdxk>a year</span> </dd> </div> <div data-mock-anchor="D" class="stats-row" data-astro-cid-gplzgdxk> <dt class="font-body text-sm text-on-surface/55 leading-snug" data-astro-cid-gplzgdxk>What needs to happen first</dt> <dd class="font-display font-bold text-lg text-on-surface tracking-heading" data-astro-cid-gplzgdxk>
Nothing
</dd> </div> </dl> <!-- Installer row, flush to card bottom. mt-auto at lg keeps it pinned to the bottom
               when the card stretches to match the annotations column height. --> <div class="mt-8 lg:mt-auto pt-6 bg-surface-container-highest -mx-6 md:-mx-8 -mb-6 md:-mb-8 px-6 md:px-8 pb-6 md:pb-7 rounded-b-2xl" data-astro-cid-gplzgdxk> <p class="font-body font-bold text-xs tracking-label uppercase text-on-surface/65 mb-3" data-astro-cid-gplzgdxk>
Your matched installer
</p> <div class="flex items-center gap-4" data-astro-cid-gplzgdxk> <span class="w-10 h-10 rounded-full bg-primary/15 flex items-center justify-center shrink-0" data-astro-cid-gplzgdxk> <span class="font-display font-bold text-sm text-primary" data-astro-cid-gplzgdxk>GH</span> </span> <div class="min-w-0" data-astro-cid-gplzgdxk> <p class="font-body font-bold text-sm text-on-surface truncate" data-astro-cid-gplzgdxk>Greenfield Heat</p> <p class="font-body text-xs text-on-surface/80" data-astro-cid-gplzgdxk>Chelmsford &middot; 2.4 miles &middot; MCS-certified</p> </div> </div> </div> </div> <figcaption class="mt-4 font-body text-xs text-on-surface/45 text-center" data-astro-cid-gplzgdxk>
Illustrative example, not a real homeowner.
</figcaption> </figure> <!-- Annotations --> <ul class="grid grid-cols-1 min-[750px]:grid-cols-2 lg:grid-cols-1 gap-x-10 gap-y-8 md:gap-y-10" data-astro-cid-gplzgdxk> <li class="flex flex-col" data-astro-cid-gplzgdxk> <h3 class="font-display font-bold text-lg md:text-xl text-on-surface tracking-heading mb-2 leading-tight" data-astro-cid-gplzgdxk> Suitability verdict </h3> <p class="font-body text-base text-on-surface/70 leading-relaxed max-w-[38ch] lg:max-w-[52ch] text-justify" data-astro-cid-gplzgdxk> Full Pass, Conditional Pass, or Not Yet. One plain answer for your house, not a score out of ten. </p> </li><li class="flex flex-col max-[750px]:items-end max-[750px]:text-right" data-astro-cid-gplzgdxk> <h3 class="font-display font-bold text-lg md:text-xl text-on-surface tracking-heading mb-2 leading-tight" data-astro-cid-gplzgdxk> Estimated net cost </h3> <p class="font-body text-base text-on-surface/70 leading-relaxed max-w-[38ch] lg:max-w-[52ch] text-justify" data-astro-cid-gplzgdxk> What the install will cost after the £7,500 BUS grant, based on your property and current heating. </p> </li><li class="flex flex-col" data-astro-cid-gplzgdxk> <h3 class="font-display font-bold text-lg md:text-xl text-on-surface tracking-heading mb-2 leading-tight" data-astro-cid-gplzgdxk> Estimated annual savings </h3> <p class="font-body text-base text-on-surface/70 leading-relaxed max-w-[38ch] lg:max-w-[52ch] text-justify" data-astro-cid-gplzgdxk> Roughly what you&#39;d save each year vs. your current heating. Real UK tariffs, not manufacturer lab figures. </p> </li><li class="flex flex-col max-[750px]:items-end max-[750px]:text-right" data-astro-cid-gplzgdxk> <h3 class="font-display font-bold text-lg md:text-xl text-on-surface tracking-heading mb-2 leading-tight" data-astro-cid-gplzgdxk> What needs to happen first </h3> <p class="font-body text-base text-on-surface/70 leading-relaxed max-w-[38ch] lg:max-w-[52ch] text-justify" data-astro-cid-gplzgdxk> If insulation, radiator upgrades, or anything else needs to come first, you see it here with a rough cost. </p> </li> </ul> </div> </div> </section>   <section id="why-different" class="bg-surface-container-low section px-6 md:px-10"> <div class="max-w-6xl mx-auto"> <h2 class="mb-14 md:mb-20 font-display font-black text-h2 text-on-surface leading-tight tracking-heading max-w-3xl">
Why not just use the GOV.UK checker?
</h2> <ol class="grid grid-cols-1 md:grid-cols-3 gap-12 md:gap-10 lg:gap-14"> <li class="max-w-sm"> <p class="font-body font-bold text-xs tracking-label uppercase text-primary mb-5"> One of three
</p> <h3 class="font-display font-bold text-2xl md:text-[1.6rem] text-on-surface tracking-heading leading-tight mb-4"> Built on your actual home, not averages. </h3> <p class="font-body text-base text-on-surface/70 leading-relaxed text-justify"> We start from your home&#39;s EPC record, which is the same data the BUS grant is checked against. The verdict reflects your house, not a national average that doesn&#39;t. </p> </li><li class="max-w-sm"> <p class="font-body font-bold text-xs tracking-label uppercase text-primary mb-5"> Two of three
</p> <h3 class="font-display font-bold text-2xl md:text-[1.6rem] text-on-surface tracking-heading leading-tight mb-4"> One introduction, only if you say yes. </h3> <p class="font-body text-base text-on-surface/70 leading-relaxed text-justify"> When your home qualifies and you want to go ahead, you&#39;re introduced to one vetted MCS-certified installer. Most homeowner quote sites share your postcode with a panel of three. HeatPass doesn&#39;t. </p> </li><li class="max-w-sm"> <p class="font-body font-bold text-xs tracking-label uppercase text-primary mb-5"> Three of three
</p> <h3 class="font-display font-bold text-2xl md:text-[1.6rem] text-on-surface tracking-heading leading-tight mb-4"> Honest when it&#39;s not the right fit. </h3> <p class="font-body text-base text-on-surface/70 leading-relaxed text-justify"> If your home needs insulation or radiator work first, you get an Improvement Plan and nobody gets your details. Come back when the picture has changed, or let us email you when it does. </p> </li> </ol> </div> </section> <section id="scenario-preview" class="bg-surface section px-6 md:px-10" data-astro-cid-uu4pfah3> <div class="max-w-6xl mx-auto" data-astro-cid-uu4pfah3> <div class="max-w-2xl mb-16 md:mb-20" data-astro-cid-uu4pfah3> <p class="font-body font-bold text-xs tracking-label uppercase text-on-surface/60 mb-5" data-astro-cid-uu4pfah3>
A look inside
</p> <h2 class="font-display font-black text-h2 text-on-surface leading-tight tracking-heading mb-5" data-astro-cid-uu4pfah3>
See how tariff and insulation move the numbers.
</h2> <p class="font-body text-lg text-on-surface/65 leading-relaxed" data-astro-cid-uu4pfah3>
Drop a postcode in and you'll see this live for your own home. Until then, here it is
        for a typical three-bedroom semi.
</p> </div> <div id="scenario-widget" data-scenario-widget data-scenario="as-is" data-tariff="hp" class="relative bg-surface-container rounded-2xl p-6 md:p-10 shadow-ambient" data-astro-cid-uu4pfah3> <!-- Sticky summary bar (mobile only) --> <div class="md:hidden sticky top-16 z-10 -mx-6 mb-6 bg-surface/90 backdrop-blur px-6 py-3 flex items-baseline justify-between gap-4" data-astro-cid-uu4pfah3> <span class="font-body font-bold text-xs tracking-label uppercase text-on-surface/55" data-astro-cid-uu4pfah3>
Annual saving vs gas
</span> <span class="font-display font-bold text-xl text-primary tracking-heading whitespace-nowrap" data-metric="summary-saving" data-astro-cid-uu4pfah3>
&pound;715
</span> </div> <div class="flex flex-col gap-8 md:gap-10" data-astro-cid-uu4pfah3> <!-- Scenario --> <div data-astro-cid-uu4pfah3> <p id="scenario-label" class="font-body font-bold text-xs tracking-label uppercase text-on-surface/60 mb-3" data-astro-cid-uu4pfah3>
Scenario
</p> <div class="relative" data-rail-wrap data-astro-cid-uu4pfah3> <button type="button" data-rail-prev class="rail-nav rail-nav-prev" aria-label="Scroll scenarios left" tabindex="-1" data-astro-cid-uu4pfah3> <svg viewBox="0 0 16 16" class="w-4 h-4" aria-hidden="true" data-astro-cid-uu4pfah3> <path d="M 10 3 L 5 8 L 10 13" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-uu4pfah3></path> </svg> </button> <div role="radiogroup" aria-labelledby="scenario-label" class="chip-rail flex sm:grid sm:grid-cols-3 overflow-x-auto sm:overflow-visible snap-x snap-mandatory gap-2 -mx-1 px-1 pb-1 [scroll-padding-inline:0.25rem] [&#38;::-webkit-scrollbar]:hidden" data-rail data-astro-cid-uu4pfah3> <label class="chip shrink-0 sm:shrink min-w-[10rem] sm:min-w-0 snap-start cursor-pointer select-none rounded-xl px-4 py-3 bg-surface-container-highest text-on-surface has-[:checked]:bg-primary has-[:checked]:text-on-primary has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-offset-2 has-[:focus-visible]:outline-primary transition-colors duration-200" data-astro-cid-uu4pfah3> <input type="radio" name="scenario" value="as-is" checked class="sr-only" data-astro-cid-uu4pfah3> <span class="font-body font-bold text-sm" data-astro-cid-uu4pfah3>As-is today</span> </label><label class="chip shrink-0 sm:shrink min-w-[10rem] sm:min-w-0 snap-start cursor-pointer select-none rounded-xl px-4 py-3 bg-surface-container-highest text-on-surface has-[:checked]:bg-primary has-[:checked]:text-on-primary has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-offset-2 has-[:focus-visible]:outline-primary transition-colors duration-200" data-astro-cid-uu4pfah3> <input type="radio" name="scenario" value="loft" class="sr-only" data-astro-cid-uu4pfah3> <span class="font-body font-bold text-sm" data-astro-cid-uu4pfah3>Add loft insulation</span> </label><label class="chip shrink-0 sm:shrink min-w-[10rem] sm:min-w-0 snap-start cursor-pointer select-none rounded-xl px-4 py-3 bg-surface-container-highest text-on-surface has-[:checked]:bg-primary has-[:checked]:text-on-primary has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-offset-2 has-[:focus-visible]:outline-primary transition-colors duration-200" data-astro-cid-uu4pfah3> <input type="radio" name="scenario" value="full" class="sr-only" data-astro-cid-uu4pfah3> <span class="font-body font-bold text-sm" data-astro-cid-uu4pfah3>Add loft and cavity</span> </label> </div> <button type="button" data-rail-next class="rail-nav rail-nav-next" aria-label="Scroll scenarios right" tabindex="-1" data-astro-cid-uu4pfah3> <svg viewBox="0 0 16 16" class="w-4 h-4" aria-hidden="true" data-astro-cid-uu4pfah3> <path d="M 6 3 L 11 8 L 6 13" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-uu4pfah3></path> </svg> </button> </div> </div> <!-- Tariff --> <div data-astro-cid-uu4pfah3> <p id="tariff-label" class="font-body font-bold text-xs tracking-label uppercase text-on-surface/60 mb-3" data-astro-cid-uu4pfah3>
Electricity tariff
</p> <div class="relative" data-rail-wrap data-astro-cid-uu4pfah3> <button type="button" data-rail-prev class="rail-nav rail-nav-prev" aria-label="Scroll tariffs left" tabindex="-1" data-astro-cid-uu4pfah3> <svg viewBox="0 0 16 16" class="w-4 h-4" aria-hidden="true" data-astro-cid-uu4pfah3> <path d="M 10 3 L 5 8 L 10 13" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-uu4pfah3></path> </svg> </button> <div role="radiogroup" aria-labelledby="tariff-label" class="chip-rail flex sm:grid sm:grid-cols-3 overflow-x-auto sm:overflow-visible snap-x snap-mandatory gap-2 -mx-1 px-1 pb-1 [scroll-padding-inline:0.25rem] [&#38;::-webkit-scrollbar]:hidden" data-rail data-astro-cid-uu4pfah3> <label class="chip shrink-0 sm:shrink min-w-[10rem] sm:min-w-0 snap-start cursor-pointer select-none rounded-xl px-4 py-3 bg-surface-container-highest text-on-surface has-[:checked]:bg-primary has-[:checked]:text-on-primary has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-offset-2 has-[:focus-visible]:outline-primary transition-colors duration-200" data-astro-cid-uu4pfah3> <input type="radio" name="tariff" value="standard" class="sr-only" data-astro-cid-uu4pfah3> <span class="block font-body font-bold text-sm" data-astro-cid-uu4pfah3>Standard single-rate</span> <span class="block font-body text-xs opacity-65 mt-0.5" data-astro-cid-uu4pfah3>Typical 2026 cap</span> </label><label class="chip shrink-0 sm:shrink min-w-[10rem] sm:min-w-0 snap-start cursor-pointer select-none rounded-xl px-4 py-3 bg-surface-container-highest text-on-surface has-[:checked]:bg-primary has-[:checked]:text-on-primary has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-offset-2 has-[:focus-visible]:outline-primary transition-colors duration-200" data-astro-cid-uu4pfah3> <input type="radio" name="tariff" value="hp" checked class="sr-only" data-astro-cid-uu4pfah3> <span class="block font-body font-bold text-sm" data-astro-cid-uu4pfah3>Heat-pump tariff</span> <span class="block font-body text-xs opacity-65 mt-0.5" data-astro-cid-uu4pfah3>Cosy, Intelligent Go</span> </label><label class="chip shrink-0 sm:shrink min-w-[10rem] sm:min-w-0 snap-start cursor-pointer select-none rounded-xl px-4 py-3 bg-surface-container-highest text-on-surface has-[:checked]:bg-primary has-[:checked]:text-on-primary has-[:focus-visible]:outline-2 has-[:focus-visible]:outline-offset-2 has-[:focus-visible]:outline-primary transition-colors duration-200" data-astro-cid-uu4pfah3> <input type="radio" name="tariff" value="e7" class="sr-only" data-astro-cid-uu4pfah3> <span class="block font-body font-bold text-sm" data-astro-cid-uu4pfah3>Economy 7</span> <span class="block font-body text-xs opacity-65 mt-0.5" data-astro-cid-uu4pfah3>Blended day/night</span> </label> </div> <button type="button" data-rail-next class="rail-nav rail-nav-next" aria-label="Scroll tariffs right" tabindex="-1" data-astro-cid-uu4pfah3> <svg viewBox="0 0 16 16" class="w-4 h-4" aria-hidden="true" data-astro-cid-uu4pfah3> <path d="M 6 3 L 11 8 L 6 13" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-uu4pfah3></path> </svg> </button> </div> </div> <!-- Metric tiles --> <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-3 md:gap-4" data-astro-cid-uu4pfah3> <div class="bg-surface-container-low rounded-xl p-5 md:p-6" data-astro-cid-uu4pfah3> <p class="font-body font-bold text-xs tracking-label uppercase text-on-surface/45 mb-3" data-astro-cid-uu4pfah3>
Net upfront cost
</p> <p class="font-display font-bold text-3xl md:text-[2rem] text-on-surface tracking-heading leading-none" data-astro-cid-uu4pfah3> <span data-metric="netCost" data-astro-cid-uu4pfah3>&pound;4,000</span> </p> <p class="font-body text-xs text-on-surface/60 mt-2" data-astro-cid-uu4pfah3>After &pound;7,500 BUS grant</p> </div> <div class="bg-surface-container-low rounded-xl p-5 md:p-6" data-astro-cid-uu4pfah3> <p class="font-body font-bold text-xs tracking-label uppercase text-on-surface/45 mb-3" data-astro-cid-uu4pfah3>
Annual saving vs gas
</p> <p class="font-display font-bold text-3xl md:text-[2rem] text-primary tracking-heading leading-none" data-astro-cid-uu4pfah3> <span data-metric="saving" data-astro-cid-uu4pfah3>&pound;715</span> </p> <p class="font-body text-xs text-on-surface/60 mt-2" data-astro-cid-uu4pfah3>Running-cost difference</p> </div> <div class="bg-surface-container-low rounded-xl p-5 md:p-6" data-astro-cid-uu4pfah3> <p class="font-body font-bold text-xs tracking-label uppercase text-on-surface/45 mb-3" data-astro-cid-uu4pfah3>
Payback period
</p> <p class="font-display font-bold text-3xl md:text-[2rem] text-on-surface tracking-heading leading-none" data-astro-cid-uu4pfah3> <span data-metric="payback" data-astro-cid-uu4pfah3>5.6 yrs</span> </p> <p class="font-body text-xs text-on-surface/60 mt-2" data-metric="paybackNote" data-astro-cid-uu4pfah3>If prices and use stay similar</p> </div> <div class="bg-surface-container-low rounded-xl p-5 md:p-6" data-astro-cid-uu4pfah3> <p class="font-body font-bold text-xs tracking-label uppercase text-on-surface/45 mb-3" data-astro-cid-uu4pfah3>
Upgrades needed first
</p> <p class="font-display font-bold text-lg text-on-surface tracking-heading leading-snug" data-metric="upgrade" data-astro-cid-uu4pfah3>
None required
</p> </div> </div> </div> <p class="mt-6 font-body text-xs text-on-surface/60 leading-relaxed" data-astro-cid-uu4pfah3>
Assumes a typical three-bedroom semi, gas boiler replaced by an air-source heat pump at
        &pound;11,500 gross, SCOP 3.5, gas at 7.5p per kWh. Preview figures only.
</p> <p class="font-body text-xs text-on-surface/60 leading-relaxed" data-astro-cid-uu4pfah3>
Preview figures only. Your HeatPass uses your EPC data and current supplier prices.
</p> </div> <p class="mt-5 font-body text-sm text-on-surface/55 text-center md:text-left" data-astro-cid-uu4pfah3>
This is what your scenarios page will look like. Enter your postcode to see yours.
</p> </div> </section>    <section id="honest-angle" class="bg-surface-container-low section px-6 md:px-10"> <div class="max-w-6xl mx-auto grid grid-cols-1 lg:grid-cols-[1fr_2fr] gap-12 lg:gap-24 items-start"> <div class="lg:sticky lg:top-24"> <p class="font-body font-bold text-xs tracking-label uppercase text-on-surface/60 mb-5">
The honest part
</p> <h2 class="font-display font-black text-h2 text-on-surface leading-tight tracking-heading"> <span class="max-[400px]:whitespace-normal">When a heat pump</span>  <span class="max-[400px]:whitespace-normal">isn't the right answer yet.</span> </h2> </div> <div class="font-body text-lg text-on-surface/85 leading-[1.7] max-w-[62ch] space-y-8 text-justify"> <p>
A heat pump isn't right for every UK home. A solid-wall Victorian terrace with single
        glazing usually needs the insulation work to come first, or the pump runs hot and
        the savings don't cover the outlay. A flat with no outdoor space has the opposite
        problem: nowhere sensible to put the unit. And if you rent, the call isn't fully
        yours to make anyway.
</p> <p>
I check all of this for your house. You get a list of what would change the picture,
        roughly what each step would cost, and when the answer is "not right yet," no installer
        sees your details.
</p> <p>
Nothing happens on a 'Not Yet'. You keep the Improvement Plan, come back when the
        picture has changed, and nobody contacts you in between. Other quote sites pass your
        postcode to three or four installers the minute you hit submit. I look at your house
        first, and only make the one introduction when your home is ready and you've asked
        me to.
</p> </div> </div> </section> <section aria-label="For installers" class="bg-surface-container-highest"> <div class="max-w-6xl mx-auto px-6 md:px-10 py-6 md:py-8"> <a href="/installers" class="group flex flex-wrap items-center justify-between gap-x-6 gap-y-2 font-body text-base text-on-surface hover:text-primary transition-colors duration-200 focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-primary rounded-sm"> <span>
Are you an MCS-certified installer? Learn about the HeatPass network.
</span> <span class="font-body font-bold text-sm text-primary group-hover:translate-x-0.5 transition-transform duration-200" aria-hidden="true">
For installers &rarr;
</span> </a> </div> </section> <section id="faq" class="bg-surface section px-6 md:px-10" data-astro-cid-al2ca2vr> <div class="max-w-4xl mx-auto" data-astro-cid-al2ca2vr> <div class="mb-16 md:mb-20 max-w-xl" data-astro-cid-al2ca2vr> <p class="font-body font-bold text-xs tracking-label uppercase text-on-surface/60 mb-5" data-astro-cid-al2ca2vr>
Common questions
</p> <h2 class="font-display font-black text-h2 text-on-surface leading-tight tracking-heading" data-astro-cid-al2ca2vr>
Everything homeowners tend to ask.
</h2> </div> <ul class="flex flex-col gap-3" data-astro-cid-al2ca2vr> <li data-astro-cid-al2ca2vr> <details class="faq-item group bg-surface-container rounded-2xl" data-astro-cid-al2ca2vr> <summary class="flex items-start justify-between gap-5 px-6 py-5 md:px-8 md:py-6 cursor-pointer list-none focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-primary rounded-2xl" data-astro-cid-al2ca2vr> <h3 class="font-display font-bold text-lg md:text-xl text-on-surface tracking-heading leading-snug" data-astro-cid-al2ca2vr> Is this free? </h3> <span class="icon shrink-0 pt-1.5" aria-hidden="true" data-astro-cid-al2ca2vr> <svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 text-on-surface/60" data-astro-cid-al2ca2vr> <path d="M 3 6 L 8 11 L 13 6" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-al2ca2vr></path> </svg> </span> </summary> <div class="px-6 pb-6 md:px-8 md:pb-7 -mt-1" data-astro-cid-al2ca2vr> <p class="font-body text-base text-on-surface/75 leading-relaxed max-w-[75ch] text-justify" data-astro-cid-al2ca2vr> Yes. HeatPass is free for homeowners. Installers pay us when we introduce them to a suitable home. </p> </div> </details> </li><li data-astro-cid-al2ca2vr> <details class="faq-item group bg-surface-container rounded-2xl" data-astro-cid-al2ca2vr> <summary class="flex items-start justify-between gap-5 px-6 py-5 md:px-8 md:py-6 cursor-pointer list-none focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-primary rounded-2xl" data-astro-cid-al2ca2vr> <h3 class="font-display font-bold text-lg md:text-xl text-on-surface tracking-heading leading-snug" data-astro-cid-al2ca2vr> How accurate is the verdict? </h3> <span class="icon shrink-0 pt-1.5" aria-hidden="true" data-astro-cid-al2ca2vr> <svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 text-on-surface/60" data-astro-cid-al2ca2vr> <path d="M 3 6 L 8 11 L 13 6" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-al2ca2vr></path> </svg> </span> </summary> <div class="px-6 pb-6 md:px-8 md:pb-7 -mt-1" data-astro-cid-al2ca2vr> <p class="font-body text-base text-on-surface/75 leading-relaxed max-w-[75ch] text-justify" data-astro-cid-al2ca2vr> The verdict is built from your property&#39;s official EPC data plus a short set of questions only you can answer. It&#39;s a strong first read, not a replacement for a site survey. If your home qualifies, the installer confirms details in person before quoting. </p> </div> </details> </li><li data-astro-cid-al2ca2vr> <details class="faq-item group bg-surface-container rounded-2xl" data-astro-cid-al2ca2vr> <summary class="flex items-start justify-between gap-5 px-6 py-5 md:px-8 md:py-6 cursor-pointer list-none focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-primary rounded-2xl" data-astro-cid-al2ca2vr> <h3 class="font-display font-bold text-lg md:text-xl text-on-surface tracking-heading leading-snug" data-astro-cid-al2ca2vr> Where does my data come from? </h3> <span class="icon shrink-0 pt-1.5" aria-hidden="true" data-astro-cid-al2ca2vr> <svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 text-on-surface/60" data-astro-cid-al2ca2vr> <path d="M 3 6 L 8 11 L 13 6" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-al2ca2vr></path> </svg> </span> </summary> <div class="px-6 pb-6 md:px-8 md:pb-7 -mt-1" data-astro-cid-al2ca2vr> <p class="font-body text-base text-on-surface/75 leading-relaxed max-w-[75ch] text-justify" data-astro-cid-al2ca2vr> We use the UK government&#39;s Energy Performance Certificate register, which holds records for about 28 million homes. If your home doesn&#39;t have an EPC, you can still go through the questions and we&#39;ll ask a few extra things. </p> </div> </details> </li><li data-astro-cid-al2ca2vr> <details class="faq-item group bg-surface-container rounded-2xl" data-astro-cid-al2ca2vr> <summary class="flex items-start justify-between gap-5 px-6 py-5 md:px-8 md:py-6 cursor-pointer list-none focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-primary rounded-2xl" data-astro-cid-al2ca2vr> <h3 class="font-display font-bold text-lg md:text-xl text-on-surface tracking-heading leading-snug" data-astro-cid-al2ca2vr> What happens if my home isn&#39;t ready? </h3> <span class="icon shrink-0 pt-1.5" aria-hidden="true" data-astro-cid-al2ca2vr> <svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 text-on-surface/60" data-astro-cid-al2ca2vr> <path d="M 3 6 L 8 11 L 13 6" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-al2ca2vr></path> </svg> </span> </summary> <div class="px-6 pb-6 md:px-8 md:pb-7 -mt-1" data-astro-cid-al2ca2vr> <p class="font-body text-base text-on-surface/75 leading-relaxed max-w-[75ch] text-justify" data-astro-cid-al2ca2vr> You get a Conditional Pass or Not Yet verdict with an Improvement Plan. It lists what would help most, roughly what each step would cost, and what it would change. No installer gets your details in this case. Come back and run the check again any time the picture has changed. </p> </div> </details> </li><li data-astro-cid-al2ca2vr> <details class="faq-item group bg-surface-container rounded-2xl" data-astro-cid-al2ca2vr> <summary class="flex items-start justify-between gap-5 px-6 py-5 md:px-8 md:py-6 cursor-pointer list-none focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-primary rounded-2xl" data-astro-cid-al2ca2vr> <h3 class="font-display font-bold text-lg md:text-xl text-on-surface tracking-heading leading-snug" data-astro-cid-al2ca2vr> Who are the installers? How are they vetted? </h3> <span class="icon shrink-0 pt-1.5" aria-hidden="true" data-astro-cid-al2ca2vr> <svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 text-on-surface/60" data-astro-cid-al2ca2vr> <path d="M 3 6 L 8 11 L 13 6" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-al2ca2vr></path> </svg> </span> </summary> <div class="px-6 pb-6 md:px-8 md:pb-7 -mt-1" data-astro-cid-al2ca2vr> <p class="font-body text-base text-on-surface/75 leading-relaxed max-w-[75ch] text-justify" data-astro-cid-al2ca2vr> Only MCS-certified installers can work with BUS grants, and only MCS-certified installers can use HeatPass. On top of MCS we check Companies House history, postcode coverage, install volume, references, and customer feedback over time. </p> </div> </details> </li><li data-astro-cid-al2ca2vr> <details class="faq-item group bg-surface-container rounded-2xl" data-astro-cid-al2ca2vr> <summary class="flex items-start justify-between gap-5 px-6 py-5 md:px-8 md:py-6 cursor-pointer list-none focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-primary rounded-2xl" data-astro-cid-al2ca2vr> <h3 class="font-display font-bold text-lg md:text-xl text-on-surface tracking-heading leading-snug" data-astro-cid-al2ca2vr> Will my details be shared with multiple companies? </h3> <span class="icon shrink-0 pt-1.5" aria-hidden="true" data-astro-cid-al2ca2vr> <svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 text-on-surface/60" data-astro-cid-al2ca2vr> <path d="M 3 6 L 8 11 L 13 6" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-al2ca2vr></path> </svg> </span> </summary> <div class="px-6 pb-6 md:px-8 md:pb-7 -mt-1" data-astro-cid-al2ca2vr> <p class="font-body text-base text-on-surface/75 leading-relaxed max-w-[75ch] text-justify" data-astro-cid-al2ca2vr> No. Even when your home qualifies, nothing moves until you confirm you&#39;d like an introduction. If you say yes, your details go to a single MCS-certified installer covering your postcode. Never to a panel of three. If the match doesn&#39;t feel right you tell us and we step back. </p> </div> </details> </li><li data-astro-cid-al2ca2vr> <details class="faq-item group bg-surface-container rounded-2xl" data-astro-cid-al2ca2vr> <summary class="flex items-start justify-between gap-5 px-6 py-5 md:px-8 md:py-6 cursor-pointer list-none focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-primary rounded-2xl" data-astro-cid-al2ca2vr> <h3 class="font-display font-bold text-lg md:text-xl text-on-surface tracking-heading leading-snug" data-astro-cid-al2ca2vr> Is HeatPass affiliated with the government or MCS? </h3> <span class="icon shrink-0 pt-1.5" aria-hidden="true" data-astro-cid-al2ca2vr> <svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 text-on-surface/60" data-astro-cid-al2ca2vr> <path d="M 3 6 L 8 11 L 13 6" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-al2ca2vr></path> </svg> </span> </summary> <div class="px-6 pb-6 md:px-8 md:pb-7 -mt-1" data-astro-cid-al2ca2vr> <p class="font-body text-base text-on-surface/75 leading-relaxed max-w-[75ch] text-justify" data-astro-cid-al2ca2vr> No. We&#39;re independent. We use the government&#39;s public EPC register and we only work with MCS-certified installers, but we&#39;re not part of either body. </p> </div> </details> </li><li data-astro-cid-al2ca2vr> <details class="faq-item group bg-surface-container rounded-2xl" data-astro-cid-al2ca2vr> <summary class="flex items-start justify-between gap-5 px-6 py-5 md:px-8 md:py-6 cursor-pointer list-none focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-primary rounded-2xl" data-astro-cid-al2ca2vr> <h3 class="font-display font-bold text-lg md:text-xl text-on-surface tracking-heading leading-snug" data-astro-cid-al2ca2vr> What does the BUS grant cover? </h3> <span class="icon shrink-0 pt-1.5" aria-hidden="true" data-astro-cid-al2ca2vr> <svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" class="w-4 h-4 text-on-surface/60" data-astro-cid-al2ca2vr> <path d="M 3 6 L 8 11 L 13 6" fill="none" stroke="currentColor" stroke-width="1.75" stroke-linecap="round" stroke-linejoin="round" data-astro-cid-al2ca2vr></path> </svg> </span> </summary> <div class="px-6 pb-6 md:px-8 md:pb-7 -mt-1" data-astro-cid-al2ca2vr> <p class="font-body text-base text-on-surface/75 leading-relaxed max-w-[75ch] text-justify" data-astro-cid-al2ca2vr> The £7,500 Boiler Upgrade Scheme grant is paid by the government towards the cost of installing an eligible heat pump in an owner-occupied home. Your MCS-certified installer applies for it on your behalf and takes it off your quote. We&#39;ll show you whether your home qualifies and what&#39;s left to pay. </p> </div> </details> </li> </ul> <p class="mt-14 md:mt-16 font-body text-base md:text-lg text-on-surface/75 leading-relaxed max-w-[60ch]" data-astro-cid-al2ca2vr>
If your question isn't here, read more in our  <a href="/guides" class="text-primary hover:text-primary-container underline underline-offset-4 decoration-1 transition-colors duration-200 focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-primary rounded-sm" data-astro-cid-al2ca2vr>
Guides
</a>.
</p> <p class="mt-2 font-body text-base md:text-lg text-on-surface/75 leading-relaxed max-w-[60ch]" data-astro-cid-al2ca2vr>
Or <span class="whitespace-nowrap" data-astro-cid-al2ca2vr>write to <a href="mailto:hello@heatpass.co.uk" class="text-primary hover:text-primary-container underline underline-offset-4 decoration-1 transition-colors duration-200 focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-primary rounded-sm" data-astro-cid-al2ca2vr>hello@heatpass.co.uk</a></span> and I'll come back to you.
</p> </div> </section>  <section id="final-cta" class="bg-secondary text-on-secondary section px-6 md:px-10"> <div class="max-w-6xl mx-auto"> <div class="grid grid-cols-1 lg:grid-cols-[1fr_1fr] gap-12 lg:gap-24 items-end"> <div> <p class="font-body font-bold text-xs tracking-label uppercase text-on-secondary/70 mb-6">
Two minutes, no email required
</p> <h2 class="font-display font-black text-h2 md:text-[clamp(2rem,4.5vw,3.5rem)] text-on-secondary leading-tight tracking-heading max-w-lg">
Ready to see if your home makes the Pass?
</h2> </div> <div> <form id="final-postcode" data-postcode-form data-track-source="final" novalidate class="w-full max-w-lg mx-auto sm:mx-0"> <div aria-hidden="true" style="position:absolute;left:-9999px;opacity:0;pointer-events:none;height:0;overflow:hidden;"> <label for="final-postcode-hp">Address</label> <input id="final-postcode-hp" type="text" name="address" tabindex="-1" autocomplete="off"> </div> <label for="final-postcode-input" class="block font-body font-bold text-xs tracking-label uppercase text-on-secondary/75 mb-2 text-center sm:text-left ml-0 sm:ml-1"> Your postcode </label> <div class="flex flex-col sm:flex-row gap-3"> <input id="final-postcode-input" type="text" name="postcode" autocomplete="postal-code" placeholder="e.g. SW1A 1AA" spellcheck="false" inputmode="text" aria-describedby="final-postcode-error" class="flex-1 min-w-0 bg-surface text-on-surface px-5 py-4 rounded-xl font-body text-base text-on-surface placeholder:text-on-surface/35 shadow-input hover:shadow-input-focus focus:shadow-input-focus focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/40 transition-shadow duration-200"> <button type="submit" class="shrink-0 bg-primary hover:bg-primary-container text-on-primary font-body font-bold text-base px-7 py-4 rounded-full shadow-button hover:shadow-button-hover transition-[background-color,box-shadow,transform] duration-200 active:translate-y-px focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary whitespace-nowrap"> Get my HeatPass </button> </div> <p id="final-postcode-error" role="alert" aria-live="polite" class="hidden mt-3 font-body text-sm text-center sm:text-left ml-0 sm:ml-1 text-on-secondary"></p>  </form> </div> </div> </div> </section> </main>      <footer id="footer" class="bg-surface-dark text-on-surface-dark pt-24 md:pt-32 pb-12 px-6 md:px-10"> <div class="max-w-6xl mx-auto"> <!-- Top: newsletter + columns. --> <div class="grid grid-cols-1 sm:grid-cols-2 min-[1200px]:grid-cols-[2.4fr_1fr_1fr_1fr_1fr] gap-14 sm:gap-x-12 sm:gap-y-14 min-[1200px]:gap-12"> <!-- Newsletter --> <div class="sm:col-span-2 min-[1200px]:col-span-1"> <a href="/" aria-label="HeatPass home" class="inline-block mb-8 focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-primary rounded-sm"> <img src="/logo-dark.svg" alt="HeatPass" class="h-7 w-auto block"> </a> <h2 class="font-display font-bold text-xl text-on-surface-dark tracking-heading leading-snug mb-3 max-w-xs">
Not ready yet?
</h2> <p class="font-body text-sm text-on-surface-dark/65 leading-relaxed mb-6 max-w-sm">
Leave your email and we'll send you a monthly update as the HeatPass network expands and as grants and tariffs shift.
</p> <form id="newsletter-form" class="max-w-md" novalidate> <label for="newsletter-email" class="sr-only">Your email</label> <div class="flex flex-col sm:flex-row gap-2"> <input id="newsletter-email" type="email" name="email" required autocomplete="email" placeholder="you@example.co.uk" class="flex-1 min-w-0 bg-on-surface-dark/10 rounded-xl px-4 py-3 font-body text-sm text-on-surface-dark placeholder:text-on-surface-dark/40 shadow-[inset_0_1px_0_rgba(255,255,255,0.04)] focus:outline-none focus-visible:ring-2 focus-visible:ring-primary/60"> <button type="submit" class="shrink-0 bg-primary hover:bg-primary-container text-on-primary font-body font-bold text-sm px-5 py-3 rounded-full shadow-button hover:shadow-button-hover transition-[background-color,box-shadow,transform] duration-200 active:translate-y-px focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-primary">
Subscribe
</button> </div> <p id="newsletter-status" role="status" aria-live="polite" class="mt-3 font-body text-xs text-on-surface-dark/60 min-h-[1em]"></p> </form> </div> <div> <p class="font-body font-bold text-xs tracking-label uppercase text-on-surface-dark/55 mb-5">Product</p> <ul class="flex flex-col gap-3"> <li> <a href="/how-it-works" class="font-body text-sm text-on-surface-dark/75 hover:text-on-surface-dark transition-colors duration-200"> How it works </a> </li><li> <a href="/#whats-in" class="font-body text-sm text-on-surface-dark/75 hover:text-on-surface-dark transition-colors duration-200"> What&#39;s in your HeatPass </a> </li><li> <a href="/trust-and-privacy" class="font-body text-sm text-on-surface-dark/75 hover:text-on-surface-dark transition-colors duration-200"> Trust and privacy </a> </li><li> <a href="/#faq" class="font-body text-sm text-on-surface-dark/75 hover:text-on-surface-dark transition-colors duration-200"> FAQ </a> </li> </ul> </div> <div> <p class="font-body font-bold text-xs tracking-label uppercase text-on-surface-dark/55 mb-5">Guides</p> <ul class="flex flex-col gap-3"> <li> <a href="/guides" class="font-body text-sm text-on-surface-dark/75 hover:text-on-surface-dark transition-colors duration-200"> Heat pumps explained </a> </li><li> <a href="/guides" class="font-body text-sm text-on-surface-dark/75 hover:text-on-surface-dark transition-colors duration-200"> Cost and grants </a> </li><li> <a href="/guides" class="font-body text-sm text-on-surface-dark/75 hover:text-on-surface-dark transition-colors duration-200"> Property suitability </a> </li><li> <a href="/guides" class="font-body text-sm text-on-surface-dark/75 hover:text-on-surface-dark transition-colors duration-200"> Installation process </a> </li><li> <a href="/guides" class="font-body text-sm text-on-surface-dark/75 hover:text-on-surface-dark transition-colors duration-200"> Running and maintenance </a> </li> </ul> </div> <div> <p class="font-body font-bold text-xs tracking-label uppercase text-on-surface-dark/55 mb-5">Company</p> <ul class="flex flex-col gap-3"> <li> <a href="/blog" class="font-body text-sm text-on-surface-dark/75 hover:text-on-surface-dark transition-colors duration-200"> Blog </a> </li><li> <a href="/contact" class="font-body text-sm text-on-surface-dark/75 hover:text-on-surface-dark transition-colors duration-200"> Contact </a> </li><li> <a href="/installers" class="font-body text-sm text-on-surface-dark/75 hover:text-on-surface-dark transition-colors duration-200"> For installers </a> </li> </ul> </div> <div> <p class="font-body font-bold text-xs tracking-label uppercase text-on-surface-dark/55 mb-5">Legal</p> <ul class="flex flex-col gap-3"> <li> <a href="/privacy" class="font-body text-sm text-on-surface-dark/75 hover:text-on-surface-dark transition-colors duration-200"> Privacy </a> </li><li> <a href="/terms" class="font-body text-sm text-on-surface-dark/75 hover:text-on-surface-dark transition-colors duration-200"> Terms </a> </li><li> <a href="/cookies" class="font-body text-sm text-on-surface-dark/75 hover:text-on-surface-dark transition-colors duration-200"> Cookies </a> </li> </ul> </div> </div> <!-- Bottom strip. Separation from the columns above comes from the mt-20/24 whitespace. --> <div class="mt-20 md:mt-24 pt-10 flex flex-col md:flex-row md:items-center md:justify-between gap-4"> <p class="font-body text-xs text-on-surface-dark/55 leading-relaxed max-w-xl">
&copy; 2026 HeatPass. Built on the UK government's EPC register. MCS-certified installers only.
</p> <div class="flex flex-wrap items-center gap-x-5 gap-y-2"> <button type="button" data-cookie-settings data-track-cta="cookie_settings_open" class="font-body text-xs text-on-surface-dark/65 hover:text-on-surface-dark transition-colors duration-200 focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-primary rounded-sm">
Cookie settings
</button> <p class="font-body text-xs text-on-surface-dark/45">
heatpass.co.uk
</p> </div> </div> </div> </footer>  <aside id="cookie-banner" role="dialog" aria-modal="true" aria-labelledby="cookie-banner-title" aria-describedby="cookie-banner-body" hidden class="fixed inset-x-3 bottom-3 sm:inset-x-auto sm:left-6 sm:bottom-6 sm:right-auto sm:max-w-md md:max-w-lg z-[60] cookie-banner" data-astro-cid-fzbxxtek> <div class="bg-surface-container rounded-lg shadow-ambient-md p-6 sm:p-8" data-astro-cid-fzbxxtek> <p class="font-body font-bold text-xs tracking-label uppercase text-on-surface/55 mb-3" data-astro-cid-fzbxxtek>
Cookies
</p> <h2 id="cookie-banner-title" tabindex="-1" class="font-display font-bold text-on-surface text-2xl sm:text-[1.625rem] tracking-heading leading-tight mb-4 outline-none" data-astro-cid-fzbxxtek>
A note on cookies.
</h2> <!-- Default view --> <div data-view="default" data-astro-cid-fzbxxtek> <p id="cookie-banner-body" class="font-body text-[0.95rem] text-on-surface/85 leading-relaxed mb-3" data-astro-cid-fzbxxtek>
We use a few cookies to make the site work, plus optional analytics
        so we can see what's helpful. You're in charge — pick what's on,
        change it any time.
</p> <p class="font-body text-sm text-on-surface/65 mb-7" data-astro-cid-fzbxxtek> <a href="/cookies" class="underline underline-offset-4 decoration-on-surface/30 hover:decoration-on-surface text-on-surface/80 hover:text-on-surface transition-colors" data-astro-cid-fzbxxtek>
Read our cookie policy
</a> </p> <div class="flex flex-col sm:flex-row sm:flex-wrap gap-2.5 sm:gap-3 sm:items-center" data-astro-cid-fzbxxtek> <button type="button" data-action="accept-all" class="cookie-pill bg-primary hover:bg-primary-container text-on-primary shadow-button hover:shadow-button-hover" data-astro-cid-fzbxxtek>
Accept all
</button> <button type="button" data-action="reject-all" class="cookie-pill bg-surface-dark hover:bg-on-surface text-on-surface-dark" data-astro-cid-fzbxxtek>
Reject all
</button> <button type="button" data-action="customise" class="cookie-pill-text font-body font-bold text-sm text-on-surface/75 hover:text-on-surface transition-colors px-2 py-2 sm:py-0 sm:ml-1 inline-flex items-center gap-1.5 focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-primary rounded-sm" data-astro-cid-fzbxxtek>
Customise
<span aria-hidden="true" class="text-base leading-none" data-astro-cid-fzbxxtek>&rsaquo;</span> </button> </div> </div> <!-- Customise view --> <div data-view="customise" hidden data-astro-cid-fzbxxtek> <p class="font-body text-sm text-on-surface/75 leading-relaxed mb-7" data-astro-cid-fzbxxtek>
Choose what's on. You can change this any time from the footer.
</p> <ul class="flex flex-col gap-5 mb-8" data-astro-cid-fzbxxtek> <li class="flex items-start justify-between gap-4" data-astro-cid-fzbxxtek> <div class="flex-1 min-w-0" data-astro-cid-fzbxxtek> <p class="font-body font-bold text-sm text-on-surface mb-1" data-astro-cid-fzbxxtek>
Strictly necessary
</p> <p class="font-body text-sm text-on-surface/70 leading-relaxed" data-astro-cid-fzbxxtek>
The cookies that make the site work. Always on.
</p> </div> <span class="cookie-toggle cookie-toggle--locked" aria-hidden="true" data-astro-cid-fzbxxtek> <span class="cookie-toggle__dot" data-astro-cid-fzbxxtek></span> </span> <span class="sr-only" data-astro-cid-fzbxxtek>Strictly necessary cookies — always on, cannot be disabled.</span> </li> <li class="flex items-start justify-between gap-4" data-astro-cid-fzbxxtek> <div class="flex-1 min-w-0" data-astro-cid-fzbxxtek> <p class="font-body font-bold text-sm text-on-surface mb-1" data-astro-cid-fzbxxtek>
Analytics
</p> <p class="font-body text-sm text-on-surface/70 leading-relaxed" data-astro-cid-fzbxxtek>
Anonymous data so we can see what's working — Google Analytics 4 and Microsoft Clarity.
</p> </div> <button type="button" role="switch" aria-checked="false" aria-label="Analytics cookies" data-toggle="analytics" class="cookie-toggle" data-astro-cid-fzbxxtek> <span class="cookie-toggle__dot" data-astro-cid-fzbxxtek></span> </button> </li> <li class="flex items-start justify-between gap-4" data-astro-cid-fzbxxtek> <div class="flex-1 min-w-0" data-astro-cid-fzbxxtek> <p class="font-body font-bold text-sm text-on-surface mb-1" data-astro-cid-fzbxxtek>
Marketing
</p> <p class="font-body text-sm text-on-surface/70 leading-relaxed" data-astro-cid-fzbxxtek>
Reserved &mdash; no marketing scripts run yet.
</p> </div> <button type="button" role="switch" aria-checked="false" aria-label="Marketing cookies" data-toggle="marketing" class="cookie-toggle" data-astro-cid-fzbxxtek> <span class="cookie-toggle__dot" data-astro-cid-fzbxxtek></span> </button> </li> </ul> <div class="flex flex-col sm:flex-row sm:flex-wrap gap-2.5 sm:gap-3 sm:items-center" data-astro-cid-fzbxxtek> <button type="button" data-action="save" class="cookie-pill bg-primary hover:bg-primary-container text-on-primary shadow-button hover:shadow-button-hover" data-astro-cid-fzbxxtek>
Save preferences
</button> <button type="button" data-action="back" class="cookie-pill-text font-body font-bold text-sm text-on-surface/75 hover:text-on-surface transition-colors px-2 py-2 sm:py-0 sm:ml-1 inline-flex items-center gap-1.5 focus-visible:outline-2 focus-visible:outline-offset-4 focus-visible:outline-primary rounded-sm" data-astro-cid-fzbxxtek> <span aria-hidden="true" class="text-base leading-none" data-astro-cid-fzbxxtek>&lsaquo;</span>
Back
</button> </div> </div> </div> </aside>   </body></html>