/*
 * Reproduction of the Wix Harmony design (floreneetromain.wixsite.com/mariagecivil).
 * Desktop measurements were taken at 1440px wide and scale with the page width
 * (--u = 1px at 1440px), as Wix Harmony does. The page stops growing at 1280px,
 * the width Florène designed at: wider screens show it as a centred sheet of paper.
 * Mobile (< 750px) uses the fixed values Wix renders at 390px.
 */
:root {
    --bordeaux: #3a1212;
    --creme: #f8f3ec;
    --beige: #eddcc2;
    --rose: #814b4b;
    --coeur: #ab3f30;
    --table: #e6dccd; /* what the sheet lies on, beyond 1280px */

    --serif: "Times New Roman", Tinos, Times, serif;
    --mono: "Azeret Mono", monospace;

    --sheet: 1280px;
    --u: calc(min(100vw, var(--sheet)) / 1440);
    /* One spacing between cards everywhere, both directions: half the 45u page margin
       (20px on the 1280px sheet). Wix mixed 6u side by side with 46u between rows. */
    --gutter: calc(22.5 * var(--u));

    /* Paper grain: fractal noise, multiplied very lightly over the whole sheet. */
    --grain: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='240' height='240'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 .23 0 0 0 0 .07 0 0 0 0 .07 0 0 0 .55 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}

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

html { scroll-behavior: smooth; }

body {
    margin: 0;
    background: var(--table);
    color: var(--bordeaux);
    font-family: var(--serif);
    -webkit-font-smoothing: antialiased;
}

body::before {
    content: "";
    position: fixed;
    inset: 0;
    background: var(--grain);
    opacity: .1;
    mix-blend-mode: multiply;
    pointer-events: none;
}
.sheet {
    position: relative;
    z-index: 1;
    max-width: var(--sheet);
    min-height: 100vh;
    margin: 0 auto;
    background: var(--creme);
}
.sheet::after {
    content: "";
    position: absolute;
    inset: 0;
    z-index: 30;
    background: var(--grain);
    opacity: .07;
    mix-blend-mode: multiply;
    pointer-events: none;
}
@media (min-width: 1281px) {
    .sheet { box-shadow: 0 0 0 1px rgba(58, 18, 18, .06), 0 10px 40px rgba(58, 18, 18, .12); }
}

h1, h2, h3, p, ul { margin: 0; font-weight: 400; }
ul { padding: 0; list-style: none; }
img { display: block; max-width: 100%; }

.dot {
    display: inline-block;
    width: calc(11 * var(--u));
    height: calc(11 * var(--u));
    border-radius: 50%;
    background: currentColor;
    vertical-align: middle;
}

/* Buttons ---------------------------------------------------------------- */

.btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    height: calc(48 * var(--u));
    padding: 0 calc(19 * var(--u));
    font-family: var(--mono);
    font-size: calc(18 * var(--u));
    line-height: 1.3;
    text-decoration: none;
    text-align: center;
    white-space: nowrap;
    border: 0;
    cursor: pointer;
    transition: opacity .2s;
}
.btn:hover { opacity: .85; }
.btn--rose { background: var(--rose); color: var(--creme); }
.btn--beige { background: var(--beige); color: var(--bordeaux); }
.btn--block { display: flex; width: 100%; }

/* Navigation -------------------------------------------------------------- */

.nav {
    display: flex;
    align-items: center;
    gap: calc(22.5 * var(--u));
    height: calc(57 * var(--u));
    padding-left: calc(28 * var(--u));
    background: var(--bordeaux);
}
.nav a {
    width: calc(140 * var(--u));
    font-family: var(--mono);
    font-size: calc(18 * var(--u));
    line-height: 1.3;
    color: var(--creme);
    text-align: center;
    white-space: nowrap;
}
.nav a.nav__wide { width: calc(254 * var(--u)); }
.burger,
.topbar__title,
.topbar__short { display: none; }
.nav a[aria-current="page"] {
    text-decoration-thickness: 3px;
    text-underline-offset: 5px;
}

/* Hero -------------------------------------------------------------------- */

.hero {
    position: relative;
    height: calc(923 * var(--u)); /* photo bottom + same 91 as above the kicker */
}
.hero > * { position: absolute; }
.hero__kicker {
    top: calc(91 * var(--u));
    left: calc(22 * var(--u));
    font-size: calc(72 * var(--u));
    line-height: 1.1;
    text-transform: uppercase;
}
.hero__names {
    top: calc(215 * var(--u));
    left: calc(22 * var(--u));
    width: calc(702 * var(--u));
    font-size: calc(135 * var(--u));
    line-height: 1;
}
.hero__photo {
    top: calc(215 * var(--u));
    left: calc(731 * var(--u));
    width: calc(688 * var(--u));
    height: calc(617 * var(--u));
    object-fit: cover;
}
/* Welcome + date moved into the left column, bottom-aligned with the photo
   (Wix puts them below it, the date alone mid-page). */
