:root {
    --text: #818181;
    --accent: #b5a195;
    --sage: #a3bbae;
    --script: #c5d6cc;
    --button: #a4a4a1;
    --button-hover: #949490;
    --ink: #8a8a8a;
    --line: #d5d5d5;
    --serif: "Cormorant Garamond", "Times New Roman", serif;
    --script-font: "Great Vibes", cursive;
    --sans: "Raleway", "Segoe UI", sans-serif;
}

.invite {
    background: #fff;
    color: var(--text);
    font-family: var(--sans);
    font-weight: 400;
    overflow: hidden;
}

.invite img {
    max-width: 100%;
    height: auto;
}

.section {
    position: relative;
    padding: 56px 24px;
}

.section-inner {
    width: min(640px, 100%);
    margin: 0 auto;
}

.reveal {
    opacity: 0;
    transform: translateY(18px);
    transition: opacity 0.85s ease, transform 0.85s ease;
}

.reveal.is-visible {
    opacity: 1;
    transform: none;
}

.script-title,
.serif-title,
.eyebrow,
.subhead,
.body-copy,
.timeline-time,
.countdown-label {
    margin: 0;
}

.script-title {
    font-family: var(--script-font);
    font-weight: 400;
    font-size: clamp(42px, 11vw, 78px);
    line-height: 1.05;
    color: var(--script);
    letter-spacing: 0.01em;
    overflow-wrap: anywhere;
}

.serif-title {
    font-family: var(--serif);
    font-weight: 500;
    font-size: clamp(28px, 7vw, 46px);
    line-height: 1.15;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--ink);
}

.eyebrow {
    font-size: 22px;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: var(--accent);
}

.subhead {
    margin-top: 28px;
    font-size: 15px;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: var(--accent);
}

.body-copy {
    margin-top: 22px;
    font-size: 18px;
    line-height: 1.55;
    color: var(--text);
}

.hero {
    min-height: 100vh;
    min-height: 100dvh;
    display: flex;
    align-items: center;
    padding: 72px 24px 96px;
    position: relative;
}

.hero-copy {
    width: min(520px, 100%);
    text-align: left;
    position: relative;
    z-index: 1;
}

.hero .eyebrow {
    font-size: clamp(18px, 4vw, 26px);
    letter-spacing: 0.08em;
    font-weight: 400;
}

.hero-names {
    margin: 48px 0 0;
    font-family: var(--serif);
    font-weight: 500;
    font-size: clamp(36px, 8vw, 68px);
    line-height: 1.05;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: #8e8e8e;
}

.hero-amp {
    font-family: var(--script-font);
    font-size: 0.72em;
    letter-spacing: 0;
    text-transform: none;
    color: #9a9a9a;
    padding: 0 0.08em;
}

.hero-date {
    margin: 36px 0 0;
    max-width: 100%;
    font-family: var(--script-font);
    font-size: clamp(28px, 7vw, 52px);
    line-height: 1.05;
    color: #b7cfc4;
    overflow-wrap: anywhere;
}

.hero-floral {
    position: absolute;
    right: -12px;
    top: 8vh;
    width: min(250px, 42vw);
    pointer-events: none;
    user-select: none;
}

.hero-chevron {
    position: absolute;
    left: 50%;
    bottom: 28px;
    transform: translateX(-50%);
    width: 44px;
    height: 44px;
    display: grid;
    place-items: center;
    color: var(--accent);
    text-decoration: none;
}

.hero-chevron:focus-visible,
.pill:focus-visible,
.rsvp input:focus-visible,
.rsvp textarea:focus-visible,
.rsvp select:focus-visible {
    outline: 2px solid #8d8d8d;
    outline-offset: 3px;
}

.intro {
    text-align: center;
    padding-top: 24px;
}

.month-label {
    margin-top: 36px;
}

.couple-frame {
    width: min(280px, 70%);
    margin: 28px auto 0;
    padding: 10px;
    border: 1px solid #eadfd6;
}

.couple-frame img {
    display: block;
    width: 100%;
    aspect-ratio: 4 / 5;
    object-fit: cover;
}

.sprig {
    display: block;
    width: 54px;
    margin: 8px auto 0;
}

.venue,
.timeline-section,
.dress,
.wishes,
.nokids,
.organizer,
.countdown-section,
.rsvp,
.closing {
    text-align: center;
}

.venue-photo {
    display: block;
    width: min(605px, 100%);
    margin: 28px auto;
    aspect-ratio: 605 / 296;
    object-fit: cover;
    border-radius: 28px;
}

.pill {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: min(250px, 100%);
    height: 60px;
    padding: 0 28px;
    border: 0;
    border-radius: 30px;
    background: var(--button);
    color: #fff;
    font-family: var(--sans);
    font-size: 14px;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    text-decoration: none;
    cursor: pointer;
}

.pill:hover { background: var(--button-hover); }

.pill:disabled,
.pill[aria-disabled="true"] {
    cursor: default;
    opacity: 0.72;
}

.floral {
    position: absolute;
    pointer-events: none;
    user-select: none;
}

.floral-right {
    right: -8px;
    top: 24px;
    width: min(120px, 28vw);
}

.floral-left {
    left: -18px;
    top: 40px;
    width: min(180px, 34vw);
}

.leaf {
    width: 72px;
    height: auto;
}

