@font-face {
    font-family: "Snell Roundhand";
    font-style: normal;
    font-weight: 400;
    font-display: block;
    src: url("https://static.parastorage.com/fonts/v2/f34c3524-8c39-42c6-94a4-dd0bd57bc852/v1/snellroundhandw01-scrip.latin.woff2") format("woff2");
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
    font-family: "Snell Roundhand";
    font-style: normal;
    font-weight: 400;
    font-display: block;
    src: url("https://static.parastorage.com/fonts/v2/f34c3524-8c39-42c6-94a4-dd0bd57bc852/v1/snellroundhandw01-scrip.latin-ext.woff2") format("woff2");
    unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
    font-family: "Avenir Light";
    font-style: normal;
    font-weight: 300;
    font-display: swap;
    src: url("https://static.parastorage.com/fonts/v2/af36905f-3c92-4ef9-b0c1-f91432f16ac1/v1/avenir-lt-w05_35-light.woff2") format("woff2");
}

@font-face {
    font-family: "Avenir Light";
    font-style: normal;
    font-weight: 400;
    font-display: swap;
    src: url("https://static.parastorage.com/fonts/v2/af36905f-3c92-4ef9-b0c1-f91432f16ac1/v1/avenir-lt-w05_35-light.woff2") format("woff2");
}

@font-face {
    font-family: "Avenir Light";
    font-style: normal;
    font-weight: 700;
    font-display: swap;
    src: url("https://static.parastorage.com/fonts/v2/74290729-59ae-4129-87d0-2eec3974dce1/v1/avenir-lt-w05_85-heavy.woff2") format("woff2");
}

:root {
    --cream: #ebeae3;
    --cream-2: #d6ccc2;
    --ink: #000000;
    --white: #ffffff;
    --khaki: #90785a;
    --play: #2b328c;
    --primary: #1a6aff;
    --max: 1040px;
    --gutter: 1.5rem;
    --section-y: clamp(3.5rem, 7vw, 6rem);
    --timberwood: #DDDBD7;
    --riffle-green: #53583E;
    --rust: #593B1F;

    --font-serif: "Playfair Display", Georgia, serif;
    --font-script: "Snell Roundhand", "snellroundhandw01-scrip", cursive;
    --font-body: "Avenir Light", Avenir, "Avenir Next", "Helvetica Neue", Helvetica, sans-serif;
    --font-button: "Noto Serif Display", "Playfair Display", Georgia, serif;
    --font-count: "Bodoni Moda", "Playfair Display", Georgia, serif;

    --fs-body: 19.2px;
    --fs-kicker: 42px;
    --fs-script: 60px;
    --fs-serif-lg: 60px;
    --fs-display: 145px;
    --fs-day: 108px;
    --fs-esperamos: 54px;
    --fs-cd-num: 60px;
    --fs-cd-label: 24px;
}

@media (max-width: 720px) {
    :root {
        --fs-display: 72px;
        --fs-serif-lg: 42px;
        --fs-day: 76px;
        --fs-kicker: 28px;
        --fs-script: 46px;
        --fs-cd-num: 42px;
        --fs-cd-label: 16px;
        --fs-esperamos: 38px;
        --fs-body: 16px;
    }
}

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

html {
    scroll-behavior: smooth;
    overflow-x: hidden;
    scrollbar-width: none;
}

html::-webkit-scrollbar {
    display: none;
}

body {
    margin: 0;
    color: var(--ink);
    background: var(--cream);
    font-family: var(--font-body);
    font-size: var(--fs-body);
    font-weight: 300;
    line-height: 1.6;
    -webkit-font-smoothing: antialiased;
    overflow-x: hidden;
    scrollbar-width: none;
}

body::-webkit-scrollbar {
    display: none;
}

body.is-gated {
    overflow: hidden;
}