.hero__welcome {
    top: calc(713 * var(--u));
    left: calc(22 * var(--u));
    width: calc(306 * var(--u));
    font-family: var(--mono);
    font-size: calc(18 * var(--u));
    line-height: 1.3;
}
.hero__date {
    top: calc(784 * var(--u));
    left: calc(22 * var(--u));
    width: calc(177 * var(--u));
}

/* À propos ---------------------------------------------------------------- */

.about {
    padding: calc(45 * var(--u));
    padding-right: calc(200 * var(--u));
    background: var(--bordeaux);
    color: var(--creme);
}
.about__title {
    font-size: calc(27 * var(--u));
    line-height: 1.2;
}
.about__text {
    margin-top: calc(23 * var(--u));
    font-size: calc(36 * var(--u));
    line-height: 1.2;
}
.about__text + .about__text { margin-top: calc(42 * var(--u)); }
.about__cta {
    margin-top: calc(67 * var(--u));
    width: calc(294 * var(--u));
}

/* Programme --------------------------------------------------------------- */

.programme { padding: calc(23 * var(--u)) calc(45 * var(--u)) calc(0 * var(--u)); }
.programme__head {
    height: calc(200 * var(--u));
    padding: calc(45 * var(--u));
    background: var(--beige);
}
.programme__date {
    display: flex;
    align-items: center;
    gap: calc(9 * var(--u));
    font-size: calc(27 * var(--u));
    line-height: 1.2;
}
.programme__title {
    margin-top: calc(23 * var(--u));
    font-size: calc(63 * var(--u));
    line-height: 1.1;
}
.programme__body {
    position: relative;
    overflow: hidden;
    margin-top: var(--gutter);
    padding: calc(52 * var(--u)) 0 calc(64 * var(--u)) calc(323 * var(--u));
    background: var(--creme);
}
.programme__backdrop {
    position: absolute;
    inset: calc(-40 * var(--u));
    background-size: cover;
    background-position: center;
    filter: blur(calc(12 * var(--u)));
    opacity: .6;
}
.step {
    position: relative;
    width: calc(675 * var(--u));
    padding: calc(22 * var(--u));
    background: var(--beige);
}
.step + .step { margin-top: var(--gutter); }
.step--1 { height: calc(202 * var(--u)); }
.step--2 { height: calc(404 * var(--u)); }
.step--3 { height: calc(256 * var(--u)); }
.step--cta {
    width: calc(676 * var(--u));
    margin-top: var(--gutter);
    padding: calc(11 * var(--u));
}
.step__title {
    font-size: calc(36 * var(--u));
    line-height: 1.2;
}
.step__place {
    margin-top: calc(44 * var(--u));
    max-width: calc(370 * var(--u));
    font-family: var(--mono);
    font-size: calc(18 * var(--u));
    line-height: 1.3;
}
.step__place--narrow { max-width: calc(358 * var(--u)); }
.step__schedule {
    margin-top: calc(46 * var(--u));
    padding-left: calc(41 * var(--u));
    font-family: var(--mono);
    font-size: calc(20.25 * var(--u));
    line-height: 1.2;
}
.step__schedule li + li { margin-top: calc(15 * var(--u)); }

/* Pour la suite de notre aventure ---------------------------------------- */

.aventure {
    position: relative;
    margin: var(--gutter) calc(45 * var(--u));
    min-height: calc(429 * var(--u));
    padding: calc(46 * var(--u)) calc(45 * var(--u));
    background: var(--beige);
}
.aventure__photo {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    max-width: none;
    object-fit: cover;
    object-position: 50% 60%;
}
.aventure__card {
    position: relative;
    width: calc(628 * var(--u));
    min-height: calc(256 * var(--u));
    padding: calc(22 * var(--u));
    background: var(--creme);
}
.aventure__hearts {
    position: absolute;
    top: calc(12 * var(--u));
    left: calc(553 * var(--u));
    width: calc(66 * var(--u));
    height: calc(66 * var(--u));
    color: var(--coeur);
}
.aventure__title {
    display: flex;
    align-items: center;
    gap: calc(11 * var(--u));
    font-size: calc(27 * var(--u));
    font-weight: 700;
    line-height: 1.2;
}
.aventure__text {
    margin-top: calc(23 * var(--u));
    max-width: calc(587 * var(--u));
    font-size: calc(20.25 * var(--u));
    line-height: 1.1;
    text-align: justify;
}
.aventure__link {
    display: inline-block;
    margin: calc(32 * var(--u)) 0 0 calc(17 * var(--u));
    font-family: var(--mono);
    font-size: calc(18 * var(--u));
    color: var(--rose);
}

