patx/demo

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Watford Builders &amp; London Construction | R Craft Construction LTD</title>
<meta name="description" content="R Craft Construction LTD is a Watford-based builder serving London, Hertfordshire, Bedfordshire and nearby areas. Extensions, refurbishments, structural works and groundworks.">
<meta property="og:type" content="website">
<meta property="og:title" content="Watford Builders &amp; London Construction | R Craft Construction LTD">
<meta property="og:description" content="R Craft Construction LTD is a Watford-based builder serving London, Hertfordshire, Bedfordshire and nearby areas. Extensions, refurbishments, structural works and groundworks.">
<meta property="og:image" content="rcraft-twitter.png">
<meta property="og:image:alt" content="R Craft Construction LTD social preview card">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:title" content="Watford Builders &amp; London Construction | R Craft Construction LTD">
<meta name="twitter:description" content="R Craft Construction LTD is a Watford-based builder serving London, Hertfordshire, Bedfordshire and nearby areas. Extensions, refurbishments, structural works and groundworks.">
<meta name="twitter:image" content="rcraft-twitter.png">
<meta name="twitter:image:alt" content="R Craft Construction LTD social preview card">
<link href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@300;400;500;600&family=Barlow:wght@300;400;500;600&display=swap" rel="stylesheet">
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "HomeAndConstructionBusiness",
  "name": "R Craft Construction LTD",
  "description": "Watford-based construction company serving London, Hertfordshire, Bedfordshire and nearby areas with extensions, refurbishments, structural works and groundworks.",
  "address": {
    "@type": "PostalAddress",
    "addressLocality": "Watford",
    "addressCountry": "GB"
  },
  "areaServed": [
    { "@type": "Place", "name": "Watford" },
    { "@type": "Place", "name": "Bushey" },
    { "@type": "Place", "name": "Northwood" },
    { "@type": "Place", "name": "Pinner" },
    { "@type": "Place", "name": "Harrow" },
    { "@type": "Place", "name": "St Albans" },
    { "@type": "Place", "name": "Hemel Hempstead" },
    { "@type": "Place", "name": "Borehamwood" },
    { "@type": "Place", "name": "Barnet" },
    { "@type": "Place", "name": "Edgware" },
    { "@type": "Place", "name": "Finchley" },
    { "@type": "Place", "name": "Wembley" },
    { "@type": "Place", "name": "Ealing" },
    { "@type": "Place", "name": "Brentford" },
    { "@type": "Place", "name": "Chiswick" },
    { "@type": "Place", "name": "Acton" },
    { "@type": "Place", "name": "Hammersmith" },
    { "@type": "Place", "name": "Battersea Park" },
    { "@type": "Place", "name": "Walthamstow" },
    { "@type": "Place", "name": "Camden" },
    { "@type": "Place", "name": "Islington" },
    { "@type": "Place", "name": "Richmond" },
    { "@type": "Place", "name": "Twickenham" },
    { "@type": "Place", "name": "Luton" },
    { "@type": "Place", "name": "Harston, Cambridgeshire" }
  ],
  "serviceType": [
    "Home extensions",
    "Loft conversions",
    "Property refurbishments",
    "Structural works",
    "Groundworks",
    "Concrete works"
  ],
  "sameAs": [
    "https://instagram.com/rcraft.construction"
  ]
}
</script>
<style>
  *, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

  :root {
    --cream: #F5F0E8;
    --dark: #1A1A14;
    --charcoal: #2D2D24;
    --gold: #B8923A;
    --gold-light: #D4AA5A;
    --stone: #8C8678;
    --light-stone: #C8C2B8;
    --white: #FDFCFA;
  }

  html { scroll-behavior: smooth; }

  body {
    font-family: 'Barlow', sans-serif;
    background: var(--dark);
    color: var(--cream);
    font-weight: 300;
    overflow-x: hidden;
  }

  /* NAV */
  nav {
    position: fixed; top: 0; left: 0; right: 0; z-index: 100;
    display: flex; align-items: center; justify-content: space-between;
    padding: 1.25rem 3rem;
    background: rgba(26,26,20,0.92);
    backdrop-filter: blur(12px);
    border-bottom: 1px solid rgba(184,146,58,0.2);
  }

  .nav-logo {
    display: flex;
    align-items: center;
    flex-shrink: 0;
    text-decoration: none;
  }

  .logo-image {
    display: block;
    width: clamp(150px, 13vw, 180px);
    height: auto;
    object-fit: contain;
  }

  .nav-links {
    display: flex; gap: 2.5rem; list-style: none;
  }

  .nav-links a {
    position: relative;
    font-size: 0.75rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: var(--light-stone);
    text-decoration: none;
    transition: color 0.2s;
  }

  .nav-links a::after {
    content: '';
    position: absolute;
    left: 0;
    bottom: -0.45rem;
    width: 28px;
    height: 1px;
    background: var(--gold);
    transform: scaleX(0);
    transform-origin: left;
    transition: transform 0.2s ease;
  }

  .nav-links a:hover,
  .nav-links a.is-active {
    color: var(--gold-light);
  }

  .nav-links a:hover::after,
  .nav-links a.is-active::after {
    transform: scaleX(1);
  }

  .nav-cta {
    font-size: 0.75rem;
    letter-spacing: 0.15em;
    text-transform: uppercase;
    color: var(--dark);
    background: var(--gold);
    padding: 0.6rem 1.5rem;
    text-decoration: none;
    font-weight: 500;
    transition: background 0.2s;
  }

  .nav-cta:hover { background: var(--gold-light); }

  .nav-toggle {
    display: none;
    width: 44px;
    height: 44px;
    border: 1px solid rgba(184,146,58,0.35);
    background: transparent;
    color: var(--cream);
    cursor: pointer;
    align-items: center;
    justify-content: center;
    flex-direction: column;
    gap: 5px;
  }

  .nav-toggle span {
    width: 20px;
    height: 1px;
    background: currentColor;
    transition: transform 0.2s ease, opacity 0.2s ease;
  }

  .nav-toggle[aria-expanded="true"] span:nth-child(1) {
    transform: translateY(6px) rotate(45deg);
  }

  .nav-toggle[aria-expanded="true"] span:nth-child(2) {
    opacity: 0;
  }

  .nav-toggle[aria-expanded="true"] span:nth-child(3) {
    transform: translateY(-6px) rotate(-45deg);
  }

  .nav-toggle:focus-visible {
    outline: 2px solid var(--gold-light);
    outline-offset: 4px;
  }

  /* HERO */
  #hero {
    min-height: 100vh;
    display: flex; align-items: flex-end;
    padding: 0 3rem 6rem;
    position: relative;
    isolation: isolate;
    overflow: hidden;
    background: var(--dark);
  }

  #hero::before {
    content: '';
    position: absolute;
    inset: 0;
    z-index: 1;
    background:
      linear-gradient(to bottom, rgba(26,26,20,0.25) 0%, rgba(26,26,20,0.68) 62%, rgba(26,26,20,0.96) 100%),
      linear-gradient(to right, rgba(26,26,20,0.78) 0%, rgba(26,26,20,0.4) 45%, rgba(26,26,20,0.18) 100%);
    pointer-events: none;
  }

  .hero-slideshow {
    position: absolute;
    inset: 0;
    z-index: 0;
    overflow: hidden;
  }

  .hero-slide {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    object-position: center;
    opacity: 0;
    transform: scale(1.12);
    filter: saturate(0.92) contrast(1.04);
    animation: heroZoomFade 30s infinite ease-in-out;
    will-change: opacity, transform;
  }

  .hero-slide:nth-child(2) { animation-delay: 6s; }
  .hero-slide:nth-child(3) { animation-delay: 12s; }
  .hero-slide:nth-child(4) { animation-delay: 18s; }
  .hero-slide:nth-child(5) { animation-delay: 24s; }

  .hero-content {
    position: relative;
    z-index: 2;
  }

  .hero-eyebrow {
    font-size: 0.7rem;
    letter-spacing: 0.3em;
    text-transform: uppercase;
    color: var(--gold);
    margin-bottom: 1.25rem;
    display: flex; align-items: center; gap: 1rem;
  }

  .hero-eyebrow::before {
    content: '';
    display: block;
    width: 40px; height: 1px;
    background: var(--gold);
  }

  h1 {
    font-family: 'Cormorant Garamond', serif;
    font-size: clamp(3.5rem, 6vw, 6rem);
    font-weight: 300;
    line-height: 1.0;
    color: var(--white);
    margin-bottom: 1.5rem;
    letter-spacing: -0.01em;
  }

  h1 em {
    font-style: italic;
    color: var(--gold-light);
  }

  .hero-desc {
    font-size: 1rem;
    color: var(--light-stone);
    max-width: 480px;
    line-height: 1.7;
    margin-bottom: 2.5rem;
    font-weight: 300;
  }

  .hero-actions {
    display: flex; gap: 1.25rem; align-items: center;
  }

  .btn-primary {
    background: var(--gold);
    color: var(--dark);
    font-family: 'Barlow', sans-serif;
    font-size: 0.75rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    font-weight: 500;
    padding: 1rem 2.5rem;
    text-decoration: none;
    transition: background 0.2s;
    display: inline-block;
    border: none; cursor: pointer;
  }

  .btn-primary:hover { background: var(--gold-light); }

  .btn-ghost {
    color: var(--cream);
    font-family: 'Barlow', sans-serif;
    font-size: 0.75rem;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    font-weight: 400;
    padding: 1rem 2rem;
    text-decoration: none;
    border: 1px solid rgba(245,240,232,0.3);
    transition: border-color 0.2s;
    display: inline-block;
  }

  .btn-ghost:hover { border-color: var(--gold); color: var(--gold-light); }

  .hero-stats {
    position: absolute;
    z-index: 2;
    right: 3rem; bottom: 6rem;
    display: flex; flex-direction: column; gap: 2rem;
    text-align: right;
  }

  .stat-num {
    font-family: 'Cormorant Garamond', serif;
    font-size: 2.8rem;
    font-weight: 300;
    color: var(--gold);
    line-height: 1;
  }

  .stat-label {
    font-size: 0.65rem;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--stone);
    margin-top: 2px;
  }

  /* SERVICES */
  #services {
    background: var(--charcoal);
    padding: 7rem 3rem;
  }

  .section-header {
    display: flex; align-items: baseline; gap: 2rem;
    margin-bottom: 4rem;
  }

  .section-eyebrow {
    font-size: 0.65rem;
    letter-spacing: 0.3em;
    text-transform: uppercase;
    color: var(--gold);
    white-space: nowrap;
  }

  h2 {
    font-family: 'Cormorant Garamond', serif;
    font-size: clamp(2rem, 3.5vw, 3.2rem);
    font-weight: 300;
    color: var(--white);
    line-height: 1.1;
  }

  .services-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
    gap: 1px;
    background: rgba(184,146,58,0.15);
    border: 1px solid rgba(184,146,58,0.15);
  }

  .service-card {
    background: var(--charcoal);
    padding: 2.5rem 2rem;
    transition: background 0.2s;
    cursor: default;
  }

  .service-card:hover {
    background: #343428;
  }

  .service-icon {
    width: 48px; height: 48px;
    margin-bottom: 1.5rem;
    color: var(--gold);
  }

  .service-icon svg { width: 100%; height: 100%; }

  .service-title {
    font-family: 'Cormorant Garamond', serif;
    font-size: 1.4rem;
    font-weight: 500;
    color: var(--white);
    margin-bottom: 0.75rem;
  }

  .service-desc {
    font-size: 0.875rem;
    color: var(--stone);
    line-height: 1.7;
    font-weight: 300;
  }

  /* ABOUT STRIP */
  #about {
    padding: 7rem 3rem;
    background: var(--dark);
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 6rem;
    align-items: center;
  }

  .about-body {
    font-size: 0.95rem;
    color: var(--light-stone);
    line-height: 1.9;
    font-weight: 300;
    margin-bottom: 1.5rem;
  }

  .about-list {
    list-style: none;
    display: flex;
    flex-direction: column;
    gap: 0.75rem;
    margin-top: 2rem;
  }

  .about-list li {
    font-size: 0.8rem;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--stone);
    display: flex; align-items: center; gap: 1rem;
  }

  .about-list li::before {
    content: '';
    width: 24px; height: 1px;
    background: var(--gold);
    flex-shrink: 0;
  }

  .about-visual {
    position: relative;
  }

  .about-box {
    background: var(--charcoal);
    border: 1px solid rgba(184,146,58,0.2);
    padding: 3rem;
    position: relative;
  }

  .about-box::before {
    content: '';
    position: absolute;
    top: -8px; left: -8px;
    width: 100%; height: 100%;
    border: 1px solid rgba(184,146,58,0.1);
  }

  .about-quote {
    font-family: 'Cormorant Garamond', serif;
    font-size: 1.6rem;
    font-weight: 300;
    font-style: italic;
    color: var(--white);
    line-height: 1.5;
    margin-bottom: 1.5rem;
  }

  .about-cite {
    font-size: 0.7rem;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--gold);
  }

  /* AREAS */
  #areas {
    padding: 7rem 3rem;
    background: #24241c;
  }

  .areas-intro {
    max-width: 760px;
    color: var(--light-stone);
    font-size: 0.95rem;
    line-height: 1.9;
    margin-bottom: 3rem;
  }

  .areas-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 1px;
    background: rgba(184,146,58,0.15);
    border: 1px solid rgba(184,146,58,0.15);
  }

  .area-card {
    background: #24241c;
    padding: 2rem;
  }

  .area-title {
    font-family: 'Cormorant Garamond', serif;
    font-size: 1.35rem;
    color: var(--white);
    margin-bottom: 1rem;
  }

  .area-list {
    list-style: none;
    display: flex;
    flex-wrap: wrap;
    gap: 0.65rem;
  }

  .area-list li {
    border: 1px solid rgba(184,146,58,0.25);
    color: var(--light-stone);
    font-size: 0.75rem;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    padding: 0.55rem 0.75rem;
  }

  /* PROJECTS */
  #projects {
    padding: 7rem 3rem;
    background: var(--charcoal);
  }

  .projects-mosaic {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    grid-template-rows: auto;
    gap: 1px;
    background: rgba(184,146,58,0.1);
    margin-top: 3rem;
  }

  .project-tile {
    background: var(--dark);
    aspect-ratio: 4/3;
    padding: 2rem;
    display: flex;
    align-items: flex-end;
    position: relative;
    overflow: hidden;
    isolation: isolate;
    cursor: pointer;
  }

  .project-tile:focus-visible {
    outline: 2px solid var(--gold-light);
    outline-offset: 4px;
  }

  .project-tile.tall {
    grid-row: span 2;
    aspect-ratio: auto;
  }

  .project-tile::after {
    content: '';
    position: absolute;
    inset: 0;
    z-index: 0;
    background:
      linear-gradient(to top, rgba(26,26,20,0.92) 0%, rgba(26,26,20,0.5) 48%, rgba(26,26,20,0.18) 100%),
      linear-gradient(135deg, rgba(184,146,58,0.26), transparent 42%);
  }

  .tile-image {
    position: absolute;
    inset: 0;
    z-index: -1;
    width: 100%;
    height: 100%;
    object-fit: cover;
    filter: saturate(0.85) contrast(1.05);
    transform: scale(1.02);
    transition: transform 0.45s ease, filter 0.45s ease;
  }

  .project-tile:hover .tile-image {
    filter: saturate(1) contrast(1.08);
    transform: scale(1.07);
  }

  .tile-content {
    position: relative;
    z-index: 1;
    text-shadow: 0 2px 18px rgba(0,0,0,0.45);
  }

  .tile-tag {
    font-size: 0.65rem;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--gold);
    margin-bottom: 0.25rem;
  }

  .tile-title {
    font-family: 'Cormorant Garamond', serif;
    font-size: 1.1rem;
    font-weight: 400;
    color: var(--white);
  }

  .projects-cta {
    margin-top: 3rem;
    text-align: center;
  }

  .image-modal {
    position: fixed;
    inset: 0;
    z-index: 1000;
    display: grid;
    place-items: center;
    padding: clamp(1rem, 4vw, 3rem);
    background: rgba(26,26,20,0.42);
    backdrop-filter: blur(18px);
    -webkit-backdrop-filter: blur(18px);
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: opacity 0.2s ease, visibility 0.2s ease;
  }

  .image-modal.is-open {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
  }

  .image-modal img {
    max-width: 100%;
    max-height: 92vh;
    object-fit: contain;
  }

  .image-modal-close {
    position: fixed;
    top: 1rem;
    right: 1rem;
    width: 44px;
    height: 44px;
    border: 0;
    background: transparent;
    color: var(--white);
    font: 300 2.5rem/1 'Barlow', sans-serif;
    cursor: pointer;
  }

  .image-modal-close:focus-visible {
    outline: 2px solid var(--gold-light);
    outline-offset: 4px;
  }

  body.modal-open {
    overflow: hidden;
  }

  /* CONTACT */
  #contact {
    padding: 7rem 3rem;
    background: var(--dark);
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 6rem;
    align-items: start;
  }

  .contact-info h2 { margin-bottom: 1.5rem; }

  .contact-body {
    font-size: 0.9rem;
    color: var(--stone);
    line-height: 1.8;
    font-weight: 300;
    margin-bottom: 2.5rem;
  }

  .contact-detail {
    display: flex; align-items: flex-start; gap: 1rem;
    margin-bottom: 1.25rem;
  }

  .contact-label {
    font-size: 0.65rem;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--gold);
    width: 80px;
    flex-shrink: 0;
    padding-top: 2px;
  }

  .contact-value {
    font-size: 0.9rem;
    color: var(--light-stone);
    font-weight: 300;
    line-height: 1.6;
  }

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

  .contact-form.is-submitted > :not(#form-success) {
    display: none;
  }

  .form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 1.25rem; }

  .form-group { display: flex; flex-direction: column; gap: 0.4rem; }

  .form-label {
    font-size: 0.65rem;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: var(--stone);
  }

  .form-input {
    background: var(--charcoal);
    border: 1px solid rgba(140,134,120,0.3);
    color: var(--cream);
    padding: 0.875rem 1rem;
    font-family: 'Barlow', sans-serif;
    font-size: 0.9rem;
    font-weight: 300;
    outline: none;
    transition: border-color 0.2s;
    width: 100%;
  }

  .form-input:focus { border-color: var(--gold); }
  .form-input::placeholder { color: var(--stone); opacity: 0.5; }

  textarea.form-input { resize: vertical; min-height: 120px; }

  .form-select {
    background: var(--charcoal);
    border: 1px solid rgba(140,134,120,0.3);
    color: var(--cream);
    padding: 0.875rem 1rem;
    font-family: 'Barlow', sans-serif;
    font-size: 0.9rem;
    font-weight: 300;
    outline: none;
    width: 100%;
    cursor: pointer;
    -webkit-appearance: none;
    appearance: none;
  }

  /* FOOTER */
  footer {
    background: var(--charcoal);
    border-top: 1px solid rgba(184,146,58,0.2);
    padding: 2.5rem 3rem;
    display: flex;
    align-items: center;
    justify-content: space-between;
  }

  .footer-logo {
    display: flex;
    align-items: center;
  }

  .footer-logo-image {
    display: block;
    width: 190px;
    max-width: 48vw;
    height: auto;
    object-fit: contain;
  }

  .footer-copy {
    font-size: 0.75rem;
    color: var(--stone);
    letter-spacing: 0.05em;
  }

  .footer-loc {
    font-size: 0.75rem;
    color: var(--stone);
    letter-spacing: 0.1em;
    display: flex; align-items: center; gap: 0.5rem;
  }

  .footer-loc::before {
    content: 'πŸ“';
    font-size: 0.8rem;
  }

  /* GOLD LINE DIVIDER */
  .gold-line {
    width: 40px; height: 1px;
    background: var(--gold);
    margin-bottom: 1.5rem;
  }

  @keyframes fadeUp {
    from { opacity: 0; transform: translateY(24px); }
    to { opacity: 1; transform: translateY(0); }
  }

  @keyframes heroZoomFade {
    0% {
      opacity: 0;
      transform: scale(1.12);
    }
    1.5% {
      opacity: 1;
    }
    19.5% {
      opacity: 1;
    }
    21.5% {
      opacity: 0;
      transform: scale(1);
    }
    100% {
      opacity: 0;
      transform: scale(1);
    }
  }

  .hero-content > * {
    animation: fadeUp 0.8s ease both;
  }

  .hero-content > *:nth-child(1) { animation-delay: 0.1s; }
  .hero-content > *:nth-child(2) { animation-delay: 0.25s; }
  .hero-content > *:nth-child(3) { animation-delay: 0.4s; }
  .hero-content > *:nth-child(4) { animation-delay: 0.55s; }

  @media (max-width: 900px) {
    nav {
      padding: 1rem 1.5rem;
      flex-wrap: wrap;
      gap: 1rem;
    }

    .nav-links {
      order: 3;
      width: 100%;
      justify-content: center;
      gap: 1.25rem;
    }

    .nav-cta {
      padding: 0.55rem 1rem;
    }

    #hero {
      min-height: auto;
      padding: 11rem 1.5rem 4rem;
      align-items: flex-start;
      flex-direction: column;
      gap: 3rem;
    }

    .hero-stats {
      position: static;
      width: 100%;
      flex-direction: row;
      justify-content: space-between;
      gap: 1rem;
      text-align: left;
      padding-top: 2rem;
      border-top: 1px solid rgba(184,146,58,0.2);
    }

    #services,
    #areas,
    #projects {
      padding: 5rem 1.5rem;
    }

    #about,
    #contact {
      grid-template-columns: 1fr;
      gap: 3rem;
      padding: 5rem 1.5rem;
    }

    .projects-mosaic {
      grid-template-columns: repeat(2, 1fr);
    }

    .areas-grid {
      grid-template-columns: 1fr;
    }

    footer {
      padding: 2rem 1.5rem;
      flex-direction: column;
      gap: 0.75rem;
      text-align: center;
    }
  }

  @media (max-width: 600px) {
    nav {
      position: sticky;
      top: 0;
      padding: 0.85rem 1rem;
      justify-content: space-between;
      text-align: left;
      gap: 0.75rem;
    }

    .nav-logo {
      width: auto;
      flex: 1;
      min-width: 0;
      justify-content: flex-start;
    }

    .logo-image {
      width: min(46vw, 155px);
    }

    .nav-toggle {
      display: flex;
      flex-shrink: 0;
    }

    .nav-links {
      display: none;
      order: 3;
      width: 100%;
      flex-direction: column;
      align-items: stretch;
      gap: 0;
      padding-top: 0.75rem;
      border-top: 1px solid rgba(184,146,58,0.18);
    }

    nav.is-open .nav-links {
      display: flex;
    }

    .nav-links li {
      width: 100%;
    }

    .nav-links a {
      display: block;
      padding: 0.85rem 0;
    }

    .nav-links a::after {
      bottom: 0.55rem;
    }

    .nav-links a,
    .nav-cta,
    .btn-primary,
    .btn-ghost {
      font-size: 0.68rem;
      letter-spacing: 0.12em;
    }

    .nav-cta {
      display: none;
      order: 4;
      width: 100%;
      max-width: none;
      text-align: center;
      padding: 0.85rem 1rem;
    }

    nav.is-open .nav-cta {
      display: block;
    }

    #hero {
      padding: 4rem 1rem;
    }

    .hero-slide {
      object-position: center;
    }

    .hero-slide-level {
      object-position: left center;
    }

    .hero-eyebrow {
      align-items: flex-start;
      font-size: 0.62rem;
      letter-spacing: 0.22em;
      line-height: 1.5;
    }

    .hero-eyebrow::before {
      width: 24px;
      margin-top: 0.45rem;
      flex-shrink: 0;
    }

    h1 {
      font-size: clamp(2.7rem, 15vw, 3.7rem);
    }

    .hero-actions {
      flex-direction: column;
      align-items: stretch;
    }

    .btn-primary,
    .btn-ghost {
      width: 100%;
      text-align: center;
      padding: 0.95rem 1.25rem;
    }

    .hero-stats {
      flex-direction: column;
      text-align: center;
    }

    .stat-num {
      font-size: 2.4rem;
    }

    #services,
    #areas,
    #projects {
      padding: 4rem 1rem;
    }

    #about,
    #contact {
      padding: 4rem 1rem;
      gap: 2.5rem;
    }

    .section-header {
      display: block;
      margin-bottom: 2.5rem;
    }

    .section-eyebrow {
      display: block;
      margin-bottom: 0.85rem;
      white-space: normal;
      line-height: 1.5;
    }

    .services-grid,
    .areas-grid,
    .projects-mosaic,
    .form-row {
      grid-template-columns: 1fr;
    }

    .service-card,
    .area-card,
    .project-tile {
      padding: 1.75rem 1.25rem;
    }

    .project-tile,
    .project-tile.tall {
      aspect-ratio: 4/3;
    }

    .about-box {
      padding: 2rem 1.25rem;
    }

    .about-box::before {
      top: -5px;
      left: -5px;
    }

    .about-quote {
      font-size: 1.35rem;
    }

    .contact-detail {
      flex-direction: column;
      gap: 0.35rem;
    }

    .contact-label {
      width: auto;
    }
  }

  @media (prefers-reduced-motion: reduce) {
    .hero-slide {
      animation: none;
      transform: scale(1.03);
    }

    .hero-slide:first-child {
      opacity: 1;
    }
  }