.gate {
    position: fixed;
    inset: 0;
    z-index: 1000;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: clamp(1.5rem, 5vw, 3rem);
    padding: 2rem var(--gutter);
    background: var(--riffle-green);
    color: var(--timberwood);
    text-align: center;
    transition: opacity 0.7s ease, visibility 0.7s ease;
}

.gate.is-done {
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
}

.gate-names {
    font-family: var(--font-script);
    font-size: clamp(2.75rem, 10vw, 5.5rem);
    line-height: 1.15;
    max-width: min(18ch, 100%);
}

.gate-names p {
    margin: 0;
}

@keyframes gate-pulse {
    50% {
        opacity: 0.3;
    }
}

.gate-continue {
    width: 52px;
    height: 52px;
    padding: 0;
    border: 0;
    appearance: none;
    background-color: var(--timberwood);
    cursor: default;
    pointer-events: none;
    transform: rotate(-90deg);
    -webkit-mask: url("assets/monogram-header.png") center / contain no-repeat;
    mask: url("assets/monogram-header.png") center / contain no-repeat;
    -webkit-mask-source-type: luminance;
    mask-mode: luminance;
    animation: gate-pulse 1.2s ease-in-out infinite;
}

.gate.is-ready .gate-continue {
    animation: none;
    pointer-events: auto;
    cursor: pointer;
}

.gate.is-done .gate-continue {
    opacity: 0;
    pointer-events: none;
}

img,
svg {
    max-width: 100%;
    display: block;
}

a {
    color: inherit;
}

h1, h2, h3, p {
    margin: 0;
    font-weight: 400;
}

.hero {
    --sf: 100vw;
    --sf: 100cqi;
    position: relative;
    overflow: visible;
    width: 100%;
    container-type: inline-size;
    height: calc(1.7038608 * var(--sf));
    background: var(--cream);
}

.hero img,
.hero video {
    max-width: none;
    position: absolute;
    display: block;
    object-fit: cover;
    pointer-events: none;
}

.hero-bg {
    top: 0;
    left: 0;
    width: 99.989583%;
    height: calc(0.8553820710490676 * var(--sf));
    object-position: 50% 40%;
    z-index: 0;
}

.hero-dim {
    position: absolute;
    background: #000 url("assets/black-texture.jpg") center / cover;
    opacity: 0.3;
    pointer-events: none;
}

.hero-dim-top {
    top: calc(-0.083275 * var(--sf));
    left: 0;
    width: 100%;
    height: calc(0.9386719970830295 * var(--sf));
    z-index: 1;
}

.hero .hero-inset {
    top: calc(0.7705275 * var(--sf));
    left: 50%;
    width: 70%;
    height: auto;
    aspect-ratio: 3 / 4;
    transform: translateX(-50%);
    object-fit: contain;
    object-position: 50% 50%;
    z-index: 2;
}

.hero-mono-primary {
    top: calc(0.4779625 * var(--sf));
    left: 50%;
    width: 36.319394%;
    height: auto;
    aspect-ratio: 1 / 0.666532732543122;
    transform: translateX(-50%);
    object-fit: contain;
    z-index: 3;
}

.hero-mono-mark {
    top: calc(0.7050125 * var(--sf));
    left: 50%;
    width: 6.106111%;
    height: auto;
    aspect-ratio: 1 / 0.6664814667830775;
    transform: translateX(-50%);
    object-fit: contain;
    z-index: 3;
}

.section {
    padding: var(--section-y) var(--gutter);
    text-align: center;
    background: var(--cream);
}

.section-inner {
    max-width: var(--max);
    margin: 0 auto;
}

.kicker {
    font-family: var(--font-serif);
    font-size: var(--fs-kicker);
    text-transform: uppercase;
    letter-spacing: 0.02em;
    line-height: 1.1;
    margin: 0 0 0.5rem;
}

.script-title {
    font-family: var(--font-script);
    font-size: var(--fs-script);
    line-height: 1;
    margin: 0 0 1.6rem;
}

.btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 152px;
    padding: 0.7rem 1.6rem;
    background: var(--cream-2);
    color: var(--ink);
    text-decoration: none;
    font-family: var(--font-button);
    font-size: 16.8px;
    letter-spacing: 0.02em;
    line-height: 1;
    border: 0;
    cursor: pointer;
    transition: background 0.18s ease;
}

.btn:hover,
.btn:focus-visible {
    background: var(--white);
}

.btn-primary {
    width: 100%;
    min-width: 0;
    background: var(--primary);
    color: var(--white);
    font-family: var(--font-body);
    font-size: 16px;
    font-weight: 400;
    padding: 0.9rem 1.6rem;
}

.btn-primary:hover,
.btn-primary:focus-visible {
    background: color-mix(in srgb, var(--primary) 88%, black 12%);
    color: var(--white);
}

.names {
    --nu: min(100vw, 1440px);
    position: relative;
    z-index: 2;
    height: calc(914 / 1440 * var(--nu));
    background: var(--cream);
}

.nosotros {
    position: absolute;
    left: 50%;
    top: calc(36 / 1440 * var(--nu));
    width: min(240px, 36%);
    aspect-ratio: 100 / 32;
    height: auto;
    object-fit: cover;
    object-position: 50% 49.25%;
    transform: translateX(-50%);
    z-index: 4;
    pointer-events: none;
}

.names-stage {
    position: absolute;
    left: 50%;
    top: calc(197 / 1440 * var(--nu));
    width: 100%;
    max-width: 1440px;
    height: calc(470 / 1440 * var(--nu));
    transform: translateX(-50%);
}

.names-stage .given,
.names-stage .amp {
    position: absolute;
    margin: 0;
}

.given.first {
    left: 14.375%;
    top: 0;
    width: 46.6%;
}

.amp {
    left: 65.972%;
    top: 0;
    width: 7.675%;
    font-family: var(--font-serif);
    font-size: calc(145.2 / 1440 * var(--nu));
    line-height: calc(188.76 / 1440 * var(--nu));
}

.given.second {
    left: 37.153%;
    top: calc(239 / 1440 * var(--nu));
    width: 46.6%;
}

.given {
    font-family: var(--font-serif);
    font-size: calc(145.257 / 1440 * var(--nu));
    text-transform: uppercase;
    line-height: calc(188.834 / 1440 * var(--nu));
    color: var(--ink);
}

.music {
    position: absolute;
    left: 0;
    right: 0;
    top: calc(841 / 1440 * var(--nu));
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.7rem;
}

.song-label {
    font-size: var(--fs-body);
    font-weight: 400;
}

.play-btn {
    width: 48px;
    height: 48px;
    border: 0;
    background: transparent;
    cursor: pointer;
    color: var(--play);
    display: grid;
    place-items: center;
    padding: 0;
}

.play-btn svg {
    width: 28px;
    height: 32px;
}

.play-btn svg.is-hidden {
    display: none;
}

.story {
    text-align: center;
    padding-top: calc(75 / 1440 * min(100vw, 1440px));
    padding-bottom: calc(2.2rem + 1vw);
}

.story-copy {
    max-width: 720px;
    margin: 0 auto;
    font-weight: 400;
}

.story-copy p {
    margin: 0 0 1rem;
}

.godparents-photo {
    width: min(420px, 78vw);
    height: auto;
    margin: 0 auto;
    object-fit: cover;
    aspect-ratio: 2 / 3;
}

.photo-band {
    position: relative;
    min-height: 70vh;
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    color: var(--white);
    background-size: cover;
    background-position: center;
    isolation: isolate;
}

.band-date {
    background-image: url("assets/IMG_0549.jpg");
    min-height: 720px;
    padding: var(--section-y) var(--gutter);
}

.band-date::before {
    content: "";
    position: absolute;
    inset: 0;
    background: rgba(15, 12, 8, 0.25);
    z-index: -1;
}

.band-lodging {
    background-image: url("assets/IMG_0549.jpg");
}

