/* ==========================================================================
   THIRD. — Inner pages
   Composable blocks for every page beyond the homepage. Everything here is
   built from the homepage tokens in third.css: same palette, same type scale,
   same reveal mechanics. Nothing introduces a new colour or a new easing.
   ========================================================================== */

/* --------------------------------------------------------------------------
   Surfaces
   -------------------------------------------------------------------------- */

.th--paper {
    background: var(--th-paper);
}

.th--bone {
    background: var(--th-bone);
}

.th-pblock {
    padding-block: var(--th-block);
}

.th-page-hero,
.th-statement,
.th-feature,
.th-process,
.th-products,
.th-team,
.th-gallery,
.th-carte,
.th-visit,
.th-contact,
.th-links {
    padding-block: var(--th-block);
}

/* Muted text has to stay AA on every surface: the soft ink is 68% black on
   cream, the soft cream 78% white on ink. Labels in crema are only used at
   label size and weight 500+, where the contrast target is the large-text one. */
.th--dark .th-label,
.th--espresso .th-label {
    color: #D79A63;
}

/* --------------------------------------------------------------------------
   Shared primitives
   -------------------------------------------------------------------------- */

.th-head {
    display: grid;
    gap: clamp(1rem, 2vw, 1.6rem);
    max-width: 62rem;
}

.th-head__meta {
    display: flex;
    align-items: center;
    gap: 1.1rem;
}

.th-head__title {
    font-size: var(--th-t-xl);
    line-height: .95;
    max-width: 14ch;
}

.th-head__title em,
.th-page-hero__title em,
.th-product__name em,
.th-story__title em,
.th-journey__title em,
.th-timeline__title em {
    font-family: var(--th-editorial);
    font-style: italic;
    font-weight: 400;
    letter-spacing: -.015em;
    color: var(--th-espresso);
}

.th--dark .th-head__title em,
.th--espresso .th-head__title em,
.th--dark .th-page-hero__title em,
.th--dark .th-story__title em,
.th--dark .th-journey__title em,
.th--espresso .th-journey__title em,
.th--dark .th-timeline__title em {
    color: var(--th-crema);
}

/* The drawn underline from the homepage statements, on every accent word. */
.th-head__title .th-word--accent > span,
.th-page-hero__title .th-word--accent > span {
    position: relative;
}

.th-head__title .th-word--accent > span::after,
.th-page-hero__title .th-word--accent > span::after {
    content: "";
    position: absolute;
    left: -.02em;
    right: -.02em;
    bottom: .01em;
    height: .15em;
    background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 200 12' preserveAspectRatio='none'%3E%3Cpath d='M2 8.4C38 3.2 66 10.6 104 5.6c30-4 62-2.2 94 2.2' fill='none' stroke='%23C1793C' stroke-width='3.2' stroke-linecap='round'/%3E%3C/svg%3E") no-repeat center / 100% 100%;
    transform: scaleX(0);
    transform-origin: left;
    transition: transform .8s var(--th-ease);
    transition-delay: calc(var(--i, 0) * 55ms + 520ms);
}

.th-js [data-th-reveal].is-in.th-head__title .th-word--accent > span::after,
.th-js [data-th-reveal].is-in.th-page-hero__title .th-word--accent > span::after,
html:not(.th-js) .th-head__title .th-word--accent > span::after,
html:not(.th-js) .th-page-hero__title .th-word--accent > span::after,
.th-is-editor .th-head__title .th-word--accent > span::after,
.th-is-editor .th-page-hero__title .th-word--accent > span::after {
    transform: scaleX(1);
}

.th-head__intro {
    display: grid;
    gap: 1em;
    font-size: var(--th-t-sm);
    line-height: 1.55;
    color: var(--th-muted);
    max-width: 46ch;
}

.th-prose {
    display: grid;
    gap: 1.05em;
    max-width: 60ch;
    color: var(--th-muted);
}

.th-prose p:first-child {
    color: inherit;
}

.th-section .th-prose a,
.th-section .th-head__intro a {
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: .2em;
    color: var(--th-ink);
}

.th--dark .th-prose a,
.th--espresso .th-prose a {
    color: var(--th-cream);
}

.th-caption {
    display: flex;
    align-items: center;
    gap: .8em;
    margin-top: .9rem;
    font-size: var(--th-t-label);
    letter-spacing: .18em;
    text-transform: uppercase;
    color: var(--th-muted);
    line-height: 1.7;
}

.th-caption i,
.th-page-hero__caption i {
    display: block;
    flex: none;
    width: 28px;
    height: 1px;
    background: currentColor;
    opacity: .6;
}

/* Filled action: ink on light, cream on dark — the hero's filled CTA, made
   available to every block. Prefixed with .th-section to outrank the shared
   `.th-section a { color: inherit }` reset. */
.th-section .th-cta--solid {
    background: var(--th-ink);
    border-color: var(--th-ink);
    color: var(--th-cream);
}

.th-section .th-cta--solid::before {
    background: var(--th-espresso);
}

.th-section .th-cta--solid:hover,
.th-section .th-cta--solid:focus-visible {
    color: var(--th-cream);
    border-color: var(--th-espresso);
}

.th-section.th--dark .th-cta--solid,
.th-section.th--espresso .th-cta--solid,
.th-section.th-page-hero--full .th-cta--solid {
    background: var(--th-cream);
    border-color: var(--th-cream);
    color: var(--th-ink);
}

.th-section.th--dark .th-cta--solid::before,
.th-section.th--espresso .th-cta--solid::before,
.th-section.th-page-hero--full .th-cta--solid::before {
    background: var(--th-crema);
}

.th-section.th--dark .th-cta--solid:hover,
.th-section.th--dark .th-cta--solid:focus-visible,
.th-section.th--espresso .th-cta--solid:hover,
.th-section.th--espresso .th-cta--solid:focus-visible {
    color: var(--th-ink);
    border-color: var(--th-crema);
}

/* Facts row — term over a large value over a line. */
.th-facts {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 14rem), 1fr));
    gap: 0;
    margin: clamp(3rem, 6vw, 5rem) 0 0;
    border-top: 1px solid var(--th-rule);
}

.th-facts__item {
    display: grid;
    align-content: start;
    gap: .55rem;
    padding: clamp(1.4rem, 2.6vw, 2.2rem) clamp(1rem, 2vw, 1.75rem) 0 0;
    margin: 0;
}

.th-facts__item + .th-facts__item {
    padding-left: clamp(1rem, 2vw, 1.75rem);
    border-left: 1px solid var(--th-rule);
}

.th-facts__term {
    font-size: var(--th-t-label);
    font-weight: 600;
    letter-spacing: .2em;
    text-transform: uppercase;
    color: var(--th-crema);
}

.th--dark .th-facts__term,
.th--espresso .th-facts__term {
    color: #D79A63;
}

