{"id":101,"date":"2025-10-24T14:07:57","date_gmt":"2025-10-24T14:07:57","guid":{"rendered":"https:\/\/thephoenixlandscapes.com\/?page_id=101"},"modified":"2026-02-26T01:20:35","modified_gmt":"2026-02-26T01:20:35","slug":"homepage","status":"publish","type":"page","link":"https:\/\/thephoenixlandscapes.com\/","title":{"rendered":"Homepage"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"101\" class=\"elementor elementor-101\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-decf527 e-con-full e-flex e-con e-parent\" data-id=\"decf527\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-cbb1b44 elementor-widget elementor-widget-html\" data-id=\"cbb1b44\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- HERO \u2014 balanced weights that match the rest of the site -->\n<section class=\"phx-hero\">\n  <video class=\"phx-hero__bg\" autoplay muted loop playsinline>\n    <source src=\"\/wp-content\/uploads\/2025\/10\/Hero.webm\" type=\"video\/webm\">\n  <\/video>\n\n  <div class=\"phx-hero__overlay\"><\/div>\n\n  <div class=\"phx-hero__content\" aria-label=\"Hero content\">\n    <h1>TRANSFORMING OUTDOOR SPACES<\/h1>\n\n    <h2 class=\"phx-hero__sub\">\n      Landscaping, paving, artificial lawns, fencing, garden buildings, turfing &amp; 3D designs \u2014\n      <strong>fully insured<\/strong> with tidy workmanship and clear timelines across South&nbsp;East&nbsp;London &amp; Kent.\n    <\/h2>\n\n    <div class=\"phx-hero__ctas\">\n      <a href=\"#gallery\" class=\"phx-btn phx-btn--solid\">View Our Work<\/a>\n      <a href=\"#contact\" class=\"phx-btn phx-btn--ghost\">Contact Us<\/a>\n    <\/div>\n\n    <p class=\"phx-hero__areas\">\n      Bromley \u00b7 Dartford \u00b7 Orpington \u00b7 Welling \u00b7 Maidstone \u00b7 Tunbridge Wells \u00b7 Gravesend \u00b7 London \u00b7 Surrounding Areas\n    <\/p>\n  <\/div>\n<\/section>\n\n<style>\n:root{\n  --phx-green-900:#0F4D22;\n  --phx-green-700:#1E7A39;\n  --phx-green-500:#2FB84A;\n  --phx-green-400:#46CE5D;\n}\n\n\/* Shell *\/\n.phx-hero{\n  position:relative;width:100%;height:90vh;min-height:520px;\n  display:flex;align-items:center;justify-content:center;\n  overflow:hidden;color:#fff;text-align:center;\n  -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;\n  text-rendering:optimizeLegibility;font-synthesis:none;\n}\n.phx-hero__bg{\n  position:absolute;top:50%;left:50%;\n  min-width:100%;min-height:100%;\n  width:auto;height:auto;object-fit:cover;\n  transform:translate(-50%,-50%);z-index:1;\n}\n.phx-hero__overlay{\n  position:absolute;inset:0;z-index:2;\n  background:linear-gradient(to bottom,rgba(0,0,0,.35) 0%, rgba(0,0,0,.6) 100%);\n}\n.phx-hero__content{\n  position:relative;z-index:3;max-width:980px;padding:0 20px;\n  animation:phxFadeUp .9s ease both;\n}\n@keyframes phxFadeUp{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}\n\n\/* Type *\/\n.phx-hero__content h1{\n  font-family:\"Poppins\",\"Inter\",sans-serif;\n  font-size:3.0rem;                 \/* tiny step down for elegance *\/\n  line-height:1.1;margin:0 0 .55em;\n  font-weight:700;                  \/* strong but not shouty *\/\n  text-transform:uppercase;\n  letter-spacing:.28px;             \/* tighter to avoid chunky caps *\/\n  text-shadow:0 1px 8px rgba(0,0,0,.3);\n}\n.phx-hero__sub{\n  font-family:\"Inter\",sans-serif;\n  font-size:1.06rem;                \/* slightly smaller *\/\n  line-height:1.55;\n  margin:0 auto 1.55em;max-width:900px;\n  font-weight:400;                  \/* real body tone *\/\n  opacity:.95;\n}\n.phx-hero__sub strong{font-weight:600;color:#fff;}\n.phx-hero__areas{\n  margin:.6em auto 0;max-width:980px;\n  font-family:\"Inter\",sans-serif;\n  font-weight:500;font-size:12.5px;line-height:1.6;\n  letter-spacing:.12px;opacity:.88;\n}\n\n\/* Buttons *\/\n.phx-hero__ctas{\n  display:flex;gap:14px;justify-content:center;flex-wrap:wrap;margin-bottom:1.05em;\n}\n.phx-btn{\n  display:inline-block;width:210px;padding:14px 26px;border-radius:999px;\n  font:600 14px\/1 \"Poppins\",\"Inter\",sans-serif;\n  text-transform:uppercase;letter-spacing:.35px;text-align:center;\n  cursor:pointer;transition:all .25s ease;text-decoration:none!important;\n}\n.phx-btn--solid{\n  background:linear-gradient(90deg,var(--phx-green-500),var(--phx-green-700));\n  color:#fff!important;border:none;box-shadow:0 6px 16px rgba(47,184,74,.35);\n}\n.phx-btn--solid:hover,.phx-btn--solid:focus{\n  transform:translateY(-2px);\n  background:linear-gradient(90deg,var(--phx-green-700),var(--phx-green-500));\n  box-shadow:0 10px 24px rgba(47,184,74,.45);\n}\n.phx-btn--ghost{\n  border:2px solid rgba(255,255,255,.9);color:#fff;\n  background:transparent;backdrop-filter:saturate(120%) blur(1px);\n}\n.phx-btn--ghost:hover,.phx-btn--ghost:focus{\n  background:rgba(255,255,255,.15);border-color:#fff;color:#fff;\n  transform:translateY(-2px);box-shadow:0 6px 18px rgba(255,255,255,.15);\n}\n\n\/* Responsive *\/\n@media(max-width:1024px){\n  .phx-hero__content h1{font-size:2.6rem;}\n}\n@media(max-width:768px){\n  .phx-hero{height:78vh;min-height:480px;}\n  .phx-hero__content h1{font-size:2rem;}\n  .phx-hero__sub{font-size:.98rem;}\n  .phx-hero__ctas{flex-direction:column;align-items:center;}\n  .phx-btn{width:100%;max-width:260px;}\n  .phx-hero__areas{font-size:11.8px;opacity:.85;}\n}\n@media(hover:none){.phx-btn:active{transform:scale(.96);}}\n\n\/* --- iOS-only micro-nudge (minimal, not fighting anything) --- *\/\n@supports (-webkit-touch-callout: none){\n  .phx-hero__content h1{ font-weight:600; letter-spacing:.24px; } \/* 1 step lighter on iPhone *\/\n  .phx-hero__sub{ font-weight:400; }                               \/* keep true body tone *\/\n}\n\n\/* --- Final hero spacing tweak --- *\/\n.phx-hero__content h1 {\n  margin-bottom: 0.1em !important; \/* was ~0.55em before *\/\n}\n\n@media (max-width:768px){\n  .phx-hero__content h1 {\n    margin-bottom: 0.25em !important; \/* slightly tighter on mobile *\/\n  }\n}\n\n<\/style>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-24163d0 e-con-full e-flex e-con e-parent\" data-id=\"24163d0\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ea1c848 elementor-widget elementor-widget-html\" data-id=\"ea1c848\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- === PHOENIX GALLERY \u2014 FINAL SINGLE SOURCE OF TRUTH =================== -->\n<section id=\"gallery\" class=\"phxg-section\">\n  <div class=\"phxg-wrap\">\n    <header class=\"phxg-head\">\n      <h2>Our Work &amp; Services<\/h2>\n      <p>Browse recent projects by service. Use the tabs to filter.<\/p>\n    <\/header>\n\n    <!-- Tabs -->\n    <nav class=\"phxg-tabs\" role=\"tablist\" aria-label=\"Services\">\n      <button class=\"phxg-tab is-active\" role=\"tab\" aria-selected=\"true\" data-filter=\"all\">\n        <span class=\"phxg-badge\" aria-hidden=\"true\"><\/span>\n        <span class=\"phxg-label\">All<\/span>\n        <em class=\"phxg-count\" data-count=\"all\">0<\/em>\n      <\/button>\n      <button class=\"phxg-tab\" role=\"tab\" data-filter=\"paving\">\n        <span class=\"phxg-badge\" aria-hidden=\"true\"><\/span><span class=\"phxg-label\">Paving<\/span><em class=\"phxg-count\" data-count=\"paving\">0<\/em>\n      <\/button>\n      <button class=\"phxg-tab\" role=\"tab\" data-filter=\"artificial-lawns\">\n        <span class=\"phxg-badge\" aria-hidden=\"true\"><\/span><span class=\"phxg-label\">Artificial Lawns<\/span><em class=\"phxg-count\" data-count=\"artificial-lawns\">0<\/em>\n      <\/button>\n      <button class=\"phxg-tab\" role=\"tab\" data-filter=\"fencing\">\n        <span class=\"phxg-badge\" aria-hidden=\"true\"><\/span><span class=\"phxg-label\">Fencing<\/span><em class=\"phxg-count\" data-count=\"fencing\">0<\/em>\n      <\/button>\n      <button class=\"phxg-tab\" role=\"tab\" data-filter=\"buildings\">\n        <span class=\"phxg-badge\" aria-hidden=\"true\"><\/span><span class=\"phxg-label\">Buildings<\/span><em class=\"phxg-count\" data-count=\"buildings\">0<\/em>\n      <\/button>\n      <button class=\"phxg-tab\" role=\"tab\" data-filter=\"turfing\">\n        <span class=\"phxg-badge\" aria-hidden=\"true\"><\/span><span class=\"phxg-label\">Turfing<\/span><em class=\"phxg-count\" data-count=\"turfing\">0<\/em>\n      <\/button>\n      <button class=\"phxg-tab\" role=\"tab\" data-filter=\"designs\">\n        <span class=\"phxg-badge\" aria-hidden=\"true\"><\/span><span class=\"phxg-label\">3D Designs<\/span><em class=\"phxg-count\" data-count=\"designs\">0<\/em>\n      <\/button>\n      <button class=\"phxg-tab\" role=\"tab\" data-filter=\"resin-bound\">\n        <span class=\"phxg-badge\" aria-hidden=\"true\"><\/span><span class=\"phxg-label\">Resin Bound<\/span><em class=\"phxg-count\" data-count=\"resin-bound\">0<\/em>\n      <\/button>\n    <\/nav>\n\n    <!-- Service info card -->\n    <aside class=\"phxg-card\" id=\"phxgCard\" aria-live=\"polite\"><\/aside>\n\n    <!-- Grid -->\n    <div class=\"phxg-grid\" id=\"phxgGrid\" aria-live=\"polite\"><\/div>\n\n    <!-- Load more -->\n    <div class=\"phxg-more\">\n      <button type=\"button\" id=\"phxgMore\" class=\"phxg-btn\">Load More<\/button>\n    <\/div>\n  <\/div>\n<\/section>\n\n<style>\n  :root{\n    --phxg-green-700:#1E7A39;\n    --phxg-green-500:#2FB84A;\n    --phxg-ink:#2F2E2F;\n  }\n\n  .phxg-wrap{max-width:1200px;margin:0 auto;padding:48px 16px}\n  .phxg-head h2{font:800 32px\/1.15 Poppins,Inter;margin:0 0 6px}\n  .phxg-head p{margin:0 0 16px;color:#6b7280;font:600 14px\/1.5 Inter}\n\n  \/* Tabs *\/\n  .phxg-tabs{\n    display:flex;gap:8px;overflow:auto;padding:6px;margin-bottom:16px;\n    border:1px solid rgba(0,0,0,.06);border-radius:14px;background:#fff\n  }\n  .phxg-tab{\n    appearance:none;border:none;background:transparent;\n    display:inline-flex;align-items:center;gap:10px;padding:10px 16px;\n    border-radius:12px;font:800 13px\/1 Poppins,Inter;color:var(--phxg-ink);\n    white-space:nowrap;cursor:pointer;transition:background .2s, box-shadow .2s, color .2s;\n  }\n  .phxg-tab:hover{background:rgba(47,184,74,.08)}\n  .phxg-tab.is-active{\n    background:linear-gradient(90deg,var(--phxg-green-500),var(--phxg-green-700));\n    color:#fff; box-shadow:0 8px 18px rgba(47,184,74,.28);\n  }\n  .phxg-tab.is-active, .phxg-tab.is-active *{color:#fff !important}\n  .phxg-badge{\n    width:32px;height:32px;min-width:32px;min-height:32px;\n    display:inline-flex;align-items:center;justify-content:center;\n    border-radius:50%;background:rgba(0,0,0,.06);\n  }\n  .phxg-badge svg{width:18px;height:18px;display:block;fill:currentColor}\n  .phxg-tab.is-active .phxg-badge{background:rgba(255,255,255,.18)}\n  .phxg-tab.is-active .phxg-badge svg{fill:#fff}\n\n  .phxg-count{\n    font-style:normal;font:800 11px\/1 Inter;min-width:22px;text-align:center;\n    padding:2px 6px;border-radius:999px;background:rgba(0,0,0,.06);color:inherit;\n  }\n  .phxg-tab.is-active .phxg-count{background:rgba(255,255,255,.18)}\n\n  \/* Service card *\/\n  .phxg-card{\n    display:grid;gap:12px 14px;\n    grid-template-columns:56px 1fr;grid-template-areas:\"ico title\" \"desc desc\" \"chips chips\" \"cta cta\";\n    padding:16px;border:1px solid rgba(0,0,0,.06);border-radius:16px;\n    background:linear-gradient(180deg,#f8fff9,#fff);box-shadow:0 10px 26px rgba(47,184,74,.06);margin-bottom:16px\n  }\n  .phxg-card__ico{\n    grid-area:ico;width:56px;height:56px;border-radius:12px;\n    display:grid;place-items:center;color:#fff;\n    background:linear-gradient(180deg,var(--phxg-green-500),var(--phxg-green-700));\n  }\n  .phxg-card__ico svg{width:22px;height:22px;display:block;fill:#fff}\n  .phxg-card__title{grid-area:title;font:800 19px\/1.2 Poppins,Inter;margin:0}\n  .phxg-card__desc{grid-area:desc;margin:0;font:600 13.9px\/1.65 Inter;color:#111827}\n  .phxg-card__chips{grid-area:chips;display:flex;flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none}\n  .phxg-chip{\n    font:800 11px\/1 Inter;text-transform:uppercase;letter-spacing:.3px;\n    padding:8px 10px;border-radius:999px;background:#f0fff4;border:1px solid rgba(47,184,74,.25);color:#14532d;\n  }\n  .phxg-card__cta{\n    grid-area:cta;display:inline-flex;justify-content:center;align-items:center;gap:8px;\n    padding:10px 20px;border-radius:999px;\n    background:linear-gradient(90deg,var(--phxg-green-500),var(--phxg-green-700));\n    color:#fff !important;text-decoration:none;box-shadow:0 6px 14px rgba(47,184,74,.25);\n    font:700 13px\/1 Poppins,Inter;text-transform:uppercase;letter-spacing:.4px;\n    transition:transform .2s, box-shadow .2s;\n  }\n  .phxg-card__cta::after{content:\"\u2192\";font-weight:900;margin-left:6px;line-height:1}\n  .phxg-card__cta:hover{transform:translateY(-1px);box-shadow:0 10px 22px rgba(47,184,74,.35)}\n  @media(min-width:781px){\n    .phxg-card{grid-template-columns:64px 1fr auto;grid-template-areas:\"ico title cta\" \"ico desc cta\" \"chips chips chips\";padding:20px;border-radius:18px}\n    .phxg-card__ico{width:64px;height:64px;border-radius:14px}\n    .phxg-card__title{font-size:21px}\n    .phxg-card__desc{font-size:14.5px}\n  }\n\n  \/* Grid *\/\n  .phxg-grid{display:grid;gap:14px}\n  @media(min-width:1025px){.phxg-grid{grid-template-columns:repeat(3,1fr)}}\n  @media(max-width:1024px){.phxg-grid{grid-template-columns:repeat(2,1fr)}}\n  .phxg-figure{background:#fff;border:1px solid rgba(0,0,0,.06);border-radius:14px;overflow:hidden;box-shadow:0 6px 16px rgba(0,0,0,.05);transition:transform .2s,box-shadow .2s}\n  .phxg-figure:hover{transform:translateY(-2px);box-shadow:0 12px 22px rgba(0,0,0,.08)}\n  .phxg-figure img{width:100%;aspect-ratio:4\/3;object-fit:cover;display:block}\n\n  \/* Load more (force white text + hero style) *\/\n  .phxg-more{display:flex;justify-content:center;margin-top:16px}\n  .phxg-btn{\n    appearance:none;border:none;display:inline-flex;align-items:center;justify-content:center;gap:8px;\n    min-width:220px;border-radius:999px;padding:14px 26px;\n    font:700 14px\/1 Poppins,Inter;text-transform:uppercase;letter-spacing:.5px;\n    color:#fff !important;background:linear-gradient(90deg,var(--phxg-green-500),var(--phxg-green-700)) !important;\n    box-shadow:0 10px 26px rgba(47,184,74,.35);cursor:pointer;transition:transform .2s, background .2s, box-shadow .2s;\n  }\n  .phxg-btn:hover{transform:translateY(-2px);background:linear-gradient(90deg,var(--phxg-green-700),var(--phxg-green-500)) !important;box-shadow:0 14px 30px rgba(47,184,74,.45)}\n  .phxg-btn:focus-visible{outline:2px solid rgba(47,184,74,.35);outline-offset:2px}\n\n  \/* Block Elementor\u2019s red accent inside this section *\/\n  .phxg-section a,.phxg-section button{--e-global-color-accent:initial}\n<\/style>\n\n<script>\n(function(){\n  \/* ---------- Icon set (balanced fills; crisp at 18px) ---------- *\/\n  const ICONS = {\n    all:`<svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path fill=\"currentColor\" d=\"M3 3h8v8H3zM13 3h8v8h-8zM3 13h8v8H3zM13 13h8v8h-8z\"\/><\/svg>`,\n    paving:`<svg viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M3 7h6v6H3zM11 7h10v4H11zM11 13h10v4H11zM3 15h6v2H3z\"\/><\/svg>`,\n    \"artificial-lawns\":`<svg viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M4 20h16v2H4zM7 18V9l2 2 2-3 2 3 2-2 2 2 2-3v10H7z\"\/><\/svg>`,\n    fencing:`<svg viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M4 3l2 2v14l-2 2V3zm7 0l2 2v14l-2 2V3zm7 0l2 2v14l-2 2V3zM3 10h18v2H3z\"\/><\/svg>`,\n    buildings:`<svg viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M3 21V9l9-6 9 6v12h-6v-6H9v6H3z\"\/><\/svg>`,\n    turfing:`<svg viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M3 20h18v2H3zM6 18v-5l3 2 3-2 3 2 3-2v5H6z\"\/><\/svg>`,\n    designs:`<svg viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M12 2l9 5v10l-9 5-9-5V7l9-5zm0 2.2L5 7.5v9l7 3.8 7-3.8v-9l-7-3.3z\"\/><\/svg>`,\n    \"resin-bound\":`<svg viewBox=\"0 0 24 24\"><path fill=\"currentColor\" d=\"M12 4c3 4 5 6.7 5 9a5 5 0 1 1-10 0c0-2.3 2-5 5-9z\"\/><\/svg>`\n  };\n\n  \/* ---------- Data (URLs + copy) ---------- *\/\n  const URLS = [\n    \/* NEW \u2014 Nov 2025 PAVING set *\/\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/11\/PAVING-01.jpeg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/11\/PAVING-02.jpeg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/11\/PAVING-03.jpeg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/11\/PAVING-04.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/11\/PAVING-05.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/11\/PAVING-06.jpeg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/11\/PAVING-07.jpeg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/11\/PAVING-08.jpeg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/11\/PAVING-09.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/11\/PAVING-10.jpeg\",\n\n    \/* Existing set *\/\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/3D-Design-2.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/3D-Design-1.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/3D-Design-3.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Turfing-6.jpeg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Turfing-5.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Turfing-4.jpeg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Turfing-3-scaled.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Turfing-2-scaled.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Turfing-1-scaled.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Resin-Bound-6.jpeg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Resin-Bound-5.jpeg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Resin-Bound-4.jpeg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Resin-Bound-3.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Resin-Bound-2.jpeg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Resin-Bound-1.jpeg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Buildings-7.jpeg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Buildings-5.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Buildings-4.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Buildings-3.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Buildings-2.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Buildings-1.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Buildings-6.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Fencing-4.jpeg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Fencing-2.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Fencing-1.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Fencing-3.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Artificial-Lawn-10.jpeg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Artificial-Lawn-9.jpeg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Artificial-Lawn-7.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Artificial-Lawn-8.jpeg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Artificial-Lawn-6.jpeg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Artificial-Lawn-4-scaled.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Artificial-Lawn-3.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Artificial-Lawn-2-scaled.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Artifical-Lawn-1.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Artificial-Lawn-5-scaled.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Paving-12.jpeg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Paving-11.jpeg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Paving-10.jpeg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Paving-9.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Paving-8-scaled.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Paving-7.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Paving-6.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Paving-5.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Paving-4.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Paving-3.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Paving-2.jpg\",\n    \"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Paving-1.jpg\",\n  ];\n\n  const COPY = {\n    all:{ title:\"All Projects\",\n      desc:\"A curated look at recent landscaping work across South East London & Kent \u2014 paving, artificial lawns, fencing, garden buildings, turfing and 3D designs. All projects are fully insured and delivered with tidy workmanship and clear timelines.\",\n      chips:[\"Fully insured\",\"Free quotes\",\"24-hour response\",\"Domestic & commercial\"] },\n    paving:{ title:\"Paving\",\n      desc:\"Precision-installed porcelain, natural stone and block paving patios, paths and driveways. We handle sub-base prep, falls & drainage, recessed manholes, mitred edges and sealers.\",\n      chips:[\"Porcelain & stone\",\"Falls & drainage\",\"Mitred edges\",\"Recessed manholes\"] },\n    \"artificial-lawns\":{ title:\"Artificial Lawns\",\n      desc:\"Premium, pet-friendly artificial grass with full groundworks: excavation, sub-base, sharp sand, weed membranes and crisp edging. Low-maintenance family gardens.\",\n      chips:[\"Pet friendly\",\"Low maintenance\",\"Proper membranes\",\"Crisp edging\"] },\n    fencing:{ title:\"Fencing\",\n      desc:\"Closeboard, slatted cedar and panel fencing with concrete or timber posts, gravel boards and bespoke gates. Old runs removed, posts set correctly, sites left clean.\",\n      chips:[\"Closeboard & slatted\",\"Concrete posts\",\"Gravel boards\",\"Custom gates\"] },\n    buildings:{ title:\"Garden Buildings\",\n      desc:\"Insulated garden rooms, offices and studios with decking, lighting and electrics. Built on solid bases with breathable membranes, quality cladding and year-round usability.\",\n      chips:[\"Insulated shells\",\"Electrics & lighting\",\"Decking options\",\"Year-round use\"] },\n    turfing:{ title:\"Turfing\",\n      desc:\"Premium roll turf laid over conditioned topsoil with laser-levelled preparation for smooth, healthy lawns. Watering and aftercare guidance included.\",\n      chips:[\"Premium turf\",\"Soil conditioning\",\"Laser-levelled\",\"Aftercare advice\"] },\n    designs:{ title:\"3D Designs\",\n      desc:\"Scaled 3D visuals and material selections so you can sign off layouts, lighting and finishes before we build. Ideal for complex garden makeovers and phased projects.\",\n      chips:[\"Scaled visuals\",\"Material selections\",\"Lighting layouts\",\"Build planning\"] },\n    \"resin-bound\":{ title:\"Resin Bound (Paving)\",\n      desc:\"Smooth, permeable resin-bound surfaces over correctly prepared bases. SUDS-friendly and low-maintenance for patios, paths and entrances.\",\n      chips:[\"Permeable SUDS\",\"Smooth finish\",\"Low maintenance\",\"Base prep\"] }\n  };\n\n  \/* --------- Helpers --------- *\/\n  const tabs = document.querySelectorAll('.phxg-tab');\n  const grid = document.getElementById('phxgGrid');\n  const card = document.getElementById('phxgCard');\n  const more = document.getElementById('phxgMore');\n\n  const ITEMS = URLS.map(u=>({url:u,tags:tagsFrom(u),key:fileKey(u)}));\n  const STEP = 6; \/\/ show 6 per load\n  let current='all', pool=[], shown=0;\n\n  function injectTabIcons(){\n    document.querySelectorAll('.phxg-tab').forEach(btn=>{\n      const key = btn.dataset.filter || 'all';\n      const badge = btn.querySelector('.phxg-badge');\n      if(badge){ badge.innerHTML = ICONS[key] || ICONS.all; }\n    });\n  }\n\n  function tagsFrom(url){\n    const n = url.split('\/').pop().toLowerCase();\n    const t = [];\n    if(\/paving-\/.test(n)) t.push('paving');\n    if(\/artificial|artifical-lawn\/.test(n)) t.push('artificial-lawns');\n    if(\/fencing-\/.test(n)) t.push('fencing');\n    if(\/buildings-?\/.test(n)) t.push('buildings');\n    if(\/turfing-\/.test(n)) t.push('turfing');\n    if(\/3d-design\/.test(n)) t.push('designs');\n    if(\/resin-bound\/.test(n)) { t.push('resin-bound'); if(!t.includes('paving')) t.push('paving'); }\n    if(!t.length) t.push('misc');\n    return t;\n  }\n  function fileKey(url){\n    return url.split('\/').pop().toLowerCase()\n      .replace(\/^(paving|artificial[- ]?lawn|fencing|buildings|turfing|3d[- ]?design|resin[- ]?bound)-\/,'');\n  }\n  function shuffle(a){ const arr=a.slice(); for(let i=arr.length-1;i>0;i--){const j=Math.floor(Math.random()*(i+1));[arr[i],arr[j]]=[arr[j],arr[i]]} return arr;}\n\n  function buildPool(tag){\n    let p = ITEMS.filter(it => tag==='all' ? true : it.tags.includes(tag));\n    if(tag==='all'){\n      const seen=new Set(), dedup=[];\n      for(const it of p){ if(seen.has(it.key)) continue; seen.add(it.key); dedup.push(it); }\n      p = shuffle(dedup);\n    } else {\n      \/\/ Shuffle non-\"All\" pools too, so Paving randomises like All\n      p = shuffle(p);\n    }\n    return p;\n  }\n\n  function updateCounts(){\n    const counts = {all:0,paving:0,'artificial-lawns':0,fencing:0,buildings:0,turfing:0,designs:0,'resin-bound':0,misc:0};\n    ITEMS.forEach(it=> it.tags.forEach(t=> counts[t]=(counts[t]||0)+1));\n    const seen=new Set(); ITEMS.forEach(it=> { if(!seen.has(it.key)) seen.add(it.key); });\n    counts.all = seen.size;\n    document.querySelectorAll('.phxg-count').forEach(el=>{\n      const k=el.dataset.count; if(k in counts) el.textContent = counts[k];\n    });\n  }\n\n  function paintCard(tag){\n    const x = COPY[tag] || COPY.all;\n    card.innerHTML = `\n      <div class=\"phxg-card__ico\">${ICONS[tag]||ICONS.all}<\/div>\n      <h3 class=\"phxg-card__title\">${x.title}<\/h3>\n      <p class=\"phxg-card__desc\">${x.desc}<\/p>\n      <ul class=\"phxg-card__chips\">${x.chips.map(c=>`<li class=\"phxg-chip\">${c}<\/li>`).join('')}<\/ul>\n      <a class=\"phxg-card__cta\" href=\"#contact\" aria-label=\"Contact The Phoenix Landscapes\">Contact Us<\/a>`;\n  }\n\n  function paint(tag){\n    current = tag; paintCard(tag);\n    pool = buildPool(tag); shown = 0; grid.innerHTML='';\n    append(); updateCounts();\n    more.style.display = shown < pool.length ? 'inline-flex' : 'none';\n  }\n\n  function append(){\n    const end = Math.min(shown+STEP, pool.length);\n    for(; shown<end; shown++){\n      const it = pool[shown];\n      const fig = document.createElement('figure');\n      fig.className = 'phxg-figure';\n      fig.innerHTML = `<img decoding=\"async\" loading=\"lazy\" src=\"${it.url}\" alt=\"\">`;\n      grid.appendChild(fig);\n    }\n    if(shown>=pool.length){ more.style.display='none'; }\n  }\n\n  \/* events *\/\n  tabs.forEach(btn=>{\n    btn.addEventListener('click', ()=>{\n      tabs.forEach(b=>b.classList.remove('is-active'));\n      btn.classList.add('is-active');\n      paint(btn.dataset.filter);\n      card.scrollIntoView({behavior:'smooth',block:'start'});\n    });\n  });\n  more.addEventListener('click', append, {passive:true});\n\n  \/* init *\/\n  injectTabIcons();\n  paint('all');\n})();\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-9e7727b e-con-full e-flex e-con e-parent\" data-id=\"9e7727b\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-4f22f15 elementor-widget elementor-widget-html\" data-id=\"4f22f15\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- ============== PHOENIX \u2014 TRUST & SOCIALS (DESKTOP LOCKED, MOBILE FINAL) ============== -->\n<section id=\"trust\" class=\"phx-trust\">\n  <div class=\"phx-trust__wrap\">\n    <header class=\"phx-trust__head\">\n      <h2>Work with a local business you can <span>trust<\/span><\/h2>\n      <p>Independent vetting, genuine Google reviews, and real project updates from Instagram.<\/p>\n    <\/header>\n\n    <!-- Top pills -->\n    <nav class=\"phx-trust__badges\" aria-label=\"Trust & social links\">\n      <a class=\"phx-badge\" href=\"https:\/\/www.trustatrader.com\/traders\/the-phoenix-landscapes-landscape-gardeners-da16-and-se9\" target=\"_blank\" rel=\"noopener\">\n        <span class=\"phx-ico\">\n          <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><circle cx=\"12\" cy=\"12\" r=\"11\" fill=\"#E8F5EE\" stroke=\"#cfe9db\"\/><path d=\"M7 12l3 3 7-7\" fill=\"none\" stroke=\"#1E7A39\" stroke-width=\"2.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\/><\/svg>\n        <\/span>\n        <div>\n          <strong>TrustATrader<\/strong>\n          <span>Vetted &amp; reviewed<\/span>\n        <\/div>\n      <\/a>\n\n      <a class=\"phx-badge\" href=\"https:\/\/share.google\/1b1dYufMEkX0phOT7\" target=\"_blank\" rel=\"noopener\">\n        <span class=\"phx-ico\">\n          <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n            <path fill=\"#EA4335\" d=\"M12 10.2v3.7h5.3c-.2 1.3-1.6 3.7-5.3 3.7-3.2 0-5.8-2.6-5.8-5.8S8.8 6 12 6c1.8 0 3 .8 3.7 1.5l2.6-2.5C17 3.7 14.8 3 12 3 7 3 3 7 3 12s4 9 9 9c5.2 0 8.6-3.7 8.6-8.9 0-.6-.1-1-.1-1.4H12z\"\/>\n            <path fill=\"#34A853\" d=\"M4.6 7.7l3 2.2C8.4 8 10 6.9 12 6.9c1.8 0 3 .8 3.7 1.5l2.6-2.5C17 3.7 14.8 3 12 3 8.8 3 6 4.8 4.6 7.7z\"\/>\n            <path fill=\"#4285F4\" d=\"M12 21c2.8 0 5-1 6.6-2.6l-2.9-2.2c-.8.5-1.9.9-3.7.9-3.7 0-5.1-2.4-5.3-3.7H4.9C5.3 17.3 8.2 21 12 21z\"\/>\n            <path fill=\"#FBBC05\" d=\"M20.6 12c0-.6-.1-1-.1-1.4H12v3.7h5.3c-.2 1.3-1.6 3.7-5.3 3.7v3c5.2 0 8.6-3.7 8.6-8.9z\"\/>\n          <\/svg>\n        <\/span>\n        <div>\n          <strong>Google Reviews<\/strong>\n          <span>Read customer feedback<\/span>\n        <\/div>\n      <\/a>\n\n      <a class=\"phx-badge\" href=\"https:\/\/www.instagram.com\/thephoenixlandscapes\/?hl=en\" target=\"_blank\" rel=\"noopener\">\n        <span class=\"phx-ico\">\n          <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><rect x=\"3\" y=\"3\" width=\"18\" height=\"18\" rx=\"5\" fill=\"#111\"\/><circle cx=\"12\" cy=\"12\" r=\"4.2\" fill=\"#fff\"\/><circle cx=\"18\" cy=\"6\" r=\"1.6\" fill=\"#fff\"\/><\/svg>\n        <\/span>\n        <div>\n          <strong>Instagram<\/strong>\n          <span>Recent project posts<\/span>\n        <\/div>\n      <\/a>\n    <\/nav>\n\n    <!-- Content grid -->\n    <div class=\"phx-trust__grid\">\n      <!-- REVIEWS -->\n      <section class=\"phx-reviews\" aria-labelledby=\"phxReviewsTitle\">\n        <div class=\"phx-reviews__head\">\n          <h3 id=\"phxReviewsTitle\">What clients say<\/h3>\n          <a class=\"phx-btn phx-btn--ghost phx-headbtn\" href=\"https:\/\/share.google\/1b1dYufMEkX0phOT7\" target=\"_blank\" rel=\"noopener\">View all on Google<\/a>\n        <\/div>\n\n        <div class=\"phx-rev__track\" id=\"phxRevTrack\" aria-live=\"polite\">\n          <article class=\"phx-rev__slide is-active\" aria-hidden=\"false\">\n            <div class=\"phx-stars\" aria-label=\"5 out of 5 stars\">\u2605\u2605\u2605\u2605\u2605<\/div>\n            <p class=\"phx-rev__txt\">Love my new artificial lawn. Very efficient and did an amazing job \u2014 would highly recommend!<\/p>\n            <div class=\"phx-rev__meta\">\u2014 Amy Tegerdine \u00b7 2 months ago<\/div>\n          <\/article>\n        <\/div>\n\n        <div class=\"phx-rev__controls\">\n          <button class=\"phx-rev__nav\" id=\"phxPrev\" aria-label=\"Previous review\">\u2039<\/button>\n          <button class=\"phx-rev__nav\" id=\"phxNext\" aria-label=\"Next review\">\u203a<\/button>\n        <\/div>\n\n        <!-- TrustATrader info -->\n        <aside class=\"phx-trader\">\n          <div class=\"phx-trader__logo\">\n            <img decoding=\"async\" src=\"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Trust-a-Trader.png\" alt=\"TrustATrader\">\n          <\/div>\n          <div class=\"phx-trader__copy\">\n            <h4>Why TrustATrader matters<\/h4>\n            <p>TrustATrader is an independent directory for trades across the UK. Traders list with proof of identity and relevant insurance and are encouraged to collect verified customer feedback. Profiles and reviews are public, so homeowners can check reputation and workmanship before they book.<\/p>\n            <div class=\"phx-trader__cta\">\n              <a class=\"phx-btn phx-btn--solid\" href=\"https:\/\/www.trustatrader.com\/traders\/the-phoenix-landscapes-landscape-gardeners-da16-and-se9\" target=\"_blank\" rel=\"noopener\">See our TrustATrader profile<\/a>\n            <\/div>\n          <\/div>\n        <\/aside>\n      <\/section>\n\n      <!-- INSTAGRAM -->\n      <section class=\"phx-insta\" aria-labelledby=\"phxInstaTitle\">\n        <div class=\"phx-insta__head\">\n          <h3 id=\"phxInstaTitle\">From the feed<\/h3>\n          <a class=\"phx-btn phx-btn--solid phx-headbtn\" href=\"https:\/\/www.instagram.com\/thephoenixlandscapes\/?hl=en\" target=\"_blank\" rel=\"noopener\">Follow on Instagram<\/a>\n        <\/div>\n\n        <div class=\"phx-insta__grid\">\n          <a class=\"phx-insta__item\" href=\"https:\/\/www.instagram.com\/p\/DOhXxkmCKhf\/?hl=en&img_index=1\" target=\"_blank\" rel=\"noopener\">\n            <img decoding=\"async\" src=\"https:\/\/shop.rimeybian.co\/wp-content\/uploads\/2025\/10\/Insta-01.jpg\" alt=\"Phoenix Landscapes Instagram 01\">\n          <\/a>\n          <a class=\"phx-insta__item\" href=\"https:\/\/www.instagram.com\/p\/DLA3lSwsim9\/?hl=en&img_index=1\" target=\"_blank\" rel=\"noopener\">\n            <img decoding=\"async\" src=\"https:\/\/shop.rimeybian.co\/wp-content\/uploads\/2025\/10\/Insta-02.jpg\" alt=\"Phoenix Landscapes Instagram 02\">\n          <\/a>\n          <a class=\"phx-insta__item\" href=\"https:\/\/www.instagram.com\/p\/C9Z5MeTsSYc\/?hl=en\" target=\"_blank\" rel=\"noopener\">\n            <img decoding=\"async\" src=\"https:\/\/shop.rimeybian.co\/wp-content\/uploads\/2025\/10\/Insta-03.jpg\" alt=\"Phoenix Landscapes Instagram 03\">\n          <\/a>\n          <a class=\"phx-insta__item\" href=\"https:\/\/www.instagram.com\/p\/DM06vansJHF\/?hl=en\" target=\"_blank\" rel=\"noopener\">\n            <img decoding=\"async\" src=\"https:\/\/shop.rimeybian.co\/wp-content\/uploads\/2025\/10\/Insta-04.jpg\" alt=\"Phoenix Landscapes Instagram 04\">\n          <\/a>\n          <a class=\"phx-insta__item\" href=\"https:\/\/www.instagram.com\/p\/DIJPdwSMm1K\/?hl=en\" target=\"_blank\" rel=\"noopener\">\n            <img decoding=\"async\" src=\"https:\/\/shop.rimeybian.co\/wp-content\/uploads\/2025\/10\/Insta-05.jpg\" alt=\"Phoenix Landscapes Instagram 05\">\n          <\/a>\n          <a class=\"phx-insta__item\" href=\"https:\/\/www.instagram.com\/p\/DPznA66CLSE\/?hl=en&img_index=6\" target=\"_blank\" rel=\"noopener\">\n            <img decoding=\"async\" src=\"https:\/\/shop.rimeybian.co\/wp-content\/uploads\/2025\/10\/Insta-06.jpg\" alt=\"Phoenix Landscapes Instagram 06\">\n          <\/a>\n        <\/div>\n      <\/section>\n    <\/div>\n  <\/div>\n\n  <!-- JSON-LD -->\n  <script type=\"application\/ld+json\">\n  {\"@context\":\"https:\/\/schema.org\",\"@type\":\"LocalBusiness\",\"name\":\"The Phoenix Landscapes\",\"url\":\"https:\/\/thephoenixlandscapes.com\/\",\"areaServed\":\"South East London and Kent\",\"sameAs\":[\"https:\/\/www.instagram.com\/thephoenixlandscapes\/\",\"https:\/\/share.google\/1b1dYufMEkX0phOT7\",\"https:\/\/www.trustatrader.com\/traders\/the-phoenix-landscapes-landscape-gardeners-da16-and-se9\"],\"aggregateRating\":{\"@type\":\"AggregateRating\",\"ratingValue\":\"5.0\",\"reviewCount\":\"20\"}}\n  <\/script>\n<\/section>\n\n<style>\n  :root{--phx-green-700:#1E7A39;--phx-green-500:#2FB84A;--phx-ink:#2F2E2F}\n  .phx-trust{padding:56px 16px;background:#fff;overflow-x:hidden}\n  .phx-trust *{box-sizing:border-box}\n  .phx-trust__wrap{max-width:1200px;margin:0 auto}\n  .phx-trust__head h2{font:800 32px\/1.15 Poppins,Inter;margin:0 0 6px}\n  .phx-trust__head h2 span{color:var(--phx-green-700)}\n  .phx-trust__head p{margin:0 0 18px;color:#6b7280;font:600 14px\/1.5 Inter}\n\n  \/* Pills *\/\n  .phx-trust__badges{display:flex;gap:12px;flex-wrap:wrap;justify-content:center;margin-bottom:18px}\n  .phx-badge{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1px solid rgba(0,0,0,.06);border-radius:14px;background:#fff;text-decoration:none;color:inherit;box-shadow:0 6px 16px rgba(0,0,0,.04);min-width:320px}\n  .phx-badge strong{font:800 14px\/1.1 Poppins,Inter;display:block}\n  .phx-badge span{font:600 12.5px\/1.2 Inter;color:#6b7280}\n  .phx-ico{display:grid;place-items:center;width:42px;height:42px;border-radius:10px;background:#fff;border:1px solid rgba(0,0,0,.06);flex:0 0 auto}\n  .phx-ico svg{width:28px;height:28px;display:block}\n\n  \/* Grid *\/\n  .phx-trust__grid{display:grid;gap:16px;grid-template-columns:6fr 6fr;align-items:start}\n  .phx-trust__grid>*{min-width:0} \/* prevent child overflow *\/\n  @media(max-width:980px){.phx-trust__grid{grid-template-columns:1fr}}\n\n  \/* Buttons *\/\n  .phx-btn{display:inline-flex;align-items:center;justify-content:center;border-radius:999px;padding:12px 18px;font:700 13.5px\/1 Poppins,Inter;text-transform:uppercase;letter-spacing:.4px;text-decoration:none;cursor:pointer;transition:.2s;max-width:100%}\n  .phx-btn--solid{background:linear-gradient(90deg,var(--phx-green-500),var(--phx-green-700));color:#fff !important;box-shadow:0 6px 16px rgba(47,184,74,.35)}\n  .phx-btn--solid:hover{transform:translateY(-1px);box-shadow:0 10px 22px rgba(47,184,74,.45)}\n  .phx-btn--ghost{border:2px solid rgba(0,0,0,.1);background:#fff;color:var(--phx-ink)}\n  .phx-btn--ghost:hover{border-color:var(--phx-green-500);color:var(--phx-green-700)}\n\n  \/* Reviews *\/\n  .phx-reviews__head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;gap:12px}\n  .phx-reviews__head h3{font:800 18px\/1.2 Poppins,Inter;margin:0}\n  .phx-rev__track{position:relative;overflow:hidden;border-radius:14px;border:1px solid rgba(0,0,0,.06);background:linear-gradient(180deg,#f8fff9,#fff);min-height:188px}\n  .phx-rev__slide{padding:16px 16px 14px;display:none}\n  .phx-rev__slide.is-active{display:block;animation:phxFade .35s ease}\n  @keyframes phxFade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}\n  .phx-stars{color:#16a34a;margin-bottom:8px;font-size:14px;letter-spacing:1px}\n  .phx-rev__txt{color:#111827;font:600 14px\/1.6 Inter;margin:0 0 8px}\n  .phx-rev__meta{font:700 12.5px\/1.2 Inter;color:#374151}\n\n  .phx-rev__controls{display:flex;gap:10px;justify-content:flex-end;margin-top:10px}\n  .phx-rev__nav{\n    appearance:none;-webkit-appearance:none;outline:none;width:32px;height:32px;border-radius:999px;\n    border:1px solid rgba(0,0,0,.12);background:#fff !important;color:var(--phx-ink) !important;\n    box-shadow:none !important;transition:border-color .15s ease, transform .15s ease;\n    display:inline-flex;align-items:center;justify-content:center;line-height:1 !important;font-size:18px;font-weight:700;padding:0 !important;\n  }\n  .phx-rev__nav:hover{border-color:var(--phx-green-500) !important;color:var(--phx-green-700) !important;background:#f3faf5 !important;transform:translateY(-1px)}\n  .phx-rev__nav:focus-visible{box-shadow:0 0 0 3px rgba(47,184,74,.25) !important}\n\n  \/* TrustATrader card *\/\n  .phx-trader{display:grid;grid-template-columns:76px 1fr;gap:14px;align-items:center;margin-top:14px;padding:14px;border:1px solid rgba(0,0,0,.06);border-radius:14px;background:#fff;box-shadow:0 6px 16px rgba(0,0,0,.04);max-width:100%;width:100%;min-width:0}\n  .phx-trader__logo img{width:76px;height:76px;object-fit:contain}\n  .phx-trader__copy{min-width:0}\n  .phx-trader__copy h4{margin:0 0 6px;font:800 16px\/1.2 Poppins,Inter}\n  .phx-trader__copy p{margin:0 0 10px;color:#111827;font:600 13.5px\/1.6 Inter;overflow-wrap:anywhere}\n  .phx-trader__cta .phx-btn{padding:12px 22px;white-space:nowrap;min-width:max-content;font-size:12.6px;letter-spacing:.35px}\n  @media(max-width:540px){.phx-trader__cta .phx-btn{width:100%;justify-content:center}}\n\n  \/* Insta *\/\n  .phx-insta__head{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px;gap:12px}\n  .phx-insta__head h3{font:800 18px\/1.2 Poppins,Inter;margin:0}\n  .phx-insta__grid{display:grid;gap:10px;grid-template-columns:repeat(3,minmax(0,1fr))}\n  .phx-insta__item{display:block;border-radius:14px;overflow:hidden;border:1px solid rgba(0,0,0,.06);box-shadow:0 6px 16px rgba(0,0,0,.05)}\n  .phx-insta__item img{width:100%;aspect-ratio:1\/1;object-fit:cover;display:block;transition:transform .25s}\n  .phx-insta__item:hover img{transform:scale(1.03)}\n\n  \/* ---------- MOBILE POLISH (<= 600px) ---------- *\/\n  @media (max-width:600px){\n    .phx-trust{padding:40px 14px}\n    .phx-badge{min-width:100%;padding:12px}\n    .phx-ico{width:40px;height:40px}.phx-ico svg{width:26px;height:26px}\n\n    \/* Make head rows grid so titles never clip; buttons matched size *\/\n    .phx-reviews__head,.phx-insta__head{display:grid;grid-template-columns:1fr auto;align-items:center;gap:8px}\n    .phx-reviews__head h3,.phx-insta__head h3{font-size:17px;white-space:nowrap;overflow:visible;text-overflow:clip}\n    .phx-headbtn{padding:8px 10px;font-size:11.3px;letter-spacing:.25px;white-space:nowrap;flex:0 0 auto;max-width:42vw}\n\n    \/* Guard all cards to viewport width (no side clipping) *\/\n    .phx-rev__track,.phx-trader,.phx-insta__grid{max-width:100%;overflow:hidden}\n\n    \/* TrustATrader tighter on mobile *\/\n    .phx-trader{grid-template-columns:56px 1fr;padding:12px}\n    .phx-trader__logo img{width:56px;height:56px}\n    .phx-trader__copy h4{font-size:15.5px}\n    .phx-trader__copy p{font-size:13.2px}\n\n    \/* Insta 3-up with compact spacing *\/\n    .phx-insta__grid{gap:8px}\n  }\n  \n  \n\/* --- TrustATrader CTA fits the card on all phones (long word!) --- *\/\n.phx-trader__cta .phx-btn{\n  width: 100%;\n  max-width: 100%;\n  justify-content: center;\n  white-space: normal;       \/* allow wrap *\/\n  overflow-wrap: anywhere;   \/* break \u201cTRUSTATRADER\u201d gracefully *\/\n}\n\n\/* Slightly tighter CTA on the smallest widths so it never bulges *\/\n@media (max-width:420px){\n  .phx-trader__cta .phx-btn{\n    padding: 10px 12px;\n    font-size: 11.8px;\n    letter-spacing: .25px;\n  }\n}\n  \n  \/* Unify header-button sizing *\/\n.phx-headbtn{\n  padding: 12px 16px;\n  font-size: 12px;\n  letter-spacing: .3px;\n  line-height: 1;\n  border-radius: 999px;\n}\n\n\/* Mobile: make the green Follow button look like the white outlined one *\/\n@media (max-width:600px){\n  .phx-btn--solid.phx-headbtn{\n    background: #fff !important;\n    border: 2px solid rgba(0,0,0,.1) !important;\n    color: var(--phx-ink) !important;\n    box-shadow: none !important;\n    \/* keep the same width behavior as the Google button *\/\n    max-width: 56vw;\n    white-space: nowrap;\n  }\n  .phx-btn--solid.phx-headbtn:hover{\n    border-color: var(--phx-green-500) !important;\n    color: var(--phx-green-700) !important;\n    transform: translateY(-1px);\n  }\n}\n\n\/* === Make both header buttons smaller but identical === *\/\n@media (max-width:600px){\n  .phx-headbtn{\n    padding: 6px 10px;          \/* half the height & width *\/\n    font-size: 11.2px;          \/* proportionally smaller text *\/\n    letter-spacing: .25px;\n    line-height: 1;\n    border-radius: 999px;\n  }\n\n  \/* Keep their visual match even across solid + ghost *\/\n  .phx-btn--solid.phx-headbtn{\n    background: #fff !important;\n    border: 2px solid rgba(0,0,0,.1) !important;\n    color: var(--phx-ink) !important;\n    box-shadow: none !important;\n  }\n  .phx-btn--solid.phx-headbtn:hover{\n    border-color: var(--phx-green-500) !important;\n    color: var(--phx-green-700) !important;\n  }\n}\n\n\/* === CONTACT: kill the big gap above the map on mobile & tablet === *\/\n#contact .phx-contact__grid { row-gap: 8px !important; gap: 8px !important; }\n\n\/* remove any stray margins\/padding that Elementor\/theme injects *\/\n#contact .phx-contact__grid > * { margin: 0 !important; }\n#contact .phx-mapWrap { margin: 0 !important; padding: 0 !important; }\n#contact .phx-map { margin: 0 !important; }\n\n\/* make sure the card above doesn\u2019t push space from inside *\/\n#contact .phx-card p:last-child,\n#contact .phx-card ul:last-child,\n#contact .phx-side > *:last-child { margin-bottom: 0 !important; }\n\n\/* ensure the areas list isn\u2019t adding bottom space *\/\n#contact .phx-areas { margin: 0 !important; }\n\n\/* keep the map a tidy banner on phones *\/\n@media (max-width: 600px){\n  #contact .phx-map { height: 300px !important; min-height: 300px !important; }\n}\n\n\/* === CONTACT: fix huge gap above the map on mobile\/tablet === *\/\n@media (max-width: 980px){\n  #contact .phx-contact__grid{\n    grid-auto-rows: auto !important;   \/* <-- the fix *\/\n    align-items: stretch !important;\n    row-gap: 10px !important;\n    gap: 10px !important;\n  }\n\n  \/* nuke any extra spacing that could still sneak in *\/\n  #contact .phx-contact__grid > *{ margin:0 !important; }\n  #contact .phx-mapWrap{ margin:0 !important; padding:0 !important; }\n  #contact .phx-map{ margin:0 !important; }\n  #contact .phx-card p:last-child,\n  #contact .phx-card ul:last-child,\n  #contact .phx-side > *:last-child{ margin-bottom:0 !important; }\n\n  \/* keep the map a tidy height on phones *\/\n  #contact .phx-map{ height:300px !important; min-height:300px !important; }\n}\n\n\n  \n<\/style>\n\n<script>\n\/* ===== Reviews carousel ===== *\/\nconst PHX_REVIEWS = [\n  {name:\"Aaron Greenfield\", when:\"2 months ago\", rating:5, text:\"Couldn\u2019t be more impressed. Punctual, polite and time-efficient \u2014 turned our bumpy lawn into something we love. Left spotless and kept us informed throughout.\"},\n  {name:\"Amy Tegerdine\", when:\"2 months ago\", rating:5, text:\"Love my new artificial lawn. Very efficient and did an amazing job \u2014 would highly recommend!\"},\n  {name:\"Kieran Davies\", when:\"3 weeks ago\", rating:5, text:\"Jordan\u2019s attention to detail is second to none. Reliable, skilled and thorough. Exceeded expectations \u2014 100% recommend.\"},\n  {name:\"Sam Prete-Kirby\", when:\"3 months ago\", rating:5, text:\"Patio extended and previous poor work corrected. Kept everything tidy each day \u2014 looks just as good months later.\"},\n  {name:\"Libby Amzaleg\", when:\"2 months ago\", rating:5, text:\"Friendly and helpful with great ideas for our sloped garden. Reassuring from start to finish and very happy with the result.\"},\n  {name:\"Edward Kyme\", when:\"2 months ago\", rating:5, text:\"Top-notch team \u2014 new artificial lawn and fencing done in a day and left immaculate. Easy to deal with throughout.\"}\n];\n\n(function(){\n  const track = document.getElementById('phxRevTrack');\n  const prev  = document.getElementById('phxPrev');\n  const next  = document.getElementById('phxNext');\n  if(!track || !prev || !next) return;\n\n  let i = 0, timer;\n  const stars = n => \"\u2605\u2605\u2605\u2605\u2605\".slice(0,n);\n\n  function render(){\n    track.innerHTML = PHX_REVIEWS.map((r,idx)=>`\n      <article class=\"phx-rev__slide ${idx===i?'is-active':''}\" aria-hidden=\"${idx===i?'false':'true'}\">\n        <div class=\"phx-stars\" aria-label=\"${r.rating} out of 5 stars\">${stars(r.rating)}<\/div>\n        <p class=\"phx-rev__txt\">${r.text}<\/p>\n        <div class=\"phx-rev__meta\">\u2014 ${r.name} \u00b7 ${r.when}<\/div>\n      <\/article>\n    `).join('');\n  }\n  function go(dir){ i = (i + dir + PHX_REVIEWS.length) % PHX_REVIEWS.length; render(); restart(); }\n  function autoplay(){ timer = setInterval(()=>go(1), 5500); }\n  function restart(){ clearInterval(timer); autoplay(); }\n\n  prev.addEventListener('click', ()=>go(-1));\n  next.addEventListener('click', ()=>go(1));\n\n  render(); autoplay();\n})();\n<\/script>\n\n\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-12cd07e e-con-full e-flex e-con e-parent\" data-id=\"12cd07e\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3066042 elementor-widget elementor-widget-html\" data-id=\"3066042\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- ============== PHOENIX \u2014 CONTACT (2 COL + FULL-WIDTH MAP) ============== -->\n<section id=\"contact\" class=\"phx-contactSection\">\n  <div class=\"phx-contactSection__wrap\">\n    <header class=\"phx-contactSection__head\">\n      <h2>Request a quote or a quick call back<\/h2>\n      <p>Fast replies, friendly advice and free quotations across South East London &amp; Kent.<\/p>\n    <\/header>\n\n    <!-- Quick actions -->\n    <div class=\"phx-contactSection__actions\">\n      <a href=\"tel:+447951734393\" class=\"phx-cta phx-cta--ghost\">Call us<\/a>\n      <a href=\"https:\/\/wa.me\/447951734393\" class=\"phx-cta phx-cta--ghost\" target=\"_blank\" rel=\"noopener\">WhatsApp<\/a>\n      <a href=\"mailto:info@thephoenixlandscapes.com\" class=\"phx-cta phx-cta--ghost\">Email<\/a>\n    <\/div>\n\n    <!-- GRID: form | info, then map spans both -->\n    <div class=\"phx-contactSection__grid\">\n      <!-- Form -->\n      <form id=\"phxForm\" class=\"phx-card phx-form\" novalidate>\n        <input type=\"text\" name=\"website\" class=\"phx-hp\" tabindex=\"-1\" autocomplete=\"off\">\n        <input type=\"hidden\" name=\"ts\" id=\"phxTs\">\n\n        <div class=\"phx-field\">\n          <label for=\"name\">Your name<\/label>\n          <input id=\"name\" name=\"name\" type=\"text\" autocomplete=\"name\" required>\n        <\/div>\n\n        <div class=\"phx-row\">\n          <div class=\"phx-field\">\n            <label for=\"email\">Email<\/label>\n            <input id=\"email\" name=\"email\" type=\"email\" autocomplete=\"email\" required>\n          <\/div>\n          <div class=\"phx-field\">\n            <label for=\"phone\">Phone number<\/label>\n            <input id=\"phone\" name=\"phone\" type=\"tel\" inputmode=\"tel\" autocomplete=\"tel\" required>\n          <\/div>\n        <\/div>\n\n        <div class=\"phx-field\">\n          <label for=\"postcode\">Postcode<\/label>\n          <input id=\"postcode\" name=\"postcode\" type=\"text\" autocomplete=\"postal-code\" required>\n        <\/div>\n\n        <div class=\"phx-field\">\n          <label for=\"message\">Tell us a bit about your project<\/label>\n          <textarea id=\"message\" name=\"message\" rows=\"6\" required><\/textarea>\n        <\/div>\n\n        <label class=\"phx-check\">\n          <input type=\"checkbox\" name=\"consent\" required>\n          <span>I\u2019m happy for you to contact me about my enquiry.<\/span>\n        <\/label>\n\n        <button type=\"submit\" class=\"phx-cta phx-cta--solid\">Request a call<\/button>\n        <p class=\"phx-form__note\">We usually reply the same day. No spam \u2014 ever.<\/p>\n        <div id=\"phxSuccess\" class=\"phx-success\" role=\"status\" aria-live=\"polite\" hidden>\n          \u2705 Thanks! We\u2019ve got your details and will be in touch shortly.\n        <\/div>\n      <\/form>\n\n      <!-- Info -->\n      <aside class=\"phx-card phx-side\">\n        <ul class=\"phx-list\">\n          <li><strong>Hours:<\/strong> Mon\u2013Sat 7:30am\u20136pm<\/li>\n          <li><strong>Phone:<\/strong> <a href=\"tel:+447951734393\">07951 734393<\/a><\/li>\n          <li><strong>Email:<\/strong> <a href=\"mailto:info@thephoenixlandscapes.com\">info@thephoenixlandscapes.com<\/a><\/li>\n          <li><strong>Areas covered:<\/strong><\/li>\n        <\/ul>\n\n        <div class=\"phx-areas\">\n          <span>Crawley<\/span><span>Maidstone<\/span><span>Isle of Sheppey<\/span><span>Gravesend<\/span>\n          <span>Royal Tunbridge Wells<\/span><span>Bromley<\/span><span>Sheerness<\/span><span>Belvedere<\/span>\n          <span>Dartford<\/span><span>London<\/span><span>Chatham<\/span><span>Erith<\/span>\n          <span>Orpington<\/span><span>Welling<\/span>\n        <\/div>\n      <\/aside>\n\n      <!-- Full-width map under both cols -->\n      <div class=\"phx-mapWrap\">\n        <div id=\"phxLeaflet\" class=\"phx-map\" aria-label=\"Service area map\"><\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/section>\n\n<!-- Leaflet (safe if already on page) -->\n<link rel=\"stylesheet\" href=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.css\" data-phx-leaflet=\"css\">\n<script src=\"https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.js\" defer data-phx-leaflet=\"js\"><\/script>\n\n<style>\n:root{--phx-green-700:#1E7A39;--phx-green-500:#2FB84A;--phx-ink:#2F2E2F}\n\n\/* Section *\/\n.phx-contactSection{padding:56px 16px calc(56px + env(safe-area-inset-bottom));background:#fff;overflow-x:hidden}\n.phx-contactSection__wrap{max-width:1200px;margin:0 auto}\n.phx-contactSection__head h2{font:800 30px\/1.15 Poppins,Inter;margin:0 0 6px}\n.phx-contactSection__head p{margin:0 0 16px;color:#6b7280;font:600 14px\/1.5 Inter}\n\n\/* Actions *\/\n.phx-contactSection__actions{display:flex;gap:10px;flex-wrap:wrap;margin:6px 0 18px}\n.phx-cta{display:inline-flex;align-items:center;justify-content:center;border-radius:999px;padding:12px 18px;font:700 13.5px\/1 Poppins,Inter;letter-spacing:.3px;text-decoration:none;cursor:pointer;transition:.2s}\n.phx-cta--solid{background:linear-gradient(90deg,var(--phx-green-500),var(--phx-green-700));color:#fff !important;box-shadow:0 6px 16px rgba(47,184,74,.35)}\n.phx-cta--ghost{border:2px solid rgba(0,0,0,.1);background:#fff;color:var(--phx-ink)}\n.phx-cta--ghost:hover{border-color:var(--phx-green-500);color:var(--phx-green-700)}\n\n\/* Grid *\/\n.phx-contactSection__grid{\n  display:grid;gap:16px;\n  grid-template-columns:1fr 1fr;\n  align-items:start;\n}\n@media(max-width:980px){.phx-contactSection__grid{grid-template-columns:1fr}}\n\n.phx-card{padding:16px;border:1px solid rgba(0,0,0,.06);border-radius:16px;background:#fff;box-shadow:0 10px 26px rgba(0,0,0,.06)}\n\n\/* Form *\/\n.phx-row{display:grid;gap:10px;grid-template-columns:1fr 1fr}\n@media(max-width:600px){.phx-row{grid-template-columns:1fr}}\n.phx-field{display:grid;gap:6px;margin-bottom:10px}\n.phx-field label{font:800 12px\/1 Poppins,Inter;color:#374151}\n.phx-field input,.phx-field textarea{border:1px solid rgba(0,0,0,.12);border-radius:12px;padding:12px;font:600 14px\/1.2 Inter;color:#111;outline:none;transition:.15s}\n.phx-field input:focus,.phx-field textarea:focus{border-color:var(--phx-green-500);box-shadow:0 0 0 3px rgba(47,184,74,.18)}\n.phx-check{display:flex;gap:10px;align-items:flex-start;margin:4px 0 12px;font:600 13px\/1.4 Inter;color:#111}\n.phx-check input{margin-top:3px}\n.phx-form__note{margin:8px 0 0;color:#6b7280;font:600 12px\/1.4 Inter}\n.phx-hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0}\n.phx-success{margin-top:10px;padding:10px 12px;border:1px solid rgba(47,184,74,.35);background:#f0fff4;border-radius:12px;font:700 13px\/1.3 Inter;color:#14532d}\n\n\/* Info list *\/\n.phx-list{list-style:none;margin:0 0 10px;padding:0;display:grid;gap:8px}\n.phx-list a{text-decoration:none;color:var(--phx-ink)}\n.phx-list a:hover{color:#1E7A39}\n\n\/* Areas chips *\/\n.phx-areas{display:grid;gap:8px;grid-template-columns:repeat(2,minmax(0,1fr))}\n@media(min-width:700px){.phx-areas{grid-template-columns:repeat(3,minmax(0,1fr))}}\n.phx-areas span{display:inline-block;border:1px solid rgba(0,0,0,.12);border-radius:999px;padding:8px 10px;font:800 11px\/1 Inter;background:#fff;white-space:nowrap}\n\n\/* Map *\/\n.phx-mapWrap{grid-column:1 \/ -1}\n.phx-map{\n  margin-top:2px;border-radius:16px;overflow:hidden;border:1px solid rgba(0,0,0,.06);\n  height:340px;min-height:340px;width:100%;\n}\n@media(max-width:600px){.phx-map{height:300px;min-height:300px}}\n#phxLeaflet.leaflet-container{width:100% !important;height:100% !important}\n\n\/* =================== MOBILE GAP KILLER =================== *\/\n@media (max-width:980px){\n  #contact .phx-contactSection__grid\n    > :is(.elementor-widget-spacer,.elementor-spacer,.elementor-widget-divider,.elementor-divider):has(+ .phx-mapWrap){\n      display:none !important;height:0 !important;margin:0 !important;padding:0 !important;border:0 !important;min-height:0 !important;\n  }\n  #contact .phx-mapWrap :is(.elementor-widget-spacer,.elementor-spacer){display:none !important;height:0 !important;margin:0 !important;padding:0 !important}\n  #contact .phx-contactSection__grid > *:not(.phx-mapWrap):last-child{margin-bottom:0 !important}\n  #contact .phx-contactSection__grid{gap:10px}\n  @media (max-width:600px){#contact .phx-contactSection__grid{gap:8px}}\n  #contact .phx-mapWrap{margin-top:0 !important;padding-top:0 !important}\n  #contact .phx-map{margin-top:0 !important}\n}\n\n\/* === Fix rogue font on the right-hand info card === *\/\n.phx-card.phx-side{\n  font-family: Inter, system-ui, -apple-system, \"Segoe UI\", Roboto, Arial, sans-serif !important;\n  font-weight: 600;\n  line-height: 1.6;\n}\n.phx-card.phx-side .phx-list strong{font-weight:800}\n.phx-card.phx-side a{font-weight:600}\n.phx-card.phx-side .phx-areas span{\n  font-family: inherit;\n  font-weight: 800;\n}\n<\/style>\n<script>\n\/* -------- Contact form -> admin-ajax.php (no REST) -------- *\/\n(function(){\n  var form    = document.getElementById('phxForm');\n  var success = document.getElementById('phxSuccess');\n  var ts      = document.getElementById('phxTs');\n  if (ts) ts.value = Date.now();\n\n  var AJAX_URL = '\/wp-admin\/admin-ajax.php';\n\n  async function send(form){\n    var fd = new FormData(form);\n    fd.append('action','phx_contact'); \/\/ calls our PHP handler\n\n    var res = await fetch(AJAX_URL, {\n      method:'POST',\n      body: fd\n    });\n\n    var json = {};\n    try { json = await res.json(); } catch(e){ json = {}; }\n\n    if (!res.ok || !json.success) {\n      var err = (json.data && json.data.error) ? json.data.error : 'send_failed';\n      throw new Error(err);\n    }\n    return json;\n  }\n\n  if (form) {\n    form.addEventListener('submit', async function(e){\n      e.preventDefault();\n\n      \/\/ Spam gates: honeypot + min dwell\n      var hpEl = form.querySelector('.phx-hp');\n      var hp   = hpEl ? (hpEl.value || '').trim() : '';\n      var took = Date.now() - (Number(ts && ts.value) || 0);\n      if (hp || took < 3000) return;\n\n      \/\/ Loading UI\n      var btn  = form.querySelector('button[type=\"submit\"]');\n      var prev = btn ? btn.textContent : '';\n      if (btn){ btn.disabled = true; btn.textContent = 'Sending\u2026'; }\n\n      try{\n        await send(form);\n        form.reset();\n        if (success) {\n          success.hidden = false;\n          success.scrollIntoView({behavior:'smooth', block:'center'});\n        }\n      }catch(err){\n        console.error('PHX contact error:', err);\n        var msg = 'Sorry\u2014something went wrong sending your message.';\n        if (String(err.message).includes('missing_fields')) msg = 'Please fill in all fields.';\n        if (String(err.message).includes('send_failed'))    msg = 'Email service temporarily unavailable.';\n        alert(msg + ' Please call or email us directly.');\n      }finally{\n        if (btn){ btn.disabled = false; btn.textContent = prev; }\n        if (ts) ts.value = Date.now(); \/\/ reset timer\n      }\n    });\n  }\n})();\n\n\/* -------- Leaflet loader + init -------- *\/\n(function(){\n  var el = document.getElementById('phxLeaflet');\n  if (!el) return;\n\n  function ensureLeaflet(cb){\n    if (window.L && L.map) return cb();\n    if (!document.querySelector('link[data-phx-leaflet=\"css\"]')) {\n      var css = document.createElement('link');\n      css.rel = 'stylesheet';\n      css.href = 'https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.css';\n      css.setAttribute('data-phx-leaflet','css');\n      document.head.appendChild(css);\n    }\n    var existing = document.querySelector('script[data-phx-leaflet=\"js\"]');\n    if (existing) { existing.addEventListener('load', cb, {once:true}); return; }\n    var js = document.createElement('script');\n    js.src = 'https:\/\/unpkg.com\/leaflet@1.9.4\/dist\/leaflet.js';\n    js.defer = true;\n    js.setAttribute('data-phx-leaflet','js');\n    js.addEventListener('load', cb, {once:true});\n    document.head.appendChild(js);\n  }\n\n  function initMap(){\n    if (!window.L) return;\n\n    if (el.clientHeight < 160) el.style.height = (window.innerWidth < 600 ? 300 : 360) + 'px';\n\n    var map = L.map('phxLeaflet', {scrollWheelZoom:false});\n    L.tileLayer('https:\/\/{s}.tile.openstreetmap.org\/{z}\/{x}\/{y}.png', {maxZoom:19, attribution:'&copy; OpenStreetMap'}).addTo(map);\n\n    var towns = [\n      {n:'Crawley',lat:51.109,lng:-0.187},{n:'Maidstone',lat:51.272,lng:0.529},\n      {n:'Isle of Sheppey',lat:51.427,lng:0.826},{n:'Gravesend',lat:51.441,lng:0.371},\n      {n:'Royal Tunbridge Wells',lat:51.136,lng:0.267},{n:'Bromley',lat:51.406,lng:0.015},\n      {n:'Sheerness',lat:51.441,lng:0.759},{n:'Belvedere',lat:51.492,lng:0.152},\n      {n:'Dartford',lat:51.445,lng:0.218},{n:'London',lat:51.507,lng:-0.128},\n      {n:'Chatham',lat:51.378,lng:0.527},{n:'Erith',lat:51.481,lng:0.175},\n      {n:'Orpington',lat:51.373,lng:0.099},{n:'Welling',lat:51.462,lng:0.101}\n    ];\n\n    var group = L.featureGroup();\n    for (var i=0;i<towns.length;i++){\n      var t = towns[i];\n      L.circleMarker([t.lat, t.lng], {\n        radius:5, weight:2, color:'#1E7A39', fillColor:'#2FB84A', fillOpacity:.85\n      }).bindTooltip(t.n).addTo(group);\n    }\n    group.addTo(map);\n    map.fitBounds(group.getBounds().pad(0.2));\n\n    function poke(){ try{ map.invalidateSize(true); }catch(e){} }\n    requestAnimationFrame(poke);\n    setTimeout(poke,150); setTimeout(poke,400); setTimeout(poke,1000);\n    window.addEventListener('resize', poke, {passive:true});\n    window.addEventListener('orientationchange', poke, {passive:true});\n    if ('IntersectionObserver' in window) {\n      var io = new IntersectionObserver(function(entries){\n        for (var j=0;j<entries.length;j++){ if (entries[j].isIntersecting) poke(); }\n      }, {threshold:0.1});\n      io.observe(el);\n    }\n  }\n\n  function start(){ ensureLeaflet(initMap); }\n  (document.readyState === 'complete' || document.readyState === 'interactive')\n    ? start() : document.addEventListener('DOMContentLoaded', start);\n})();\n<\/script>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-36125d7 e-con-full e-flex e-con e-parent\" data-id=\"36125d7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fb70082 elementor-widget elementor-widget-html\" data-id=\"fb70082\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!-- ===== PHOENIX \u2014 HOMEPAGE SPLASH SCREEN (v3.2 final polish) ===== -->\n<div id=\"phxSplash\" class=\"phx-splash\" aria-hidden=\"true\">\n  <div class=\"phx-splash__inner\">\n    <img decoding=\"async\"\n      src=\"https:\/\/thephoenixlandscapes.com\/wp-content\/uploads\/2025\/10\/Logo.png\"\n      alt=\"The Phoenix Landscapes\"\n      class=\"phx-splash__logo\"\n    >\n\n    <div class=\"phx-splash__loader\" aria-hidden=\"true\">\n      <div class=\"phx-splash__spinner\"><\/div>\n    <\/div>\n\n    <p class=\"phx-splash__tag\">\n      Preparing your garden makeover\u2026\n    <\/p>\n  <\/div>\n<\/div>\n\n<style>\n\/* ===== Splash: base layout ===== *\/\n.phx-splash{\n  position:fixed;inset:0;z-index:9999;\n  display:flex;align-items:center;justify-content:center;\n  background:#ffffff;\n  transition:opacity .45s ease, visibility .45s ease;\n  opacity:1;visibility:visible;\n}\n.phx-splash__inner{text-align:center;padding:24px 32px}\n\n\/* Logo fade-in *\/\n.phx-splash__logo{\n  width:30vw;\n  max-width:100px; \/* smaller default for desktop *\/\n  height:auto;\n  display:block;\n  margin:0 auto 20px;\n  opacity:0;\n  transform:translateY(10px) scale(.96);\n  animation:phx-splash-logo .6s ease-out .1s forwards;\n}\n@keyframes phx-splash-logo{\n  0%{opacity:0;transform:translateY(10px) scale(.96);}\n  100%{opacity:1;transform:translateY(0) scale(1);}\n}\n\n\/* Larger on smaller screens *\/\n@media(max-width:600px){\n  .phx-splash__logo{\n    max-width:200px;\n    width:65vw;\n  }\n}\n\n\/* Tagline fade-in *\/\n.phx-splash__tag{\n  margin:8px 0 0;\n  font:600 13px\/1.5 Inter, system-ui, -apple-system, \"Segoe UI\", sans-serif;\n  color:#6b7280;\n  opacity:0;\n  transform:translateY(6px);\n  animation:phx-splash-tag .4s ease-out .25s forwards;\n}\n@keyframes phx-splash-tag{\n  0%{opacity:0;transform:translateY(6px);}\n  100%{opacity:1;transform:translateY(0);}\n}\n\n\/* ===== Circular loader ===== *\/\n.phx-splash__loader{display:flex;justify-content:center;margin:0 auto 6px}\n.phx-splash__spinner{\n  position:relative;\n  width:28px;height:28px;\n  border-radius:50%;\n  border:2.5px solid rgba(0,0,0,.06);\n  border-top-color:#2FB84A;\n  border-right-color:#1E7A39;\n  animation:phx-splash-spin .8s linear infinite;\n}\n.phx-splash__spinner::after{\n  content:\"\";\n  position:absolute;inset:5px;\n  border-radius:50%;\n  background:rgba(47,184,74,.18);\n  opacity:0;\n  transform:scale(.6);\n  animation:phx-splash-pulse 1.3s ease-out infinite;\n}\n@keyframes phx-splash-spin{\n  0%{transform:rotate(0deg);}\n  100%{transform:rotate(360deg);}\n}\n@keyframes phx-splash-pulse{\n  0%  {opacity:0;transform:scale(.6);}\n  40% {opacity:1;transform:scale(1);}\n  100%{opacity:0;transform:scale(1.25);}\n}\n\n\/* Mobile spinner slightly smaller *\/\n@media(max-width:600px){\n  .phx-splash__spinner{width:24px;height:24px;border-width:2px}\n  .phx-splash__spinner::after{inset:4px;}\n}\n\n\/* Hide state *\/\n.phx-splash--hide{opacity:0;visibility:hidden;pointer-events:none}\n\n\/* Lock scrolling while splash is visible *\/\nbody.phx-splash-lock{overflow:hidden}\n\n\/* Accessibility: disable animation if reduced motion set *\/\n@media (prefers-reduced-motion: reduce){\n  .phx-splash__spinner,\n  .phx-splash__spinner::after{animation:none}\n  .phx-splash__logo,\n  .phx-splash__tag{animation:none;opacity:1;transform:none}\n  .phx-splash{transition:none}\n}\n<\/style>\n\n<script>\n(function(){\n  var splash = document.getElementById('phxSplash');\n  if (!splash) return;\n  document.body.classList.add('phx-splash-lock');\n\n  function hideSplash(){\n    if (!splash || splash.classList.contains('phx-splash--hide')) return;\n    splash.classList.add('phx-splash--hide');\n    document.body.classList.remove('phx-splash-lock');\n  }\n\n  window.addEventListener('load', ()=>setTimeout(hideSplash,600));\n  setTimeout(hideSplash,6000);\n})();\n<\/script>\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>TRANSFORMING OUTDOOR SPACES Landscaping, paving, artificial lawns, fencing, garden buildings, turfing &amp; 3D designs \u2014 fully insured with tidy workmanship and clear timelines across South&nbsp;East&nbsp;London &amp; Kent. View Our Work Contact Us Bromley \u00b7 Dartford \u00b7 Orpington \u00b7 Welling \u00b7 Maidstone \u00b7 Tunbridge Wells \u00b7 Gravesend \u00b7 London \u00b7 Surrounding Areas Our Work &amp; Services [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"elementor_header_footer","meta":{"footnotes":""},"class_list":["post-101","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/thephoenixlandscapes.com\/index.php?rest_route=\/wp\/v2\/pages\/101","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thephoenixlandscapes.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/thephoenixlandscapes.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/thephoenixlandscapes.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thephoenixlandscapes.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=101"}],"version-history":[{"count":5,"href":"https:\/\/thephoenixlandscapes.com\/index.php?rest_route=\/wp\/v2\/pages\/101\/revisions"}],"predecessor-version":[{"id":207,"href":"https:\/\/thephoenixlandscapes.com\/index.php?rest_route=\/wp\/v2\/pages\/101\/revisions\/207"}],"wp:attachment":[{"href":"https:\/\/thephoenixlandscapes.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=101"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}