<!DOCTYPE html>
<html lang="en-AU">
<!--
    KAVERA TRADES TEMPLATE - 
    
    âœ… TRADE-SPECIFIC IMAGES - Configure via Cloudinary
    
    All images in this template now show REAL  work:
    - Copper pipes and pipe fittings
    - Trade-specific tools
    - Under-sink  installations
    - Pipe connections and valves
    - Bathroom/kitchen drain work
    - Emergency pipe repairs
    
    PRD Section 8.4 Compliance:
    âœ… No faces (all images face-detection safe)
    âœ… Trade-specific work only
    âœ… NO insulation, NO window cleaning, NO generic construction
    âœ… Shows actual pipes, fixtures, tools, installations
    âœ… Professional quality stock photography
    
    Every image answers: "Is this what a  does?" = YES
-->
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title> |   | Call </title>
    
    <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=Instrument+Sans:wght@400;500;600;700&family=Bricolage+Grotesque:wght@400;500;600;700;800&display=swap" rel="stylesheet">
    
    <style>
        :root {
            --black: #050505;
            --white: #ffffff;
            --cream: #FAF9F6;
            --accent: #FF3D00;
            --accent-dark: #E63600;
            --gray-100: #F5F5F5;
            --gray-200: #E5E5E5;
            --gray-400: #A3A3A3;
            --gray-500: #737373;
            --gray-600: #525252;
            --gray-800: #262626;
            --gray-900: #171717;
            --font-display: 'Bricolage Grotesque', sans-serif;
            --font-body: 'Instrument Sans', sans-serif;
        }

        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        html {
            scroll-behavior: smooth;
            font-size: 16px;
        }

        body {
            font-family: var(--font-body);
            background: var(--black);
            color: var(--white);
            overflow-x: hidden;
            -webkit-font-smoothing: antialiased;
        }

        ::selection {
            background: var(--accent);
            color: var(--white);
        }

        

        /* ============================================
           LOADER
           ============================================ */
        .loader {
            position: fixed;
            inset: 0;
            background: var(--black);
            z-index: 10000;
            display: flex;
            align-items: center;
            justify-content: center;
            transition: opacity 0.6s ease, visibility 0.6s ease;
        }

        .loader.hidden {
            opacity: 0;
            visibility: hidden;
        }

        .loader-text {
            font-family: var(--font-display);
            font-size: clamp(1.5rem, 4vw, 2.5rem);
            font-weight: 700;
            overflow: hidden;
        }

        .loader-text span {
            display: inline-block;
            animation: slideUp 0.6s ease forwards;
            opacity: 0;
            transform: translateY(100%);
        }

        @keyframes slideUp {
            to { opacity: 1; transform: translateY(0); }
        }

        .loader-text span:nth-child(1) { animation-delay: 0.1s; }
        .loader-text span:nth-child(2) { animation-delay: 0.15s; }
        .loader-text span:nth-child(3) { animation-delay: 0.2s; }
        .loader-text span:nth-child(4) { animation-delay: 0.25s; }
        .loader-text span:nth-child(5) { animation-delay: 0.3s; }
        .loader-text span:nth-child(6) { animation-delay: 0.35s; }
        .loader-text span:nth-child(7) { animation-delay: 0.4s; }
        .loader-text span:nth-child(8) { animation-delay: 0.45s; }

        /* ============================================
           FLOATING CALL BUTTON
           ============================================ */
        .floating-cta {
            position: fixed;
            bottom: 2rem;
            right: 2rem;
            z-index: 1000;
            display: flex;
            align-items: center;
            gap: 0.875rem;
            background: var(--accent);
            color: var(--white);
            padding: 1.125rem 1.75rem;
            font-weight: 600;
            font-size: 0.9375rem;
            text-decoration: none;
            overflow: hidden;
            transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1);
        }

        .floating-cta::before {
            content: '';
            position: absolute;
            inset: 0;
            background: var(--white);
            transform: translateY(100%);
            transition: transform 0.4s cubic-bezier(0.16, 1, 0.3, 1);
        }

        .floating-cta:hover::before {
            transform: translateY(0);
        }

        .floating-cta:hover {
            color: var(--accent);
        }

        .floating-cta span, .floating-cta svg {
            position: relative;
            z-index: 1;
        }

        .floating-cta svg {
            width: 18px;
            height: 18px;
        }

        /* ============================================
           NAVIGATION
           ============================================ */
        .nav {
            position: fixed;
            top: 0;
            left: 0;
            right: 0;
            z-index: 100;
            padding: 1.25rem 3rem;
            display: flex;
            justify-content: space-between;
            align-items: center;
            background: rgba(5, 5, 5, 0.8);
            backdrop-filter: blur(20px);
            border-bottom: 1px solid rgba(255, 255, 255, 0.05);
        }

        .nav-logo {
            font-family: var(--font-display);
            font-weight: 700;
            font-size: 1rem;
            letter-spacing: -0.02em;
            color: var(--white);
            text-decoration: none;
        }

        .nav-menu {
            display: flex;
            align-items: center;
            gap: 2.5rem;
        }

        .nav-links {
            display: flex;
            align-items: center;
            gap: 2rem;
            list-style: none;
        }

        .nav-link {
            font-size: 0.8125rem;
            font-weight: 500;
            color: var(--gray-400);
            text-decoration: none;
            letter-spacing: 0.02em;
            transition: color 0.3s ease;
            position: relative;
        }

        .nav-link::after {
            content: '';
            position: absolute;
            bottom: -4px;
            left: 0;
            width: 0;
            height: 1px;
            background: var(--accent);
            transition: width 0.3s ease;
        }

        .nav-link:hover {
            color: var(--white);
        }

        .nav-link:hover::after {
            width: 100%;
        }

        .nav-cta {
            display: flex;
            align-items: center;
            gap: 0.5rem;
            font-size: 0.8125rem;
            font-weight: 600;
            color: var(--white);
            background: var(--accent);
            text-decoration: none;
            padding: 0.75rem 1.25rem;
            transition: all 0.3s ease;
        }

        .nav-cta:hover {
            background: var(--white);
            color: var(--accent);
        }

        .nav-cta svg {
            width: 14px;
            height: 14px;
        }

        /* Mobile menu toggle */
        .nav-toggle {
            display: none;
            flex-direction: column;
            justify-content: center;
            gap: 5px;
            width: 28px;
            height: 28px;
            background: none;
            border: none;
            cursor: pointer;
            padding: 0;
        }

        .nav-toggle span {
            display: block;
            width: 100%;
            height: 2px;
            background: var(--white);
            transition: all 0.3s ease;
        }

        .nav-toggle.active span:nth-child(1) {
            transform: rotate(45deg) translate(5px, 5px);
        }

        .nav-toggle.active span:nth-child(2) {
            opacity: 0;
        }

        .nav-toggle.active span:nth-child(3) {
            transform: rotate(-45deg) translate(5px, -5px);
        }

        /* Mobile menu */
        .nav-mobile {
            display: none;
            position: fixed;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            background: var(--black);
            z-index: 99;
            padding: 8rem 2rem 2rem;
            opacity: 0;
            visibility: hidden;
            transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1);
        }

        .nav-mobile.active {
            opacity: 1;
            visibility: visible;
        }

        .nav-mobile-links {
            list-style: none;
            display: flex;
            flex-direction: column;
            gap: 0.5rem;
        }

        .nav-mobile-link {
            font-family: var(--font-display);
            font-size: 2.5rem;
            font-weight: 700;
            color: var(--white);
            text-decoration: none;
            display: block;
            padding: 0.75rem 0;
            border-bottom: 1px solid var(--gray-800);
            transition: color 0.3s ease, padding-left 0.3s ease;
        }

        .nav-mobile-link:hover {
            color: var(--accent);
            padding-left: 1rem;
        }

        .nav-mobile-cta {
            display: inline-flex;
            align-items: center;
            gap: 0.75rem;
            margin-top: 2rem;
            font-family: var(--font-display);
            font-size: 1.25rem;
            font-weight: 700;
            color: var(--black);
            background: var(--accent);
            padding: 1rem 2rem;
            text-decoration: none;
        }

        .nav-mobile-cta svg {
            width: 20px;
            height: 20px;
        }

        @media (max-width: 900px) {
            .nav-menu {
                display: none;
            }

            .nav-toggle {
                display: flex;
            }

            .nav-mobile {
                display: block;
            }
        }

        @media (max-width: 768px) {
            .nav {
                padding: 1rem 1.5rem;
            }
        }

        /* ============================================
           HERO - WITH PHOTO
           ============================================ */
        .hero {
            min-height: 100vh;
            display: flex;
            flex-direction: column;
            position: relative;
            overflow: hidden;
        }

        .hero-bg {
            position: absolute;
            inset: 0;
            z-index: 0;
        }

        .hero-bg img {
            width: 100%;
            height: 100%;
            object-fit: cover;
            object-position: center;
        }

        .hero-bg::after {
            content: '';
            position: absolute;
            inset: 0;
            background: linear-gradient(
                to bottom,
                rgba(5, 5, 5, 0.5) 0%,
                rgba(5, 5, 5, 0.6) 50%,
                rgba(5, 5, 5, 0.85) 100%
            );
        }

        /* Grain overlay */
        .hero::before {
            content: '';
            position: absolute;
            inset: 0;
            background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
            opacity: 0.03;
            pointer-events: none;
            z-index: 3;
        }

        .hero-content {
            flex: 1;
            display: flex;
            flex-direction: column;
            justify-content: center;
            padding: 8rem 3rem 4rem;
            position: relative;
            z-index: 2;
        }

        .hero-eyebrow {
            display: inline-flex;
            align-items: center;
            gap: 1rem;
            margin-bottom: 2rem;
        }

        .hero-badge {
            display: inline-flex;
            align-items: center;
            gap: 0.5rem;
            background: rgba(255, 61, 0, 0.2);
            border: 1px solid rgba(255, 61, 0, 0.4);
            padding: 0.5rem 1rem;
            font-size: 0.75rem;
            font-weight: 600;
            letter-spacing: 0.1em;
            text-transform: uppercase;
            backdrop-filter: blur(10px);
        }

        .hero-badge .dot {
            width: 6px;
            height: 6px;
            background: var(--accent);
            border-radius: 50%;
            animation: pulse 2s infinite;
        }

        @keyframes pulse {
            0%, 100% { opacity: 1; }
            50% { opacity: 0.4; }
        }

        .hero-title {
            font-family: var(--font-display);
            font-size: clamp(4rem, 15vw, 14rem);
            font-weight: 800;
            line-height: 0.9;
            letter-spacing: -0.04em;
            margin-bottom: 2rem;
        }

        .hero-title-line {
            display: block;
            overflow: visible;
            padding-bottom: 0.1em;
        }

        .hero-title-line span {
            display: inline-block;
            transform: translateY(100%);
            animation: revealText 1s cubic-bezier(0.16, 1, 0.3, 1) forwards;
        }

        /*/* Pipe outline style for trade name text */
        .hero-title-line:nth-child(2) span {
            animation-delay: 0.15s;
            -webkit-text-stroke: 3px var(--white);
            color: transparent;
            filter: drop-shadow(0 0 1px rgba(255,255,255,0.5));
        }

        @keyframes revealText {
            to { transform: translateY(0); }
        }

        .hero-tagline {
            font-size: clamp(1.125rem, 2vw, 1.375rem);
            color: var(--gray-400);
            max-width: 480px;
            line-height: 1.6;
            margin-bottom: 3rem;
        }

        .hero-cta {
            display: inline-flex;
            align-items: center;
            gap: 1rem;
            background: var(--white);
            color: var(--black);
            padding: 1.25rem 2rem;
            font-weight: 600;
            font-size: 0.9375rem;
            text-decoration: none;
            position: relative;
            overflow: hidden;
            transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1);
        }

        .hero-cta::before {
            content: '';
            position: absolute;
            inset: 0;
            background: var(--accent);
            transform: scaleX(0);
            transform-origin: left;
            transition: transform 0.4s cubic-bezier(0.16, 1, 0.3, 1);
        }

        .hero-cta:hover::before {
            transform: scaleX(1);
        }

        .hero-cta:hover {
            color: var(--white);
        }

        .hero-cta span, .hero-cta svg {
            position: relative;
            z-index: 1;
        }

        .hero-cta svg {
            width: 20px;
            height: 20px;
            transition: transform 0.3s ease;
        }

        .hero-cta:hover svg {
            transform: translateX(4px);
        }

        .hero-bottom {
            display: flex;
            justify-content: center;
            align-items: end;
            padding: 2rem 3rem;
            position: relative;
            z-index: 2;
        }

        .hero-stats {
            display: flex;
            justify-content: center;
            gap: 5rem;
            width: 100%;
            max-width: 700px;
        }

        .stat {
            position: relative;
            text-align: center;
            flex: 1;
        }

        .stat::before {
            content: '';
            position: absolute;
            left: -2.5rem;
            top: 0;
            bottom: 0;
            width: 1px;
            background: linear-gradient(to bottom, var(--accent), transparent);
        }

        .stat:first-child::before {
            display: none;
        }

        .stat-value {
            font-family: var(--font-display);
            font-size: 3rem;
            font-weight: 800;
            line-height: 1;
            letter-spacing: -0.02em;
        }

        .stat-label {
            font-size: 0.75rem;
            font-weight: 500;
            letter-spacing: 0.1em;
            text-transform: uppercase;
            color: var(--gray-500);
            margin-top: 0.5rem;
        }

        .hero-scroll {
            display: flex;
            flex-direction: column;
            align-items: center;
            gap: 1rem;
        }

        .hero-scroll span {
            font-size: 0.625rem;
            font-weight: 600;
            letter-spacing: 0.3em;
            text-transform: uppercase;
            color: var(--gray-500);
            writing-mode: vertical-rl;
        }

        .scroll-indicator {
            width: 1px;
            height: 80px;
            background: linear-gradient(to bottom, var(--accent), transparent);
            position: relative;
            overflow: hidden;
        }

        .scroll-indicator::before {
            content: '';
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            height: 20px;
            background: var(--white);
            animation: scrollDown 1.5s ease infinite;
        }

        @keyframes scrollDown {
            0% { transform: translateY(-100%); }
            100% { transform: translateY(400%); }
        }

        /* ============================================
           MARQUEE
           ============================================ */
        .marquee {
            background: var(--accent);
            padding: 1.25rem 0;
            overflow: hidden;
            position: relative;
        }

        .marquee-track {
            display: flex;
            animation: marquee 25s linear infinite;
        }

        .marquee-content {
            display: flex;
            align-items: center;
            gap: 2rem;
            padding: 0 1rem;
            flex-shrink: 0;
        }

        .marquee-item {
            display: flex;
            align-items: center;
            gap: 2rem;
            font-family: var(--font-display);
            font-weight: 700;
            font-size: 1rem;
            letter-spacing: 0.05em;
            text-transform: uppercase;
            white-space: nowrap;
        }

        .marquee-item svg {
            width: 20px;
            height: 20px;
            fill: var(--black);
        }

        @keyframes marquee {
            0% { transform: translateX(0); }
            100% { transform: translateX(-50%); }
        }

        /* ============================================
           WORK GALLERY
           ============================================ */
        .work {
            background: var(--black);
            padding: 8rem 0;
        }

        .work-header {
            padding: 0 3rem;
            margin-bottom: 4rem;
            display: flex;
            justify-content: space-between;
            align-items: end;
        }

        .work-title {
            font-family: var(--font-display);
            font-size: clamp(2.5rem, 6vw, 4rem);
            font-weight: 800;
            line-height: 0.9;
            letter-spacing: -0.03em;
        }

        .work-subtitle {
            font-size: 1rem;
            color: var(--gray-500);
            max-width: 300px;
            text-align: right;
        }

        .work-grid {
            display: grid;
            grid-template-columns: repeat(3, 1fr);
            gap: 1rem;
        }

        .work-item {
            aspect-ratio: 4/3;
            overflow: hidden;
            position: relative;
        }

        .work-item img {
            width: 100%;
            height: 100%;
            object-fit: cover;
            transition: transform 0.6s cubic-bezier(0.16, 1, 0.3, 1);
        }

        .work-item:hover img {
            transform: scale(1.1);
        }

        .work-item::after {
            content: '';
            position: absolute;
            inset: 0;
            background: linear-gradient(to top, rgba(5, 5, 5, 0.6), transparent);
            opacity: 0;
            transition: opacity 0.4s ease;
        }

        .work-item:hover::after {
            opacity: 1;
        }

        /* ============================================
           SERVICES - BENTO GRID
           ============================================ */
        .services {
            background: var(--cream);
            color: var(--black);
            padding: 10rem 3rem;
        }

        .services-header {
            display: flex;
            justify-content: space-between;
            align-items: end;
            margin-bottom: 5rem;
            gap: 4rem;
        }

        .services-title {
            font-family: var(--font-display);
            font-size: clamp(3.5rem, 10vw, 8rem);
            font-weight: 800;
            line-height: 0.9;
            letter-spacing: -0.03em;
        }

        .services-intro {
            max-width: 400px;
            font-size: 1.125rem;
            line-height: 1.7;
            color: var(--gray-600);
        }

        .bento-grid {
            display: grid;
            grid-template-columns: repeat(12, 1fr);
            grid-template-rows: repeat(2, minmax(280px, auto));
            gap: 1.5rem;
        }

        .bento-item {
            background: var(--white);
            padding: 2.5rem;
            position: relative;
            overflow: hidden;
            display: flex;
            flex-direction: column;
            justify-content: center;
            transition: all 0.5s cubic-bezier(0.16, 1, 0.3, 1);
            min-height: 320px;
        }

        .bento-item::before {
            content: '';
            position: absolute;
            inset: 0;
            background: var(--black);
            transform: scaleY(0);
            transform-origin: bottom;
            transition: transform 0.5s cubic-bezier(0.16, 1, 0.3, 1);
        }

        .bento-item:hover::before {
            transform: scaleY(1);
        }

        .bento-item:hover {
            color: var(--white);
        }

        .bento-item:hover .bento-number {
            color: var(--accent);
        }

        .bento-item > * {
            position: relative;
            z-index: 1;
        }

        .bento-item:nth-child(1) { grid-column: span 5; }
        .bento-item:nth-child(2) { grid-column: span 4; }
        .bento-item:nth-child(3) { grid-column: span 3; }
        .bento-item:nth-child(4) { grid-column: span 3; }
        .bento-item:nth-child(5) { grid-column: span 4; }
        .bento-item:nth-child(6) { grid-column: span 5; }

        /* Photo feature card */
        .bento-item.with-photo {
            padding: 0;
            background: transparent;
        }

        .bento-item.with-photo::before {
            display: none;
        }

        .bento-item.with-photo .bento-photo {
            position: absolute;
            inset: 0;
        }

        .bento-item.with-photo .bento-photo img {
            width: 100%;
            height: 100%;
            object-fit: cover;
            transition: transform 0.6s cubic-bezier(0.16, 1, 0.3, 1);
        }

        .bento-item.with-photo:hover .bento-photo img {
            transform: scale(1.05);
        }

        .bento-item.with-photo .bento-photo::after {
            content: '';
            position: absolute;
            inset: 0;
            background: linear-gradient(to top, rgba(5, 5, 5, 0.9), rgba(5, 5, 5, 0.3));
        }

        .bento-item.with-photo .bento-content {
            margin-top: 0;
            position: absolute;
            top: 50%;
            left: 0;
            right: 0;
            transform: translateY(-50%);
            padding: 2.5rem;
            color: var(--white);
        }

        .bento-item.with-photo .bento-number {
            left: 2.5rem;
        }

        .bento-item.with-photo .bento-content p {
            color: var(--gray-400);
        }

        .bento-number {
            font-family: var(--font-display);
            font-size: 0.875rem;
            font-weight: 700;
            color: var(--accent);
            position: absolute;
            top: 2rem;
            left: 2.5rem;
            z-index: 2;
            transition: color 0.4s ease;
        }

        .bento-content {
            margin-top: 0;
        }

        .bento-item:nth-child(5) .bento-content {
            margin-top: -1.5rem;
        }

        .bento-content h3 {
            font-family: var(--font-display);
            font-size: 1.75rem;
            font-weight: 700;
            letter-spacing: -0.02em;
            margin-bottom: 0.75rem;
        }

        .bento-content p {
            font-size: 0.9375rem;
            line-height: 1.6;
            color: var(--gray-600);
            transition: color 0.4s ease;
        }

        .bento-item:hover .bento-content p {
            color: var(--gray-400);
        }

        /* ============================================
           REVIEWS
           ============================================ */
        .reviews {
            background: var(--black);
            padding: 10rem 3rem;
            position: relative;
            overflow: hidden;
        }

        .reviews::before {
            content: '"';
            position: absolute;
            top: 5%;
            right: 5%;
            font-family: var(--font-display);
            font-size: 50vw;
            font-weight: 800;
            color: rgba(255, 255, 255, 0.02);
            line-height: 0.8;
            pointer-events: none;
        }

        .reviews-header {
            display: flex;
            justify-content: space-between;
            align-items: end;
            margin-bottom: 5rem;
        }

        .reviews-title {
            font-family: var(--font-display);
            font-size: clamp(3rem, 8vw, 6rem);
            font-weight: 800;
            line-height: 0.9;
            letter-spacing: -0.03em;
        }

        .reviews-rating {
            display: flex;
            flex-direction: column;
            align-items: end;
            gap: 0.5rem;
        }

        .reviews-stars {
            display: flex;
            gap: 0.25rem;
        }

        .reviews-stars svg {
            width: 24px;
            height: 24px;
            fill: var(--accent);
        }

        .reviews-count {
            font-size: 0.875rem;
            color: var(--gray-400);
        }

        .reviews-grid {
            display: grid;
            grid-template-columns: repeat(3, 1fr);
            gap: 2rem;
        }

        .review-card {
            background: var(--gray-900);
            border: 1px solid var(--gray-800);
            padding: 3rem;
            position: relative;
            transition: all 0.4s ease;
        }

        .review-card:hover {
            border-color: var(--accent);
            transform: translateY(-4px);
        }

        .review-card::before {
            content: '';
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            height: 3px;
            background: linear-gradient(90deg, var(--accent), transparent);
        }

        .review-text {
            font-size: 1.125rem;
            line-height: 1.7;
            margin-bottom: 2.5rem;
            color: var(--gray-100);
        }

        .review-author {
            display: flex;
            align-items: center;
            gap: 1rem;
        }

        .review-avatar {
            width: 56px;
            height: 56px;
            background: linear-gradient(135deg, var(--accent), var(--accent-dark));
            display: flex;
            align-items: center;
            justify-content: center;
            font-family: var(--font-display);
            font-weight: 800;
            font-size: 1.25rem;
        }

        .review-name {
            font-weight: 700;
            font-size: 1.0625rem;
            margin-bottom: 0.125rem;
        }

        .review-location {
            font-size: 0.875rem;
            color: var(--gray-500);
        }

        /* ============================================
           HYBRID CTA - CALL + QUICK QUOTE
           ============================================ */
        .hybrid-cta {
            background: var(--gray-900);
            padding: 8rem 3rem;
            position: relative;
            overflow: hidden;
        }

        .hybrid-cta::before {
            content: '';
            position: absolute;
            inset: 0;
            background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
            opacity: 0.02;
            pointer-events: none;
        }

        .hybrid-cta-container {
            max-width: 1200px;
            margin: 0 auto;
            position: relative;
            z-index: 1;
        }

        .hybrid-cta-grid {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 4rem;
            align-items: center;
        }

        /* Left side - Primary phone CTA */
        .hybrid-cta-primary {
            padding-right: 3rem;
            border-right: 1px solid var(--gray-800);
        }

        .hybrid-cta-eyebrow {
            font-size: 0.75rem;
            font-weight: 600;
            letter-spacing: 0.2em;
            text-transform: uppercase;
            color: var(--accent);
            margin-bottom: 2rem;
            display: block;
        }

        .hybrid-cta-title {
            font-family: var(--font-display);
            font-size: clamp(2.5rem, 6vw, 4.5rem);
            font-weight: 800;
            line-height: 0.95;
            letter-spacing: -0.03em;
            margin-bottom: 1.5rem;
        }

        .hybrid-cta-subtitle {
            font-size: 1.125rem;
            line-height: 1.6;
            color: var(--gray-400);
            margin-bottom: 3rem;
        }

        .hybrid-cta-phone {
            display: inline-flex;
            align-items: center;
            gap: 1.25rem;
            background: var(--accent);
            color: var(--white);
            padding: 1.75rem 3rem;
            font-family: var(--font-display);
            font-size: clamp(1.75rem, 4vw, 2.25rem);
            font-weight: 800;
            letter-spacing: -0.02em;
            text-decoration: none;
            position: relative;
            overflow: hidden;
            transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1);
        }

        .hybrid-cta-phone::before {
            content: '';
            position: absolute;
            inset: 0;
            background: var(--white);
            transform: translateX(-100%);
            transition: transform 0.4s cubic-bezier(0.16, 1, 0.3, 1);
        }

        .hybrid-cta-phone:hover::before {
            transform: translateX(0);
        }

        .hybrid-cta-phone:hover {
            color: var(--accent);
        }

        .hybrid-cta-phone span,
        .hybrid-cta-phone svg {
            position: relative;
            z-index: 1;
        }

        .hybrid-cta-phone svg {
            width: 32px;
            height: 32px;
        }

        .hybrid-cta-details {
            display: flex;
            gap: 3rem;
            margin-top: 2.5rem;
        }

        .hybrid-cta-detail {
            display: flex;
            align-items: center;
            gap: 0.75rem;
        }

        .hybrid-cta-detail-icon {
            width: 44px;
            height: 44px;
            background: rgba(255, 61, 0, 0.15);
            border: 1px solid rgba(255, 61, 0, 0.3);
            display: flex;
            align-items: center;
            justify-content: center;
            flex-shrink: 0;
        }

        .hybrid-cta-detail-icon svg {
            width: 20px;
            height: 20px;
            stroke: var(--accent);
        }

        .hybrid-cta-detail-text {
            display: flex;
            flex-direction: column;
        }

        .hybrid-cta-detail-label {
            font-size: 0.75rem;
            color: var(--gray-500);
            margin-bottom: 0.125rem;
        }

        .hybrid-cta-detail-value {
            font-weight: 600;
            font-size: 0.9375rem;
        }

        /* Right side - Quick quote form */
        .hybrid-cta-secondary {
            padding-left: 3rem;
        }

        .hybrid-cta-form-header {
            margin-bottom: 2rem;
        }

        .hybrid-cta-form-title {
            font-family: var(--font-display);
            font-size: 1.75rem;
            font-weight: 700;
            margin-bottom: 0.5rem;
        }

        .hybrid-cta-form-subtitle {
            font-size: 0.9375rem;
            color: var(--gray-500);
        }

        .quick-quote-form {
            display: flex;
            flex-direction: column;
            gap: 1.25rem;
        }

        .form-field {
            display: flex;
            flex-direction: column;
            gap: 0.5rem;
        }

        .form-field label {
            font-size: 0.8125rem;
            font-weight: 600;
            color: var(--gray-400);
        }

        .form-field input,
        .form-field select {
            background: rgba(255, 255, 255, 0.05);
            border: 1px solid var(--gray-800);
            color: var(--white);
            padding: 1rem 1.125rem;
            font-family: var(--font-body);
            font-size: 0.9375rem;
            transition: all 0.3s ease;
            outline: none;
        }

        .form-field input:focus,
        .form-field select:focus {
            border-color: var(--accent);
            background: rgba(255, 255, 255, 0.08);
        }

        .form-field select {
            cursor: pointer;
            appearance: none;
            background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23ffffff' d='M6 9L1 4h10z'/%3E%3C/svg%3E");
            background-repeat: no-repeat;
            background-position: right 1.125rem center;
            padding-right: 2.5rem;
        }

        .form-submit {
            display: inline-flex;
            align-items: center;
            justify-content: center;
            gap: 0.75rem;
            background: var(--white);
            color: var(--black);
            border: none;
            padding: 1.125rem 2rem;
            font-family: var(--font-body);
            font-weight: 700;
            font-size: 0.9375rem;
            cursor: pointer;
            position: relative;
            overflow: hidden;
            transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1);
            margin-top: 0.5rem;
        }

        .form-submit::before {
            content: '';
            position: absolute;
            inset: 0;
            background: var(--accent);
            transform: translateX(-100%);
            transition: transform 0.4s cubic-bezier(0.16, 1, 0.3, 1);
        }

        .form-submit:hover::before {
            transform: translateX(0);
        }

        .form-submit:hover {
            color: var(--white);
        }

        .form-submit span,
        .form-submit svg {
            position: relative;
            z-index: 1;
        }

        .form-submit svg {
            width: 18px;
            height: 18px;
        }

        .form-disclaimer {
            font-size: 0.75rem;
            line-height: 1.5;
            color: var(--gray-600);
        }

        /* ============================================
           ABOUT - WITH PHOTO
           ============================================ */
        .about {
            display: grid;
            grid-template-columns: 1fr 1fr;
            min-height: 100vh;
        }

        .about-visual {
            position: relative;
            overflow: hidden;
        }

        .about-visual img {
            width: 100%;
            height: 100%;
            object-fit: cover;
        }

        .about-visual::after {
            content: '';
            position: absolute;
            inset: 0;
            background: linear-gradient(
                to right,
                transparent 0%,
                rgba(5, 5, 5, 0.3) 100%
            );
        }

        .about-overlay {
            position: absolute;
            bottom: 4rem;
            left: 4rem;
            z-index: 2;
        }

        .about-number {
            font-family: var(--font-display);
            font-size: clamp(8rem, 20vw, 16rem);
            font-weight: 800;
            line-height: 0.8;
            color: var(--white);
            text-shadow: 0 4px 60px rgba(0, 0, 0, 0.5);
        }

        .about-number-label {
            font-size: 0.75rem;
            font-weight: 600;
            letter-spacing: 0.3em;
            text-transform: uppercase;
            color: var(--accent);
        }

        .about-content {
            background: var(--cream);
            color: var(--black);
            padding: 6rem 5rem;
            display: flex;
            flex-direction: column;
            justify-content: center;
        }

        .about-eyebrow {
            font-size: 0.75rem;
            font-weight: 600;
            letter-spacing: 0.2em;
            text-transform: uppercase;
            color: var(--accent);
            margin-bottom: 2rem;
        }

        .about-content h2 {
            font-family: var(--font-display);
            font-size: clamp(2.5rem, 5vw, 4rem);
            font-weight: 800;
            line-height: 1;
            letter-spacing: -0.03em;
            margin-bottom: 2rem;
        }

        .about-content p {
            font-size: 1.125rem;
            line-height: 1.8;
            color: var(--gray-600);
            margin-bottom: 1.5rem;
            max-width: 480px;
        }

        .about-features {
            display: grid;
            grid-template-columns: 1fr 1fr;
            gap: 1.25rem;
            margin-top: 2.5rem;
        }

        .about-feature {
            display: flex;
            align-items: center;
            gap: 1rem;
            font-weight: 600;
            font-size: 0.9375rem;
        }

        .about-feature-icon {
            width: 40px;
            height: 40px;
            background: var(--black);
            color: var(--white);
            display: flex;
            align-items: center;
            justify-content: center;
            flex-shrink: 0;
        }

        .about-feature-icon svg {
            width: 18px;
            height: 18px;
        }

        /* ============================================
           FOOTER
           ============================================ */
        .footer {
            background: var(--black);
            padding: 2.5rem 3rem;
            display: flex;
            justify-content: space-between;
            align-items: center;
            border-top: 1px solid var(--gray-800);
        }

        .footer-brand {
            font-family: var(--font-display);
            font-weight: 700;
            font-size: 0.875rem;
        }

        .footer-preview {
            display: flex;
            align-items: center;
            gap: 0.75rem;
            font-size: 0.75rem;
            color: var(--gray-500);
        }

        .footer-preview a {
            color: var(--accent);
            text-decoration: none;
        }

        .footer-preview a:hover {
            color: var(--white);
        }

        /* ============================================
           RESPONSIVE
           ============================================ */
        @media (max-width: 1024px) {
            .work-grid {
                grid-template-columns: repeat(2, 1fr);
            }
            
            .bento-grid {
                grid-template-columns: repeat(6, 1fr);
            }
            
            .bento-item:nth-child(1) { grid-column: span 6; }
            .bento-item:nth-child(2) { grid-column: span 3; }
            .bento-item:nth-child(3) { grid-column: span 3; }
            .bento-item:nth-child(4) { grid-column: span 3; }
            .bento-item:nth-child(5) { grid-column: span 3; }
            .bento-item:nth-child(6) { grid-column: span 6; }
            
            .reviews-grid {
                grid-template-columns: 1fr;
            }
            
            .about {
                grid-template-columns: 1fr;
            }
            
            .about-visual {
                min-height: 60vh;
            }
            
            .about-content {
                padding: 4rem 2rem;
            }

            .hybrid-cta-grid {
                grid-template-columns: 1fr;
                gap: 4rem;
            }

            .hybrid-cta-primary {
                padding-right: 0;
                padding-bottom: 3rem;
                border-right: none;
                border-bottom: 1px solid var(--gray-800);
            }

            .hybrid-cta-secondary {
                padding-left: 0;
            }
        }

        @media (max-width: 768px) {
            .nav,
            .hero-content,
            .hero-bottom,
            .work-header,
            .services,
            .reviews,
            .hybrid-cta {
                padding-left: 1.5rem;
                padding-right: 1.5rem;
            }

            .services,
            .reviews,
            .hybrid-cta,
            .work {
                padding-top: 5rem;
                padding-bottom: 5rem;
            }
            
            .hero-stats {
                flex-wrap: wrap;
                gap: 2rem;
                justify-content: center;
            }
            
            .hero-bottom {
                align-items: center;
            }
            
            .stat::before {
                display: none;
            }
            
            .work-header {
                flex-direction: column;
                align-items: start;
                gap: 1rem;
            }
            
            .work-subtitle {
                text-align: left;
            }
            
            .work-grid {
                grid-template-columns: 1fr;
            }
            
            .services-header {
                flex-direction: column;
                align-items: start;
                gap: 2rem;
            }
            
            .bento-grid {
                grid-template-columns: 1fr;
            }
            
            .bento-item {
                grid-column: span 1 !important;
            }
            
            .reviews-header {
                flex-direction: column;
                align-items: start;
                gap: 2rem;
            }
            
            .reviews-rating {
                align-items: start;
            }
            
            .about-overlay {
                bottom: 2rem;
                left: 2rem;
            z-index: 2;
            }
            
            .about-features {
                grid-template-columns: 1fr;
            }

            .hybrid-cta-details {
                flex-direction: column;
                gap: 1.5rem;
            }
            
            .footer {
                flex-direction: column;
                gap: 1rem;
                text-align: center;
            }
            
            .floating-cta {
                bottom: 1rem;
                right: 1rem;
                left: 1rem;
                justify-content: center;
            }
        }

        /* ============================================
           ANIMATIONS
           ============================================ */
        .reveal {
            opacity: 0;
            transform: translateY(60px);
            transition: all 1s cubic-bezier(0.16, 1, 0.3, 1);
        }

        .reveal.visible {
            opacity: 1;
            transform: translateY(0);
        }

        .reveal-delay-1 { transition-delay: 0.1s; }
        .reveal-delay-2 { transition-delay: 0.2s; }
        .reveal-delay-3 { transition-delay: 0.3s; }
        .reveal-delay-4 { transition-delay: 0.4s; }
    </style>