</style>
</head>
<body>

<nav>
  <a href="#hero" class="nav-logo">
    <img class="logo-image" src="rcraft_logo.png" width="866" height="288" alt="R Craft Construction LTD">
  </a>
  <button class="nav-toggle" type="button" aria-label="Open navigation" aria-controls="primary-navigation" aria-expanded="false">
    <span aria-hidden="true"></span>
    <span aria-hidden="true"></span>
    <span aria-hidden="true"></span>
  </button>
  <ul class="nav-links" id="primary-navigation">
    <li><a href="#services">Services</a></li>
    <li><a href="#about">About</a></li>
    <li><a href="#projects">Portfolio</a></li>
    <li><a href="#areas">Areas</a></li>
    <li><a href="#contact">Contact</a></li>
  </ul>
  <a href="#contact" class="nav-cta">Get a Quote</a>
</nav>

<section id="hero">
  <div class="hero-slideshow" aria-hidden="true">
    <img class="hero-slide" src="house-hero.png" width="1672" height="941" alt="" fetchpriority="high" decoding="async">
    <img class="hero-slide" src="framing-hero.png" width="1672" height="941" alt="" decoding="async">
    <img class="hero-slide" src="roof-hero.png" width="1920" height="1080" alt="" decoding="async">
    <img class="hero-slide hero-slide-level" src="level-hero.jpg" width="1920" height="1080" alt="" decoding="async">
    <img class="hero-slide" src="finished-hero.png" width="1672" height="941" alt="" decoding="async">
  </div>
  <div class="hero-content">
    <p class="hero-eyebrow">Craftsmanship matters.</p>
    <h1>Building <em>Exceptional</em><br>Homes Across<br>London</h1>
    <p class="hero-desc">R Craft Construction specialises in extensions, conversions, refurbishments, concrete, and earthworks across London and nearby areas.</p>
    <div class="hero-actions">
      <a href="#contact" class="btn-primary">Start Your Project</a>
      <a href="#projects" class="btn-ghost">View Portfolio</a>
    </div>
  </div>
  <div class="hero-stats">
    <div>
      <div class="stat-num">200+</div>
      <div class="stat-label">Projects Complete</div>
    </div>
    <div>
      <div class="stat-num">10+</div>
      <div class="stat-label">Years Experience</div>
    </div>
    <div>
      <div class="stat-num">100%</div>
      <div class="stat-label">Client Satisfaction</div>
    </div>
  </div>