/* Footer ------------------------------------------------------------------ */

.footer {
    display: flex;
    justify-content: center;
    height: calc(91 * var(--u));
    padding-top: calc(21 * var(--u));
}
.footer__heart {
    width: calc(50 * var(--u));
    height: calc(50 * var(--u));
    color: var(--bordeaux);
}

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

.card {
    background: var(--beige);
    border-radius: 10px;
}
.flash {
    margin: 0 0 24px;
    padding: 16px 20px;
    background: var(--beige);
    border-left: 4px solid var(--rose);
    font-family: var(--mono);
    font-size: 16px;
    line-height: 1.4;
}

/* RSVP (fixed px: form text stays readable and >= 16px in inputs, no iOS zoom) */

.rsvp {
    max-width: 780px;
    margin: 0 auto;
    padding: 40px 12px 24px;
}
.rsvp__intro {
    padding: 0 13px;
    font-family: var(--mono);
    font-size: 15.75px;
    line-height: 1.3;
    text-align: justify;
}
.rsvp__intro p + p { margin-top: 21px; }
/* Two-column grid: every row spans both columns unless marked half-width.
   Spacing comes from the grid gap only, so paired fields always line up. */
.rsvp__form {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 24px;
    align-items: start;
    margin-top: 12px;
    padding: 24px;
}
.rsvp__form > * { grid-column: 1 / -1; }
.rsvp__form > .rsvp__half { grid-column: auto; }
.rsvp__field label,
.rsvp__question legend {
    display: block;
    margin-bottom: 8px;
    padding: 0;
    font-family: var(--mono);
    font-size: 14px;
    line-height: 1.4;
}
.req { margin-left: 4px; }
.rsvp__field input,
.rsvp__field textarea {
    display: block;
    width: 100%;
    min-height: 42px;
    padding: 8px 12px;
    font-family: var(--mono);
    font-size: 16px;
    line-height: 1.5;
    color: var(--bordeaux);
    background: var(--creme);
    border: 1px solid rgba(58, 18, 18, .6);
    border-radius: 0;
}
.rsvp__field textarea { min-height: 92px; resize: vertical; }
/* Allergies and party idea: one line, grows with what is typed where
   the browser supports it (Chrome, Edge); elsewhere it scrolls and can be resized. */
.rsvp__field textarea.rsvp__short { min-height: 46px; field-sizing: content; }
.rsvp__field ::placeholder { color: rgba(58, 18, 18, .55); }
.rsvp__field input:focus,
.rsvp__field textarea:focus { outline: 2px solid var(--rose); outline-offset: -1px; }
.rsvp__section {
    margin-top: 8px;
    font-family: var(--mono);
    font-size: 16px;
    font-weight: 700;
    line-height: 1.5;
}
.rsvp__question { margin: 0; padding: 0; border: 0; min-width: 0; }
/* Mairie / Petite Halle: two framed blocks whose Oui/Non always line up. The floated
   legend sits inside the frame instead of cutting through its top border. */
.rsvp__question.rsvp__half {
    padding: 16px 18px 18px;
    border: 1px solid rgba(58, 18, 18, .3);
}
.rsvp__half legend { float: left; width: 100%; min-height: 2.8em; }
.rsvp__half .rsvp__choices { clear: both; }
.rsvp__choices.rsvp__choices--inline { flex-direction: row; gap: 32px; }
.rsvp__choices { display: flex; flex-direction: column; gap: 12px; }
.rsvp__choice {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    width: fit-content;
    font-family: var(--mono);
    font-size: 16px;
    line-height: 1.5;
    cursor: pointer;
}
.rsvp__choice input {
    width: 20px;
    height: 20px;
    margin: 0;
    accent-color: var(--rose);
    cursor: pointer;
}
.rsvp__form ul {
    margin-top: 6px;
    font-family: var(--mono);
    font-size: 14px;
    color: var(--coeur);
}
.rsvp__submit {
    width: 100%;
    height: 41px;
    font-family: var(--mono);
    font-size: 16px;
    color: var(--creme);
    background: var(--rose);
    border: 0;
    cursor: pointer;
}
.rsvp__submit:hover { opacity: .9; }