.timeline {
    position: relative;
    width: min(460px, 100%);
    margin: 36px auto 0;
    padding-left: 84px;
    text-align: left;
}

.timeline::before {
    content: "";
    position: absolute;
    left: 27px;
    top: 18px;
    bottom: 18px;
    width: 1px;
    background: #d7d7d7;
}

.timeline-item {
    position: relative;
    min-height: 108px;
    padding-bottom: 8px;
}

.timeline-icon {
    position: absolute;
    left: -84px;
    top: 0;
    width: 56px;
    height: 56px;
    display: grid;
    place-items: center;
    color: var(--accent);
    background: #fff;
}

.timeline-time {
    font-size: 30px;
    line-height: 1.1;
    color: var(--text);
}

.timeline-title {
    margin: 2px 0 0;
    font-size: 20px;
    font-weight: 400;
    color: var(--text);
}

.palette {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 12px 14px;
    width: min(430px, 100%);
    margin: 32px auto 0;
}

.swatch {
    width: 64px;
    height: 64px;
    border-radius: 50%;
}

.dress-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 8px;
    width: min(500px, 100%);
    margin: 36px auto 0;
}

.dress-grid img {
    width: 100%;
    aspect-ratio: 3 / 4;
    object-fit: cover;
    display: block;
}

.info-card {
    width: min(777px, 100%);
    margin: 0 auto;
    padding: 42px 28px 36px;
    border-radius: 30px;
    background: var(--sage);
    color: #fff;
}

.info-card .body-copy {
    color: #fff;
    margin-top: 18px;
}

.info-icon {
    color: #fff;
}

.organizer-name {
    margin-top: 22px;
    font-size: 18px;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: var(--text);
}

.countdown-label {
    font-size: clamp(18px, 4.4vw, 32px);
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--text);
}

.countdown-fallback {
    margin-top: 28px;
    font-family: var(--script-font);
    font-size: clamp(36px, 8vw, 58px);
    color: var(--script);
}

.countdown-grid {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 8px;
    width: min(640px, 100%);
    margin: 28px auto 0;
}

.countdown-grid strong {
    display: block;
    font-size: clamp(28px, 6vw, 42px);
    font-weight: 400;
    color: var(--text);
}

.countdown-grid span {
    display: block;
    margin-top: 6px;
    font-size: 13px;
    letter-spacing: 0.08em;
    text-transform: lowercase;
}

.rsvp-form,
.rsvp-success {
    width: min(560px, 100%);
    margin: 28px auto 0;
    text-align: left;
}

.rsvp-label {
    display: block;
    margin-top: 26px;
    color: #9a8b82;
    font-size: 16px;
}

.rsvp-hint {
    display: block;
    margin-top: 4px;
    color: #c5b5ab;
    font-size: 13px;
}

.rsvp-form fieldset {
    border: 0;
    margin: 8px 0 0;
    padding: 0;
    min-inline-size: 0;
}

.rsvp-form legend {
    padding: 0;
}

.rsvp-form input:not([type="checkbox"]):not([type="radio"]),
.rsvp-form textarea {
    width: 100%;
    box-sizing: border-box;
    margin-top: 8px;
    padding: 12px 0;
    border: 0;
    border-bottom: 1px solid var(--line);
    border-radius: 0;
    background: transparent;
    color: #6f6f6f;
    font: inherit;
    font-size: 16px;
}

.rsvp-form textarea {
    min-height: 96px;
    resize: vertical;
}

.choice,
.check {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-top: 10px;
    font-size: 16px;
    color: var(--text);
}

.choice input,
.check input {
    width: 18px;
    height: 18px;
    accent-color: #b7c9be;
}

.rsvp-actions {
    margin-top: 32px;
    text-align: center;
}

.rsvp-success {
    text-align: center;
    font-size: 22px;
    line-height: 1.5;
    color: var(--text);
    white-space: pre-line;
}

.rsvp-error {
    margin-top: 16px;
    text-align: center;
    color: #9a5a4a;
    white-space: pre-line;
}

.honeypot {
    position: absolute;
    left: -10000px;
    top: auto;
    width: 1px;
    height: 1px;
    overflow: hidden;
}

.closing img {
    display: block;
    width: min(754px, 100%);
    margin: 18px auto 0;
    aspect-ratio: 754 / 540;
    object-fit: cover;
}

.closing-names {
    margin-top: 8px;
}

@media (min-width: 768px) {
    .section { padding: 72px 40px; }
    .body-copy { font-size: 22px; }
    .hero { padding-left: 18vw; }
    .hero-floral { width: min(280px, 22vw); right: 0; top: 14vh; }
    .swatch { width: 72px; height: 72px; }
    .dress-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); }
    .floral-right { width: 150px; }
    .floral-left { width: 230px; }
}

@media (max-width: 767px) {
    .hero {
        align-items: flex-start;
        padding: 12vh 20px 88px;
    }

    .hero-copy {
        width: 100%;
        padding-right: 72px;
    }

    .hero-floral {
        width: 96px;
        top: 3vh;
        right: -6px;
        opacity: 0.9;
    }

    .floral-left { display: none; }

    .floral-right {
        width: 72px;
        opacity: 0.85;
    }
}

@media (prefers-reduced-motion: reduce) {
    .reveal {
        opacity: 1;
        transform: none;
        transition: none;
    }
}