</section>

<section id="services">
  <div class="section-header">
    <span class="section-eyebrow">What We Do</span>
    <h2>Our Services</h2>
  </div>
  <div class="services-grid">
    <div class="service-card">
      <div class="service-icon">
        <svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="1.5" xmlns="http://www.w3.org/2000/svg">
          <rect x="6" y="24" width="36" height="18" rx="1"/>
          <path d="M4 24l20-16 20 16"/>
          <path d="M18 42V30h12v12"/>
          <path d="M28 18h8v6"/>
        </svg>
      </div>
      <div class="service-title">Extensions &amp; Conversions</div>
      <div class="service-desc">Loft conversions, rear extensions, side returns, and garage conversions that seamlessly expand your living space with precision craftsmanship.</div>
    </div>
    <div class="service-card">
      <div class="service-icon">
        <svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="1.5" xmlns="http://www.w3.org/2000/svg">
          <rect x="8" y="8" width="32" height="32" rx="2"/>
          <path d="M8 20h32M20 8v32"/>
          <circle cx="14" cy="14" r="2" fill="currentColor" stroke="none"/>
        </svg>
      </div>
      <div class="service-title">Refurbishments</div>
      <div class="service-desc">Full and partial property refurbishments, including kitchens, bathrooms and whole-house works finished to the highest standard.</div>
    </div>
    <div class="service-card">
      <div class="service-icon">
        <svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="1.5" xmlns="http://www.w3.org/2000/svg">
          <path d="M6 42V12l18-6 18 6v30"/>
          <path d="M6 22h36M6 32h36"/>
          <rect x="18" y="32" width="12" height="10"/>
        </svg>
      </div>
      <div class="service-title">House Infrastructure</div>
      <div class="service-desc">Structural works, new builds, underpinning, and full infrastructure projects managed by our experienced team from groundworks to completion.</div>
    </div>
    <div class="service-card">
      <div class="service-icon">
        <svg viewBox="0 0 48 48" fill="none" stroke="currentColor" stroke-width="1.5" xmlns="http://www.w3.org/2000/svg">
          <path d="M4 36h40M8 36V20l4-4h24l4 4v16"/>
          <path d="M16 36V26h16v10"/>
          <path d="M8 28h4M36 28h4"/>
        </svg>
      </div>
      <div class="service-title">Concrete &amp; Earthworks</div>
      <div class="service-desc">Foundations, retaining walls, drainage, driveways, and groundwork solutions engineered for durability and long-term performance.</div>
    </div>
  </div>
