/* ============================================================
   WS Builders Kent — pure HTML/CSS/JS build
   Self-hosted Inter (woff2) — no external font connection.
   ============================================================ */

@font-face {
    font-family: 'Inter';
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url('/fonts/inter-v20-latin-regular.woff2') format('woff2');
}
@font-face {
    font-family: 'Inter';
    font-style: normal;
    font-weight: 500;
    font-display: swap;
    src: url('/fonts/inter-v20-latin-500.woff2') format('woff2');
}
@font-face {
    font-family: 'Inter';
    font-style: normal;
    font-weight: 600;
    font-display: swap;
    src: url('/fonts/inter-v20-latin-600.woff2') format('woff2');
}

:root {
    --n-950: #0a0a0a;
    --n-900: #171717;
    --n-800: #262626;
    --n-700: #404040;
    --n-600: #525252;
    --n-500: #737373;
    --n-400: #a3a3a3;
    --n-300: #d4d4d4;
    --n-200: #e5e5e5;
    --n-100: #f5f5f5;
    --n-50:  #fafafa;
    --amber:     #fcd34d; /* amber-300 */
    --amber-200: #fde68a;
    --amber-500: #f59e0b;
    --amber-600: #d97706;
    --stone-900: #1c1917;
    --stone-950: #0c0a09;
    --emerald-100: #d1fae5;
    --emerald-600: #059669;
    --dark-grad: linear-gradient(to bottom right, var(--stone-900), var(--n-900), var(--stone-950));
}

/* ---------- reset ---------- */
*, *::before, *::after { box-sizing: border-box; }

html { overflow-x: clip; }

body {
    margin: 0;
    font-family: 'Inter', system-ui, -apple-system, sans-serif;
    font-weight: 400;
    font-size: 1rem;
    line-height: 1.5;
    color: var(--n-900);
    background: #fff;
    overflow-x: hidden;
    -webkit-font-smoothing: antialiased;
}

img { max-width: 100%; height: auto; display: block; }

h1, h2, h3, h4 { margin: 0; font-weight: 500; letter-spacing: -0.025em; }
p { margin: 0; }
a { color: inherit; text-decoration: none; }
ul { margin: 0; padding: 0; list-style: none; }
button {
    font: inherit;
    color: inherit;
    background: none;
    border: 0;
    padding: 0;
    cursor: pointer;
}
input, textarea, select { font: inherit; color: inherit; }

.skip-link {
    position: absolute;
    left: -9999px;
    top: 0;
    background: var(--n-900);
    color: #fff;
    padding: 0.75rem 1.25rem;
    z-index: 200;
}
.skip-link:focus { left: 0; }

/* ---------- layout helpers ---------- */
.container {
    max-width: 80rem;
    margin-inline: auto;
    padding-inline: 1.5rem;
}
@media (min-width: 64rem) {
    .container { padding-inline: 2.5rem; }
}

.eyebrow {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    font-size: 0.75rem;
    text-transform: uppercase;
    letter-spacing: 0.3em;
    color: var(--n-500);
}
.eyebrow .rule {
    width: 1.5rem;
    height: 1px;
    background: var(--n-900);
    flex-shrink: 0;
}
.eyebrow--amber { color: var(--amber); }
.eyebrow--amber .rule { background: var(--amber); }

/* ---------- intro splash (home only, once per session) ---------- */
.splash {
    position: fixed;
    inset: 0;
    z-index: 100;
    background: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    pointer-events: none;
    animation: splash-out 0.5s ease 2.4s both;
}
html.no-splash .splash { display: none; }
.splash-inner { display: flex; align-items: center; gap: 1rem; }
.splash-inner img { width: 6rem; height: 6rem; object-fit: contain; animation: logo-draw 1.6s cubic-bezier(0.65, 0, 0.35, 1) both; }
.splash-inner span {
    font-size: 1.875rem;
    letter-spacing: 0.2em;
    font-weight: 500;
    color: var(--n-900);
    opacity: 0;
    animation: builders-fade-in 0.6s cubic-bezier(0.4, 0, 0.2, 1) 1.4s both;
}
@media (min-width: 48rem) {
    .splash-inner img { width: 8rem; height: 8rem; }
    .splash-inner span { font-size: 3rem; }
}
@keyframes splash-out { from { opacity: 1; } to { opacity: 0; visibility: hidden; } }
@keyframes logo-draw {
    0% { clip-path: inset(0 100% 0 0); }
    100% { clip-path: inset(0 0 0 0); }
}
@keyframes builders-fade-in {
    0% { opacity: 0; transform: translateX(-12px); }
    100% { opacity: 1; transform: translateX(0); }
}

/* scroll-triggered fade-in: .fade-init is added by JS so content stays visible without it */
.fade-init {
    opacity: 0;
    transform: translateY(1.75rem);
}
.fade-init.is-visible {
    opacity: 1;
    transform: none;
    transition: opacity 700ms ease, transform 700ms cubic-bezier(0.22, 1, 0.36, 1);
}
@media (prefers-reduced-motion: reduce) {
    .fade-init { opacity: 1; transform: none; transition: none; }
}

/* ---------- header / nav ---------- */
.site-header {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    z-index: 50;
    background: transparent;   /* blends with the page, like the reference */
    color: var(--n-900);
    transition: color 0.3s ease;
}
.site-header nav {
    max-width: 80rem;
    margin-inline: auto;
    padding-inline: 1.5rem;
    display: flex;
    align-items: center;
    gap: 2rem;
    height: 4rem;
}
@media (min-width: 64rem) { .site-header nav { padding-inline: 2.5rem; } }
@media (min-width: 48rem) { .site-header nav { height: 5rem; } }