.th-facts__value {
    margin: 0;
    font-family: var(--th-display);
    font-size: var(--th-t-md);
    font-weight: 800;
    letter-spacing: -.03em;
    line-height: 1;
}

.th-facts__value em {
    font-family: var(--th-editorial);
    font-weight: 400;
    font-style: italic;
}

.th-facts__desc {
    margin: 0;
    color: var(--th-muted);
    max-width: 30ch;
}

/* Ticked list */
.th-ticks {
    list-style: none;
    margin: clamp(1.5rem, 3vw, 2.25rem) 0 0;
    padding: 0;
    display: grid;
    gap: .8rem;
    max-width: 52ch;
}

.th-ticks li {
    display: grid;
    grid-template-columns: 1.6rem 1fr;
    align-items: start;
    gap: .6rem;
    padding-bottom: .8rem;
    border-bottom: 1px solid var(--th-rule);
}

.th-ticks__mark {
    width: .8rem;
    height: .8rem;
    margin-top: .42em;
    color: var(--th-crema);
}

/* --------------------------------------------------------------------------
   Page hero
   -------------------------------------------------------------------------- */

.th-page-hero {
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
}

.th-page-hero__title {
    font-size: var(--th-t-hero);
    line-height: .9;
    letter-spacing: -.045em;
    max-width: 12ch;
}

.th-page-hero__intro {
    display: grid;
    gap: 1em;
    margin-top: clamp(1.25rem, 2.4vw, 2rem);
    font-size: var(--th-t-sm);
    line-height: 1.55;
    max-width: 44ch;
    color: var(--th-muted);
}

.th-page-hero__copy {
    display: grid;
    gap: clamp(.9rem, 1.6vw, 1.25rem);
    align-content: end;
}

.th-page-hero__copy > .th-label {
    margin-top: .25rem;
}

.th-page-hero__actions {
    margin-top: clamp(1rem, 2vw, 1.75rem);
}

.th-page-hero__crumbs ol {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-wrap: wrap;
    gap: .55em;
    font-size: var(--th-t-label);
    letter-spacing: .18em;
    text-transform: uppercase;
    color: var(--th-muted);
}

.th-page-hero__crumbs li + li::before {
    content: "/";
    margin-right: .55em;
    opacity: .5;
}

.th-page-hero__crumbs a {
    transition: color .3s var(--th-ease);
}

.th-page-hero__crumbs a:hover,
.th-page-hero__crumbs a:focus-visible {
    color: var(--th-crema);
}

.th-page-hero__caption {
    display: flex;
    align-items: center;
    gap: .8em;
    font-size: var(--th-t-label);
    letter-spacing: .18em;
    text-transform: uppercase;
    color: var(--th-muted);
}

.th-page-hero__foot {
    position: relative;
    z-index: 3;
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    justify-content: space-between;
    gap: 1.5rem 3rem;
    margin-top: clamp(2.5rem, 5vw, 4.5rem);
}

.th-page-hero__facts {
    display: flex;
    flex-wrap: wrap;
    gap: 1.25rem clamp(1.75rem, 4vw, 3.75rem);
    margin: 0;
    padding-top: 1.4rem;
    border-top: 1px solid var(--th-rule);
    flex: 1 1 30rem;
}

.th-page-hero__facts div {
    display: grid;
    gap: .4rem;
}

.th-page-hero__facts dt {
    font-size: var(--th-t-label);
    letter-spacing: .2em;
    text-transform: uppercase;
    color: var(--th-muted);
}

.th-page-hero__facts dd {
    margin: 0;
    font-family: var(--th-display);
    font-size: var(--th-t-sm);
    font-weight: 700;
    letter-spacing: -.01em;
}

/* Full: photograph under the header, ink over it. */
.th-page-hero--full {
    min-height: min(100svh, 62rem);
    padding-top: calc(var(--th-header-h, 6rem) + clamp(3rem, 8vw, 6rem));
    padding-bottom: clamp(2.5rem, 5vw, 4rem);
    background: var(--th-ink);
    color: var(--th-cream);
}

.th-page-hero__media {
    position: absolute;
    inset: 0;
    margin: 0;
    z-index: 0;
}

.th-section .th-page-hero__media img {
    position: absolute;
    inset: -4% 0 0;
    width: 100%;
    height: 104%;
    max-width: none;
    object-fit: cover;
    object-position: var(--thp-focus, center);
    /* A slow drift with the section's own scroll, the homepage hero's parallax
       at half the travel. */
    transform: translate3d(0, calc(var(--th-p, 0) * 6%), 0) scale(1.04);
    will-change: transform;
}

.th-page-hero__shade {
    position: absolute;
    inset: 0;
    z-index: 1;
    background:
        linear-gradient(180deg, rgba(23, 16, 10, .55) 0%, rgba(23, 16, 10, 0) 32%),
        linear-gradient(0deg, rgba(23, 16, 10, .9) 0%, rgba(23, 16, 10, calc(var(--thp-shade, .5) * .9)) 45%, rgba(23, 16, 10, calc(var(--thp-shade, .5) * .6)) 100%);
}

.th-page-hero--full .th-page-hero__inner {
    position: relative;
    z-index: 3;
}

.th-page-hero--full .th-page-hero__title {
    text-shadow: 0 1px 30px rgba(23, 16, 10, .25);
}

/* Split: title on cream, the photograph tall beside it. */
.th-page-hero--split {
    padding-top: clamp(3rem, 7vw, 6.5rem);
}

.th-page-hero--split .th-page-hero__inner {
    display: grid;
    grid-template-columns: minmax(0, 1.08fr) minmax(0, .92fr);
    gap: clamp(2rem, 6vw, 6rem);
    align-items: end;
}

/* Half the width, so the type scale steps down: a long Dutch word like
   "omgebouwd" has to fit its column, never run into the photograph. */
.th-page-hero--split .th-page-hero__title {
    font-size: clamp(2.5rem, 6.2vw, 6.75rem);
    overflow-wrap: break-word;
}

.th-page-hero__frame {
    aspect-ratio: 4 / 5;
    border-radius: 2px;
}

.th-page-hero__aside .th-page-hero__caption {
    margin-top: .9rem;
}

/* --------------------------------------------------------------------------
   Statement
   -------------------------------------------------------------------------- */

.th-statement__inner {
    display: grid;
    gap: clamp(2rem, 5vw, 5rem);
}

.th-statement--split .th-statement__inner,
.th-statement--media .th-statement__inner {
    grid-template-columns: minmax(0, 1.1fr) minmax(0, .9fr);
    align-items: start;
}

.th-statement--media.has-media .th-statement__inner {
    grid-template-columns: minmax(0, 1.05fr) minmax(0, .85fr) minmax(0, .7fr);
}

.th-statement--split .th-statement__body,
.th-statement--media .th-statement__body {
    padding-top: clamp(0rem, 4vw, 4.5rem);
}

.th-statement--center .th-statement__inner {
    justify-items: center;
    text-align: center;
}

.th-statement--center .th-head {
    justify-items: center;
}