</section>

<section id="about">
  <div class="about-text">
    <span class="section-eyebrow" style="display:block;margin-bottom:1rem;">Who We Are</span>
    <h2 style="margin-bottom:1.5rem;">London-Based<br>Construction Experts</h2>
    <div class="gold-line"></div>
    <p class="about-body">R Craft Construction LTD is a Watford-based building contractor with over a decade of experience delivering high-quality domestic building and refurbishment projects across Watford, London, Hertfordshire, Bedfordshire, and surrounding areas. We combine traditional craftsmanship with modern building techniques to exceed client expectations on every project.</p>
    <p class="about-body">Our fully qualified team handles everything from initial planning through to final handover, providing a single point of contact and complete accountability throughout.</p>
    <ul class="about-list">
      <li>Fully insured &amp; accredited</li>
      <li>Free detailed quotations</li>
      <li>Project managed end-to-end</li>
      <li>Serving Watford, London &amp; surrounding areas</li>
      <li>5-star rated by clients</li>
    </ul>
  </div>
  <div class="about-visual">
    <div class="about-box">
      <p class="about-quote">"At R Craft Construction LTD we don’t just construct buildings – we craft spaces where dreams take shape and communities thrive. "</p>
    </div>
  </div>
</section>

<section id="projects">
  <div class="section-header">
    <span class="section-eyebrow">Portfolio</span>
    <h2>Our Craftsmanship</h2>
  </div>
  <div class="projects-mosaic">
    <div class="project-tile tall" role="button" tabindex="0" aria-label="View full size image of Skylit Floor Installation">
      <img class="tile-image" src="floor.png" alt="Finished marble floor with skylight and black framed doors" loading="lazy" decoding="async">
      <div class="tile-content">
        <div class="tile-tag">Marble Finish</div>
        <div class="tile-title">Skylit Floor Installation</div>
      </div>
    </div>
    <div class="project-tile" role="button" tabindex="0" aria-label="View full size image of Timber Frame Extension">
      <img class="tile-image" src="addition.png" alt="Timber frame addition under construction on a London brick property" loading="lazy" decoding="async">
      <div class="tile-content">
        <div class="tile-tag">Structural Addition</div>
        <div class="tile-title">Timber Frame Extension</div>
      </div>
    </div>
    <div class="project-tile" role="button" tabindex="0" aria-label="View full size image of Brickwork and Rooflights">
      <img class="tile-image" src="extension.png" alt="Completed brick rear extension with flat roof and rooflights" loading="lazy" decoding="async">
      <div class="tile-content">
        <div class="tile-tag">Rear Extension</div>
        <div class="tile-title">Brickwork &amp; Rooflights</div>
      </div>
    </div>
    <div class="project-tile" role="button" tabindex="0" aria-label="View full size image of Curved Stair Installation">
      <img class="tile-image" src="stairs.png" alt="Curved timber stair installation during refurbishment" loading="lazy" decoding="async">
      <div class="tile-content">
        <div class="tile-tag">Bespoke Joinery</div>
        <div class="tile-title">Curved Stair Installation</div>
      </div>
    </div>
    <div class="project-tile" role="button" tabindex="0" aria-label="View full size image of On-site Carpentry">
      <img class="tile-image" src="saw.png" alt="Carpenter cutting timber beams with a circular saw on site" loading="lazy" decoding="async">
      <div class="tile-content">
        <div class="tile-tag">Structural Works</div>
        <div class="tile-title">On-site Carpentry</div>
      </div>
    </div>
  </div>
  <div class="projects-cta">
    <p style="font-size:0.85rem;color:var(--stone);margin-bottom:1.25rem;letter-spacing:0.05em;">See our full portfolio on Instagram</p>
    <a href="https://instagram.com/rcraft.construction" class="btn-ghost" style="font-size:0.75rem;">@rcraft.construction</a>
  </div>