.brand {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    letter-spacing: 0.1em;
    font-size: 0.875rem;
    font-weight: 500;
}
.brand img { width: 3rem; height: 3rem; object-fit: contain; }
.brand .logo-light { display: none; }
.brand .logo-dark { display: block; }

/* white text over dark heroes until the page is scrolled */
body.hero-dark .site-header:not(.scrolled):not(.menu-open) {
    color: #fff;
}
body.hero-dark .site-header:not(.scrolled):not(.menu-open) .logo-light { display: block; }
body.hero-dark .site-header:not(.scrolled):not(.menu-open) .logo-dark { display: none; }

.nav-links {
    display: none;
    align-items: center;
    gap: 2.5rem;
    font-size: 0.875rem;
    margin-left: auto;
}
@media (min-width: 48rem) { .nav-links { display: flex; } }
.nav-links > a {
    position: relative;
    letter-spacing: 0.025em;
    transition: opacity 0.2s ease;
}
.nav-links > a:hover { opacity: 0.7; }
.nav-links > a::after {
    content: '';
    position: absolute;
    bottom: -0.25rem;
    left: 0;
    height: 1px;
    width: 0;
    background: currentColor;
    transition: width 0.2s ease;
}
.nav-links > a[aria-current="page"]::after { width: 100%; }

/* hamburger button: bordered rounded square, three bars morphing to an X */
.menu-toggle {
    display: flex;
    position: relative;
    margin-left: auto;
    flex-shrink: 0;
    background: none;
    border: 1px solid currentColor;
    border-radius: 0.5rem;
    width: 2.5rem;
    height: 2.5rem;
    padding: 0;
    color: inherit;
    cursor: pointer;
    transition: color 350ms ease, border-color 350ms ease;
}
@media (min-width: 48rem) { .menu-toggle { display: none; } }
.menu-toggle span {
    position: absolute;
    left: 50%;
    top: 50%;
    width: 1.1rem;
    height: 2px;
    background: currentColor;
    border-radius: 2px;
    transition: transform 300ms ease, opacity 200ms ease;
}
.menu-toggle span:nth-child(1) { transform: translate(-50%, -8px); }
.menu-toggle span:nth-child(2) { transform: translate(-50%, -50%); }
.menu-toggle span:nth-child(3) { transform: translate(-50%, 6px); }
nav.is-open .menu-toggle span:nth-child(1) { transform: translate(-50%, -50%) rotate(45deg); }
nav.is-open .menu-toggle span:nth-child(2) { opacity: 0; }
nav.is-open .menu-toggle span:nth-child(3) { transform: translate(-50%, -50%) rotate(-45deg); }

@keyframes menuIn  { from { opacity: 0; } to { opacity: 1; } }
@keyframes menuOut { from { opacity: 1; } to { opacity: 0; } }
@keyframes menuItemIn {
    from { opacity: 0; transform: translateY(0.9rem); }
    to   { opacity: 1; transform: none; }
}

/* full-screen mobile menu overlay */
@media (max-width: 47.9375rem) {
    .site-header nav.is-open {
        position: fixed;
        inset: 0;
        z-index: 60;
        height: auto;
        max-width: none;
        background: transparent;   /* the ::before backdrop carries the fill so it can fade alone */
        color: var(--n-900);
        padding: 0.5rem 1.5rem 1.5rem;
        display: grid;
        grid-template-columns: 1fr auto;
        grid-template-rows: 3rem 1fr;
        grid-template-areas:
            "brand close"
            "links links";
        gap: 2rem;
        align-items: center;
    }
    nav.is-open::before {
        content: "";
        position: absolute;
        inset: 0;
        z-index: -1;
        background: #fff;
        animation: menuIn 380ms cubic-bezier(0.22, 1, 0.36, 1) both;
    }
    nav.is-open .brand { grid-area: brand; }
    nav.is-open .menu-toggle { grid-area: close; justify-self: end; align-self: center; }
    nav.is-open .nav-links {
        grid-area: links;
        display: flex;
        flex-direction: column;
        align-items: stretch;
        align-self: center;
        gap: 0;
        margin: 0;
    }
    nav.is-open .nav-links > a {
        padding: 1.25rem 0;
        border-bottom: 1px solid var(--n-200);
        font-size: 0.75rem;
        font-weight: 500;
        text-transform: uppercase;
        letter-spacing: 0.15em;
        color: var(--n-900);
        opacity: 0.6;
        animation: menuItemIn 500ms cubic-bezier(0.22, 1, 0.36, 1) both;
    }
    nav.is-open .nav-links > a:first-child { border-top: 1px solid var(--n-200); }
    nav.is-open .nav-links > a:nth-child(1) { animation-delay: 100ms; }
    nav.is-open .nav-links > a:nth-child(2) { animation-delay: 170ms; }
    nav.is-open .nav-links > a:nth-child(3) { animation-delay: 240ms; }
    nav.is-open .nav-links > a::after { display: none; }
    nav.is-open .nav-links > a:hover,
    nav.is-open .nav-links > a:focus-visible,
    nav.is-open .nav-links > a[aria-current="page"] { opacity: 1; }
    /* soft fade-out while closing (classes removed by script.js after it finishes) */
    nav.is-open.is-closing { pointer-events: none; }
    nav.is-open.is-closing::before { animation: menuOut 240ms ease both; }
    nav.is-open.is-closing .nav-links { animation: menuOut 200ms ease both; }
    nav.is-open.is-closing .nav-links > a { animation: none; }

    /* morph the X back to a hamburger during the fade-out */
    nav.is-open.is-closing .menu-toggle span:nth-child(1) { transform: translate(-50%, -8px); }
    nav.is-open.is-closing .menu-toggle span:nth-child(2) { opacity: 1; }
    nav.is-open.is-closing .menu-toggle span:nth-child(3) { transform: translate(-50%, 6px); }

    @media (prefers-reduced-motion: reduce) {
        nav.is-open::before,
        nav.is-open.is-closing::before,
        nav.is-open.is-closing .nav-links,
        nav.is-open .nav-links > a { animation: none; }
    }
}