.th-statement--center .th-head__title {
    max-width: 18ch;
    font-size: var(--th-t-xl);
}

.th-statement--center .th-head__intro,
.th-statement--center .th-prose {
    margin-inline: auto;
}

.th-statement--center .th-actions {
    justify-content: center;
}

.th-statement__body {
    display: grid;
    gap: clamp(1.25rem, 2.4vw, 2rem);
}

.th-statement__quote {
    margin: 0;
    padding-left: clamp(1rem, 2vw, 1.5rem);
    border-left: 1px solid var(--th-crema);
    font-size: var(--th-t-md);
    max-width: 26ch;
}

.th-statement--center .th-statement__quote {
    border-left: 0;
    padding-left: 0;
    margin-inline: auto;
}

.th-statement__quote p {
    font-family: var(--th-editorial);
    line-height: 1.16;
}

.th-statement__figure {
    aspect-ratio: 3 / 4;
}

/* --------------------------------------------------------------------------
   Feature (split)
   -------------------------------------------------------------------------- */

.th-feature__inner {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    gap: clamp(2.25rem, 7vw, 7.5rem);
    align-items: center;
}

.th-feature--reverse .th-feature__media {
    order: 2;
}

.th-feature__media {
    position: relative;
}

.th-feature__figure {
    aspect-ratio: 4 / 5;
}

.th-feature--tall .th-feature__figure { aspect-ratio: 2 / 3; }
.th-feature--square .th-feature__figure { aspect-ratio: 1 / 1; }
.th-feature--landscape .th-feature__figure { aspect-ratio: 4 / 3; }

.th-section .th-feature__figure img {
    transform: translate3d(0, calc((var(--th-p, .5) - .5) * -5%), 0) scale(1.08);
}

.th-js .th-figure.th-feature__figure[data-th-reveal="image"].is-in img {
    transform: translate3d(0, calc((var(--th-p, .5) - .5) * -5%), 0) scale(1.08);
}

.th-feature.has-second .th-feature__media {
    padding-bottom: clamp(3rem, 7vw, 6rem);
}

.th-feature__inset {
    position: absolute;
    width: 42%;
    aspect-ratio: 4 / 5;
    right: clamp(-1rem, -3vw, -3rem);
    bottom: 0;
    border: clamp(6px, .7vw, 10px) solid var(--th-cream);
    box-shadow: 0 30px 60px -30px rgba(23, 16, 10, .45);
}

.th--paper .th-feature__inset { border-color: var(--th-paper); }
.th--bone .th-feature__inset { border-color: var(--th-bone); }
.th--dark .th-feature__inset { border-color: var(--th-ink); }
.th--espresso .th-feature__inset { border-color: var(--th-espresso); }

.th-feature--reverse .th-feature__inset {
    right: auto;
    left: clamp(-1rem, -3vw, -3rem);
}

.th-feature__copy {
    display: grid;
    gap: clamp(1.25rem, 2.2vw, 1.75rem);
    align-content: center;
}

.th-feature__copy .th-head__title {
    font-size: var(--th-t-lg);
    max-width: 13ch;
}

.th-feature__copy .th-actions {
    margin-top: .5rem;
}

/* --------------------------------------------------------------------------
   Process — shared
   -------------------------------------------------------------------------- */

.th-process__intro {
    display: grid;
    gap: 1rem;
}

.th-process__note {
    margin-top: clamp(2rem, 4vw, 3rem);
    font-size: var(--th-t-label);
    letter-spacing: .14em;
    text-transform: uppercase;
    color: var(--th-muted);
    max-width: 70ch;
    line-height: 1.8;
}

/* Journey — side by side on a self-drawing line */
.th-process--journey .th-process__inner {
    display: grid;
    gap: clamp(3rem, 6vw, 5rem);
}

.th-journey-wrap {
    position: relative;
}

.th-journey {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    grid-template-columns: repeat(var(--n, 4), minmax(0, 1fr));
    gap: clamp(1.5rem, 3vw, 3rem);
}

.th-journey__line {
    position: absolute;
    left: 0;
    right: 0;
    top: calc(1.35rem + 2.25rem);
    height: 1px;
    background: var(--th-rule);
}

.th-journey__line i {
    position: absolute;
    inset: 0;
    background: var(--th-crema);
    transform-origin: left;
    transform: scaleX(calc(var(--th-p, 1) * 1.6 - .2));
}

.th-journey__step {
    position: relative;
    display: grid;
    align-content: start;
    gap: .9rem;
}

.th-journey__marker {
    font-family: var(--th-display);
    font-size: var(--th-t-label);
    font-weight: 700;
    letter-spacing: .24em;
    text-transform: uppercase;
    color: var(--th-crema);
    height: 1.35rem;
}

.th--dark .th-journey__marker,
.th--espresso .th-journey__marker {
    color: #D79A63;
}

.th-journey__dot {
    order: -1;
    position: absolute;
    top: calc(1.35rem + 2.25rem - 5px);
    left: 0;
    width: 11px;
    height: 11px;
    border-radius: 50%;
    background: var(--th-cream);
    border: 1px solid var(--th-crema);
    z-index: 1;
}

.th--dark .th-journey__dot { background: var(--th-ink); }
.th--espresso .th-journey__dot { background: var(--th-espresso); }
.th--paper .th-journey__dot { background: var(--th-paper); }
.th--bone .th-journey__dot { background: var(--th-bone); }

.th-journey__dot::after {
    content: "";
    position: absolute;
    inset: 2px;
    border-radius: 50%;
    background: var(--th-crema);
    transform: scale(0);
    transition: transform .7s var(--th-ease);
    transition-delay: calc(var(--d, 0) * 120ms + 300ms);
}

.th-js [data-th-reveal].is-in .th-journey__dot::after,
html:not(.th-js) .th-journey__dot::after {
    transform: scale(1);
}

.th-journey__figure {
    aspect-ratio: 4 / 5;
    margin-top: 3.25rem;
}

.th-journey__step:not(:has(.th-journey__figure)) .th-journey__title {
    margin-top: 3.25rem;
}

.th-journey__title {
    font-size: var(--th-t-md);
    line-height: 1;
    letter-spacing: -.03em;
    margin-top: .4rem;
}

.th-journey__text {
    color: var(--th-muted);
    max-width: 34ch;
}

/* Timeline — sticky heading, a vertical line of times */
.th-process--timeline .th-process__inner {
    display: grid;
    grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr);
    gap: clamp(2.5rem, 7vw, 7rem);
    align-items: start;
}

.th-process--timeline .th-process__intro {
    position: sticky;
    top: clamp(1.5rem, 4vw, 3rem);
}

.th-process--timeline .th-head__title {
    font-size: var(--th-t-lg);
}

.th-timeline {
    list-style: none;
    margin: 0;
    padding: 0;
    position: relative;
}