/* Informations pratiques ------------------------------------------------- */

.venue {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: var(--gutter);
    padding: calc(22 * var(--u)) calc(45 * var(--u)) 0;
}
.venue + .venue { padding-top: var(--gutter); }
.venue__card {
    min-height: calc(439 * var(--u));
    padding: calc(45 * var(--u)) calc(38 * var(--u)) calc(19 * var(--u)) calc(45 * var(--u));
}
.venue__card--tall { min-height: calc(495 * var(--u)); }
.venue__name { font-size: calc(27 * var(--u)); line-height: 1.2; }
.venue__address {
    font-size: calc(31.5 * var(--u));
    line-height: 1.2;
    text-align: right;
}
.venue__stations {
    display: grid;
    gap: calc(7 * var(--u));
    margin-top: calc(7 * var(--u));
}
.venue__stations li {
    display: grid;
    grid-template-columns: calc(192 * var(--u)) 1fr;
    align-items: center;
    gap: calc(9 * var(--u));
}
.venue__card--tall .venue__stations li { grid-template-columns: calc(197 * var(--u)) 1fr; }
.venue__lines { display: flex; justify-content: flex-end; gap: calc(9 * var(--u)); }
.venue__lines img { width: calc(31 * var(--u)); height: calc(31 * var(--u)); }
.venue__station {
    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
    font-size: calc(20.25 * var(--u));
    font-weight: 700;
}
.venue__text {
    margin-top: calc(58 * var(--u));
    font-family: var(--mono);
    font-size: calc(15.75 * var(--u));
    line-height: 1.2;
}
.venue__map { padding: calc(21 * var(--u)) calc(23 * var(--u)); }
.venue__map iframe {
    display: block;
    width: 100%;
    height: 100%;
    min-height: calc(396 * var(--u));
    border: 0;
}

/* Two rounded beige cards, like the Mairie / Petite Halle rows above
   (Wix: a full-bleed beige half and a plain half underlined). */
.dress {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: var(--gutter);
    padding: var(--gutter) calc(45 * var(--u)) 0;
}
.dress__code {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    text-align: center;
    min-height: calc(304 * var(--u));
    padding: calc(45 * var(--u));
}
.dress__title { font-size: calc(36 * var(--u)); line-height: 1.2; }
.dress__star {
    align-self: center;
    width: calc(124 * var(--u));
    height: calc(124 * var(--u));
    margin: calc(18 * var(--u)) 0;
}
.dress__note { font-size: calc(24 * var(--u)); font-style: italic; line-height: 1.1; }
.dress__title, .dress__note { text-wrap: balance; }
.dress__club {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: calc(45 * var(--u)) calc(45 * var(--u)) calc(28 * var(--u));
}
.dress__text { font-size: calc(27 * var(--u)); line-height: 1.2; text-align: justify; }
.disco {
    position: relative;
    width: calc(88 * var(--u));
    height: calc(88 * var(--u));
    margin: calc(17 * var(--u)) 0;
}
.disco > * { position: absolute; inset: 0; width: 100%; height: 100%; }
.disco__canvas { opacity: 0; }
.disco.is-playing .disco__canvas { opacity: 1; }
.disco.is-playing .disco__poster { opacity: 0; }
/* Source only: kept in the box (not display:none) so Safari keeps decoding frames. */
.disco__video { opacity: 0; pointer-events: none; }

.sleep { padding: calc(34 * var(--u)) calc(56 * var(--u)) calc(23 * var(--u)); }
.sleep__kicker {
    margin-left: calc(-28 * var(--u));
    font-family: var(--mono);
    font-size: calc(20.25 * var(--u));
    line-height: 1.3;
}
.sleep__title { margin-top: calc(22 * var(--u)); font-size: calc(54 * var(--u)); line-height: 1.1; }
.sleep__tips {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: calc(60 * var(--u));
    margin-top: calc(65 * var(--u));
}
.tip { position: relative; }
.tip__title {
    display: flex;
    align-items: flex-start;
    gap: calc(27 * var(--u));
    min-height: calc(88 * var(--u));
    font-family: var(--mono);
    font-size: calc(18 * var(--u));
    line-height: 1.3;
}
.tip__title img { flex: none; width: calc(17 * var(--u)); height: calc(17 * var(--u)); margin-top: calc(4 * var(--u)); }
.tip__tram {
    position: absolute;
    top: calc(34 * var(--u));
    left: 0;
    width: calc(36 * var(--u));
    height: calc(36 * var(--u));
}
.tip__tram img { position: absolute; top: calc(2 * var(--u)); left: calc(2 * var(--u)); width: calc(32 * var(--u)); height: calc(32 * var(--u)); }
.tip__tram .tip__cross { top: 0; left: 0; width: calc(36 * var(--u)); height: calc(36 * var(--u)); }
.tip p { font-family: var(--mono); font-size: calc(18 * var(--u)); line-height: 1.3; }
.sleep__note {
    margin-top: calc(51 * var(--u));
    font-family: var(--mono);
    font-size: calc(13.5 * var(--u));
    font-style: italic;
    line-height: 1.3;
}
.sleep__note a { color: inherit; }