/* ---------- buttons ---------- */
.btn-arrow {
    display: inline-flex;
    align-items: center;
    gap: 0.75rem;
    border-radius: 9999px;
    padding: 0.5rem 0.5rem 0.5rem 1.5rem;
    font-size: 1rem;
    background: #fff;
    color: var(--n-900);
    transition: background 0.2s ease;
}
.btn-arrow:hover { background: var(--amber); }
.btn-arrow .circle {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 2.5rem;
    height: 2.5rem;
    border-radius: 9999px;
    background: var(--n-900);
    color: #fff;
    flex-shrink: 0;
}
.btn-arrow .circle svg { width: 1rem; height: 1rem; }

.btn-arrow--amber { background: var(--amber); }
.btn-arrow--amber:hover { background: var(--amber-200); }

.btn-arrow--dark { background: var(--n-900); color: #fff; }
.btn-arrow--dark:hover { background: var(--n-700); }
.btn-arrow--dark .circle { background: var(--amber); color: var(--n-900); }

.btn-outline {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    border: 1px solid rgba(255, 255, 255, 0.4);
    border-radius: 9999px;
    padding: 0.75rem 1.5rem;
    color: #fff;
    transition: background 0.2s ease;
}
.btn-outline:hover { background: rgba(255, 255, 255, 0.1); }
.btn-outline svg { width: 1rem; height: 1rem; }

.btn-outline--dark {
    color: var(--n-900);
    border-color: var(--n-300);
}
.btn-outline--dark:hover { background: var(--n-50); }

/* ============================================================
   HOME
   ============================================================ */
.hero {
    position: relative;
    height: 100vh;
    min-height: 40rem;
    width: 100%;
    overflow: hidden;
}
.hero > img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
}
.hero .overlay {
    position: absolute;
    inset: 0;
    background: linear-gradient(to bottom, rgba(0,0,0,0.6), rgba(0,0,0,0.35), rgba(0,0,0,0.85));
}
.hero-content {
    position: relative;
    height: 100%;
    max-width: 80rem;
    margin-inline: auto;
    padding-inline: 1.5rem;
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    padding-bottom: 6rem;
}
@media (min-width: 64rem) { .hero-content { padding-inline: 2.5rem; } }
@media (min-width: 40rem) { .hero-content { padding-bottom: 8rem; } }
@media (min-width: 48rem) { .hero-content { padding-bottom: 9rem; } }

.hero-eyebrow {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    margin-bottom: 1.5rem;
    color: var(--amber);
    letter-spacing: 0.25em;
    font-size: 0.75rem;
    text-transform: uppercase;
}
.hero-eyebrow .rule { width: 2.5rem; height: 1px; background: var(--amber); }

.hero h1 {
    color: #fff;
    font-size: clamp(2rem, 4.5vw, 3.25rem);
    line-height: 1.1;
    max-width: 40rem;
}
.hero h1 .accent { color: var(--amber); }

.hero-sub {
    margin-top: 1.25rem;
    max-width: 30rem;
    font-size: 0.875rem;
    color: var(--n-200);
    line-height: 1.7;
}
@media (min-width: 48rem) { .hero-sub { font-size: 0.9375rem; } }

.hero-actions {
    margin-top: 2rem;
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem;
}