.th-timeline::before {
    content: "";
    position: absolute;
    left: 0;
    top: .4rem;
    bottom: .4rem;
    width: 1px;
    background: var(--th-rule);
}

.th-timeline::after {
    content: "";
    position: absolute;
    left: 0;
    top: .4rem;
    width: 1px;
    height: calc(100% - .8rem);
    background: var(--th-crema);
    transform-origin: top;
    transform: scaleY(calc(var(--th-p, 1) * 1.7 - .35));
}

.th-timeline__step {
    position: relative;
    display: grid;
    grid-template-columns: minmax(4.5rem, 7.5rem) 1fr;
    gap: 1rem clamp(1rem, 3vw, 2.5rem);
    padding: 0 0 clamp(2.25rem, 4.5vw, 3.75rem) clamp(1.5rem, 3vw, 2.5rem);
}

.th-timeline__step::before {
    content: "";
    position: absolute;
    left: -5px;
    top: .35rem;
    width: 11px;
    height: 11px;
    border-radius: 50%;
    border: 1px solid var(--th-crema);
    background: var(--th-crema);
    z-index: 1;
}

.th-timeline__step:last-child {
    padding-bottom: 0;
}

.th-timeline__marker {
    font-family: var(--th-display);
    font-size: var(--th-t-sm);
    font-weight: 700;
    letter-spacing: .08em;
    color: var(--th-crema);
    font-variant-numeric: tabular-nums;
    line-height: 1.2;
}

.th--dark .th-timeline__marker,
.th--espresso .th-timeline__marker {
    color: #D79A63;
}

.th-timeline__body {
    display: grid;
    gap: .6rem;
}

.th-timeline__title {
    font-size: var(--th-t-md);
    line-height: 1.02;
}

.th-timeline__text {
    color: var(--th-muted);
    max-width: 46ch;
}

.th-timeline__figure {
    margin-top: .8rem;
    /* Portrait frame: the house photography is shot upright, and a landscape
       crop of an upright photo cuts people off at the head. */
    aspect-ratio: 4 / 5;
    width: min(100%, 20rem);
}

.th-section .th-timeline__figure img {
    object-position: 50% 22%;
}

/* Stories — alternating picture and text */
.th-process--stories .th-process__inner {
    display: grid;
    gap: clamp(3rem, 7vw, 6rem);
}

.th-stories {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    gap: clamp(3.5rem, 9vw, 8rem);
}

.th-story {
    display: grid;
    grid-template-columns: minmax(0, 1.05fr) minmax(0, .95fr);
    gap: clamp(2rem, 7vw, 7rem);
    align-items: center;
}

.th-story--flip .th-story__figure {
    order: 2;
}

.th-story__figure {
    aspect-ratio: 5 / 4;
}

.th-story:nth-child(3n + 2) .th-story__figure {
    aspect-ratio: 4 / 5;
    max-width: 34rem;
    justify-self: end;
    width: 100%;
}

.th-story__copy {
    display: grid;
    gap: 1rem;
    max-width: 30rem;
}

.th-story__marker {
    font-family: var(--th-display);
    font-size: clamp(3.5rem, 8vw, 7rem);
    font-weight: 900;
    line-height: .8;
    letter-spacing: -.05em;
    color: transparent;
    -webkit-text-stroke: 1px var(--th-crema);
}

.th-story__title {
    font-size: var(--th-t-lg);
    line-height: .96;
}

.th-story__text {
    color: var(--th-muted);
    font-size: var(--th-t-sm);
    line-height: 1.55;
}

/* --------------------------------------------------------------------------
   Products
   -------------------------------------------------------------------------- */

.th-products__inner {
    display: grid;
    gap: clamp(2.5rem, 5vw, 4rem);
}

.th-products__grid {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    grid-template-columns: repeat(var(--thp-cols, 4), minmax(0, 1fr));
    gap: clamp(1.25rem, 2.4vw, 2rem);
}

.th-product {
    display: grid;
    align-content: start;
    gap: 1rem;
}

.th-product__figure {
    aspect-ratio: 4 / 5;
}

.th-product__figure img {
    transition: transform 1.2s var(--th-ease);
}

.th-product:hover .th-product__figure img {
    transform: scale(1.04);
}

.th-product__monogram {
    display: grid;
    place-items: center;
    aspect-ratio: 4 / 5;
    background: var(--th-bone);
    font-family: var(--th-editorial);
    font-style: italic;
    font-size: clamp(4rem, 9vw, 8rem);
    color: var(--th-espresso);
    line-height: 1;
    position: relative;
    overflow: hidden;
}

.th--bone .th-product__monogram {
    background: var(--th-cream);
}

.th-product__monogram::after {
    content: "";
    position: absolute;
    inset: 10px;
    border: 1px solid var(--th-rule);
}

.th-product__body {
    display: grid;
    gap: .35rem;
}

.th-product__tag {
    font-size: var(--th-t-label);
    letter-spacing: .2em;
    text-transform: uppercase;
    color: var(--th-crema);
    font-weight: 600;
}

.th-product__name {
    font-size: var(--th-t-md);
    line-height: 1;
}

.th-product__text {
    color: var(--th-muted);
    max-width: 34ch;
}

.th-products__note {
    font-family: var(--th-editorial);
    font-style: italic;
    font-size: var(--th-t-sm);
    color: var(--th-muted);
    max-width: 56ch;
}

/* --------------------------------------------------------------------------
   Team
   -------------------------------------------------------------------------- */

.th-team__inner {
    display: grid;
    gap: clamp(2.75rem, 6vw, 5rem);
}

.th-team__grid {
    display: grid;
    grid-template-columns: repeat(min(var(--n, 2), 3), minmax(0, 1fr));
    gap: clamp(2rem, 5vw, 5rem);
}

.th-member {
    display: grid;
    grid-template-columns: minmax(0, .8fr) minmax(0, 1fr);
    gap: clamp(1.25rem, 3vw, 2.5rem);
    align-items: start;
}

.th-member__plate {
    position: relative;
}

.th-member__plate::before {
    content: "";
    position: absolute;
    inset: 12px -12px -12px 12px;
    border: 1px solid var(--th-crema);
    opacity: .55;
    pointer-events: none;
}

.th-member__figure,
.th-member__monogram {
    aspect-ratio: 3 / 4;
    position: relative;
}

.th-member__monogram {
    display: grid;
    place-items: center;
    background: var(--th-espresso);
    color: var(--th-cream);
    overflow: hidden;
}

.th-member:nth-child(2n) .th-member__monogram {
    background: var(--th-roast);
}

.th-member__monogram span {
    font-family: var(--th-editorial);
    font-style: italic;
    font-size: clamp(4.5rem, 9vw, 8.5rem);
    line-height: 1;
    letter-spacing: -.04em;
}

.th-member__monogram::after {
    content: "";
    position: absolute;
    inset: 0;
    background-image: var(--th-grain);
    background-size: 160px;
    opacity: .18;
    mix-blend-mode: overlay;
}