</section>

<section id="areas">
  <div class="section-header">
    <span class="section-eyebrow">Where We Work</span>
    <h2>Builders Serving Watford, London &amp; Nearby Areas</h2>
  </div>
  <p class="areas-intro">Based in Watford, R Craft Construction works across local Hertfordshire towns, North and West London, selected South West and East London areas, Bedfordshire, and project locations further out by arrangement. We regularly support homeowners looking for builders for extensions, refurbishments, structural works, and groundworks near Watford and across the London commuter belt.</p>
  <div class="areas-grid">
    <div class="area-card">
      <h3 class="area-title">Watford &amp; Hertfordshire</h3>
      <ul class="area-list">
        <li>Watford</li>
        <li>Bushey</li>
        <li>Northwood</li>
        <li>Pinner</li>
        <li>Rickmansworth</li>
        <li>St Albans</li>
        <li>Hemel Hempstead</li>
        <li>Borehamwood</li>
        <li>Radlett</li>
      </ul>
    </div>
    <div class="area-card">
      <h3 class="area-title">London Service Areas</h3>
      <ul class="area-list">
        <li>Ealing</li>
        <li>Brentford</li>
        <li>Chiswick</li>
        <li>Acton</li>
        <li>Hammersmith</li>
        <li>Battersea Park</li>
        <li>Walthamstow</li>
        <li>Harrow</li>
        <li>Barnet</li>
        <li>Edgware</li>
        <li>Finchley</li>
        <li>Wembley</li>
        <li>Camden</li>
        <li>Islington</li>
      </ul>
    </div>
    <div class="area-card">
      <h3 class="area-title">Wider Coverage</h3>
      <ul class="area-list">
        <li>Luton</li>
        <li>Dunstable</li>
        <li>Hitchin</li>
        <li>Stevenage</li>
        <li>Uxbridge</li>
        <li>Enfield</li>
        <li>Twickenham</li>
        <li>Richmond</li>
        <li>Harston</li>
        <li>Cambridgeshire</li>
      </ul>
    </div>
  </div>