/* hero buttons: small, uppercase, tight radius, like the reference */
.hero-btn {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.7rem 1.2rem;
    border-radius: 0.4rem;
    font-size: 0.7rem;
    font-weight: 500;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    white-space: nowrap;
    transition: background 0.2s ease, color 0.2s ease, border-color 0.2s ease;
}
.hero-btn svg { width: 1rem; height: 1rem; }
.hero-btn--solid {
    background: #fff;
    color: var(--n-900);
    border: 1px solid #fff;
}
.hero-btn--solid:hover { background: var(--n-200); border-color: var(--n-200); }
.hero-btn--outline {
    background: transparent;
    color: #fff;
    border: 1px solid rgba(255, 255, 255, 0.4);
}
.hero-btn--outline:hover { border-color: #fff; }

/* phones: buttons share one row, half the width each */
@media (max-width: 40rem) {
    .hero-actions { flex-wrap: nowrap; }
    .hero-actions .hero-btn {
        flex: 1 1 0;
        min-width: 0;
        justify-content: center;
        padding: 0.7rem 0.4rem;
        font-size: 0.65rem;
    }
}

.hero-meta {
    position: absolute;
    bottom: 0;
    left: 0;
    right: 0;
    border-top: 1px solid rgba(255, 255, 255, 0.2);
    -webkit-backdrop-filter: blur(12px);
    backdrop-filter: blur(12px);
    background: rgba(0, 0, 0, 0.3);
}
.hero-meta-inner {
    max-width: 80rem;
    margin-inline: auto;
    padding: 0.75rem 1.5rem;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.25rem;
    font-size: 0.625rem;
    text-transform: uppercase;
    letter-spacing: 0.18em;
    color: rgba(255, 255, 255, 0.8);
    text-align: center;
}
@media (min-width: 40rem) {
    .hero-meta-inner {
        flex-direction: row;
        justify-content: space-between;
        gap: 1rem;
        font-size: 0.75rem;
        letter-spacing: 0.2em;
        text-align: left;
    }
}
@media (min-width: 48rem) { .hero-meta-inner { padding-block: 1.25rem; } }
@media (min-width: 64rem) { .hero-meta-inner { padding-inline: 2.5rem; } }

/* intro */
.intro { padding-block: 6rem; }
@media (min-width: 48rem) { .intro { padding-block: 8rem; } }
.intro-grid {
    display: grid;
    gap: 2.5rem;
    align-items: start;
}
@media (min-width: 48rem) { .intro-grid { grid-template-columns: 1fr 2fr; } }
.intro-copy {
    font-size: 1.25rem;
    line-height: 1.45;
    letter-spacing: -0.01em;
}
@media (min-width: 48rem) { .intro-copy { font-size: 1.5rem; } }
.intro-copy .fade { color: var(--n-400); }

/* dark sections (services / cta) */
.dark-section {
    position: relative;
    overflow: hidden;
    color: #fff;
    background: var(--dark-grad);
}
.dark-section .glow {
    position: absolute;
    border-radius: 9999px;
    pointer-events: none;
    filter: blur(64px);
}
.dark-section .glow--tr {
    top: -10rem;
    right: -10rem;
    width: 32rem;
    height: 32rem;
    background: rgba(245, 158, 11, 0.1);
}
.dark-section .glow--bl {
    bottom: -12rem;
    left: -10rem;
    width: 28rem;
    height: 28rem;
    background: rgba(251, 191, 36, 0.05);
}
.dark-inner {
    position: relative;
    max-width: 80rem;
    margin-inline: auto;
    padding: 6rem 1.5rem;
}
@media (min-width: 48rem) { .dark-inner { padding-block: 8rem; } }
@media (min-width: 64rem) { .dark-inner { padding-inline: 2.5rem; } }

.section-head {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 1.5rem;
    margin-bottom: 3.5rem;
}
.section-head .eyebrow { margin-bottom: 1rem; }
.section-head h2 {
    font-size: 1.75rem;
    line-height: 1.15;
}
@media (min-width: 48rem) { .section-head h2 { font-size: 2.25rem; } }

.link-underline {
    font-size: 0.875rem;
    text-decoration: underline;
    text-underline-offset: 8px;
}
.link-underline:hover { color: var(--amber); }

.link-caps {
    font-size: 0.875rem;
    text-transform: uppercase;
    letter-spacing: 0.2em;
    border-bottom: 1px solid var(--n-900);
    padding-bottom: 0.25rem;
    transition: color 0.2s ease, border-color 0.2s ease;
}
.link-caps:hover { color: var(--amber-600); border-color: var(--amber-600); }

.services-grid {
    display: grid;
    gap: 1px;
    background: rgba(255, 255, 255, 0.1);
    border: 1px solid rgba(255, 255, 255, 0.1);
    border-radius: 1.5rem;
    overflow: hidden;
}
@media (min-width: 48rem) { .services-grid { grid-template-columns: repeat(3, 1fr); } }
.service-card {
    background: rgba(12, 10, 9, 0.9);
    padding: 2.5rem;
    transition: background 0.2s ease;
}
@media (min-width: 48rem) { .service-card { padding: 3rem; } }
.service-card:hover { background: rgba(28, 25, 23, 0.9); }
.service-card svg {
    width: 2.5rem;
    height: 2.5rem;
    color: var(--amber);
    margin-bottom: 2.5rem;
}
.service-card h3 {
    font-size: 1.25rem;
    margin-bottom: 1rem;
}
.service-card p { color: var(--n-400); line-height: 1.625; }
.service-card .more {
    display: inline-block;
    margin-top: 1.5rem;
    font-size: 0.75rem;
    text-transform: uppercase;
    letter-spacing: 0.15em;
    color: var(--amber);
}

/* featured work */
.featured { padding-block: 6rem; }
@media (min-width: 48rem) { .featured { padding-block: 8rem; } }
.featured-grid {
    display: grid;
    gap: 2rem;
}
@media (min-width: 48rem) { .featured-grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 64rem) { .featured-grid { grid-template-columns: repeat(3, 1fr); } }
.featured-card .frame {
    position: relative;
    aspect-ratio: 4 / 5;
    overflow: hidden;
    margin-bottom: 1.25rem;
    background: var(--n-100);
}
.featured-card .frame img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform 0.7s ease;
}
.featured-card:hover .frame img { transform: scale(1.05); }
.featured-card .chip {
    position: absolute;
    top: 1rem;
    left: 1rem;
    font-size: 0.75rem;
    text-transform: uppercase;
    letter-spacing: 0.2em;
    background: rgba(255, 255, 255, 0.9);
    -webkit-backdrop-filter: blur(4px);
    backdrop-filter: blur(4px);
    padding: 0.25rem 0.75rem;
    border-radius: 9999px;
}
.featured-card h3 { font-size: 1.125rem; margin-bottom: 0.5rem; }
.featured-card p { color: var(--n-500); font-size: 0.875rem; line-height: 1.625; }

/* testimonials */
.testimonials { background: var(--n-100); }
.testimonials-inner {
    max-width: 80rem;
    margin-inline: auto;
    padding: 6rem 1.5rem;
}
@media (min-width: 48rem) { .testimonials-inner { padding-block: 8rem; } }
@media (min-width: 64rem) { .testimonials-inner { padding-inline: 2.5rem; } }
.testimonials .section-head { margin-bottom: 2.5rem; }
@media (min-width: 48rem) {
    .testimonials .section-head { margin-bottom: 3.5rem; }
}
.testimonials .section-head h2 .accent { color: var(--amber); }

.carousel-arrows {
    display: none;
    align-items: center;
    gap: 0.75rem;
    flex-shrink: 0;
}
@media (min-width: 40rem) { .carousel-arrows { display: flex; } }
.carousel-arrows button {
    width: 3rem;
    height: 3rem;
    border-radius: 9999px;
    background: var(--n-900);
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: background 0.2s ease, opacity 0.2s ease;
}
.carousel-arrows button:hover:not(:disabled) { background: var(--n-700); }
.carousel-arrows button:disabled { background: var(--n-300); cursor: not-allowed; }
.carousel-arrows svg { width: 1.25rem; height: 1.25rem; }