.th-member__index {
    position: absolute;
    left: .9rem;
    bottom: .8rem;
    z-index: 2;
    font-family: var(--th-display);
    font-size: var(--th-t-label);
    font-weight: 700;
    letter-spacing: .2em;
    color: var(--th-cream);
}

.th-member__body {
    display: grid;
    gap: .75rem;
}

.th-member__role {
    font-size: var(--th-t-label);
    letter-spacing: .2em;
    text-transform: uppercase;
    font-weight: 600;
    color: var(--th-crema);
}

.th-member__name {
    font-size: var(--th-t-md);
    text-transform: uppercase;
    letter-spacing: -.02em;
}

.th-member__bio {
    display: grid;
    gap: .8em;
    color: var(--th-muted);
}

.th-member__ritual {
    display: grid;
    grid-template-columns: 1.4rem 1fr;
    gap: .7rem;
    align-items: start;
    margin-top: .4rem;
    padding-top: 1rem;
    border-top: 1px solid var(--th-rule);
}

.th-member__ritual small {
    display: block;
    font-size: var(--th-t-label);
    letter-spacing: .18em;
    text-transform: uppercase;
    color: var(--th-muted);
    margin-bottom: .3rem;
}

.th-member__ritual em {
    font-family: var(--th-editorial);
    font-size: var(--th-t-sm);
    line-height: 1.3;
    color: var(--th-espresso);
}

.th--dark .th-member__ritual em,
.th--espresso .th-member__ritual em {
    color: var(--th-cream);
}

.th-member__steam {
    width: 1.2rem;
    height: 1.1rem;
    color: var(--th-crema);
    margin-top: .2rem;
}

.th-team__close {
    font-size: var(--th-t-md);
    max-width: 30ch;
}

/* --------------------------------------------------------------------------
   Gallery + lightbox
   -------------------------------------------------------------------------- */

.th-gallery__inner {
    display: grid;
    gap: clamp(2.5rem, 5vw, 4rem);
}

.th-gallery__grid {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    grid-auto-flow: dense;
    gap: clamp(.75rem, 1.6vw, 1.5rem);
}

.th-gallery__item--wide {
    grid-column: span 2;
}

.th-gallery__item--tall {
    grid-row: span 2;
}

.th-gallery__figure {
    margin: 0;
    height: 100%;
    display: flex;
    flex-direction: column;
}

.th-gallery__open {
    position: relative;
    display: block;
    width: 100%;
    flex: 1;
    padding: 0;
    border: 0;
    background: none;
    color: inherit;
    cursor: zoom-in;
    font: inherit;
}

.th-gallery__frame {
    display: block;
    width: 100%;
    height: 100%;
    min-height: 100%;
    aspect-ratio: 4 / 5;
}

.th-gallery__item--wide .th-gallery__frame {
    aspect-ratio: 16 / 10;
}

.th-gallery__item--tall .th-gallery__frame {
    aspect-ratio: auto;
}

.th-gallery__frame img {
    transition: transform 1.1s var(--th-ease), filter .6s var(--th-ease);
}

.th-gallery__open:hover .th-gallery__frame img,
.th-gallery__open:focus-visible .th-gallery__frame img {
    transform: scale(1.04);
}

.th-gallery__zoom {
    position: absolute;
    right: .8rem;
    bottom: .8rem;
    z-index: 2;
    display: grid;
    place-items: center;
    width: 2.6rem;
    height: 2.6rem;
    border-radius: 50%;
    background: rgba(243, 239, 233, .92);
    color: var(--th-ink);
    transition: transform .5s var(--th-ease);
}

.th-gallery__zoom svg {
    width: 1rem;
    height: 1rem;
}

.th-gallery__open:hover .th-gallery__zoom,
.th-gallery__open:focus-visible .th-gallery__zoom {
    transform: scale(1.1);
}

.th-gallery__open:focus-visible {
    outline: 2px solid var(--th-crema);
    outline-offset: 4px;
}

.th-gallery__caption {
    margin-top: .7rem;
    font-size: var(--th-t-label);
    letter-spacing: .16em;
    text-transform: uppercase;
    color: var(--th-muted);
    line-height: 1.6;
}

.th-lightbox {
    width: 100vw;
    height: 100dvh;
    max-width: none;
    max-height: none;
    margin: 0;
    padding: 0;
    border: 0;
    background: rgba(23, 16, 10, .96);
    color: var(--th-cream);
    overflow: hidden;
}

.th-lightbox::backdrop {
    background: rgba(23, 16, 10, .7);
}

.th-lightbox[open] {
    animation: th-lightbox-in .45s var(--th-ease);
}

@keyframes th-lightbox-in {
    from { opacity: 0; }
    to { opacity: 1; }
}

.th-lightbox__stage {
    position: relative;
    display: grid;
    place-items: center;
    width: 100%;
    height: 100%;
    padding: clamp(3.5rem, 6vw, 5rem) clamp(1rem, 7vw, 7rem);
}

.th-lightbox__figure {
    margin: 0;
    display: grid;
    justify-items: center;
    gap: 1rem;
    max-height: 100%;
}

.th-lightbox__img {
    display: block;
    max-width: 100%;
    max-height: calc(100dvh - 10rem);
    width: auto;
    height: auto;
    object-fit: contain;
}

.th-lightbox__caption,
.th-lightbox__count {
    font-family: var(--th-body);
    font-size: var(--th-t-label);
    letter-spacing: .18em;
    text-transform: uppercase;
    color: var(--th-cream-soft);
    text-align: center;
}

.th-lightbox__count {
    position: absolute;
    top: 1.6rem;
    left: 50%;
    transform: translateX(-50%);
    margin: 0;
}

.th-lightbox__btn {
    position: absolute;
    display: grid;
    place-items: center;
    width: 3rem;
    height: 3rem;
    border-radius: 50%;
    border: 1px solid var(--th-cream-faint);
    background: rgba(23, 16, 10, .5);
    color: var(--th-cream);
    cursor: pointer;
    transition: background-color .4s var(--th-ease), border-color .4s var(--th-ease);
}

.th-lightbox__btn svg {
    width: 1.05rem;
    height: 1.05rem;
}

.th-lightbox__btn:hover,
.th-lightbox__btn:focus-visible {
    background: var(--th-crema);
    border-color: var(--th-crema);
}

.th-lightbox__btn:focus-visible {
    outline: 2px solid var(--th-cream);
    outline-offset: 3px;
}

.th-lightbox__btn--close { top: 1rem; right: 1rem; }
.th-lightbox__btn--prev { left: 1rem; top: 50%; transform: translateY(-50%); }
.th-lightbox__btn--next { right: 1rem; top: 50%; transform: translateY(-50%); }

body.th-lightbox-open {
    overflow: hidden;
}

/* --------------------------------------------------------------------------
   Menu
   -------------------------------------------------------------------------- */

.th-carte__inner {
    display: grid;
    gap: clamp(2rem, 4vw, 3.5rem);
}