.band-closing {
    background-image: url("assets/IMG_0554.jpg");
}

.date-inner {
    position: relative;
    z-index: 1;
    max-width: var(--max);
    width: 100%;
    container-type: inline-size;
}

.dow {
    font-family: var(--font-serif);
    font-size: var(--fs-serif-lg);
    line-height: 1.3;
    margin: 0 0 clamp(4.5rem, 9.9vw, 8.9rem);
}

.day-num,
.month,
.year {
    font-family: var(--font-serif);
    font-size: var(--fs-day);
    line-height: 1.3;
    margin: 0;
}

.month {
    font-size: min(var(--fs-day), 11cqi);
    text-transform: uppercase;
    white-space: nowrap;
    max-width: 100%;
}

.countdown {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 1.5rem;
    max-width: 620px;
    margin: clamp(4rem, 7.2vw, 6.5rem) auto 0;
}

.count-cell {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.55rem;
}

.count-cell + .count-cell {
    border-left: 1px solid rgba(255, 255, 255, 0.55);
}

.count-num {
    font-family: var(--font-count);
    font-size: var(--fs-cd-num);
    line-height: 1;
}

.count-label {
    font-family: var(--font-serif);
    font-size: var(--fs-cd-label);
    text-transform: uppercase;
    letter-spacing: 0.06em;
    line-height: 1;
}

.venue {
    position: relative;
    isolation: isolate;
    background-color: var(--khaki);
    background-size: cover;
    background-position: center;
    color: var(--white);
    text-align: center;
    padding: clamp(5rem, 10vw, 8rem) var(--gutter);
}

.venue::before {
    content: "";
    position: absolute;
    inset: 0;
    background: color-mix(in srgb, var(--khaki) 72%, transparent);
    z-index: -1;
}

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

.venue-ceremony,
.venue-reception {
    background-image: none;
    background-color: var(--rust);
}

.venue-ceremony::before,
.venue-reception::before {
    content: none;
}

.venue-title {
    font-family: var(--font-serif);
    font-size: var(--fs-serif-lg);
    text-transform: uppercase;
    line-height: 1;
    margin: 0 0 2rem;
}

.venue-place {
    font-weight: 700;
    font-style: italic;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    margin: 0 0 0.7rem;
}

.venue-time {
    font-weight: 700;
    margin: 0 0 1.1rem;
}

.venue-addr {
    max-width: 46ch;
    margin: 0 auto 2rem;
    font-weight: 400;
}

.gallery-section .kicker {
    margin-bottom: 2.5rem;
}

.gallery {
    position: relative;
    max-width: 980px;
    margin: 0 auto;
    overflow: hidden;
    aspect-ratio: 3 / 4;
    background: rgba(0, 0, 0, 0.05);
}

.gallery-track {
    display: flex;
    height: 100%;
    width: 100%;
    transition: transform 0.4s cubic-bezier(0.2, 0.7, 0.2, 1);
    user-select: none;
    touch-action: pan-y;
}

.gallery-track img {
    flex: 0 0 100%;
    width: 100%;
    height: 100%;
    object-fit: contain;
}

.gallery-nav {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    width: 46px;
    height: 46px;
    border: 0;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.86);
    color: var(--ink);
    font-size: 1.4rem;
    cursor: pointer;
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.2s ease;
}

.gallery-nav.prev {
    left: 1rem;
}

.gallery-nav.next {
    right: 1rem;
}

@media (min-width: 721px) {
    .gallery:hover .gallery-nav,
    .gallery:focus-within .gallery-nav {
        opacity: 1;
        pointer-events: auto;
    }
}

.dots {
    display: flex;
    justify-content: center;
    gap: 0.45rem;
    margin-top: 1rem;
}

.dots button {
    width: 8px;
    height: 8px;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: #b7b3ab;
    cursor: pointer;
}

.dots button.is-active {
    background: var(--ink);
}