.testimonial-track {
    display: flex;
    gap: 1.5rem;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    padding-bottom: 0.5rem;
    scrollbar-width: none;
}
.testimonial-track::-webkit-scrollbar { display: none; }

.testimonial-card {
    scroll-snap-align: start;
    flex-shrink: 0;
    width: 85%;
    border-radius: 1.5rem;
    padding: 2rem;
    display: flex;
    flex-direction: column;
}
@media (min-width: 40rem) { .testimonial-card { width: 55%; } }
@media (min-width: 64rem) { .testimonial-card { width: 42%; } }
@media (min-width: 48rem) { .testimonial-card { padding: 2.5rem; } }

.testimonial-card .quote-badge {
    width: 2.5rem;
    height: 2.5rem;
    border-radius: 9999px;
    display: flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 2rem;
}
.testimonial-card .quote-badge svg { width: 1rem; height: 1rem; }
.testimonial-card blockquote {
    margin: 0;
    font-size: 1rem;
    line-height: 1.6;
    flex: 1;
}
@media (min-width: 48rem) { .testimonial-card blockquote { font-size: 1.0625rem; } }
.testimonial-card footer {
    margin-top: 2rem;
    padding-top: 1.5rem;
    border-top: 1px solid;
    display: flex;
    align-items: center;
    gap: 1rem;
}
.testimonial-card .avatar {
    width: 2.5rem;
    height: 2.5rem;
    border-radius: 9999px;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 0.875rem;
    font-weight: 500;
}
.testimonial-card .who { font-size: 0.875rem; font-weight: 500; }
.testimonial-card .where { font-size: 0.75rem; }