</section>

<section id="contact">
  <div class="contact-info">
    <span class="section-eyebrow" style="display:block;margin-bottom:1rem;">Get in Touch</span>
    <h2 style="margin-bottom:1.5rem;">Start Your Project Today</h2>
    <div class="gold-line"></div>
    <p class="contact-body">Ready to transform your property? We offer free, no-obligation quotations and site visits across Watford, London, Hertfordshire, Bedfordshire, and selected wider areas. Get in touch and we will respond within 24 hours.</p>
    <div class="contact-detail">
      <span class="contact-label">Location</span>
      <span class="contact-value">Based in Watford<br>Serving Ealing, Brentford, Chiswick, Battersea Park, Walthamstow, Harrow, Barnet, Bushey, St Albans, Luton, Harston (Cambridgeshire), and nearby areas</span>
    </div>
    <div class="contact-detail">
      <span class="contact-label">Instagram</span>
      <span class="contact-value">@rcraft.construction</span>
    </div>
    <div class="contact-detail">
      <span class="contact-label">Hours</span>
      <span class="contact-value">Monday – Saturday<br>7:00am – 6:00pm</span>
    </div>
  </div>
  <form class="contact-form" onsubmit="handleSubmit(event)">
    <div class="form-row">
      <div class="form-group">
        <label class="form-label">First Name</label>
        <input class="form-input" type="text" placeholder="John">
      </div>
      <div class="form-group">
        <label class="form-label">Surname</label>
        <input class="form-input" type="text" placeholder="Smith">
      </div>
    </div>
    <div class="form-group">
      <label class="form-label">Email Address</label>
      <input class="form-input" type="email" placeholder="[email protected]">
    </div>
    <div class="form-group">
      <label class="form-label">Phone Number</label>
      <input class="form-input" type="tel" placeholder="+44 7XXX XXXXXX">
    </div>
    <div class="form-group">
      <label class="form-label">Service Required</label>
      <select class="form-select">
        <option value="">Select a service...</option>
        <option>Extension &amp; Conversion</option>
        <option>Refurbishment</option>
        <option>House Infrastructure</option>
        <option>Concrete &amp; Earthworks</option>
        <option>Multiple Services</option>
        <option>Other / Not Sure</option>
      </select>
    </div>
    <div class="form-group">
      <label class="form-label">Tell Us About Your Project</label>
      <textarea class="form-input" placeholder="Describe your project, location and expected timescale..."></textarea>
    </div>
    <button type="submit" class="btn-primary" style="width:100%;padding:1.1rem;">Send Enquiry</button>
    <div id="form-success" style="display:none;text-align:center;padding:1rem;color:var(--gold);font-size:0.85rem;letter-spacing:0.1em;text-transform:uppercase;">βœ“ Message sent β€” we will be in touch shortly</div>
  </form>