/* Contacts ---------------------------------------------------------------- */

.contacts { padding: calc(22 * var(--u)) calc(45 * var(--u)) calc(23 * var(--u)); }
.contacts__intro { padding: calc(45 * var(--u)); }
.contacts__lead { font-size: calc(27 * var(--u)); line-height: 1.2; }
.contacts__people {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: var(--gutter);
    margin-top: var(--gutter);
}
.contacts__person { padding: calc(47 * var(--u)) calc(45 * var(--u)) calc(27 * var(--u)) calc(47 * var(--u)); }
.contacts__name { font-size: calc(36 * var(--u)); line-height: 1.2; }
.contacts__lines { display: grid; gap: calc(21 * var(--u)); margin: calc(31 * var(--u)) 0 0; }
.contacts__line {
    display: grid;
    grid-template-columns: calc(140 * var(--u)) 1fr;
    align-items: center;
    min-height: calc(43 * var(--u));
    padding: calc(8 * var(--u)) calc(21 * var(--u));
    border: 1px solid var(--bordeaux);
    border-radius: 8px;
    font-family: var(--mono);
    font-size: calc(18 * var(--u));
    line-height: 1.3;
}
.contacts__line dd { margin: 0; min-width: 0; overflow-wrap: anywhere; }
.contacts__line a { color: inherit; }
.contacts__line a[href^="tel"] { text-decoration: none; }
/* Password gate ("Espace réservé") --------------------------------------- */