.th-carte__nav {
    position: sticky;
    top: 0;
    z-index: 20;
    margin-inline: calc(var(--th-gutter) * -1);
    padding: .85rem var(--th-gutter);
    background: inherit;
    border-block: 1px solid var(--th-rule);
}

.th-carte .th-carte__nav {
    background: var(--th-cream);
}

.th-carte.th--paper .th-carte__nav { background: var(--th-paper); }
.th-carte.th--bone .th-carte__nav { background: var(--th-bone); }

.th-carte__nav ul {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    gap: .5rem;
    overflow-x: auto;
    scrollbar-width: none;
    -webkit-overflow-scrolling: touch;
}

.th-carte__nav ul::-webkit-scrollbar {
    display: none;
}

.th-carte__nav a {
    display: inline-flex;
    align-items: center;
    min-height: 2.75rem;
    padding: 0 1.15rem;
    border: 1px solid var(--th-rule);
    border-radius: 999px;
    font-size: var(--th-t-label);
    font-weight: 600;
    letter-spacing: .16em;
    text-transform: uppercase;
    white-space: nowrap;
    transition: background-color .4s var(--th-ease), color .4s var(--th-ease), border-color .4s var(--th-ease);
}

.th-carte__nav a:hover,
.th-carte__nav a:focus-visible,
.th-carte__nav a[aria-current="true"] {
    background: var(--th-ink);
    border-color: var(--th-ink);
    color: var(--th-cream);
}

.th-carte__groups {
    display: grid;
    gap: clamp(3.5rem, 7vw, 6rem);
}

.th-carte__group {
    display: grid;
    gap: clamp(1.75rem, 3.5vw, 2.75rem);
}

.th-carte__group-title {
    font-size: var(--th-t-xl);
    line-height: .9;
    padding-bottom: clamp(1rem, 2vw, 1.5rem);
    border-bottom: 1px solid var(--th-ink);
}

.th-carte__group-title::after {
    content: ".";
    color: var(--th-crema);
}

.th-carte__cats {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(min(100%, 19rem), 1fr));
    gap: clamp(2rem, 4vw, 3.5rem) clamp(2rem, 5vw, 4.5rem);
}

.th-carte__cat {
    scroll-margin-top: 5.5rem;
    display: grid;
    align-content: start;
    gap: .9rem;
}

.th-carte__cat-title {
    font-family: var(--th-editorial);
    font-style: italic;
    font-weight: 400;
    font-size: var(--th-t-md);
    letter-spacing: -.01em;
    line-height: 1;
    color: var(--th-espresso);
}

.th--dark .th-carte__cat-title,
.th--espresso .th-carte__cat-title {
    color: var(--th-crema);
}

.th-carte__cat-note {
    color: var(--th-muted);
    max-width: 40ch;
}

.th-carte__items {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
}

.th-carte__item {
    display: grid;
    grid-template-columns: auto 1fr auto;
    align-items: baseline;
    gap: .2rem .6rem;
    padding: .8rem 0;
    border-bottom: 1px solid var(--th-rule);
}

.th-carte__item:first-child {
    border-top: 1px solid var(--th-rule);
}

.th-carte__name {
    font-family: var(--th-display);
    font-weight: 600;
    font-size: var(--th-t-body);
    letter-spacing: -.005em;
    grid-column: 1 / 3;
}

.th-carte__item:has(.th-carte__price) .th-carte__name {
    grid-column: 1;
}

.th-carte__dots {
    height: 1px;
    align-self: center;
    background-image: linear-gradient(90deg, var(--th-rule) 50%, transparent 0);
    background-size: 6px 1px;
}

.th-carte__price {
    font-variant-numeric: tabular-nums;
    font-weight: 600;
}

.th-carte__desc {
    grid-column: 1 / -1;
    color: var(--th-muted);
    font-size: .94em;
}

.th-carte__foot {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: 1.25rem 2rem;
    padding-top: clamp(1.5rem, 3vw, 2.25rem);
    border-top: 1px solid var(--th-rule);
}

.th-carte__legend {
    display: grid;
    gap: .6em;
    max-width: 62ch;
    color: var(--th-muted);
}

/* --------------------------------------------------------------------------
   Visit
   -------------------------------------------------------------------------- */

.th-visit__inner {
    display: grid;
    grid-template-columns: minmax(0, 1.15fr) minmax(0, .85fr);
    gap: clamp(2.5rem, 6vw, 6rem);
    align-items: start;
}

.th-visit__main {
    display: grid;
    gap: clamp(2rem, 4vw, 3rem);
}

.th-visit__cards {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr));
    gap: 1px;
    background: var(--th-rule);
    border: 1px solid var(--th-rule);
}

.th-visit__card {
    display: grid;
    align-content: start;
    gap: 1rem;
    padding: clamp(1.25rem, 2.5vw, 2rem);
    background: var(--th-paper);
}

.th-visit.th--paper .th-visit__card { background: var(--th-cream); }
.th-visit.th--dark .th-visit__card { background: var(--th-roast); }
.th-visit.th--espresso .th-visit__card { background: #4a1d00; }

.th-visit__card--address {
    grid-column: 1 / -1;
}

.th-visit__label {
    display: flex;
    align-items: center;
    gap: .6rem;
    font-family: var(--th-body);
    font-size: var(--th-t-label);
    font-weight: 600;
    letter-spacing: .2em;
    text-transform: uppercase;
    line-height: 1.2;
    color: var(--th-crema);
}

.th-visit__icon {
    width: 1.15rem;
    height: 1.15rem;
    flex: none;
}

.th-visit__address {
    display: grid;
    font-style: normal;
    font-family: var(--th-display);
    font-size: var(--th-t-lg);
    font-weight: 800;
    letter-spacing: -.035em;
    line-height: 1;
}

.th-visit__area {
    margin-top: .6rem;
    font-family: var(--th-editorial);
    font-style: italic;
    font-weight: 400;
    font-size: var(--th-t-sm);
    letter-spacing: 0;
    color: var(--th-muted);
}

.th-visit__route {
    justify-self: start;
    margin-top: .25rem;
}

.th-visit__hours {
    display: grid;
    margin: 0;
}

.th-visit__hours div {
    display: flex;
    justify-content: space-between;
    gap: 1rem;
    padding: .55rem 0;
    border-bottom: 1px solid var(--th-rule);
}

.th-visit__hours dt {
    color: var(--th-muted);
}

.th-visit__hours dd {
    margin: 0;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
}

.th-visit__note {
    display: grid;
    gap: .6em;
    color: var(--th-muted);
}

.th-visit__note a {
    color: inherit;
    text-decoration: underline;
    text-underline-offset: .2em;
}

.th-visit__contact {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    gap: .7rem;
}

.th-visit__contact a {
    display: inline-flex;
    align-items: center;
    gap: .6rem;
}

.th-visit__access ul {
    list-style: none;
    margin: 1rem 0 0;
    padding: 0;
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 14rem), 1fr));
    gap: 1.25rem 2rem;
}

