��<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Media Walls & Built-ins | Cardiff & Caerphilly Carpentry</title> <meta name="description" content="Professional home maintenance in Cardiff & Caerphilly. Timber mowing, timber repair, Wood Flooring cleaning, and seasonal tidy-ups. Regular visits or one-off clearance. Call 07803 083422."> <meta name="keywords" content="Carpenter, Carpentry, Kitchen & Bathroom Fitting, Bespoke Furniture, Wardrobes, Door Hanging, Decking, Wood Flooring, Property Maintenance, Timber Repair, Cladding, Laminate Flooring, City & Guilds Qualified, Carpenter Cardiff, Carpentry Cardiff, Kitchen & Bathroom Fitting Cardiff, Bespoke Furniture Cardiff, Wardrobes Cardiff, Door Hanging Cardiff, Decking Cardiff, Wood Flooring Cardiff, Property Maintenance Cardiff, Timber Repair Cardiff, Cladding Cardiff, Laminate Flooring Cardiff, City & Guilds Qualified Cardiff, Carpenters Cardiff"> <!-- Fonts --> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&family=Outfit:wght@500;700;800&display=swap" rel="stylesheet"> <!-- Icons --> <script src="https://unpkg.com/lucide@latest"></script> <!-- Styles --> <link rel="stylesheet" href="css/styles.css?v=3"> <!-- Schema.org JSON-LD --> <script type="application/ld+json"> { "@context": "https://schema.org", "@type": "Carpenter", "name": "Cardiff & Caerphilly Carpentry", "image": "https://www.cardiffandcaerphillycarpentry.com/assets/images/media-wall-hero.png", "url": "https://www.cardiffandcaerphillycarpentry.com/media-walls.html", "telephone": "07803083422", "priceRange": "�%��%�", "address": { "@type": "PostalAddress", "addressLocality": "Cardiff", "addressRegion": "Wales", "addressCountry": "UK" }, "geo": { "@type": "GeoCoordinates", "latitude": 51.4816, "longitude": -3.1791 }, "openingHoursSpecification": { "@type": "OpeningHoursSpecification", "dayOfWeek": [ "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" ], "opens": "08:00", "closes": "18:00" }, "areaServed": [ "Cardiff", "Caerphilly", "Newport", "Penarth", "Barry", "South Wales" ] } </script> <link rel="canonical" href="https://www.cardiffandcaerphillycarpentry.com/media-walls.html"> </head> <body> <!-- Emergency Top Bar --> <div class="emergency-top-bar"> <i data-lucide="alert-triangle" size="14"></i> <span>24/7 Emergency Call-Outs: On-Site Within 90 Mins</span> <a href="multi-trade.html">View Trades</a> </div> <!-- Header --> <header class="header"> <div class="container header-container"> <a href="index.html" class="logo"> <i data-lucide="ruler" class="text-primary"></i> <span>Cardiff & Caerphilly <span class="text-accent">Carpentry</span></span> </a> <nav class="nav-links"> <a href="index.html">Home</a> <div class="dropdown"> <a href="services.html" class="dropdown-toggle">Services <i data-lucide="chevron-down" size="16"></i></a> <div class="dropdown-menu"> <a href="garden-rooms.html" class="dropdown-item">Garden Rooms & Sheds</a> <a href="kitchen-fitting.html" class="dropdown-item">Kitchen & Bathroom Fitting</a> <a href="bespoke-furniture.html" class="dropdown-item">Bespoke Furniture</a> <a href="under-stairs-storage.html" class="dropdown-item">Under Stairs Storage</a> <a href="media-walls.html" class="dropdown-item">Media Walls</a> <a href="wardrobes.html" class="dropdown-item">Wardrobes & Joinery</a> <a href="alcove-storage.html" class="dropdown-item">Alcove Storage</a> <a href="wall-paneling.html" class="dropdown-item">Wall Paneling</a> <a href="electric-fires.html" class="dropdown-item">Electric Fires</a> <a href="multi-trade.html" class="dropdown-item" style="color: #dc2626; font-weight: 600;"><i data-lucide="alert-triangle" size="14" style="margin-right: 4px; vertical-align: middle;"></i>Emergency & Multi-Trade</a> <a href="services.html" class="dropdown-item" style="border-top: 1px solid #eee; margin-top: 0.25rem; font-weight: 600;">View All Services</a> </div> </div> <a href="about-us.html">About Us</a> <a href="blog.html">Blog</a> <a href="news.html">Weekly Updates</a> <a href="contact.html">Contact</a> <form class="nav-search" action="search.html" method="GET" style="display:flex; align-items:center; margin-left:1rem; position:relative;"> <input type="text" name="q" placeholder="Search products..." style="padding: 0.6rem 2.5rem 0.6rem 1rem; border-radius: 25px; border: 1px solid #e5e5e5; background: #fdfbf7; font-family: 'Inter', sans-serif; font-size: 0.95rem; width: 220px; transition: border-color 0.3s, box-shadow 0.3s;" onfocus="this.style.borderColor='#1c1917'; this.style.boxShadow='0 0 0 2px rgba(28,25,23,0.1)';" onblur="this.style.borderColor='#e5e5e5'; this.style.boxShadow='none';" required> <button type="submit" aria-label="Search" style="position:absolute; right:12px; background:none; border:none; color:#57534e; cursor:pointer; display:flex; align-items:center; justify-content:center; padding:0; transition: color 0.3s;" onmouseover="this.style.color='#1c1917';" onmouseout="this.style.color='#57534e';"><i data-lucide="search" size="18"></i></button> </form> </nav> <div class="cta-group"> <a href="javascript:void(0)" onclick="window.openChatWindow()" class="btn" style="background-color: var(--color-primary-dark); color: white !important; border: 1px solid var(--color-accent); padding: 0.5rem 1rem; margin-right: 0.5rem; display: inline-flex; align-items: center; gap: 0.5rem; border-radius: 99px; font-weight: 600; text-decoration: none;"> <i data-lucide="message-square" size="16"></i> <span class="desktop-only text-sm">Live AI Chat</span> </a> <a href="tel:07803083422" class="btn btn-primary" style="padding: 0.5rem 1rem; white-space: nowrap;"> <i data-lucide="phone" size="18" style="margin-right: 0.5rem; vertical-align: middle;"></i> 07803 083422 </a> <button class="mobile-toggle"> <i data-lucide="menu"></i> </button> </div> </div> </header> <!-- Hero Section --> <section id="home" class="hero" style="background: linear-gradient(rgba(0,0,0,0.6), rgba(0,0,0,0.6)), url('assets/images/media-wall-hero.png'); background-size: cover; background-position: center; padding-top: 18rem;"> <div class="container"> <div class="hero-content animate-fade-in" style="max-width: 800px; margin: 0 auto; text-align: center; display: flex; flex-direction: column; align-items: center;"> <div class="hero-title-wrapper" style="width: 100%; display: block !important;"> <h1>MEDIA <span class="text-accent">WALLS</span></h1> <span class="text-accent" style="font-size: 0.8em; display: block; margin-top: 0.5rem;">Fully bespoke media walls</span> <p style="font-size: 1.25rem; margin-bottom: 2rem; color: #f8fafc; font-weight: 500; max-width: 600px; margin-left: auto; margin-right: auto; text-align: center;"> Keep your home looking pristine all year round. From timber care and timber repair to wooden floor cleaning and rubbish clearance.</p> <div class="hero-actions" style="justify-content: center;"> <a href="https://tradevaultai-production-5bf2.up.railway.app/carpentry-leads" class="btn btn-primary">Get A Quote</a> <a href="#services" class="btn btn-accent">View Packages</a> </div> </div> </div> </section> <!-- Services Section --> <!-- Media Wall Configurator --> <section class="py-16 bg-white relative"> <div class="px-6 mx-auto max-w-7xl relative z-10"> <div class="mb-12 text-center"> <h2 style="font-size: 2.5rem; font-weight: 800; color: #1e293b; margin-bottom: 1rem; letter-spacing: -0.025em; line-height: 1.2;"> Media Wall <span class="text-accent">Configurator</span> </h2> <p style="font-size: 1.125rem; color: #64748b; max-width: 600px; margin: 0 auto; line-height: 1.6;"> Design your perfect bespoke media wall. Enter your area dimensions below, choose your base, shelving, and fireplace options, and get an instant estimated quote. </p> </div> <div style="background: white; border-radius: 12px; box-shadow: 0 10px 30px rgba(0,0,0,0.05); overflow: hidden; border: 1px solid #e2e8f0; max-width: 900px; margin: 0 auto;"> <!-- Step 1: Dimensions --> <div style="padding: 2rem; border-bottom: 1px solid #e2e8f0; background: #fdfbf7;"> <label style="display: block; font-size: 0.95rem; font-weight: 700; color: #1e293b; margin-bottom: 1rem;">1. Enter Space & TV Dimensions</label> <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 1rem;"> <div> <label style="font-size:0.85rem; font-weight:600; color:#475569;">Total Width (mm)</label> <input type="number" id="mw-width" class="mw-dim" placeholder="e.g. 2400" value="2400" style="width:100%; padding:0.6rem; border:1px solid #cbd5e1; border-radius:4px;"> </div> <div> <label style="font-size:0.85rem; font-weight:600; color:#475569;">Total Height (mm)</label> <input type="number" id="mw-height" class="mw-dim" placeholder="e.g. 2400" value="2400" style="width:100%; padding:0.6rem; border:1px solid #cbd5e1; border-radius:4px;"> </div> <div> <label style="font-size:0.85rem; font-weight:600; color:#475569;">TV Size (inches)</label> <select id="mw-tvsize" class="mw-dim" style="width:100%; padding:0.6rem; border:1px solid #cbd5e1; border-radius:4px; background:white;"> <option value="43">43"</option> <option value="50">50"</option> <option value="55" selected>55"</option> <option value="65">65"</option> <option value="75">75"</option> <option value="85">85"</option> </select> </div> </div> </div> <!-- Step 2: Canvas --> <div style="padding: 2rem; background: #f8fafc; border-bottom: 1px dashed #cbd5e1; text-align: center;"> <div id="mw-visual-prompt" style="color: #64748b; font-weight: 500; margin-bottom: 1.5rem;"> Please enter your Area Height and Width above to generate your media wall visualization. </div> <!-- Dynamic Visual Canvas --> <div id="mw-visual-grid-container" style="display: flex; flex-direction: column; align-items: center; justify-content: center; width: 100%; overflow: hidden;"> <div id="mw-visual-grid" style="box-sizing: border-box; background: #f1f5f9; position: relative; border: 1px solid #94a3b8; width: 100%; max-width: 600px; height: 400px; transform-origin: top center; overflow: hidden; display: flex; flex-direction: column;"> <!-- JS Injects grid items here --> </div> </div> </div> <!-- Step 3: Finish & Style --> <div style="padding: 2rem; background: white;"> <label style="display: block; font-size: 0.95rem; font-weight: 700; color: #1e293b; margin-bottom: 1rem;">2. Base & Shelving Layout</label> <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1.5rem; margin-bottom: 2rem;"> <div> <label style="display: block; font-size: 0.9rem; font-weight: 600; color: #475569; margin-bottom: 0.5rem;">Base Units</label> <select id="mw-base-style" class="mw-cfg" style="width: 100%; padding: 0.75rem; border: 1px solid #e2e8f0; border-radius: 6px;"> <option value="cupboards">Cupboards (to the floor)</option> <option value="drawers">Drawers (to the floor)</option> <option value="floating_base">Floating Base Unit</option> <option value="side_cupboards">Cupboards (Sides of Fire Only)</option> </select> </div> <div> <label style="display: block; font-size: 0.9rem; font-weight: 600; color: #475569; margin-bottom: 0.5rem;">Left Shelves (Qty)</label> <input type="number" id="mw-shelves-left" class="mw-cfg mw-dim" value="4" min="0" max="6" style="width: 100%; padding: 0.75rem; border: 1px solid #e2e8f0; border-radius: 6px;"> </div> <div> <label style="display: block; font-size: 0.9rem; font-weight: 600; color: #475569; margin-bottom: 0.5rem;">Right Shelves (Qty)</label> <input type="number" id="mw-shelves-right" class="mw-cfg mw-dim" value="4" min="0" max="6" style="width: 100%; padding: 0.75rem; border: 1px solid #e2e8f0; border-radius: 6px;"> </div> <div> <label style="display: block; font-size: 0.9rem; font-weight: 600; color: #475569; margin-bottom: 0.5rem;">Shelf Area Backing</label> <select id="mw-shelf-backing" class="mw-cfg" style="width: 100%; padding: 0.75rem; border: 1px solid #e2e8f0; border-radius: 6px;"> <option value="plain">Plain Wall/Panel</option> <option value="batten">Batten Texture (+,%�80/1.2m)</option> </select> </div> </div> <label style="display: block; font-size: 0.95rem; font-weight: 700; color: #1e293b; margin-bottom: 1rem; border-top: 1px solid #e2e8f0; padding-top: 1.5rem;">3. Fireplace & Finish</label> <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1.5rem;"> <div> <label style="display: block; font-size: 0.9rem; font-weight: 600; color: #475569; margin-bottom: 0.5rem;">Fireplace Option</label> <select id="mw-fireplace" class="mw-cfg" style="width: 100%; padding: 0.75rem; border: 1px solid #e2e8f0; border-radius: 6px;"> <option value="none">No Fireplace</option> <option value="customer_supplied">Customer Supplied / Generic Void</option> <option value="generic_3_sided">Generic 3-Sided Panoramic</option> <optgroup label="Firez Panoramic Electric Fires (-30% Off Ticket)"> <option value="firez_900s">Firez 900 Slimline (RRP ,%�1,390)</option> <option value="firez_1250">Firez 1250 (RRP ,%�1,590)</option> <option value="firez_1500s">Firez 1500 Slimline (RRP ,%�1,649)</option> <option value="firez_1500">Firez 1500 (RRP ,%�1,690)</option> <option value="firez_1600">Firez 1600 (RRP ,%�1,990)</option> <option value="firez_1800s">Firez 1800 Slimline (RRP ,%�1,990)</option> <option value="firez_1800">Firez 1800 (RRP ,%�1,990)</option> <option value="firez_2200">Firez 2200 (RRP ,%�2,500)</option> </optgroup> </select> </div> <div> <label style="display: block; font-size: 0.9rem; font-weight: 600; color: #475569; margin-bottom: 0.5rem;">Material Finish Level</label> <select id="mw-finish-level" class="mw-cfg" style="width: 100%; padding: 0.75rem; border: 2px solid var(--color-accent); border-radius: 6px; background-color: #f8fafc; font-weight: 600; color: var(--color-accent); cursor: pointer; box-shadow: 0 2px 4px rgba(0,0,0,0.05);"> <option value="fully_finished">Fully Finished (Painted)</option> <option value="primed">Base Primed Only (-15% Materials)</option> <option value="unfinished">Unfinished / Bare MDF (-30% Materials)</option> </select> </div> </div> <!-- Step 4: Extras & Lighting --> <div style="padding: 2rem; border-top: 1px solid #e2e8f0; background: #fdfbf7;"> <label style="display: block; font-size: 0.95rem; font-weight: 700; color: #1e293b; margin-bottom: 1rem;">4. Extras & Lighting</label> <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1.5rem; margin-bottom: 1.5rem;"> <div> <label style="display: block; font-size: 0.9rem; font-weight: 600; color: #475569; margin-bottom: 0.5rem;">Wall Panel Texture</label> <select id="mw-texture" class="mw-cfg" style="width: 100%; padding: 0.75rem; border: 1px solid #e2e8f0; border-radius: 6px;"> <option value="plain">Plain Solid Finish</option> <option value="batten">Acoustic Batten Texture</option> </select> </div> <div> <label style="display: block; font-size: 0.9rem; font-weight: 600; color: #475569; margin-bottom: 0.5rem;">Shelf Above TV</label> <select id="mw-top-shelf" class="mw-cfg" style="width: 100%; padding: 0.75rem; border: 1px solid #e2e8f0; border-radius: 6px;"> <option value="none">No</option> <option value="yes">Yes (+,%�95)</option> </select> </div> </div> <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); gap: 1.5rem;"> <div> <label style="display: block; font-size: 0.9rem; font-weight: 600; color: #475569; margin-bottom: 0.5rem;">LED Spotlights (Qty)</label> <input type="number" id="mw-spots-qty" class="mw-dim" placeholder="0" value="0" min="0" style="width: 100%; padding: 0.75rem; border: 1px solid #e2e8f0; border-radius: 6px;"> </div> <div> <label style="display: block; font-size: 0.9rem; font-weight: 600; color: #475569; margin-bottom: 0.5rem;">LED Strips (2.4m Runs)</label> <input type="number" id="mw-strips-qty" class="mw-dim" placeholder="0" value="0" min="0" style="width: 100%; padding: 0.75rem; border: 1px solid #e2e8f0; border-radius: 6px;"> </div> </div> </div> </div> <!-- Results Block --> <div id="mw-result-box" style="display: none; background: #1e293b; color: white; padding: 2rem; border-top: 4px solid var(--color-accent);"> <div style="display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 1rem;"> <div> <div style="font-size: 0.85rem; text-transform: uppercase; letter-spacing: 1px; color: #94a3b8; font-weight: 700; margin-bottom: 0.5rem;"> Estimated Total Price</div> <div id="mw-total-price" style="font-size: 2.5rem; font-weight: 800; color: white;">,%�0.00 </div> </div> <div style="text-align: right; margin-left: auto;"> <!-- File upload for Formal Quote --> <div style="margin-bottom: 0.5rem; text-align: left;"> <label style="font-size: 0.75rem; color:#cbd5e1;">Attach Space Photos (Optional)</label> <input type="file" id="mw-lead-images" title="Attach Space Images" multiple accept="image/*" style="display:block; font-size:0.8rem; color: #cbd5e1; margin-top:2px;"> </div> <button id="mw-quote-btn" style="background: white; color: #1e293b; font-weight: 700; padding: 0.75rem 1.5rem; border-radius: 6px; border: none; cursor: pointer; transition: background 0.2s;"> Request Formal Quote </button> </div> </div> <div style="margin-top: 1.5rem; border-top: 1px solid #334155; padding-top: 1rem;"> <details style="cursor: pointer;"> <summary style="font-size: 0.85rem; color: #94a3b8; font-weight: 600; outline: none;">View Price Breakdown</summary> <div id="mw-price-breakdown" style="margin-top: 1rem; padding: 1rem; background: #0f172a; border-radius: 6px;"> <!-- Breakdowns injected by JS --> </div> </details> </div> </div> </div> </div> </section> <!-- E-Commerce Product Gallery Section --> <section class="products-section section-padding" style="background-color: var(--color-surface);"> <div class="container"> <div class="section-title text-center"> <h2>Our <span class="text-accent">Media Wall</span> Packages</h2> <p>Choose from our bespoke packages or contact us for a completely custom design in Cardiff and Caerphilly.</p> </div> <!-- Promotional Discount Banner --> <div style="background: linear-gradient(135deg, #1e293b, #0f172a); border: 1px solid var(--color-accent); border-radius: 12px; padding: 2rem; max-width: 800px; margin: 2rem auto 0; text-align: center; box-shadow: 0 10px 30px rgba(0,0,0,0.15);"> <div style="display: inline-block; background: var(--color-accent); color: white; padding: 0.25rem 1rem; border-radius: 20px; font-weight: bold; font-size: 0.9rem; margin-bottom: 1rem; letter-spacing: 1px; text-transform: uppercase;"> Limited Time Offer</div> <h3 style="color: white; margin-bottom: 0.5rem; font-size: 1.5rem;">Get <span class="text-accent" style="font-size: 1.8rem;">30% OFF</span> Any Firez Electric Fire</h3> <p style="color: #cbd5e1; margin-bottom: 1.5rem; font-size: 1.1rem;">Automatically applied when you choose one of our comprehensive media wall installation packages.</p> <a href="electric-fires.html" class="btn btn-primary" style="font-weight: 600;">View Eligible Fires</a> </div> <div class="grid" style="margin-top: 3rem;"> <!-- Product 1 --> <article class="card"> <div class="card-image" style="position: relative;"> <img src="assets/images/media-wall-standard.png" loading="lazy" alt="Standard Media Wall"> <div class="price-badge" style="position: absolute; top: 15px; right: 15px; background: var(--color-accent); color: white; padding: 0.5rem 1rem; border-radius: 20px; font-weight: bold; box-shadow: 0 4px 10px rgba(0,0,0,0.2);"> From �%�1,200</div> </div> <div class="card-content" style="text-align: center; display: flex; flex-direction: column; justify-content: space-between;"> <div> <h3>The Essential Built-In</h3> <p>Crisp painted finish, symmetrical shelving, and subtle LED backlighting. Perfect for hiding cables and creating a clean modern look.</p> </div> <a href="contact.html" class="btn btn-primary" style="width: 100%; margin-top: 1.5rem;">Enquire Now</a> </div> </article> <!-- Product 2 --> <article class="card"> <div class="card-image" style="position: relative;"> <img src="assets/images/media-wall-premium.png" loading="lazy" alt="Premium Media Wall with Fireplace"> <div class="price-badge" style="position: absolute; top: 15px; right: 15px; background: var(--color-accent); color: white; padding: 0.5rem 1rem; border-radius: 20px; font-weight: bold; box-shadow: 0 4px 10px rgba(0,0,0,0.2);"> From �%�1,850</div> </div> <div class="card-content" style="text-align: center; display: flex; flex-direction: column; justify-content: space-between;"> <div> <h3>The Ribbon Fireplace Suite</h3> <p>Our most popular luxury option. Includes a custom aperture for a panoramic electric fireplace with warm oak contrasting shelves.</p> </div> <a href="contact.html" class="btn btn-primary" style="width: 100%; margin-top: 1.5rem;">Enquire Now</a> </div> </article> <!-- Product 3 --> <article class="card"> <div class="card-image" style="position: relative;"> <img src="assets/images/media-wall-slatted.png" loading="lazy" alt="Slatted Wood Media Wall"> <div class="price-badge" style="position: absolute; top: 15px; right: 15px; background: var(--color-accent); color: white; padding: 0.5rem 1rem; border-radius: 20px; font-weight: bold; box-shadow: 0 4px 10px rgba(0,0,0,0.2);"> From �%�2,100</div> </div> <div class="card-content" style="text-align: center; display: flex; flex-direction: column; justify-content: space-between;"> <div> <h3>The Acoustic Slatted Wall</h3> <p>Premium modern carpentry featuring vertical acoustic wood slat panelling and a floating matte black base cabinet.</p> </div> <a href="contact.html" class="btn btn-primary" style="width: 100%; margin-top: 1.5rem;">Enquire Now</a> </div> </article> <!-- Product 4 --> <article class="card"> <div class="card-image" style="position: relative;"> <img src="assets/images/media-wall-floating.png" loading="lazy" alt="Minimalist Floating Media Unit"> <div class="price-badge" style="position: absolute; top: 15px; right: 15px; background: var(--color-accent); color: white; padding: 0.5rem 1rem; border-radius: 20px; font-weight: bold; box-shadow: 0 4px 10px rgba(0,0,0,0.2);"> From �%�950</div> </div> <div class="card-content" style="text-align: center; display: flex; flex-direction: column; justify-content: space-between;"> <div> <h3>The Minimalist Float</h3> <p>Sleek and highly modern floating media unit with no visible hardware. Ideal for smaller spaces and clean aesthetics.</p> </div> <a href="contact.html" class="btn btn-primary" style="width: 100%; margin-top: 1.5rem;">Enquire Now</a> </div> </article> <!-- Product 5 --> <article class="card"> <div class="card-image" style="position: relative;"> <img src="assets/images/media-wall-cinema.png" loading="lazy" alt="Full-Wall Home Cinema Unit"> <div class="price-badge" style="position: absolute; top: 15px; right: 15px; background: var(--color-accent); color: white; padding: 0.5rem 1rem; border-radius: 20px; font-weight: bold; box-shadow: 0 4px 10px rgba(0,0,0,0.2);"> From �%�3,200</div> </div> <div class="card-content" style="text-align: center; display: flex; flex-direction: column; justify-content: space-between;"> <div> <h3>The Cinematic Experience</h3> <p>A floor-to-ceiling marvel. Charcoal painted finish, extensive illuminated display shelving, and housing for 85" screens and soundbars.</p> </div> <a href="contact.html" class="btn btn-primary" style="width: 100%; margin-top: 1.5rem;">Enquire Now</a> </div> </article> <!-- Product 6 --> <article class="card"> <div class="card-image" style="position: relative;"> <img src="assets/images/media-wall-asymmetric.png" loading="lazy" alt="Asymmetric Modern Media Wall"> <div class="price-badge" style="position: absolute; top: 15px; right: 15px; background: var(--color-accent); color: white; padding: 0.5rem 1rem; border-radius: 20px; font-weight: bold; box-shadow: 0 4px 10px rgba(0,0,0,0.2);"> From �%�2,400</div> </div> <div class="card-content" style="text-align: center; display: flex; flex-direction: column; justify-content: space-between;"> <div> <h3>The Asymmetric Designer</h3> <p>High-end architectural design featuring off-center TV layouts, mixed textures like warm walnut veneer and painted panels.</p> </div> <a href="contact.html" class="btn btn-primary" style="width: 100%; margin-top: 1.5rem;">Enquire Now</a> </div> </article> </div> </div> </section> <!-- Review/Testimonial --> <section class="section-padding reviews-section"> <div class="container"> <div class="section-header"> <h2>Happy home Customers</h2> <p>Read what our clients say about our reliable maintenance services.</p> </div> <div class="grid"> <div class="review-card"> <div class="stars"> <i data-lucide="star" fill="currentColor"></i><i data-lucide="star" fill="currentColor"></i><i data-lucide="star" fill="currentColor"></i><i data-lucide="star" fill="currentColor"></i><i data-lucide="star" fill="currentColor"></i> </div> <p class="review-text">"The team completely transformed our overgrown home. They cleared everything, pruned the trees, and the new timber looks fantastic. Highly recommended!"</p> <p class="review-author">- Sarah Jenkins, Pontypridd</p> </div> <div class="review-card"> <div class="stars"> <i data-lucide="star" fill="currentColor"></i><i data-lucide="star" fill="currentColor"></i><i data-lucide="star" fill="currentColor"></i><i data-lucide="star" fill="currentColor"></i><i data-lucide="star" fill="currentColor"></i> </div> <p class="review-text">"Regular maintenance visits have made such a difference. I don't have time to mow the timber, so having Cardiff & Caerphilly Carpentry take care of it is a lifesaver."</p> <p class="review-author">- Mike Davies, Lisvane</p> </div> <div class="review-card"> <div class="stars"> <i data-lucide="star" fill="currentColor"></i><i data-lucide="star" fill="currentColor"></i><i data-lucide="star" fill="currentColor"></i><i data-lucide="star" fill="currentColor"></i><i data-lucide="star" fill="currentColor"></i> </div> <p class="review-text">"Excellent Wood Flooring cleaning service. It looks brand new again! They even re-sanded the joints. Very professional and tidy."</p> <p class="review-author">- Emma Williams, Newport</p> </div> </div> </div> </section> <!-- Firez Promotional Banner --> <section class="section-padding"> <div class="container"> <div class="emergency-banner" style="background: #1e293b; display: flex; flex-direction: column; align-items: center; text-align: center; gap: 1rem;"> <h2 style="color: white; margin-bottom: 0;">Looking for the perfect fire to match?</h2> <p style="color: #cbd5e1; font-size: 1.1rem; max-width: 600px; margin: 0 auto;">We are official suppliers and installers of <strong style="color: var(--color-accent);">Firez�%�</strong> electric fires. Discover ultra-realistic panoramic flame displays.</p> <a href="electric-fires.html" class="btn btn-accent" style="margin-top: 0.5rem; font-weight: 600;">View Firez Collection & Prices</a> </div> </div> </section> <!-- WhatsApp Float --> <a href="https://wa.me/447803083422?text=Hi%20Cardiff%20Carpenters,%20I%20would%20like%20a%20maintenance%20quote" class="whatsapp-float" target="_blank" rel="noopener noreferrer"> <i data-lucide="message-circle" fill="white" size="24"></i> <span>Chat on WhatsApp</span> </a> <!-- Footer --> <footer class="footer"> <div class="container"> <div class="footer-main"> <div class="footer-col"> <h3>Cardiff & Caerphilly Carpentry</h3> <p>Improving and maintaining properties for over 15 years.</p> <div style="margin-top: 1rem; display: flex; gap: 1rem; color: white;"> <i data-lucide="facebook"></i> <i data-lucide="instagram"></i> <i data-lucide="twitter"></i> </div> </div> <div class="footer-col"> <h3>Services</h3> <ul class="footer-links"> <li><a href="garden-rooms.html">Garden Rooms & Sheds</a></li> <li><a href="kitchen-fitting.html">Kitchen & Bathroom Fitting</a></li> <li><a href="bespoke-furniture.html">Bespoke Furniture</a></li> <li><a href="wall-paneling.html">Wall Paneling</a></li> <li><a href="wardrobes.html">Wardrobes & Joinery</a></li> <li><a href="media-walls.html">Media Walls</a></li> <li><a href="under-stairs-storage.html">Under Stairs Storage</a></li> <li><a href="alcove-storage.html">Alcove Storage</a></li> </ul> </div> <div class="footer-col"> <h3>Service Areas</h3> <ul class="footer-links"> <li><a href="cardiff.html">Cardiff</a></li> <li><a href="caerphilly.html">Caerphilly</a></li> <li><a href="newport.html">Newport</a></li> <li><a href="barry.html">Barry</a></li> <li><a href="penarth.html">Penarth</a></li> <li><a href="pontypridd.html">Pontypridd</a></li> <li><a href="radyr.html">Radyr</a></li> <li><a href="lisvane.html">Lisvane</a></li> <li><a href="llanishen.html">Llanishen</a></li> <li><a href="roath.html">Roath</a></li> <li><a href="whitchurch.html">Whitchurch</a></li> <li><a href="heath.html">Heath</a></li> <li><a href="birchgrove.html">Birchgrove</a></li> </ul> </div> <div class="footer-col"> <h3>Contact</h3> <ul class="footer-links"> <li><i data-lucide="phone" size="14"></i> 07803 083422</li> <li><i data-lucide="mail" size="14"></i> info@www.cardiffandcaerphillycarpentry.com</li> <li><i data-lucide="map-pin" size="14"></i> Cardiff, UK</li> </ul> </div> </div> <div class="copyright"> <p>&copy; 2024 Cardiff & Caerphilly Carpentry. All rights reserved.</p> </div> </div> </footer> <!-- Scripts --> <script> lucide.createIcons(); // Mobile Menu Toggle const mobileToggle = document.querySelector('.mobile-toggle'); const navLinks = document.querySelector('.nav-links'); mobileToggle.addEventListener('click', () => { navLinks.classList.toggle('active'); // Optional: Animate icon const icon = mobileToggle.querySelector('i'); if (navLinks.classList.contains('active')) { icon.setAttribute('data-lucide', 'x'); } else { icon.setAttribute('data-lucide', 'menu'); } lucide.createIcons(); }); </script> <!-- Mobile Navigation Dropdown Logic --> <script> document.addEventListener('DOMContentLoaded', () => { const dropdownToggles = document.querySelectorAll('.dropdown-toggle'); dropdownToggles.forEach(toggle => { toggle.addEventListener('click', (e) => { if (window.innerWidth <= 900) { const dropdown = toggle.closest('.dropdown'); // If it's not active, prevent navigation and just open it if (!dropdown.classList.contains('active')) { e.preventDefault(); // Close other dropdowns if any exist document.querySelectorAll('.dropdown').forEach(d => { if (d !== dropdown) d.classList.remove('active'); }); dropdown.classList.add('active'); } // If it IS active, the second click will navigate naturally } }); }); // Optional: Close dropdown if clicked outside on mobile (or desktop) document.addEventListener('click', (e) => { if (!e.target.closest('.dropdown')) { document.querySelectorAll('.dropdown').forEach(d => d.classList.remove('active')); } }); }); </script> <script src="js/media-wall-calculator.js"></script> <!-- n8n Chat Widget --> <link href="https://cdn.jsdelivr.net/npm/@n8n/chat/dist/style.css" rel="stylesheet" /> <script type="module"> import { createChat } from 'https://cdn.jsdelivr.net/npm/@n8n/chat/dist/chat.bundle.es.js'; window.openChatWindow = function() { const chatToggle = document.querySelector('.chat-window-toggle'); if(chatToggle) { chatToggle.click(); } }; createChat({ webhookUrl: 'https://cccgroup.app.n8n.cloud/webhook/tradevault-chat-widget-webhook/chat', initialMessages: [ "Hi there! ����", "I'm Cindy from Cardiff & Caerphilly Carpentry.", "Tell me what you're looking to build, and I'll see if I can get someone out to you to quote!" ] }); </script> </body> </html>