.gate {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    min-height: 100vh;
    padding: 24px;
    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
    text-align: center;
    padding-bottom: 72px;
}
.gate__title { font-size: 48px; line-height: 1.2; }
.gate__lead { margin-top: 16px; font-size: 16px; font-weight: 300; }
.gate__form { width: 100%; max-width: 300px; margin-top: 56px; }
.gate__form input {
    width: 100%;
    padding: 6px 2px;
    font: inherit;
    font-size: 16px;
    color: var(--bordeaux);
    background: transparent;
    border: 0;
    border-bottom: 1px solid var(--rose);
    border-radius: 0;
}
.gate__form input::placeholder { color: #bfb0ab; }
.gate__form input:focus { outline: none; border-bottom-width: 2px; }
.gate__error { margin-top: 12px; font-size: 14px; color: var(--coeur); text-align: left; }
.gate__form button {
    width: 100%;
    height: 48px;
    margin-top: 52px;
    font: inherit;
    font-size: 16px;
    color: #fff;
    background: var(--rose);
    border: 0;
    cursor: pointer;
}

/* Mobile ------------------------------------------------------------------ */

@media (max-width: 749px) {
    :root { --u: 1px; --gutter: 16px; }

    .dot { width: 10px; height: 10px; }
    .btn { height: 42px; font-size: 14px; padding: 0 11px; }

    /* Burger: thin sticky bar, full-screen bordeaux menu when open. */
    .topbar {
        position: sticky;
        top: 0;
        z-index: 10;
        display: flex;
        align-items: center;
        justify-content: space-between;
        height: 56px;
        background: var(--bordeaux);
    }
    .topbar__title {
        position: relative;
        z-index: 2;
        display: block;
        min-width: 0;
        padding: 0 8px 0 24px;
        overflow: hidden;
        font-family: var(--mono);
        font-size: 16px;
        line-height: 56px;
        color: var(--creme);
        text-decoration: none;
        white-space: nowrap;
        text-overflow: ellipsis;
    }
    .nav a[aria-current="page"]::before {
        content: "";
        display: inline-block;
        width: 8px;
        height: 8px;
        margin-right: 12px;
        border-radius: 50%;
        background: currentColor;
        vertical-align: middle;
    }
    .burger {
        position: relative;
        z-index: 2;
        display: flex;
        flex-direction: column;
        justify-content: center;
        gap: 6px;
        width: 56px;
        height: 56px;
        padding: 0 16px;
        background: none;
        border: 0;
        cursor: pointer;
    }
    .burger__bar {
        display: block;
        height: 2px;
        background: var(--creme);
        transition: transform .25s, opacity .25s;
    }
    .menu-open .burger__bar:nth-child(1) { transform: translateY(8px) rotate(45deg); }
    .menu-open .burger__bar:nth-child(2) { opacity: 0; }
    .menu-open .burger__bar:nth-child(3) { transform: translateY(-8px) rotate(-45deg); }
    .menu-open { overflow: hidden; }
    [id] { scroll-margin-top: 56px; }

    .nav {
        position: fixed;
        inset: 0;
        flex-direction: column;
        justify-content: center;
        gap: 28px;
        height: auto;
        padding: 0 24px;
        background: var(--bordeaux);
        visibility: hidden;
        opacity: 0;
        transition: opacity .25s, visibility 0s .25s;
    }
    .menu-open .nav {
        visibility: visible;
        opacity: 1;
        transition: opacity .25s;
    }
    .nav a,
    .nav a.nav__wide,
    .nav a.nav__home {
        display: block;
        width: auto;
        padding: 8px 0;
        font-size: 20px;
    }

    .hero { display: flex; flex-direction: column; align-items: flex-start; height: auto; padding: 56px 24px 80px; }
    .hero__photo { order: 1; }
    .hero > * { position: static; }
    .hero__kicker { font-size: 30px; }
    .hero__names { width: auto; margin-top: 40px; font-size: 60px; }
    .hero__welcome { width: auto; margin-top: 12px; font-size: 16px; }
    .hero__date { width: 155px; margin-top: 31px; }
    .hero__photo { width: 100%; height: 300px; margin-top: 32px; }

    .about { padding: 40px 24px 39px; }
    .about__title { font-size: 16px; }
    .about__text { margin-top: 13px; font-size: 24px; }
    .about__text + .about__text { margin-top: 28px; }
    .about__cta { width: 160px; height: 41px; margin-top: 33px; white-space: normal; }

    .programme { padding: 24px 24px 0; }
    /* Kicker + title, like on desktop (Wix mobile isolates the dot between ~50px gaps). */
    .programme__head { height: auto; padding: 24px; }
    .programme__date { gap: 8px; font-size: 18px; }
    .programme__date .dot { width: 8px; height: 8px; }
    .programme__title { margin-top: 8px; font-size: 30px; }
    .programme__body { margin-top: var(--gutter); padding: 24px; }
    .step,
    .step--1, .step--2, .step--3,
    .step--cta { width: auto; height: auto; padding: 24px; }
    .step + .step,
    .step--cta { margin-top: var(--gutter); }
    .step__title { font-size: 24px; }
    .step__place { margin-top: 12px; font-size: 16px; }
    .step__schedule { margin-top: 40px; padding-left: 0; font-size: 16px; }
    .step__schedule li + li { margin-top: 11px; }

    /* Photo first, framed on the couple, card overlapping its bottom (Wix mobile hides
       the photo behind a full-size card). */
    .aventure { min-height: 0; margin: var(--gutter) 24px 40px; padding: 0; background: none; }
    .aventure__photo { position: static; height: 300px; object-position: 60% 55%; }
    .aventure__card { width: auto; min-height: 0; margin: -60px 16px 0; padding: 24px; background: var(--beige); }
    .aventure__hearts { top: 14px; left: auto; right: 14px; width: 44px; height: 44px; }
    .aventure__title { align-items: flex-start; gap: 10px; padding-right: 44px; font-size: 20px; }
    .aventure__title .dot { width: 8px; height: 8px; margin-top: 8px; flex: none; }
    .aventure__text { margin-top: 16px; font-size: 16px; line-height: 1.25; text-align: left; }
    .aventure__link { margin: 24px 0 0; font-size: 14px; }

    .footer { height: 128px; padding-top: 40px; }
    .footer__heart { width: 44px; height: 48px; }

    .flash { font-size: 15px; }

    .rsvp { padding: 40px 0 16px; }
    .rsvp__intro { padding: 0 24px; font-size: 14px; text-align: center; }
    .rsvp__intro p + p { margin-top: 18px; }
    .rsvp .flash { margin: 24px 24px 0; }
    .rsvp__form { margin-top: 16px; }
    .rsvp__form { grid-template-columns: 1fr; }
    .rsvp__form > .rsvp__half { grid-column: 1 / -1; }
    .rsvp__half legend { min-height: 0; }
    /* Yes/No side by side: shorter form, bigger touch targets. */
    .rsvp__choice { min-height: 32px; }

    .venue { grid-template-columns: 1fr; padding: 24px 24px 0; }
    .venue + .venue { padding-top: var(--gutter); }
    .venue__card, .venue__card--tall { min-height: 0; padding: 24px; }
    .venue__name { font-size: 22px; }
    .venue__address { margin-top: 8px; font-size: 22px; text-align: left; }
    /* Badges stay on the station's line (Wix stacks one badge per row). */
    .venue__stations { gap: 10px; margin-top: 20px; }
    .venue__stations li,
    .venue__card--tall .venue__stations li { display: flex; flex-wrap: wrap; gap: 8px; }
    .venue__lines { gap: 6px; }
    .venue__lines img { width: 26px; height: 26px; }
    .venue__station { font-size: 16px; }
    .venue__text { margin-top: 24px; font-size: 14px; line-height: 1.35; }
    .venue__map { padding: 12px; }
    .venue__map iframe { min-height: 280px; }

    .dress { grid-template-columns: 1fr; padding: var(--gutter) 24px 0; }
    .dress__code { min-height: 0; padding: 24px; }
    .dress__title { font-size: 26px; }
    .dress__star { width: 96px; height: 96px; margin: 24px 0; }
    .dress__note { font-size: 20px; }
    .dress__club { padding: 24px 24px 8px; }
    .dress__text { font-size: 20px; text-align: left; }
    .disco { width: 76px; height: 76px; margin: 20px 0 24px; }

    .sleep { padding: 40px 24px 24px; }
    .sleep__kicker { margin-left: 0; font-size: 16px; }
    .sleep__title { margin-top: 8px; font-size: 36px; }
    .sleep__tips { grid-template-columns: 1fr; gap: 32px; margin-top: 32px; }
    .tip__title { min-height: 0; gap: 12px; font-size: 16px; font-weight: 700; }
    .tip__tram { position: relative; top: auto; display: block; margin-top: 10px; }
    .tip p { margin-top: 10px; font-size: 15px; }
    .sleep__note { margin-top: 32px; font-size: 13px; }

    .contacts { padding: 24px 24px 8px; }
    .contacts__intro { padding: 24px; }
    .contacts__lead { font-size: 22px; }
    .contacts__people { grid-template-columns: 1fr; }
    .contacts__person { padding: 24px; }
    .contacts__name { font-size: 26px; }
    .contacts__lines { gap: 16px; margin-top: 20px; }
    /* Label above its value, never after it (Wix inverts them on mobile). */
    .contacts__line { grid-template-columns: 1fr; gap: 4px; padding: 14px 16px; font-size: 15px; }
    .contacts__line dt { font-size: 13px; opacity: .8; }
}

/* Very small phones: short page title so the bar never wraps. */
@media (max-width: 359px) {
    .topbar__full { display: none; }
    .topbar__short { display: inline; }
}

/* Admin (RSVP answers) -------------------------------------------------- */
/* Fixed px: a data table, not part of the scaled Wix layout. */

.admin { padding: 32px 24px 48px; font-family: var(--mono); font-size: 14px; line-height: 1.4; }
.admin__head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; }
.admin__kicker { font-size: 13px; opacity: .75; }
.admin__title { font-family: var(--serif); font-size: 40px; line-height: 1.1; }
.admin__actions button {
    height: 38px;
    padding: 0 16px;
    font: inherit;
    color: var(--creme);
    background: var(--rose);
    border: 0;
    cursor: pointer;
}
/* Small icon button, top right. */
.admin__logout {
    display: grid;
    place-items: center;
    width: 40px;
    height: 40px;
    padding: 0;
    color: var(--bordeaux);
    background: none;
    border: 0;
    border-radius: 50%;
    cursor: pointer;
    transition: background .2s;
}
.admin__logout:hover, .admin__logout:focus-visible { background: var(--beige); }
.sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
}