.palette-label {
    font-size: var(--fs-body);
    font-weight: 400;
    margin: 0 0 1.4rem;
}

.palette-label {
    margin: 0 0 1.2rem;
}

.dress-icon {
    width: 200px;
    margin: 1.5rem auto 2.4rem;
}

.colors-photo {
    display: flex;
    justify-content: center;
    align-items: center;
    flex-wrap: wrap;
    gap: clamp(0.6rem, 3vw, 1.4rem);
    width: 100%;
    max-width: 100%;
    box-sizing: border-box;
    height: auto;
}

.colors-photo svg {
    width: min(100px, 18vw);
    height: auto;
    flex: 0 0 auto;
    max-width: calc(25% - 1rem);
}

.gifts {
    padding: 0;
}

.gifts-layout {
    display: grid;
    grid-template-columns: minmax(0, 1fr) minmax(280px, 420px) minmax(0, 1fr);
    align-items: start;
    min-height: 0;
}

.gift-side {
    width: 100%;
    height: auto;
    min-height: 0;
    object-fit: contain;
}

.gifts-copy {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    text-align: center;
    padding: var(--section-y) 1.25rem;
    background: var(--cream);
}

.note {
    max-width: 42ch;
    margin: 0 auto 2.4rem;
    font-weight: 400;
}

.gift-row {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 2rem 1.5rem;
    width: 100%;
    max-width: 360px;
    margin: 0 auto;
    align-items: end;
}

.gift-item {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 0.85rem;
}

.gift-logo {
    max-width: 180px;
    height: 48px;
    width: auto;
    object-fit: contain;
    filter: grayscale(1);
}

.event-no {
    font-size: 15px;
}

.lodging {
    background-size: cover;
    background-position: center;
    position: relative;
    isolation: isolate;
    text-align: center;
    padding: var(--section-y) var(--gutter);
}

.lodging::before {
    content: "";
    position: absolute;
    inset: 0;
    background: rgba(255, 255, 255, 0.28);
    z-index: -1;
}

.lodging .kicker,
.lodging .script-title {
    color: var(--ink);
}

.stay-card {
    background: var(--khaki);
    padding: 3.5rem 2rem;
    max-width: 620px;
    margin: 0 auto;
    color: var(--white);
}

.song-form {
    display: grid;
    gap: 1.2rem;
    max-width: 420px;
    margin: 0 auto;
    text-align: left;
}

.song-form .btn {
    justify-self: center;
    min-width: 152px;
}

.stay-card .field label {
    color: var(--white);
}

.stay-card .rsvp-error {
    color: #f3e6d8;
}

.stay-card .thanks {
    color: var(--white);
}

.stay-card .req {
    color: #ffd89a;
}

.rsvp-section {
    text-align: center;
}

.deadline {
    max-width: 60ch;
    margin: 0 auto 0.6rem;
    font-weight: 400;
}

.rsvp-form {
    display: grid;
    gap: 1.4rem;
    max-width: 460px;
    margin: 0 auto;
    text-align: left;
}

.field {
    display: grid;
    gap: 0.35rem;
}

.field label,
.radios legend {
    font-size: 14px;
}

.req {
    color: var(--primary);
    font-style: normal;
}

.field input,
.field select {
    appearance: none;
    width: 100%;
    border: 1px solid rgba(0, 0, 0, 0.18);
    background: var(--white);
    color: var(--ink);
    padding: 0.85rem 0.95rem;
    font: inherit;
    font-size: 15px;
    border-radius: 3px;
    outline: none;
}

.field input:focus,
.field select:focus {
    border-color: var(--primary);
}

.radios {
    border: 0;
    padding: 0;
    margin: 0;
}

.radios legend {
    margin-bottom: 0.6rem;
}

.radios label {
    display: flex;
    align-items: center;
    gap: 0.55rem;
    font-size: 16px;
    font-weight: 400;
    margin: 0.15rem 0;
}