.testimonial-card--dark { background: var(--n-950); color: #fff; }
.testimonial-card--dark .quote-badge { background: var(--amber); color: var(--n-900); }
.testimonial-card--dark .avatar { background: rgba(255, 255, 255, 0.1); }
.testimonial-card--dark footer { border-color: rgba(255, 255, 255, 0.15); }
.testimonial-card--dark .where { color: rgba(255, 255, 255, 0.6); }

.testimonial-card--light { background: #fff; color: var(--n-900); border: 1px solid var(--n-200); }
.testimonial-card--light .quote-badge { background: var(--n-900); color: var(--amber); }
.testimonial-card--light .avatar { background: var(--n-100); color: var(--n-900); }
.testimonial-card--light footer { border-color: var(--n-200); }
.testimonial-card--light .where { color: var(--n-500); }

.testimonial-card--amber { background: var(--amber); color: var(--n-900); }
.testimonial-card--amber .quote-badge { background: var(--n-900); color: var(--amber); }
.testimonial-card--amber .avatar { background: rgba(23, 23, 23, 0.1); color: var(--n-900); }
.testimonial-card--amber footer { border-color: rgba(23, 23, 23, 0.15); }
.testimonial-card--amber .where { color: var(--n-700); }

.carousel-dots {
    margin-top: 2rem;
    display: flex;
    align-items: center;
    justify-content: center;
}
.carousel-dots button {
    min-width: 44px;
    min-height: 44px;
    display: flex;
    align-items: center;
    justify-content: center;
}
.carousel-dots .dot {
    display: block;
    height: 0.5rem;
    width: 0.5rem;
    border-radius: 9999px;
    background: var(--n-300);
    transition: width 0.2s ease, background 0.2s ease;
}
.carousel-dots button:hover .dot { background: var(--n-400); }
.carousel-dots button[aria-current="true"] .dot { width: 2rem; background: var(--n-900); }

.testimonials-note {
    margin-top: 2.5rem;
    text-align: center;
    font-size: 0.75rem;
    text-transform: uppercase;
    letter-spacing: 0.3em;
    color: var(--n-500);
}
.testimonials-note a {
    color: var(--n-900);
    text-decoration: underline;
    text-underline-offset: 3px;
}

/* ============================================================
   SERVICE PAGES
   ============================================================ */
.prose {
    max-width: 46rem;
    margin-inline: auto;
    padding: 3rem 1.5rem;
}
.prose h2 {
    font-size: 1.375rem;
    margin: 2.25rem 0 0.75rem;
}
.prose h2:first-child { margin-top: 0; }
.prose p { color: var(--n-600); line-height: 1.75; margin-bottom: 1rem; }
.prose ul, .prose ol { margin: 0 0 1rem 1.25rem; color: var(--n-600); line-height: 1.75; }
.prose ul { list-style: disc; }
.prose ol { list-style: decimal; }
.prose li { margin-bottom: 0.35rem; }
.prose a { text-decoration: underline; text-underline-offset: 3px; }

.hero-btn--dark {
    background: var(--n-900);
    color: #fff;
    border: 1px solid var(--n-900);
}
.hero-btn--dark:hover { background: var(--n-700); border-color: var(--n-700); }

.service-gallery {
    max-width: 62rem;
    margin-inline: auto;
    padding: 0 1.5rem 1rem;
}

.service-cta {
    max-width: 46rem;
    margin-inline: auto;
    padding: 0 1.5rem 4rem;
}

/* individual project pages */
.project-detail {
    max-width: 60rem;
    margin-inline: auto;
    padding: 3rem 1.5rem 4rem;
}
.project-detail img {
    width: 100%;
    border-radius: 0.75rem;
}
.project-desc {
    max-width: 42rem;
    margin-top: 2rem;
    font-size: 1.0625rem;
    color: var(--n-600);
    line-height: 1.75;
}
.project-detail-actions {
    margin-top: 2.5rem;
    display: flex;
    flex-wrap: wrap;
    gap: 0.75rem;
}
.hero-btn--outline-dark {
    background: transparent;
    color: var(--n-900);
    border: 1px solid var(--n-300);
}
.hero-btn--outline-dark:hover { border-color: var(--n-900); }

/* ============================================================
   PROJECTS
   ============================================================ */
.page-hero {
    padding: 8rem 0 5rem;
    background: var(--n-50);
}
@media (min-width: 48rem) { .page-hero { padding: 10rem 0 7rem; } }
.page-hero .eyebrow { margin-bottom: 1.5rem; }
.page-hero-grid {
    display: grid;
    gap: 2rem;
    align-items: end;
}
@media (min-width: 48rem) { .page-hero-grid { grid-template-columns: 2fr 1fr; } }
.page-hero h1 {
    font-size: 1.75rem;
    line-height: 1.15;
}
@media (min-width: 48rem) { .page-hero h1 { font-size: 2.25rem; } }
.page-hero .lede {
    font-size: 1rem;
    color: var(--n-600);
    line-height: 1.625;
}

.filter-bar {
    border-top: 1px solid var(--n-200);
    border-bottom: 1px solid var(--n-200);
    position: sticky;
    top: 4rem;
    background: rgba(255, 255, 255, 0.9);
    -webkit-backdrop-filter: blur(8px);
    backdrop-filter: blur(8px);
    z-index: 40;
}
@media (min-width: 48rem) { .filter-bar { top: 5rem; } }
.filter-bar-inner {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    padding-block: 1rem;
}
.filter-btn {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    border-radius: 9999px;
    padding: 0.5rem 1.25rem;
    font-size: 0.875rem;
    background: var(--n-100);
    color: var(--n-700);
    transition: background 0.2s ease, color 0.2s ease;
}
.filter-btn:hover { background: var(--n-200); }
.filter-btn .count { font-size: 0.75rem; color: var(--n-400); }
.filter-btn[aria-pressed="true"] { background: var(--n-900); color: #fff; }
.filter-btn[aria-pressed="true"] .count { color: var(--amber); }

.projects-section { padding-block: 4rem; }
@media (min-width: 48rem) { .projects-section { padding-block: 6rem; } }
.projects-grid {
    display: grid;
    grid-template-columns: 1fr;
    grid-auto-rows: 260px;
    grid-auto-flow: dense;
    gap: 1.5rem;
}
@media (min-width: 48rem) { .projects-grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 64rem) { .projects-grid { grid-template-columns: repeat(3, 1fr); gap: 2rem; } }

.project-card {
    position: relative;
    overflow: hidden;
    background: var(--n-100);
    grid-row: span 2;
}
.project-card.hidden { display: none; }
@media (min-width: 48rem) { .project-card--wide { grid-column: span 2; } }
.project-card > img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform 0.7s ease;
}
.project-card:hover > img { transform: scale(1.05); }
.project-card .shade {
    position: absolute;
    inset: 0;
    background: linear-gradient(to top, rgba(0,0,0,0.85), rgba(0,0,0,0.1) 50%, transparent);
}
.project-card .year {
    position: absolute;
    top: 1rem;
    left: 1rem;
    font-size: 0.625rem;
    text-transform: uppercase;
    letter-spacing: 0.2em;
    background: rgba(0, 0, 0, 0.5);
    -webkit-backdrop-filter: blur(4px);
    backdrop-filter: blur(4px);
    color: #fff;
    padding: 0.25rem 0.75rem;
    border-radius: 9999px;
}
.project-card .caption {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    padding: 1.5rem;
    color: #fff;
}
.project-card .loc {
    font-size: 0.75rem;
    text-transform: uppercase;
    letter-spacing: 0.2em;
    color: var(--amber);
    margin-bottom: 0.5rem;
}
.project-card h2 {
    font-size: 1.25rem;
    margin-bottom: 0.5rem;
}
.project-card .desc {
    font-size: 0.875rem;
    color: var(--n-200);
    line-height: 1.625;
    max-width: 28rem;
    opacity: 0;
    transform: translateY(0.5rem);
    transition: opacity 0.5s ease, transform 0.5s ease;
}
.project-card.in-view .desc { opacity: 1; transform: translateY(0); }
@media (min-width: 48rem) {
    .project-card.in-view .desc { opacity: 0; transform: translateY(0.5rem); }
    .project-card:hover .desc,
    .project-card:focus-within .desc { opacity: 1; transform: translateY(0); }
}

/* ============================================================
   CONTACT
   ============================================================ */
.enquire {
    max-width: 42rem;
    margin-inline: auto;
    padding: 0.5rem 1.5rem 3.5rem;
    display: grid;
    gap: 2rem;
}

/* the form on a dark card */
.form-card {
    background: linear-gradient(180deg, var(--n-900) 0%, var(--n-950) 100%);
    border-radius: 1.25rem;
    padding: 2.25rem 1.9rem;
    box-shadow: 0 24px 50px rgba(10, 10, 9, 0.18);
    color: #fff;
}
@media (min-width: 48rem) { .form-card { padding: 2.75rem 2.5rem; } }

.form-card .field { display: block; margin-bottom: 1.75rem; }
.form-card .field-label {
    display: block;
    margin-bottom: 0.4rem;
    font-size: 0.75rem;
    font-weight: 500;
    text-transform: uppercase;
    letter-spacing: 0.15em;
    color: rgba(255, 255, 255, 0.55);
}
.form-card input[type="text"],
.form-card input[type="email"],
.form-card input[type="tel"],
.form-card textarea {
    width: 100%;
    background: transparent;
    border: none;
    border-bottom: 1px solid rgba(255, 255, 255, 0.22);
    border-radius: 0;
    padding: 0.5rem 0.15rem;
    color: #fff;
    font-weight: 300;
}
.form-card input::placeholder,
.form-card textarea::placeholder { color: rgba(255, 255, 255, 0.4); }
.form-card input:focus,
.form-card textarea:focus {
    outline: none;
    border-bottom-color: var(--amber);
}
.form-card textarea { resize: vertical; }

/* inline field errors */
.field-err {
    display: none;
    font-size: 0.78rem;
    color: #eaa9a9;
    padding-top: 0.35rem;
}
.field-err.show { display: block; }
.form-card input.is-invalid,
.form-card textarea.is-invalid { border-bottom-color: #eaa9a9; }

.consent-row {
    display: flex;
    align-items: flex-start;
    gap: 0.6rem;
    margin-bottom: 1.75rem;
}
.consent-row + .field-err.show { margin: -1.25rem 0 1.75rem; }
.consent-row input[type="checkbox"] {
    width: 1.1rem;
    height: 1.1rem;
    margin-top: 0.15rem;
    accent-color: var(--amber);
    flex-shrink: 0;
}
.consent-text { color: rgba(255, 255, 255, 0.65); font-size: 0.9rem; }
.consent-text a { color: #fff; text-decoration: underline; text-underline-offset: 2px; }

.form-error {
    border: 1px solid #fecaca;
    background: #fef2f2;
    color: #b91c1c;
    border-radius: 0.75rem;
    padding: 1rem;
    font-size: 0.875rem;
    margin-bottom: 1.75rem;
}
.form-error[hidden] { display: none; }

/* full width, thin, white submit button */
.submit-btn {
    display: block;
    width: 100%;
    background: #fff;
    color: var(--n-900);
    border-radius: 0.75rem;
    padding: 0.9rem 1.25rem;
    font-size: 0.9rem;
    font-weight: 500;
    text-transform: uppercase;
    letter-spacing: 0.15em;
    text-align: center;
    transition: background 0.2s ease, opacity 0.2s ease;
}
.submit-btn:hover { background: var(--n-100); }
.submit-btn:disabled { opacity: 0.6; cursor: not-allowed; }

.form-success {
    background: rgba(255, 255, 255, 0.06);
    border: 1px solid rgba(255, 255, 255, 0.15);
    border-radius: 1rem;
    padding: 2rem;
}
.form-success[hidden] { display: none; }
.form-success .tick {
    width: 3.5rem;
    height: 3.5rem;
    border-radius: 9999px;
    background: #fff;
    color: var(--n-900);
    display: flex;
    align-items: center;
    justify-content: center;
    margin-bottom: 1.25rem;
}
.form-success .tick svg { width: 1.75rem; height: 1.75rem; }
.form-success h2 { font-size: 1.5rem; margin-bottom: 0.75rem; }
.form-success p { color: rgba(255, 255, 255, 0.75); line-height: 1.625; }
.form-success p a { color: #fff; text-decoration: underline; text-underline-offset: 4px; }

/* phone + email under the card */
.contact-direct {
    display: flex;
    flex-wrap: wrap;
    gap: 1rem 2rem;
    padding-inline: 0.25rem;
}
.contact-direct-item {
    display: inline-flex;
    align-items: center;
    gap: 0.6rem;
    color: var(--n-900);
    font-size: 0.95rem;
    font-weight: 500;
    transition: color 0.2s ease;
}
.contact-direct-item svg { width: 1.1rem; height: 1.1rem; color: var(--amber-600); flex-shrink: 0; }
.contact-direct-item:hover { color: var(--n-600); }

/* ============================================================
   FAQ
   ============================================================ */
.faq {
    max-width: 46rem;
    margin-inline: auto;
    padding: 0 1.5rem 3.5rem;
}
.faq-head { margin-bottom: 0.75rem; }
.faq-head .eyebrow { margin-bottom: 1rem; }
.faq-head h2 {
    font-size: 1.75rem;
    line-height: 1.15;
}
@media (min-width: 48rem) { .faq-head h2 { font-size: 2.25rem; } }

.faq-item { border-bottom: 1px solid var(--n-200); }
.faq-item summary {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1.25rem;
    padding-block: 1.4rem;
    cursor: pointer;
    list-style: none;
}
.faq-item summary::-webkit-details-marker { display: none; }
.faq-q {
    font-size: 1.05rem;
    font-weight: 500;
    color: var(--n-900);
}
.faq-toggle {
    flex-shrink: 0;
    display: grid;
    place-items: center;
    width: 2.6rem;
    height: 2rem;
    border-radius: 999px;
    background: var(--n-900);
    border: 1px solid var(--n-900);
    color: #fff;
    transition: background 0.25s ease, color 0.25s ease;
}
/* plus drawn with two centred bars: the vertical one rotates away to leave a minus */
.faq-toggle::before,
.faq-toggle::after {
    content: "";
    grid-area: 1 / 1;
    width: 0.55rem;
    height: 1px;
    border-radius: 1px;
    background: currentColor;
    opacity: 0.85;
}
.faq-toggle::after {
    transform: rotate(90deg);
    transition: transform 0.25s ease;
}
.faq-item.is-open .faq-toggle,
.faq-item[open]:not(.faq-js) .faq-toggle {
    background: transparent;
    color: var(--n-900);
}
.faq-item.is-open .faq-toggle::after,
.faq-item[open]:not(.faq-js) .faq-toggle::after { transform: rotate(0deg); }

.faq-a {
    margin: 0;
    padding-bottom: 1.5rem;
    max-width: 38rem;
    color: var(--n-600);
    line-height: 1.7;
}
/* answers slide open and closed: JS keeps <details> open and drives .is-open */
.faq-item.faq-js .faq-a-wrap {
    display: grid;
    grid-template-rows: 0fr;
    overflow: hidden;
    transition: grid-template-rows 340ms cubic-bezier(0.22, 1, 0.36, 1);
}
.faq-item.faq-js .faq-a-wrap > .faq-a {
    min-height: 0;
    opacity: 0;
    transition: opacity 260ms ease;
}
.faq-item.faq-js.is-open .faq-a-wrap { grid-template-rows: 1fr; }
.faq-item.faq-js.is-open .faq-a-wrap > .faq-a { opacity: 1; }

/* ============================================================
   PRIVACY / 404
   ============================================================ */
.legal-hero {
    padding: 8rem 0 3rem;
    background: var(--n-50);
}
@media (min-width: 48rem) { .legal-hero { padding: 10rem 0 4rem; } }
.legal-hero .container,
.legal-body .container { max-width: 48rem; }
.legal-hero .eyebrow { margin-bottom: 1.5rem; }
.legal-hero h1 {
    font-size: 2rem;
    line-height: 1.1;
}
@media (min-width: 48rem) { .legal-hero h1 { font-size: 2.5rem; } }
.legal-hero .updated { margin-top: 1.5rem; color: var(--n-600); }

.legal-body { padding-block: 4rem; }
@media (min-width: 48rem) { .legal-body { padding-block: 5rem; } }
.legal-body .container > * + * { margin-top: 2.5rem; }
.legal-body p { color: var(--n-700); line-height: 1.625; }
.legal-body h2 {
    font-size: 1.5rem;
    color: var(--n-900);
    margin-bottom: 1rem;
}
.legal-body a { text-decoration: underline; }

.notfound {
    min-height: 80vh;
    display: flex;
    align-items: center;
}
.notfound .container {
    max-width: 48rem;
    padding-block: 5rem;
    text-align: center;
}
.notfound .eyebrow {
    justify-content: center;
    margin-bottom: 1.5rem;
}
.notfound h1 {
    font-size: 2rem;
    line-height: 1.1;
}
@media (min-width: 48rem) { .notfound h1 { font-size: 2.5rem; } }
.notfound p {
    margin-top: 1.5rem;
    font-size: 1.125rem;
    color: var(--n-600);
    max-width: 32rem;
    margin-inline: auto;
}
.notfound-actions {
    margin-top: 2.5rem;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: center;
    gap: 1rem;
}
.notfound-actions .solid {
    display: inline-flex;
    align-items: center;
    gap: 0.75rem;
    background: var(--n-900);
    color: #fff;
    border-radius: 9999px;
    padding: 0.75rem 1.5rem;
    transition: background 0.2s ease;
}
.notfound-actions .solid:hover { background: var(--n-700); }

/* ============================================================
   FOOTER
   ============================================================ */
.site-footer {
    background: var(--n-950);
    color: var(--n-300);
}
.footer-inner {
    max-width: 80rem;
    margin-inline: auto;
    padding: 4rem 1.5rem;
}
@media (min-width: 64rem) { .footer-inner { padding-inline: 2.5rem; } }
.footer-grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: 3rem;
    min-width: 0;
}
.footer-grid > div { min-width: 0; }
@media (min-width: 48rem) { .footer-grid { grid-template-columns: minmax(0, 2fr) minmax(0, 1fr) minmax(0, 1fr); } }
.footer-brand {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    margin-bottom: 1.25rem;
    letter-spacing: 0.1em;
    font-size: 0.875rem;
    color: #fff;
}
.footer-brand img { width: 3rem; height: 3rem; object-fit: contain; }
.footer-about {
    color: var(--n-400);
    max-width: 28rem;
    line-height: 1.625;
}
.footer-heading {
    font-size: 0.75rem;
    text-transform: uppercase;
    letter-spacing: 0.2em;
    color: var(--n-500);
    margin-bottom: 0.75rem;
}
.footer-col ul { display: flex; flex-direction: column; gap: 1rem; }
.footer-col a {
    display: inline-flex;
    align-items: center;
    gap: 0.5rem;
    padding-block: 0.25rem;
    transition: color 0.2s ease;
}
.footer-col a:hover { color: #fff; }
.footer-col svg { width: 1rem; height: 1rem; }

.suppliers { margin-top: 2rem; max-width: 28rem; }
.suppliers .footer-heading { margin-bottom: 1.25rem; }
.marquee-window {
    position: relative;
    overflow: hidden;
    max-width: 100%;
    -webkit-mask-image: linear-gradient(to right, transparent, black 8%, black 92%, transparent);
    mask-image: linear-gradient(to right, transparent, black 8%, black 92%, transparent);
}
.marquee {
    display: flex;
    gap: 3.5rem;
    width: max-content;
    white-space: nowrap;
    animation: marquee-x 32s linear infinite;
}
.marquee-window:hover .marquee { animation-play-state: paused; }
.marquee span {
    color: var(--n-400);
    letter-spacing: 0.15em;
    text-transform: uppercase;
    font-size: 0.75rem;
    flex-shrink: 0;
}
@keyframes marquee-x {
    from { transform: translateX(0); }
    to { transform: translateX(-50%); }
}

.footer-bottom {
    margin-top: 2.5rem;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    font-size: 0.75rem;
    color: var(--n-500);
}
@media (min-width: 48rem) { .footer-bottom { flex-direction: row; } }
.footer-bottom-links {
    display: flex;
    align-items: center;
    gap: 1.5rem;
}
.footer-bottom a { transition: color 0.2s ease; }
.footer-bottom a:hover { color: #fff; }
.footer-bottom .made-by a:hover { text-decoration: underline; text-underline-offset: 4px; }

/* ---------- motion ---------- */
@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
        animation-duration: 0.01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.01ms !important;
        scroll-behavior: auto !important;
    }
    .splash { display: none; }
}
