/* PCS marketing site — interior page kit.
Reusable section components composed from the design system + icons.
Exposes window.PCSKit. Load after home-parts.jsx. */
(function () {
const K = (window.PCSKit = window.PCSKit || {});
const CALENDLY = (window.PCSHome && window.PCSHome.CALENDLY) || "https://calendly.com/propertyclinicsolutions/free-consultation";
const RISK = "Your home may be repossessed if you do not keep up repayments on your mortgage.";
K.RISK = RISK;
const MAX = 1200;
function cta(c) {
if (!c) return null;
const { Button } = window.PCSDesignSystem_269f6d;
const { Icon } = window.PCSIcons;
const ext = c.external !== false && /^https?:/.test(c.href || CALENDLY);
return (
}>
{c.label}
);
}
K.cta = cta;
function Eyebrow({ children, color = "var(--pcs-blue)" }) {
return {children};
}
K.Eyebrow = Eyebrow;
/* ---- Page hero ---- */
function PageHero({ eyebrow, title, sub, primary, secondary, compliance, photo, accent = "var(--pcs-blue)" }) {
const { Icon } = window.PCSIcons;
const { Photo } = window.PCSHome;
const lines = Array.isArray(compliance) ? compliance : compliance ? [compliance] : [];
return (
{eyebrow}
{title}
{sub &&
{sub}
}
{cta(primary)}
{secondary && cta({ ...secondary, variant: secondary.variant || "outline", iconName: secondary.iconName })}
{lines.map((l, i) => (
{l}
))}
{photo && (
{photo.badge && (
{photo.badge.title}
{photo.badge.sub}
)}
)}
);
}
K.PageHero = PageHero;
/* ---- Trust strip ---- */
function TrustStrip({ items }) {
const { Icon } = window.PCSIcons;
return (
{items.map((t) => (
{t}
))}
);
}
K.TrustStrip = TrustStrip;
function Head({ eyebrow, title, lead, accent = "var(--pcs-blue)", dark, max = 720 }) {
return (
{eyebrow}
{title}
{lead &&
{lead}
}
);
}
K.Head = Head;
/* ---- Editorial prose ---- */
function Prose({ eyebrow, title, paras = [], accent, bg = "#fff" }) {
return (
{eyebrow}
{title}
{paras.map((p, i) =>
{p}
)}
);
}
K.Prose = Prose;
/* ---- Icon cards (key facts / how we help / values) ---- */
function IconCards({ eyebrow, title, lead, items, columns = 3, accent = "var(--pcs-blue)", bg = "var(--surface-page)", dark, card = true, note }) {
const { Icon } = window.PCSIcons;
return (
{items.map((it, i) => (
{it.icon && (
)}
{it.title}
{it.body}
))}
{note && {note}
}
);
}
K.IconCards = IconCards;
/* ---- Service cards (linked, with optional bullets) ---- */
function ServiceCards({ eyebrow, title, lead, items, accent = "var(--pcs-blue)", bg = "#fff" }) {
const { Icon } = window.PCSIcons;
const toneBg = { blue: "var(--pcs-blue-tint)", emerald: "var(--pcs-emerald-tint)", gold: "var(--pcs-gold-tint)" };
const toneFg = { blue: "var(--pcs-blue)", emerald: "var(--pcs-emerald)", gold: "#8a6310" };
return (
);
}
K.ServiceCards = ServiceCards;
/* ---- Numbered timeline (3, 4, or 6 steps) ---- */
function Timeline({ eyebrow, title, lead, steps, cta: ctaObj, accent = "var(--pcs-blue)", bg = "var(--surface-page)" }) {
const { Icon } = window.PCSIcons;
const n = steps.length;
const cols = n <= 3 ? n : n === 4 ? 4 : 3;
return (
{cols === n && (
)}
{steps.map((s, i) => (
{s.icon ? : (i + 1)}
Step {i + 1}
{s.title}
{s.body}
))}
{ctaObj && {cta(ctaObj)}
}
);
}
K.Timeline = Timeline;
/* ---- Comparison / generic table ---- */
function TableBlock({ eyebrow, title, lead, head, rows, accent = "var(--pcs-blue)", bg = "#fff" }) {
return (
{head.map((h, i) => | {h} | )}
{rows.map((r, i) => {r.map((c, j) => | {c} | )}
)}
);
}
K.TableBlock = TableBlock;
/* ---- Stat band (dark) ---- */
function StatBand({ eyebrow, title, items, bg = "var(--pcs-ink)" }) {
return (
{title &&
}
{items.map((it, i) => (
{window.PCSHome.CountUp ? : it.value}
{it.label}
))}
);
}
K.StatBand = StatBand;
/* ---- List block (limitations / bullets with intro + outro) ---- */
function ListBlock({ eyebrow, title, intro, items, outro, accent = "var(--pcs-blue)", bg = "var(--surface-page)", icon = "check" }) {
const { Icon } = window.PCSIcons;
return (
{items.map((t, i) => (
-
{t}
))}
{outro && {outro}
}
);
}
K.ListBlock = ListBlock;
/* ---- Split feature (text + image) ---- */
function Split({ eyebrow, title, paras = [], bullets, photo, reverse, cta: ctaObj, accent = "var(--pcs-blue)", bg = "#fff" }) {
const { Icon } = window.PCSIcons;
const { Photo } = window.PCSHome;
const text = (
{eyebrow}
{title}
{paras.map((p, i) =>
{p}
)}
{bullets && (
{bullets.map((b, i) => (
{b}
))}
)}
{ctaObj &&
{cta(ctaObj)}
}
);
const img = ;
return (
{reverse ? <>{img}{text}> : <>{text}{img}>}
);
}
K.Split = Split;
/* ---- FAQ accordion ---- */
function FAQ({ eyebrow, title, items, accent = "var(--pcs-blue)", bg = "var(--surface-page)" }) {
const { Icon } = window.PCSIcons;
return (
{items.map(([q, a], i) => (
{q}
))}
);
}
K.FAQ = FAQ;
/* ---- Final CTA band ---- */
function CTABand({ eyebrow, title, body, primary }) {
const { Icon } = window.PCSIcons;
return (
{eyebrow}
{title}
{body &&
{body}
}
{cta({ ...primary, variant: "secondary" })}
);
}
K.CTABand = CTABand;
/* ---- Legal / policy page ---- */
function Legal({ eyebrow, title, updated, intro, sections }) {
return (
{eyebrow}
{title}
{updated &&
Last updated: {updated}
}
{intro &&
{intro}
}
{sections.map((sec, i) => (
{sec.h && {sec.h}
}
{(sec.paras || []).map((p, j) => {p}
)}
{sec.list && (
{sec.list.map((li, j) => {
const item = Array.isArray(li) ? li : [li, null];
return (
-
{item[1] ? <>{item[0]}. {item[1]}> : item[0]}
);
})}
)}
{sec.table && (
2 ? 640 : 480, font: "400 14.5px/1.55 var(--font-sans)" }}>
{sec.table.head.map((h, k) => (
| {h} |
))}
{sec.table.rows.map((row, r) => (
{row.map((cell, c) => {
const lines = Array.isArray(cell) ? cell : [cell];
return (
|
{lines.map((ln, li) => {ln} )}
|
);
})}
))}
)}
))}
);
}
K.Legal = Legal;
/* ---- Page shell + boot ---- */
function Page({ children }) {
const { Header, Footer, CookieBanner, NewsletterPopup } = window.PCSHome;
return (
{children}
{NewsletterPopup && }
);
}
K.Page = Page;
K.initReveal = function () {
const els = document.querySelectorAll(".reveal");
if (!("IntersectionObserver" in window)) { els.forEach((e) => e.classList.add("reveal--in")); return; }
const io = new IntersectionObserver((entries) => {
entries.forEach((en) => { if (en.isIntersecting) { en.target.classList.add("reveal--in"); io.unobserve(en.target); } });
}, { rootMargin: "0px 0px -8% 0px", threshold: 0.04 });
els.forEach((e) => io.observe(e));
setTimeout(() => els.forEach((e) => e.classList.add("reveal--in")), 2600);
};
/* Build a FAQPage schema from rendered .faq blocks and inject once. */
K.initFaqSchema = function () {
const qs = document.querySelectorAll("[data-faq-q]");
if (!qs.length) return;
const main = [];
document.querySelectorAll(".faq").forEach((f) => {
const q = f.querySelector("[data-faq-q]"), a = f.querySelector("[data-faq-a]");
if (q && a) main.push({ "@type": "Question", name: q.textContent, acceptedAnswer: { "@type": "Answer", text: a.textContent } });
});
if (!main.length) return;
const s = document.createElement("script");
s.type = "application/ld+json";
s.textContent = JSON.stringify({ "@context": "https://schema.org", "@type": "FAQPage", mainEntity: main });
document.head.appendChild(s);
};
K.boot = function (children) {
ReactDOM.createRoot(document.getElementById("root")).render({children});
setTimeout(() => { K.initReveal(); K.initFaqSchema(); }, 120);
};
})();