.admin__stats {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
    gap: 12px;
    margin-top: 24px;
}
.stat { padding: 14px 16px; background: var(--beige); border-radius: 10px; }
.stat strong { display: block; font-family: var(--serif); font-size: 32px; font-weight: 400; line-height: 1.1; }
.stat--main { color: var(--creme); background: var(--bordeaux); }
.stat__sub { display: block; font-size: 12px; opacity: .75; }

.admin__filters-box { margin-top: 24px; }
/* Desktop: the box is always open and its toggle hidden. */
.admin__filters-toggle { display: none; }
.admin__filters-on { color: var(--rose); font-weight: 700; }
.admin__filters {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    gap: 12px 16px;
    padding: 16px;
    border: 1px solid rgba(58, 18, 18, .3);
}
.admin__filters label { display: flex; flex: 0 1 auto; flex-direction: column; gap: 4px; min-width: 0; font-size: 12px; }
.admin__filters input[type="search"],
.admin__filters select {
    height: 38px;
    padding: 0 10px;
    font: inherit;
    font-size: 14px;
    color: var(--bordeaux);
    background: var(--creme);
    border: 1px solid rgba(58, 18, 18, .6);
    border-radius: 0;
    max-width: 100%;
}
.admin__filters .admin__search { flex: 1 1 240px; }
.admin label.admin__check { flex-direction: row; align-items: center; gap: 8px; height: 38px; font-size: 14px; }
.admin__check input { width: 18px; height: 18px; margin: 0; accent-color: var(--rose); }
.admin__actions { display: flex; align-items: center; gap: 16px; }
.admin__actions a { color: inherit; }