.rsvp-error {
    color: #633c2b;
    font-size: 14px;
    min-height: 1.2em;
    text-align: center;
    margin: 0;
}

.thanks {
    display: none;
    text-align: center;
    font-family: var(--font-serif);
    font-size: 1.2rem;
    margin-top: 1.5rem;
}

.thanks.is-visible {
    display: block;
}

.rsvp-form.is-hidden,
.song-form.is-hidden {
    display: none;
}

.closing {
    position: relative;
    min-height: 640px;
    background-size: cover;
    background-position: center;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: flex-end;
    padding: 3rem 1.5rem 4.5rem;
    text-align: center;
}

.closing-title {
    font-family: var(--font-serif);
    font-size: var(--fs-esperamos);
    color: var(--timberwood);
    line-height: 1;
    letter-spacing: 0.02em;
}

.reveal {
    opacity: 0;
    transform: translateY(18px);
    animation: rise 0.8s cubic-bezier(0.2, 0.7, 0.2, 1) forwards;
}

@keyframes rise {
    to {
        opacity: 1;
        transform: none;
    }
}

@media (max-width: 750px) {
    .hero {
        height: calc(2.6509616 * var(--sf));
    }

    .hero-bg {
        width: 99.296875%;
        height: calc(1.678649962678287 * var(--sf));
    }

    .hero-dim-top {
        top: calc(-0.0828925 * var(--sf));
        width: 99.757161%;
        height: calc(1.7498 * var(--sf));
        opacity: 0.25;
    }

    .hero .hero-inset {
        top: calc(1.5176283 * var(--sf));
        width: 85%;
        height: auto;
        aspect-ratio: 3 / 4;
    }

    .hero-mono-primary {
        top: calc(0.9276242 * var(--sf));
        width: 66.055744%;
        aspect-ratio: 1 / 0.6665062203791471;
    }

    .hero-mono-mark {
        top: calc(1.36789 * var(--sf));
        width: 10.549208%;
        aspect-ratio: 1 / 0.6665062203791461;
    }
}

@media (max-width: 900px) {
    .gifts-layout {
        grid-template-columns: 1fr;
        min-height: 0;
    }

    .gift-side {
        height: auto;
        min-height: 0;
        max-height: none;
    }
}

@media (max-width: 720px) {
    .names {
        height: auto;
        min-height: 0;
        padding: 1.1rem 0 2.4rem;
    }

    .nosotros {
        position: relative;
        left: auto;
        top: auto;
        width: min(200px, 58%);
        height: auto;
        margin: 0 auto 0.35rem;
        transform: none;
    }

    .names-stage {
        position: relative;
        left: auto;
        top: auto;
        transform: none;
        height: auto;
        display: flex;
        flex-direction: column;
        align-items: center;
        text-align: center;
        padding: 0.6rem var(--gutter) 0;
    }

    .names-stage .given,
    .names-stage .amp {
        position: static;
        width: auto;
        left: auto;
        top: auto;
    }

    .given,
    .amp {
        font-size: var(--fs-display);
        line-height: 0.95;
    }

    .given.second {
        margin-top: 0.85rem;
    }

    .music {
        position: relative;
        top: auto;
        margin-top: 2.2rem;
        padding: 0 var(--gutter);
    }

    .gifts-layout {
        grid-template-columns: 1fr;
        min-height: 0;
    }

    .gift-side {
        height: auto;
        min-height: 0;
        max-height: none;
    }

    .gift-row {
        grid-template-columns: 1fr;
        gap: 2rem;
    }

    .gallery-nav {
        display: none;
    }

    .band-date,
    .closing {
        min-height: 520px;
    }

    .dow {
        margin-bottom: 3.2rem;
    }
}

@media (prefers-reduced-motion: reduce) {
    html {
        scroll-behavior: auto;
    }

    .reveal {
        opacity: 1;
        transform: none;
        animation: none;
    }

    .gate,
    .gate-continue {
        transition: none;
        animation: none;
    }
}