</section>

<footer>
  <div class="footer-logo">
    <img class="footer-logo-image" src="rcraft_logo.png" width="866" height="288" alt="R Craft Construction LTD">
  </div>
  <div class="footer-copy">Β© 2026 R Craft Construction LTD. All rights reserved.</div>
  <div class="footer-loc">London, United Kingdom</div>
</footer>

<div class="image-modal" id="image-modal" role="dialog" aria-modal="true" aria-hidden="true">
  <button class="image-modal-close" type="button" aria-label="Close full screen image">&times;</button>
  <img id="image-modal-img" src="" alt="">
</div>

<script>
function handleSubmit(e) {
  e.preventDefault();
  const form = e.target;
  const successMessage = document.getElementById('form-success');

  form.reset();
  form.classList.add('is-submitted');
  form.querySelectorAll('input, select, textarea, button[type="submit"]').forEach((control) => {
    control.disabled = true;
  });
  successMessage.style.display = 'block';
  successMessage.setAttribute('tabindex', '-1');
  successMessage.focus();
}

const siteNav = document.querySelector('nav');
const navToggle = document.querySelector('.nav-toggle');
const navSectionLinks = Array.from(document.querySelectorAll('.nav-links a[href^="#"]'));
const navSections = navSectionLinks
  .map((link) => ({ link, section: document.querySelector(link.getAttribute('href')) }))
  .filter(({ section }) => section);

