/* ============================================================ MVH — Service detail page builder + Services hub + Add-ons Depends on site.jsx (loaded first). React global. ============================================================ */ /* Per-service extra content keyed by service key */ const SERVICE_DETAIL = { bronze: { intro: 'A regular reset that keeps an already-cared-for vehicle looking its best. Available on a monthly maintenance plan only.', benefits: [ ['Always presentable', 'Your vehicle stays clean, fresh and pristine between bigger details.'], ['Protects your finish', 'Frequent safe washing prevents contaminant build-up that dulls paint.'], ['Effortless & mobile', 'A quick, convenient visit to your home or workplace — no queues, no hassle.'], ], process: ['Pre-rinse & safe wash', 'Wheels & tyres cleaned', 'Dry & dress', 'Interior vacuum & wipe', 'Glass & final check'], }, silver: { intro: 'Our best all-round package. A thorough inside-and-out valet that brings the whole vehicle back to fresh.', benefits: [ ['Inside & out', 'A complete clean covering paint, wheels, glass, trim and a deep interior refresh.'], ['Sealed & protected', 'A sealant layer adds gloss and helps your paint stay cleaner for longer.'], ['Best value', 'The package most customers choose — the perfect balance of result and price.'], ], process: ['Pre-wash & decontaminate', 'Safe contact wash', 'Wheels, tyres & shuts', 'Interior deep clean', 'Sealant protection & inspection'], }, gold: { intro: 'A true enhancement detail. We machine-polish the paintwork to remove swirls and restore depth, then lock it in with protection.', benefits: [ ['Removes swirls & marring', 'A single-stage machine polish dramatically improves clarity and gloss.'], ['Showroom depth', 'Paint is decontaminated, clayed and refined for a deep, wet-look finish.'], ['Lasting protection', 'A durable wax sealant protects the freshly enhanced finish for months.'], ], process: ['Pre-wash & full decontamination', 'Clay treatment', 'Machine polish enhancement', 'Paint gloss boost', 'Wax sealant & final inspection'], }, platinum: { intro: 'Our showroom detail. Full 2-stage machine polish, deep interior restoration and long-lasting protection — the complete transformation.', benefits: [ ['Full 2-stage polish', 'A thorough two-stage machine polish removes deeper defects for maximum clarity and gloss.'], ['Concours interior', 'Leather cleaned & conditioned, engine bay detailed, every surface restored.'], ['Years of protection', 'Finished with long-lasting paint protection for a finish that endures.'], ], process: ['Strip wash & multi-stage decontamination', 'Full 2-stage machine polish', 'Interior deep clean & leather care', 'Engine bay detail', 'Long-lasting protection & QC'], }, diamond: { intro: 'The ultimate paint correction, ceramic protection and total vehicle enhancement — MVH Detailing\'s most exclusive package. 2 year ceramic coating on paintwork and wheel faces included.', benefits: [ ['Full 2-stage correction', 'A meticulous two-stage machine polish eliminates swirls, haze and defects for flawless clarity.'], ['2 Year ceramic protection included', 'Both 2 year paintwork and 2 year wheel face ceramic coatings are included as standard — hydrophobic, self-cleaning protection that lasts.'], ['Total transformation', 'Engine bay, interior deep clean, leather care, fabric roof treatment — every surface addressed to the highest standard.'], ], process: ['Multi-stage decontamination & clay', 'Full 2-stage machine polish', 'Interior deep clean & leather conditioning', 'Engine bay detail & fabric roof treatment', '2 year paintwork ceramic coating application', '2 year wheel face ceramic coating & final QC'], }, 'interior-reset': { intro: 'A comprehensive interior restoration service designed to refresh, sanitise and rejuvenate your vehicle\'s cabin. The premium interior refresh for a cleaner, healthier and revitalised interior.', benefits: [ ['Total cabin refresh', 'Every surface vacuumed, wiped, cleaned and dressed — from dashboard to boot.'], ['Healthier environment', 'Sanitised surfaces, clean air vents and fresh fabrics make the cabin feel brand new.'], ['Flexible upgrades', 'Add fabric shampooing, leather conditioning, pet hair removal or heavy stain treatment as needed.'], ], process: ['Full interior vacuum & loose debris removal', 'Dashboard, console, trim & door card cleaning', 'Air vents, cup holders & compartments detailed', 'Carpet & mat deep clean', 'Glass cleaned streak-free & surfaces protected', 'Boot area cleaned & final inspection'], }, }; const SERVICE_FAQ = (s) => { const priceLabel = s.priceReg ? `a regular vehicle is ${s.priceReg} and a large vehicle is ${s.priceLrg}` : (s.priceMed ? `a medium vehicle is ${s.priceMed} and a large vehicle is ${s.priceLrg}` : `a small vehicle is ${s.priceSmall} and a large vehicle is ${s.priceLarge}`); return [ { q: `How much does the ${s.name} detail cost?`, a: `Pricing is based on the size and condition of your vehicle. As a guide, ${priceLabel}. Send us a few photos on WhatsApp for an exact, no-obligation quote.` }, { q: `How long does the ${s.name} ${s.tagline.toLowerCase()} take?`, a: `Typically ${s.time}. The exact time depends on the size and condition of your vehicle and any add-ons selected.` }, { q: 'Do I need to provide anything?', a: 'No — MVH is fully mobile and self-sufficient. We bring our own power and water. We just need reasonable access to your vehicle on a driveway or off-road space.' }, { q: 'Which areas do you cover?', a: 'We cover Cannock, Hednesford, Rugeley, Lichfield, Stafford, Burntwood, Sutton Coldfield, Burton upon Trent and surrounding Staffordshire areas.' }, ]; }; function PriceTile({ label, price }) { return (
{label}
{price}
); } function AddOnsSection({ note = true }) { return (
Tailor Your Detail

Add-ons & extras

Enhance any package with the finishing touches your vehicle needs.

{ADDONS.map((a, i) => (
{a.name} {a.price}
))}
{note && (

Ceramic coatings are available as an add-on to Gold & Platinum packages. Prices vary with severity & vehicle size.

)}
); } /* ============================================================ DIAMOND DETAIL PAGE (standalone — different data shape) ============================================================ */ function DiamondDetailPage() { const s = DIAMOND_SERVICE; const d = SERVICE_DETAIL.diamond; const faqs = SERVICE_FAQ(s); React.useEffect(() => { injectSchema({ '@context': 'https://schema.org', '@type': 'Service', serviceType: 'Diamond Ultimate Detail', provider: { '@type': 'AutoDetailing', name: 'MVH Mobile Detailing', telephone: '+447311796805' }, areaServed: AREAS, description: d.intro, offers: { '@type': 'Offer', priceCurrency: 'GBP', priceSpecification: { '@type': 'PriceSpecification', minPrice: '500' } } }); injectSchema({ '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faqs.map(f => ({ '@type': 'Question', name: f.q, acceptedAnswer: { '@type': 'Answer', text: f.a } })) }); }, []); return (
); } /* ============================================================ INTERIOR RESET DETAIL PAGE ============================================================ */ function InteriorResetDetailPage() { const s = INTERIOR_RESET; const d = SERVICE_DETAIL['interior-reset']; const faqs = SERVICE_FAQ(s); React.useEffect(() => { injectSchema({ '@context': 'https://schema.org', '@type': 'Service', serviceType: 'Interior Reset Detail', provider: { '@type': 'AutoDetailing', name: 'MVH Mobile Detailing', telephone: '+447311796805' }, areaServed: AREAS, description: d.intro, offers: { '@type': 'Offer', priceCurrency: 'GBP', priceSpecification: { '@type': 'PriceSpecification', minPrice: '100' } } }); injectSchema({ '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faqs.map(f => ({ '@type': 'Question', name: f.q, acceptedAnswer: { '@type': 'Answer', text: f.a } })) }); }, []); return (
); } function ServiceDetailPage({ serviceKey }) { const s = SERVICES.find(x => x.key === serviceKey); const d = SERVICE_DETAIL[serviceKey]; const faqs = SERVICE_FAQ(s); const idx = SERVICES.findIndex(x => x.key === serviceKey); const others = SERVICES.filter(x => x.key !== serviceKey); React.useEffect(() => { injectSchema({ '@context': 'https://schema.org', '@type': 'Service', serviceType: `${s.name} ${s.tagline}`, provider: { '@type': 'AutoDetailing', name: 'MVH Mobile Detailing', telephone: '+447311796805' }, areaServed: AREAS, description: d.intro, offers: { '@type': 'Offer', priceCurrency: 'GBP', priceSpecification: { '@type': 'PriceSpecification', minPrice: s.priceReg.replace(/[^0-9]/g, '').slice(0, s.priceReg.indexOf('–') > -1 ? 2 : 3) } } }); injectSchema({ '@context': 'https://schema.org', '@type': 'FAQPage', mainEntity: faqs.map(f => ({ '@type': 'Question', name: f.q, acceptedAnswer: { '@type': 'Answer', text: f.a } })) }); }, []); return (
); } /* ---------- Services hub ---------- */ function ServicesHub() { React.useEffect(() => { injectSchema({ '@context': 'https://schema.org', '@type': 'Service', serviceType: 'Interior Reset Detail', provider: { '@type': 'AutoDetailing', name: 'MVH Mobile Detailing', telephone: '+447311796805' }, areaServed: AREAS, description: INTERIOR_RESET.blurb, offers: { '@type': 'Offer', priceCurrency: 'GBP', priceSpecification: { '@type': 'PriceSpecification', minPrice: '100' } } }); }, []); return (
); } Object.assign(window, { SERVICE_DETAIL, AddOnsSection, ServiceDetailPage, ServicesHub, PriceTile, DiamondDetailPage, InteriorResetDetailPage });