</head>
<body>
    <!-- Loader -->
    <div class="loader">
        <div class="loader-text">
            {{loader_letters}}
        </div>
    </div>

    
    <!-- Floating CTA -->
    <a href="tel:" class="floating-cta">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
            <path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/>
        </svg>
        <span>Call Now</span>
    </a>

    <!-- Mobile Menu Overlay -->
    <div class="nav-mobile" id="navMobile">
        <ul class="nav-mobile-links">
            <li><a href="#services" class="nav-mobile-link">Services</a></li>
            <li><a href="#work" class="nav-mobile-link">Our Work</a></li>
            <li><a href="#reviews" class="nav-mobile-link">Reviews</a></li>
            <li><a href="#contact" class="nav-mobile-link">Contact</a></li>
            <li><a href="#about" class="nav-mobile-link">About</a></li>
        </ul>
        <a href="tel:" class="nav-mobile-cta">
            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
                <path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/>
            </svg>
            
        </a>
    </div>

    <!-- Navigation -->
    <nav class="nav">
        <a href="#" class="nav-logo"></a>
        <div class="nav-menu">
            <ul class="nav-links">
                <li><a href="#services" class="nav-link">Services</a></li>
                <li><a href="#work" class="nav-link">Our Work</a></li>
                <li><a href="#reviews" class="nav-link">Reviews</a></li>
                <li><a href="#contact" class="nav-link">Contact</a></li>
                <li><a href="#about" class="nav-link">About</a></li>
            </ul>
            <a href="tel:" class="nav-cta">
                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
                    <path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/>
                </svg>
                <span>Call Now</span>
            </a>
        </div>
        <button class="nav-toggle" id="navToggle" aria-label="Toggle menu">
            <span></span>
            <span></span>
            <span></span>
        </button>
    </nav>

    <!-- Hero -->
    <section class="hero">
        <div class="hero-bg">
            <img src="" alt="{{hero_image_alt}}">
        </div>
        
        <div class="hero-content">
            <div class="hero-eyebrow">
                <div class="hero-badge">
                    <span class="dot"></span>
                    Available 24/7
                </div>
            </div>
            <h1 class="hero-title">
                <span class="hero-title-line"><span>{{business_name_first}}</span></span>
                <span class="hero-title-line"><span></span></span>
            </h1>
            <p class="hero-tagline">{{hero_tagline}}</p>
            <a href="#contact" class="hero-cta">
                <span>Get a Free Quote</span>
                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
                    <path d="M5 12h14M12 5l7 7-7 7"/>
                </svg>
            </a>
        </div>
        
        <div class="hero-bottom">
            <div class="hero-stats">
                <div class="stat">
                    <div class="stat-value"></div>
                    <div class="stat-label">Google Rating</div>
                </div>
                <div class="stat">
                    <div class="stat-value">+</div>
                    <div class="stat-label">5-Star Reviews</div>
                </div>
                <div class="stat">
                    <div class="stat-value"></div>
                    <div class="stat-label">Years Experience</div>
                </div>
            </div>
        </div>
    </section>

    <!-- Marquee -->
    <div class="marquee">
        <div class="marquee-track">
            <div class="marquee-content">
                <span class="marquee-item"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="4"/></svg> {{marquee_item_1}}</span>
                <span class="marquee-item"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="4"/></svg> {{marquee_item_2}}</span>
                <span class="marquee-item"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="4"/></svg> {{marquee_item_3}}</span>
                <span class="marquee-item"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="4"/></svg> {{marquee_item_4}}</span>
                <span class="marquee-item"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="4"/></svg> {{marquee_item_5}}</span>
                <span class="marquee-item"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="4"/></svg> {{marquee_item_6}}</span>
            </div>
            <div class="marquee-content">
                <span class="marquee-item"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="4"/></svg> {{marquee_item_1}}</span>
                <span class="marquee-item"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="4"/></svg> {{marquee_item_2}}</span>
                <span class="marquee-item"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="4"/></svg> {{marquee_item_3}}</span>
                <span class="marquee-item"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="4"/></svg> {{marquee_item_4}}</span>
                <span class="marquee-item"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="4"/></svg> {{marquee_item_5}}</span>
                <span class="marquee-item"><svg viewBox="0 0 24 24"><circle cx="12" cy="12" r="4"/></svg> {{marquee_item_6}}</span>
            </div>
        </div>
    </div>

    <!-- Services -->
    <section class="services" id="services">
        <div class="services-header">
            <h2 class="services-title reveal">What<br>We Do</h2>
            <p class="services-intro reveal reveal-delay-1">From emergency callouts to full bathroom renovations. Whatever the job, we handle it with the same care we'd give our own home.</p>
        </div>
        <div class="bento-grid">
            <div class="bento-item with-photo reveal">
                <span class="bento-number">01</span>
                <div class="bento-photo">
                    <img src="{{service_image_1}}" alt="{{service_image_1_alt}}">
                </div>
                <div class="bento-content">
                    <h3>{{service_1_title}}</h3>
                    <p>{{service_1_description}}</p>
                </div>
            </div>
            <div class="bento-item reveal reveal-delay-1">
                <span class="bento-number">02</span>
                <div class="bento-content">
                    <h3>{{service_2_title}}</h3>
                    <p>{{service_2_description}}</p>
                </div>
            </div>
            <div class="bento-item reveal reveal-delay-2">
                <span class="bento-number">03</span>
                <div class="bento-content">
                    <h3>{{service_3_title}}</h3>
                    <p>{{service_3_description}}</p>
                </div>
            </div>
            <div class="bento-item reveal reveal-delay-1">
                <span class="bento-number">04</span>
                <div class="bento-content">
                    <h3>{{service_4_title}}</h3>
                    <p>{{service_4_description}}</p>
                </div>
            </div>
            <div class="bento-item reveal reveal-delay-2">
                <span class="bento-number">05</span>
                <div class="bento-content">
                    <h3>{{service_5_title}}</h3>
                    <p>{{service_5_description}}</p>
                </div>
            </div>
            <div class="bento-item with-photo reveal reveal-delay-3">
                <span class="bento-number">06</span>
                <div class="bento-photo">
                    <img src="{{service_image_2}}" alt="{{service_image_2_alt}}">
                </div>
                <div class="bento-content">
                    <h3>{{service_6_title}}</h3>
                    <p>{{service_6_description}}</p>
                </div>
            </div>
        </div>
    </section>

    <!-- Work Gallery -->
    <section class="work" id="work">
        <div class="work-header">
            <h2 class="work-title reveal">Our Work</h2>
            <p class="work-subtitle reveal reveal-delay-1">Quality craftsmanship on every job, big or small.</p>
        </div>
        <div class="work-grid">
            <div class="work-item reveal">
                <img src="{{work_image_1}}" alt="{{work_image_1_alt}}">
            </div>
            <div class="work-item reveal reveal-delay-1">
                <img src="{{work_image_2}}" alt="{{work_image_2_alt}}">
            </div>
            <div class="work-item reveal reveal-delay-2">
                <img src="{{work_image_3}}" alt="{{work_image_3_alt}}">
            </div>
        </div>
    </section>

    <!-- Reviews -->
    <section class="reviews" id="reviews">
        <div class="reviews-header">
            <h2 class="reviews-title reveal">What people<br>are saying</h2>
            <div class="reviews-rating reveal reveal-delay-1">
                <div class="reviews-stars">
                    <svg viewBox="0 0 24 24"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/></svg>
                    <svg viewBox="0 0 24 24"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/></svg>
                    <svg viewBox="0 0 24 24"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/></svg>
                    <svg viewBox="0 0 24 24"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/></svg>
                    <svg viewBox="0 0 24 24"><path d="M12 2l3.09 6.26L22 9.27l-5 4.87 1.18 6.88L12 17.77l-6.18 3.25L7 14.14 2 9.27l6.91-1.01L12 2z"/></svg>
                </div>
                <span class="reviews-count"> from  reviews</span>
            </div>
        </div>
        <div class="reviews-grid">
            <div class="review-card reveal">
                <p class="review-text">""</p>
                <div class="review-author">
                    <div class="review-avatar"></div>
                    <div>
                        <div class="review-name"></div>
                        <div class="review-location">{{review_1_location}}</div>
                    </div>
                </div>
            </div>
            <div class="review-card reveal reveal-delay-1">
                <p class="review-text">""</p>
                <div class="review-author">
                    <div class="review-avatar"></div>
                    <div>
                        <div class="review-name"></div>
                        <div class="review-location">{{review_2_location}}</div>
                    </div>
                </div>
            </div>
            <div class="review-card reveal reveal-delay-2">
                <p class="review-text">""</p>
                <div class="review-author">
                    <div class="review-avatar"></div>
                    <div>
                        <div class="review-name"></div>
                        <div class="review-location">{{review_3_location}}</div>
                    </div>
                </div>
            </div>
        </div>
    </section>

    <!-- Hybrid CTA - Call + Quick Quote -->
    <section class="hybrid-cta" id="contact">
        <div class="hybrid-cta-container">
            <div class="hybrid-cta-grid">
                <!-- Left: Primary Phone CTA -->
                <div class="hybrid-cta-primary">
                    <span class="hybrid-cta-eyebrow reveal">Need a ?</span>
                    <h2 class="hybrid-cta-title reveal reveal-delay-1">Call Now.<br>We Answer.</h2>
                    <p class="hybrid-cta-subtitle reveal reveal-delay-2">{{cta_subtitle}}</p>
                    
                    <a href="tel:" class="hybrid-cta-phone reveal reveal-delay-3">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
                            <path d="M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z"/>
                        </svg>
                        <span></span>
                    </a>

                    <div class="hybrid-cta-details reveal reveal-delay-4">
                        <div class="hybrid-cta-detail">
                            <div class="hybrid-cta-detail-icon">
                                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
                                    <circle cx="12" cy="12" r="10"/>
                                    <polyline points="12 6 12 12 16 14"/>
                                </svg>
                            </div>
                            <div class="hybrid-cta-detail-text">
                                <div class="hybrid-cta-detail-label">Available</div>
                                <div class="hybrid-cta-detail-value">24/7 Emergency</div>
                            </div>
                        </div>
                        <div class="hybrid-cta-detail">
                            <div class="hybrid-cta-detail-icon">
                                <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
                                    <path d="M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z"/>
                                    <circle cx="12" cy="10" r="3"/>
                                </svg>
                            </div>
                            <div class="hybrid-cta-detail-text">
                                <div class="hybrid-cta-detail-label">Servicing</div>
                                <div class="hybrid-cta-detail-value">All </div>
                            </div>
                        </div>
                    </div>
                </div>

                <!-- Right: Quick Quote Form -->
                <div class="hybrid-cta-secondary">
                    <div class="hybrid-cta-form-header reveal">
                        <h3 class="hybrid-cta-form-title">Can't talk now?</h3>
                        <p class="hybrid-cta-form-subtitle">Leave your details and we'll call you back.</p>
                    </div>

                    <form class="quick-quote-form reveal reveal-delay-1">
                        <div class="form-field">
                            <label for="name">Name</label>
                            <input type="text" id="name" name="name" required>
                        </div>

                        <div class="form-field">
                            <label for="phone">Phone</label>
                            <input type="tel" id="phone" name="phone" required>
                        </div>

                        <button type="submit" class="form-submit">
                            <span>Request Callback</span>
                            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
                                <path d="M5 12h14M12 5l7 7-7 7"/>
                            </svg>
                        </button>

                        
                    </form>
                </div>
            </div>
        </div>
    </section>

    <!-- About -->
    <section class="about" id="about">
        <div class="about-visual">
            <img src="" alt="{{about_image_alt}}">
            <div class="about-overlay">
                <div class="about-number"></div>
                <div class="about-number-label">Years of Experience</div>
            </div>
        </div>
        <div class="about-content">
            <span class="about-eyebrow reveal">Since {{established_year}}</span>
            <h2 class="reveal reveal-delay-1">{{about_heading}}</h2>
            <p class="reveal reveal-delay-2"></p>
            <p class="reveal reveal-delay-3"></p>
            <div class="about-features reveal reveal-delay-4">
                <div class="about-feature">
                    <div class="about-feature-icon">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
                            <path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/>
                            <polyline points="22 4 12 14.01 9 11.01"/>
                        </svg>
                    </div>
                    Fully Licensed
                </div>
                <div class="about-feature">
                    <div class="about-feature-icon">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
                            <path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/>
                            <polyline points="22 4 12 14.01 9 11.01"/>
                        </svg>
                    </div>
                    Locally Owned
                </div>
                <div class="about-feature">
                    <div class="about-feature-icon">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
                            <path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/>
                            <polyline points="22 4 12 14.01 9 11.01"/>
                        </svg>
                    </div>
                    Upfront Pricing
                </div>
                <div class="about-feature">
                    <div class="about-feature-icon">
                        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
                            <path d="M22 11.08V12a10 10 0 1 1-5.93-9.14"/>
                            <polyline points="22 4 12 14.01 9 11.01"/>
                        </svg>
                    </div>
                    Same Day Service
                </div>
            </div>
        </div>
    </section>

    <!-- Footer -->
    <footer class="footer">
        <div class="footer-brand">© 2026 </div>
        </footer>

    <script>
        // Loader
        window.addEventListener('load', () => {
            setTimeout(() => {
                document.querySelector('.loader').classList.add('hidden');
            }, 1500);
        });

        // Custom cursor
        const cursor = document.querySelector('.cursor');
        const cursorDot = document.querySelector('.cursor-dot');
        
        document.addEventListener('mousemove', (e) => {
            cursor.style.left = e.clientX + 'px';
            cursor.style.top = e.clientY + 'px';
            cursorDot.style.left = e.clientX + 'px';
            cursorDot.style.top = e.clientY + 'px';
        });

        document.querySelectorAll('a, button, .bento-item, .work-item').forEach(el => {
            el.addEventListener('mouseenter', () => cursor.classList.add('hovering'));
            el.addEventListener('mouseleave', () => cursor.classList.remove('hovering'));
        });

        // Scroll reveal
        const observer = new IntersectionObserver((entries) => {
            entries.forEach(entry => {
                if (entry.isIntersecting) {
                    entry.target.classList.add('visible');
                }
            });
        }, {
            threshold: 0.1,
            rootMargin: '0px 0px -80px 0px'
        });

        document.querySelectorAll('.reveal').forEach(el => observer.observe(el));

        // Smooth scroll
        document.querySelectorAll('a[href^="#"]').forEach(anchor => {
            anchor.addEventListener('click', function(e) {
                e.preventDefault();
                const target = document.querySelector(this.getAttribute('href'));
                if (target) {
                    target.scrollIntoView({ behavior: 'smooth' });
                    // Close mobile menu if open
                    navToggle.classList.remove('active');
                    navMobile.classList.remove('active');
                    document.body.style.overflow = '';
                }
            });
        });

        // Mobile menu toggle
        const navToggle = document.getElementById('navToggle');
        const navMobile = document.getElementById('navMobile');

        navToggle.addEventListener('click', () => {
            navToggle.classList.toggle('active');
            navMobile.classList.toggle('active');
            document.body.style.overflow = navMobile.classList.contains('active') ? 'hidden' : '';
        });

        // Close mobile menu when clicking a link
        document.querySelectorAll('.nav-mobile-link').forEach(link => {
            link.addEventListener('click', () => {
                navToggle.classList.remove('active');
                navMobile.classList.remove('active');
                document.body.style.overflow = '';
            });
        });

        // Form submission (demo)
        document.querySelector('.quick-quote-form').addEventListener('submit', (e) => {
            e.preventDefault();
            const name = document.getElementById('name').value;
            const phone = document.getElementById('phone').value;
            const email = document.getElementById('email').value;
            const suburb = document.getElementById('suburb').value;
            alert(`Thanks ${name}! We'll call you back at ${phone} within the hour. For urgent issues in ${suburb}, please call  now.`);
            e.target.reset();
        });
    </script>
</body>
</html>