.th-visit__access li {
    display: grid;
    gap: .35rem;
    padding-top: .9rem;
    border-top: 1px solid var(--th-rule);
}

.th-visit__access strong {
    font-family: var(--th-display);
    font-weight: 700;
}

.th-visit__access span {
    color: var(--th-muted);
}

.th-visit__side {
    display: grid;
    gap: clamp(1rem, 2vw, 1.5rem);
    position: sticky;
    top: 1.5rem;
}

.th-visit__figure {
    aspect-ratio: 4 / 3;
}

.th-visit__map {
    position: relative;
    aspect-ratio: 4 / 3;
    background: var(--th-bone);
    overflow: hidden;
    border: 1px solid var(--th-rule);
}

.th-visit__map iframe {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    border: 0;
    filter: grayscale(.85) sepia(.18) contrast(.95);
}

/* --------------------------------------------------------------------------
   Contact + Contact Form 7
   -------------------------------------------------------------------------- */

.th-contact__inner {
    display: grid;
    grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr);
    gap: clamp(2.5rem, 7vw, 7rem);
    align-items: start;
}

.th-contact:not(.has-form) .th-contact__inner {
    grid-template-columns: minmax(0, 1fr);
}

.th-contact__side {
    display: grid;
    gap: clamp(1.75rem, 3.5vw, 2.5rem);
}

.th-contact__rows {
    display: grid;
    margin: 0;
}

.th-contact__rows div {
    display: grid;
    grid-template-columns: minmax(7rem, .4fr) 1fr;
    gap: 1rem;
    padding: .95rem 0;
    border-bottom: 1px solid var(--th-rule);
}

.th-contact__rows div:first-child {
    border-top: 1px solid var(--th-rule);
}

.th-contact__rows dt {
    font-size: var(--th-t-label);
    font-weight: 600;
    letter-spacing: .2em;
    text-transform: uppercase;
    color: var(--th-crema);
    padding-top: .3em;
}

.th-contact__rows dd {
    margin: 0;
}

.th-contact__figure {
    aspect-ratio: 4 / 3;
    max-width: 30rem;
}

.th-contact__form {
    padding: clamp(1.5rem, 4vw, 3.25rem);
    background: var(--th-paper);
    border: 1px solid var(--th-rule);
}

.th-contact.th--paper .th-contact__form {
    background: var(--th-cream);
}

.th-contact__form-title {
    font-size: var(--th-t-md);
}

.th-contact__form-note {
    margin-top: .6rem !important;
    color: var(--th-muted);
    font-size: .92em;
}

.th-form {
    margin-top: clamp(1.5rem, 3vw, 2.25rem);
}

.th-form .th-form__grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 1.25rem 1.5rem;
}

.th-form .th-form__field--full {
    grid-column: 1 / -1;
}

.th-form label {
    display: block;
    font-size: var(--th-t-label);
    font-weight: 600;
    letter-spacing: .16em;
    text-transform: uppercase;
    color: var(--th-ink);
}

.th-form label .th-form__req {
    color: var(--th-caramel);
}

.th-form input[type="text"],
.th-form input[type="email"],
.th-form input[type="tel"],
.th-form select,
.th-form textarea {
    width: 100%;
    min-height: 3.25rem;
    padding: .85rem 1rem;
    border: 1px solid rgba(23, 16, 10, .32);
    border-radius: 2px;
    background: #FFFFFF;
    color: var(--th-ink);
    font-family: var(--th-body);
    font-size: 1rem;
    letter-spacing: 0;
    text-transform: none;
    font-weight: 400;
    line-height: 1.4;
    transition: border-color .3s var(--th-ease), box-shadow .3s var(--th-ease);
    appearance: none;
}

.th-form textarea {
    min-height: 10rem;
    resize: vertical;
}

.th-form input:focus,
.th-form select:focus,
.th-form textarea:focus {
    /* Transparent, not none: forced-colors mode paints it, the shadow it drops. */
    outline: 2px solid transparent;
    border-color: var(--th-espresso);
    box-shadow: 0 0 0 3px rgba(193, 121, 60, .35);
}

.th-form .wpcf7-form-control-wrap {
    display: block;
    margin-top: .5rem;
}

.th-form .wpcf7-not-valid {
    border-color: #A3341C;
}

.th-form .wpcf7-not-valid-tip {
    display: block;
    margin-top: .4rem;
    color: #A3341C;
    font-size: .85rem;
    letter-spacing: 0;
    text-transform: none;
    font-weight: 500;
}

.th-form .th-form__hp {
    position: absolute !important;
    left: -9999px !important;
    width: 1px;
    height: 1px;
    overflow: hidden;
}

.th-form .th-form__privacy {
    grid-column: 1 / -1;
    font-size: .88rem;
    color: var(--th-muted);
    letter-spacing: 0;
    text-transform: none;
    font-weight: 400;
}

.th-form .th-form__submit {
    grid-column: 1 / -1;
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 1rem;
}

.th-form input[type="submit"],
.th-form .wpcf7-submit {
    display: inline-flex;
    align-items: center;
    min-height: 3.25rem;
    padding: 1.15em 2.2em;
    border: 1px solid var(--th-ink);
    border-radius: 999px;
    background: var(--th-ink);
    color: var(--th-cream);
    font-family: var(--th-body);
    font-size: var(--th-t-label);
    font-weight: 600;
    letter-spacing: .18em;
    text-transform: uppercase;
    cursor: pointer;
    transition: background-color .4s var(--th-ease), border-color .4s var(--th-ease);
}

.th-form input[type="submit"]:hover,
.th-form input[type="submit"]:focus-visible,
.th-form .wpcf7-submit:hover,
.th-form .wpcf7-submit:focus-visible {
    background: var(--th-espresso);
    border-color: var(--th-espresso);
}

.th-form .wpcf7-submit:focus-visible {
    outline: 2px solid var(--th-crema);
    outline-offset: 3px;
}

.th-form .wpcf7-submit:disabled {
    opacity: .6;
    cursor: progress;
}

.th-form .wpcf7-spinner {
    margin: 0;
    background-color: var(--th-crema);
}

.th-form .wpcf7-response-output {
    margin: 1.5rem 0 0 !important;
    padding: 1rem 1.2rem !important;
    border: 1px solid var(--th-rule) !important;
    border-left: 3px solid var(--th-crema) !important;
    border-radius: 2px;
    background: var(--th-cream);
    font-size: .95rem;
}

.th-form.sent .wpcf7-response-output {
    border-left-color: #3F6B3A !important;
}

.th-form.invalid .wpcf7-response-output,
.th-form.unaccepted .wpcf7-response-output,
.th-form.failed .wpcf7-response-output,
.th-form.aborted .wpcf7-response-output,
.th-form.spam .wpcf7-response-output {
    border-left-color: #A3341C !important;
}