function setMobileNav(open) {
  siteNav.classList.toggle('is-open', open);
  navToggle.setAttribute('aria-expanded', String(open));
  navToggle.setAttribute('aria-label', open ? 'Close navigation' : 'Open navigation');
}

function setActiveNavLink(activeId) {
  navSections.forEach(({ link, section }) => {
    const isActive = section.id === activeId;
    link.classList.toggle('is-active', isActive);

    if (isActive) {
      link.setAttribute('aria-current', 'location');
    } else {
      link.removeAttribute('aria-current');
    }
  });
}

function updateActiveNavLink() {
  const navOffset = siteNav.offsetHeight + 24;
  let activeId = '';

  navSections.forEach(({ section }) => {
    if (section.getBoundingClientRect().top <= navOffset) {
      activeId = section.id;
    }
  });

  setActiveNavLink(activeId);
}

navToggle.addEventListener('click', () => {
  setMobileNav(!siteNav.classList.contains('is-open'));
});

document.querySelectorAll('.nav-links a, .nav-cta').forEach((link) => {
  link.addEventListener('click', () => {
    const targetId = link.getAttribute('href')?.slice(1);

    if (targetId) {
      setActiveNavLink(targetId);
    }

    setMobileNav(false);
  });
});

window.addEventListener('scroll', updateActiveNavLink, { passive: true });
window.addEventListener('resize', updateActiveNavLink);
window.addEventListener('load', updateActiveNavLink);
updateActiveNavLink();

const modal = document.getElementById('image-modal');
const modalImage = document.getElementById('image-modal-img');
const closeModalButton = modal.querySelector('.image-modal-close');
let lastFocusedElement = null;

function openImageModal(image) {
  lastFocusedElement = document.activeElement;
  modalImage.src = image.currentSrc || image.src;
  modalImage.alt = image.alt;
  modal.classList.add('is-open');
  modal.setAttribute('aria-hidden', 'false');
  document.body.classList.add('modal-open');
  closeModalButton.focus();
}

function closeImageModal() {
  modal.classList.remove('is-open');
  modal.setAttribute('aria-hidden', 'true');
  document.body.classList.remove('modal-open');
  modalImage.removeAttribute('src');
  modalImage.alt = '';

  if (lastFocusedElement) {
    lastFocusedElement.focus();
  }
}

document.querySelectorAll('.project-tile').forEach((tile) => {
  tile.addEventListener('click', () => {
    openImageModal(tile.querySelector('.tile-image'));
  });

  tile.addEventListener('keydown', (event) => {
    if (event.key === 'Enter' || event.key === ' ') {
      event.preventDefault();
      openImageModal(tile.querySelector('.tile-image'));
    }
  });
});

closeModalButton.addEventListener('click', closeImageModal);

modal.addEventListener('click', (event) => {
  if (event.target === modal) {
    closeImageModal();
  }
});

document.addEventListener('keydown', (event) => {
  if (event.key !== 'Escape') {
    return;
  }

  if (modal.classList.contains('is-open')) {
    closeImageModal();
  }

  if (siteNav.classList.contains('is-open')) {
    setMobileNav(false);
    navToggle.focus();
  }
});
</script>
</body>
</html>