.admin__bar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 16px; margin-top: 20px; }
.admin__export { color: inherit; }
.admin__empty { margin-top: 12px; padding: 24px; text-align: center; background: var(--beige); border-radius: 10px; }

.admin__table-wrap { margin-top: 12px; overflow-x: auto; }
.admin__table { width: 100%; border-collapse: collapse; font-size: 13px; }
.admin__table th { position: sticky; top: 0; padding: 10px 12px; text-align: left; font-weight: 700; white-space: nowrap; background: var(--beige); }
.admin__table td { padding: 10px 12px; vertical-align: top; border-bottom: 1px solid rgba(58, 18, 18, .15); }
.admin__table tbody tr:hover { background: rgba(237, 220, 194, .45); }
.admin__table a { color: inherit; }
.admin__table .nowrap { white-space: nowrap; }
/* Free-text columns wrap at a readable width instead of pushing the table wider. */
.admin__table .wrap { min-width: 120px; max-width: 220px; }
.tag { display: inline-block; padding: 1px 8px; border-radius: 999px; font-size: 12px; }
.tag--yes { color: var(--creme); background: var(--rose); }
.tag--no { background: rgba(58, 18, 18, .1); }

/* Full cell content on desktop, compact version on mobile. */
.admin .m-only { display: none; }
.mark { font-size: 16px; line-height: 1; }
.mark--yes { color: var(--bordeaux); }
.mark--maybe { font-weight: 700; color: var(--rose); }
.received { display: block; margin-top: 2px; font-size: 11px; opacity: .7; }
.contact-icons { display: inline-flex; gap: 10px; font-size: 18px; }
.contact-icons a { text-decoration: none; }
.excerpt summary { cursor: pointer; list-style: none; }
.excerpt summary::-webkit-details-marker { display: none; }
.excerpt summary::after { content: " +"; color: var(--rose); font-weight: 700; }
.excerpt[open] summary { display: none; }
.excerpt p { margin: 0; }
.admin__legend { margin-top: 8px; font-size: 12px; opacity: .8; }

.note { display: flex; gap: 8px; align-items: baseline; }
.note + .note { margin-top: 4px; }
.note__icon { flex: none; }

@media (max-width: 749px) {
    .admin .d-only, .admin .col-date, .admin .col-notes { display: none; }
    .admin .m-only { display: revert; }
    /* Elements whose own layout "revert" would wipe out. */
    .admin .received, .admin .excerpt { display: block; }
    .admin .contact-icons { display: inline-flex; }
    .admin .admin__filters-toggle {
        display: flex;
        align-items: center;
        justify-content: space-between;
        padding: 12px 16px;
        list-style: none;
        cursor: pointer;
        border: 1px solid rgba(58, 18, 18, .3);
    }
    .admin__filters-toggle::-webkit-details-marker { display: none; }
    .admin__filters-toggle::after { content: "+"; font-size: 18px; color: var(--rose); }
    .admin__filters-box[open] .admin__filters-toggle::after { content: "−"; }
    .admin__filters-box[open] .admin__filters { border-top: 0; }
    .admin__table .nowrap { white-space: normal; }
    .admin__table tr:has(+ .notes-row) td { border-bottom: 0; padding-bottom: 2px; }
    .notes-row td { padding-top: 0; font-size: 12px; }
    .admin__table th, .admin__table td { padding: 8px 6px; }
    .admin__table abbr { text-decoration: none; }
    .admin__table .wrap { min-width: 0; max-width: 140px; }
    .admin { padding: 24px 16px 40px; }
    .admin__title { font-size: 32px; }
    .admin__filters label:not(.admin__check) { flex: 1 1 100%; }
    .admin__filters select { width: 100%; }
}