.th-form .screen-reader-response {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
}

/* --------------------------------------------------------------------------
   Link cards
   -------------------------------------------------------------------------- */

.th-links__inner {
    display: grid;
    gap: clamp(2.25rem, 4.5vw, 3.5rem);
}

.th-links .th-head__title {
    font-size: var(--th-t-lg);
}

.th-links__grid {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    grid-template-columns: repeat(min(var(--n, 3), 4), minmax(0, 1fr));
    gap: clamp(1rem, 2vw, 1.75rem);
}

.th-linkcard__hit {
    display: grid;
    height: 100%;
    background: var(--th-paper);
    border: 1px solid var(--th-rule);
    transition: border-color .5s var(--th-ease), transform .6s var(--th-ease);
}

.th--dark .th-linkcard__hit,
.th--espresso .th-linkcard__hit {
    background: rgba(243, 239, 233, .04);
}

.th-linkcard__figure {
    display: block;
    aspect-ratio: 16 / 10;
}

.th-linkcard__figure img {
    transition: transform 1.1s var(--th-ease);
}

.th-linkcard__body {
    position: relative;
    display: grid;
    align-content: start;
    gap: .45rem;
    padding: clamp(1.1rem, 2vw, 1.6rem) clamp(1.1rem, 2vw, 1.6rem) clamp(1.5rem, 2.6vw, 2rem);
    padding-right: 3.5rem;
}

.th-linkcard__kicker {
    font-size: var(--th-t-label);
    letter-spacing: .2em;
    text-transform: uppercase;
    font-weight: 600;
    color: var(--th-crema);
}

.th-linkcard__title {
    font-size: var(--th-t-md);
    line-height: 1;
}

.th-linkcard__text {
    color: var(--th-muted);
}

.th-linkcard__arrow {
    position: absolute;
    right: clamp(1.1rem, 2vw, 1.6rem);
    top: clamp(1.2rem, 2.1vw, 1.7rem);
    width: 1.2rem;
    height: 1.2rem;
    transition: transform .5s var(--th-ease);
}

.th-linkcard__hit:hover,
.th-linkcard__hit:focus-visible {
    border-color: var(--th-crema);
}

.th-linkcard__hit:hover .th-linkcard__figure img,
.th-linkcard__hit:focus-visible .th-linkcard__figure img {
    transform: scale(1.05);
}

.th-linkcard__hit:hover .th-linkcard__arrow,
.th-linkcard__hit:focus-visible .th-linkcard__arrow {
    transform: translateX(.3rem);
}

/* --------------------------------------------------------------------------
   Responsive
   -------------------------------------------------------------------------- */

@media (max-width: 1100px) {
    .th-products__grid {
        grid-template-columns: repeat(min(var(--thp-cols, 4), 2), minmax(0, 1fr));
    }

    .th-team__grid {
        grid-template-columns: minmax(0, 1fr);
    }

    .th-member {
        grid-template-columns: minmax(0, 18rem) minmax(0, 1fr);
    }

    .th-statement--media.has-media .th-statement__inner {
        grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
    }

    .th-statement--media.has-media .th-statement__aside {
        grid-column: 1 / -1;
        max-width: 36rem;
    }

    .th-links__grid {
        grid-template-columns: repeat(min(var(--n, 3), 2), minmax(0, 1fr));
    }

    .th-journey {
        grid-template-columns: repeat(2, minmax(0, 1fr));
        row-gap: clamp(2.5rem, 5vw, 3.5rem);
    }

    .th-journey__line {
        display: none;
    }
}

@media (max-width: 900px) {
    .th-page-hero--full {
        min-height: min(92svh, 46rem);
    }

    .th-page-hero--split .th-page-hero__inner,
    .th-statement--split .th-statement__inner,
    .th-statement--media .th-statement__inner,
    .th-statement--media.has-media .th-statement__inner,
    .th-feature__inner,
    .th-process--timeline .th-process__inner,
    .th-story,
    .th-visit__inner,
    .th-contact__inner {
        grid-template-columns: minmax(0, 1fr);
    }

    .th-page-hero--split .th-page-hero__frame {
        aspect-ratio: 4 / 3;
    }

    .th-statement--split .th-statement__body,
    .th-statement--media .th-statement__body {
        padding-top: 0;
    }

    .th-feature--reverse .th-feature__media,
    .th-story--flip .th-story__figure {
        order: 0;
    }

    .th-feature__inset {
        right: 0;
        width: 38%;
    }

    .th-feature--reverse .th-feature__inset {
        left: 0;
    }

    .th-feature__media {
        max-width: 36rem;
    }

    .th-process--timeline .th-process__intro,
    .th-visit__side {
        position: static;
    }

    .th-story:nth-child(3n + 2) .th-story__figure {
        justify-self: start;
    }

    .th-gallery__grid {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .th-carte__nav {
        top: 0;
    }
}

@media (max-width: 600px) {
    .th-journey,
    .th-products__grid,
    .th-links__grid {
        grid-template-columns: minmax(0, 1fr);
    }

    .th-member {
        grid-template-columns: minmax(0, 1fr);
    }

    .th-member__plate {
        max-width: 20rem;
    }

    .th-gallery__item--wide {
        grid-column: 1 / -1;
    }

    .th-gallery__item--tall {
        grid-row: span 1;
    }

    .th-gallery__item--tall .th-gallery__frame {
        aspect-ratio: 4 / 5;
    }

    .th-timeline__step {
        grid-template-columns: minmax(0, 1fr);
        gap: .4rem;
    }

    .th-form .th-form__grid {
        grid-template-columns: minmax(0, 1fr);
    }

    .th-contact__rows div {
        grid-template-columns: minmax(0, 1fr);
        gap: .3rem;
    }

    .th-facts__item + .th-facts__item {
        padding-left: 0;
        border-left: 0;
    }

    .th-facts__item {
        padding-bottom: 1.4rem;
        border-bottom: 1px solid var(--th-rule);
    }

    .th-lightbox__btn--prev,
    .th-lightbox__btn--next {
        top: auto;
        bottom: 1rem;
        transform: none;
    }
}

/* --------------------------------------------------------------------------
   Reduced motion — content lands in place, nothing drifts.
   -------------------------------------------------------------------------- */

@media (prefers-reduced-motion: reduce) {
    .th-section .th-page-hero__media img,
    .th-section .th-feature__figure img,
    .th-js .th-figure.th-feature__figure[data-th-reveal="image"].is-in img {
        transform: none;
    }

    .th-journey__line i,
    .th-timeline::after {
        transform: none;
    }

    .th-product__figure img,
    .th-gallery__frame img,
    .th-linkcard__figure img,
    .th-linkcard__arrow,
    .th-head__title .th-word--accent > span::after,
    .th-page-hero__title .th-word--accent > span::after {
        transition: none;
    }

    .th-lightbox[open] {
        animation: none;
    }
}
